Chromium Code Reviews| Index: pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart |
| diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart |
| index ef11a580a4bca8dd46744a31d9846763c7259419..1ffc3fefcfc8eea83ead8199b7d2a030e068b91a 100644 |
| --- a/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart |
| +++ b/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart |
| @@ -4,6 +4,9 @@ |
| library dart2js.new_js_emitter.emitter; |
| +import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show |
| +JsBuiltin; |
|
Johnni Winther
2015/04/14 07:41:30
Bad indentation.
floitsch
2015/04/15 14:34:35
Done.
|
| + |
| import '../program_builder.dart' show ProgramBuilder; |
| import '../model.dart'; |
| import 'model_emitter.dart'; |
| @@ -12,24 +15,29 @@ import '../../elements/elements.dart' show FieldElement; |
| import '../../js/js.dart' as js; |
| import '../../js_backend/js_backend.dart' show |
| - JavaScriptBackend, |
| - Namer; |
| +JavaScriptBackend, |
| +Namer; |
| import '../js_emitter.dart' show |
| - NativeEmitter; |
| +NativeEmitter; |
| import '../js_emitter.dart' as emitterTask show |
| - Emitter; |
| +Emitter; |
| + |
| +import '../../util/util.dart' show |
| +NO_LOCATION_SPANNABLE; |
|
Johnni Winther
2015/04/14 07:41:30
Bad indentation.
floitsch
2015/04/15 14:34:35
Done.
|
| class Emitter implements emitterTask.Emitter { |
| final Compiler _compiler; |
| final Namer namer; |
| final ModelEmitter _emitter; |
| + JavaScriptBackend get _backend => _compiler.backend; |
| + |
| Emitter(Compiler compiler, Namer namer, NativeEmitter nativeEmitter) |
| - : this._compiler = compiler, |
| - this.namer = namer, |
| - _emitter = new ModelEmitter(compiler, namer, nativeEmitter); |
| + : this._compiler = compiler, |
| + this.namer = namer, |
|
Johnni Winther
2015/04/14 07:41:30
Bad indentation.
floitsch
2015/04/15 14:34:35
Done.
|
| + _emitter = new ModelEmitter(compiler, namer, nativeEmitter); |
| @override |
| int emitProgram(ProgramBuilder programBuilder) { |
| @@ -66,17 +74,17 @@ class Emitter implements emitterTask.Emitter { |
| } |
| js.PropertyAccess _globalPropertyAccess(Element element) { |
| - String name = namer.globalPropertyName(element); |
| - js.PropertyAccess pa = new js.PropertyAccess.field( |
| - new js.VariableUse(namer.globalObjectFor(element)), |
| - name); |
| - return pa; |
| - } |
| + String name = namer.globalPropertyName(element); |
| + js.PropertyAccess pa = new js.PropertyAccess.field( |
| + new js.VariableUse(namer.globalObjectFor(element)), |
| + name); |
| + return pa; |
| + } |
| @override |
| js.Expression isolateLazyInitializerAccess(FieldElement element) { |
| return js.js('#.#', [namer.globalObjectFor(element), |
| - namer.lazyInitializerName(element)]); |
| + namer.lazyInitializerName(element)]); |
|
Johnni Winther
2015/04/14 07:41:30
Bad indentation.
floitsch
2015/04/15 14:34:36
Done.
|
| } |
| @override |
| @@ -103,7 +111,7 @@ class Emitter implements emitterTask.Emitter { |
| js.PropertyAccess prototypeAccess(ClassElement element, |
| bool hasBeenInstantiated) { |
| js.Expression constructor = |
| - hasBeenInstantiated ? constructorAccess(element) : typeAccess(element); |
| + hasBeenInstantiated ? constructorAccess(element) : typeAccess(element); |
|
Johnni Winther
2015/04/14 07:41:30
Bad indentation.
floitsch
2015/04/15 14:34:35
Done.
|
| return js.js('#.prototype', constructor); |
| } |
| @@ -122,5 +130,42 @@ class Emitter implements emitterTask.Emitter { |
| } |
| @override |
| - void invalidateCaches() {} |
| + js.Template templateForBuiltin(JsBuiltin builtin) { |
| + String typeNameProperty = ModelEmitter.typeNameProperty; |
| + |
| + switch (builtin) { |
| + case JsBuiltin.dartObjectConstructor: |
| + return js.js.expressionTemplateYielding( |
| + typeAccess(_compiler.objectClass)); |
| + |
| + case JsBuiltin.isFunctionType: |
| + return _backend.rti.representationGenerator.templateForIsFunctionType; |
| + |
| + case JsBuiltin.isFunctionTypeLiteral: |
| + String functionClassName = |
| + _backend.namer.runtimeTypeName(compiler.functionClass); |
| + |
| + return jsAst.js.expressionTemplateFor( |
| + '#.$typeNameProperty === "$functionClassName"'); |
| + |
| + case JsBuiltin.typeName: |
| + return jsAst.js.expressionTemplateFor("#.$typeNameProperty"); |
| + |
| + case JsBuiltin.rawRuntimeType: |
| + return jsAst.js.expressionTemplateFor("#.constructor"); |
| + |
| + case JsBuiltin.createFunctionType: |
| + return _backend.rti.representationGenerator |
| + .templateForCreateFunctionType; |
| + |
| + default: |
| + _compiler.internalError(NO_LOCATION_SPANNABLE, |
| + "Unhandled Builtin: $builtin"); |
| + return null; |
| + } |
| + } |
| + |
| + @override |
| + void invalidateCaches() { |
| + } |
| } |