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() { |
+ } |
} |