| Index: dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
|
| deleted file mode 100644
|
| index ae6c90ea5f869e6dfab8a6955034eb7400364ba7..0000000000000000000000000000000000000000
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
|
| +++ /dev/null
|
| @@ -1,185 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -part of js_backend;
|
| -
|
| -class CodeEmitterNoEvalTask extends CodeEmitterTask {
|
| - CodeEmitterNoEvalTask(Compiler compiler,
|
| - Namer namer,
|
| - bool generateSourceMap)
|
| - : super(compiler, namer, generateSourceMap);
|
| -
|
| - bool get getterAndSetterCanBeImplementedByFieldSpec => false;
|
| - bool get generateTrivialNsmHandlers => false;
|
| -
|
| - void emitSuper(String superName, ClassBuilder builder) {
|
| - if (superName != '') {
|
| - builder.addProperty('super', js.string(superName));
|
| - }
|
| - }
|
| -
|
| - void emitRuntimeName(String runtimeName, ClassBuilder builder) {
|
| - if (runtimeName != null) {
|
| - builder.addProperty(r'$name', js.string(runtimeName));
|
| - }
|
| - }
|
| -
|
| - void emitClosureClassHeader(String mangledName,
|
| - String superName,
|
| - List<String> fieldNames,
|
| - ClassBuilder builder) {
|
| - builder.addProperty('', buildConstructor(mangledName, fieldNames));
|
| - emitSuper(superName, builder);
|
| - }
|
| -
|
| -
|
| - bool emitFields(Element element,
|
| - ClassBuilder builder,
|
| - String superName,
|
| - { bool classIsNative: false,
|
| - bool emitStatics: false,
|
| - bool onlyForRti: false }) {
|
| - // Class and library fields are dynamically generated so they have to be
|
| - // emitted using getters and setters instead.
|
| - return false;
|
| - }
|
| -
|
| - void emitClassConstructor(ClassElement classElement, ClassBuilder builder) {
|
| - // Say we have a class A with fields b, c and d, where c needs a getter and
|
| - // d needs both a getter and a setter. Then we produce:
|
| - // - a constructor (directly into the given [buffer]):
|
| - // function A(b, c, d) { this.b = b, this.c = c, this.d = d; }
|
| - // - getters and setters (stored in the [explicitGettersSetters] list):
|
| - // get$c : function() { return this.c; }
|
| - // get$d : function() { return this.d; }
|
| - // set$d : function(x) { this.d = x; }
|
| - List<String> fields = <String>[];
|
| - visitFields(classElement, false,
|
| - (Element member,
|
| - String name,
|
| - String accessorName,
|
| - bool needsGetter,
|
| - bool needsSetter,
|
| - bool needsCheckedSetter) {
|
| - fields.add(name);
|
| - });
|
| - String constructorName =
|
| - // TODO(ahe): Shouldn't this just be 'namer.getName(classElement)'?
|
| - namer.safeName(classElement.name.slowToString().replaceAll('+', '_'));
|
| - if (classElement.isNative()) {
|
| - builder.addProperty('', buildUnusedConstructor(constructorName));
|
| - } else {
|
| - builder.addProperty('', buildConstructor(constructorName, fields));
|
| - }
|
| - }
|
| -
|
| - List get defineClassFunction {
|
| - return [new jsAst.FunctionDeclaration(
|
| - new jsAst.VariableDeclaration('defineClass'),
|
| - js.fun(['name', 'cls', 'constructor', 'prototype'],
|
| - [js(r'constructor.prototype = prototype'),
|
| - js(r'constructor.builtin$cls = name'),
|
| - js.return_('constructor')]))];
|
| - }
|
| -
|
| - List buildProtoSupportCheck() {
|
| - // We don't modify the prototypes in CSP mode. Therefore we can have an
|
| - // easier prototype-check.
|
| - return [js('var $supportsProtoName = !!{}.__proto__')];
|
| - }
|
| -
|
| - jsAst.Expression buildConstructor(String mangledName,
|
| - List<String> fieldNames) {
|
| - return new jsAst.NamedFunction(
|
| - new jsAst.VariableDeclaration(mangledName),
|
| - js.fun(fieldNames, fieldNames.map(
|
| - (name) => js('this.$name = $name')).toList()));
|
| - }
|
| -
|
| - jsAst.Expression buildUnusedConstructor(String mangledName) {
|
| - String message = 'Called unused constructor';
|
| - return new jsAst.NamedFunction(
|
| - new jsAst.VariableDeclaration(mangledName),
|
| - js.fun([], new jsAst.Throw(js.string(message))));
|
| -}
|
| -
|
| - jsAst.FunctionDeclaration get generateAccessorFunction {
|
| - String message =
|
| - 'Internal error: no dynamic generation of accessors allowed.';
|
| - return new jsAst.FunctionDeclaration(
|
| - new jsAst.VariableDeclaration('generateAccessor'),
|
| - js.fun([], new jsAst.Throw(js.string(message))));
|
| - }
|
| -
|
| - jsAst.Expression buildLazyInitializedGetter(VariableElement element) {
|
| - return js.fun([], js.return_(namer.elementAccess(element)));
|
| - }
|
| -
|
| - jsAst.Fun get lazyInitializerFunction {
|
| - // function(prototype, staticName, fieldName,
|
| - // getterName, lazyValue, getter) {
|
| - var parameters = <String>['prototype', 'staticName', 'fieldName',
|
| - 'getterName', 'lazyValue', 'getter'];
|
| - return js.fun(parameters, addLazyInitializerLogic());
|
| - }
|
| -
|
| - jsAst.Fun get finishIsolateConstructorFunction {
|
| - // We replace the old Isolate function with a new one that initializes
|
| - // all its fields with the initial (and often final) value of all globals.
|
| - //
|
| - // We also copy over old values like the prototype, and the
|
| - // isolateProperties themselves.
|
| - return js.fun('oldIsolate', [
|
| - js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'),
|
| - new jsAst.FunctionDeclaration(
|
| - new jsAst.VariableDeclaration('Isolate'),
|
| - js.fun([], [
|
| - js('var hasOwnProperty = Object.prototype.hasOwnProperty'),
|
| - js.forIn('staticName', 'isolateProperties',
|
| - js.if_('hasOwnProperty.call(isolateProperties, staticName)',
|
| - js('this[staticName] = isolateProperties[staticName]'))),
|
| - // Use the newly created object as prototype. In Chrome,
|
| - // this creates a hidden class for the object and makes
|
| - // sure it is fast to access.
|
| - new jsAst.FunctionDeclaration(
|
| - new jsAst.VariableDeclaration('ForceEfficientMap'),
|
| - js.fun([], [])),
|
| - js('ForceEfficientMap.prototype = this'),
|
| - js('new ForceEfficientMap()')])),
|
| - js('Isolate.prototype = oldIsolate.prototype'),
|
| - js('Isolate.prototype.constructor = Isolate'),
|
| - js('Isolate.${namer.isolatePropertiesName} = isolateProperties'),
|
| - js.return_('Isolate')]);
|
| - }
|
| -
|
| - void emitConvertToFastObjectFunction() {
|
| - // Create an instance that uses 'properties' as prototype. This should make
|
| - // 'properties' a fast object.
|
| - mainBuffer.add(r'''function convertToFastObject(properties) {
|
| - function MyClass() {};
|
| - MyClass.prototype = properties;
|
| - new MyClass();
|
| -''');
|
| - if (DEBUG_FAST_OBJECTS) {
|
| - ClassElement primitives =
|
| - compiler.findHelper(const SourceString('Primitives'));
|
| - FunctionElement printHelper =
|
| - compiler.lookupElementIn(
|
| - primitives, const SourceString('printString'));
|
| - String printHelperName = namer.isolateAccess(printHelper);
|
| - mainBuffer.add('''
|
| -// The following only works on V8 when run with option "--allow-natives-syntax".
|
| -if (typeof $printHelperName === "function") {
|
| - $printHelperName("Size of global object: "
|
| - + String(Object.getOwnPropertyNames(properties).length)
|
| - + ", fast properties " + %HasFastProperties(properties));
|
| -}
|
| -''');
|
| - }
|
| -mainBuffer.add(r'''
|
| - return properties;
|
| -}
|
| -''');
|
| - }
|
| -}
|
|
|