Index: pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
index c7acbcae9d8a583936e9e8b1e2489d9745ac11ff..240e771d063c3f3c9bb481923807fa056be259bd 100644 |
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
@@ -269,6 +269,39 @@ class OldEmitter implements Emitter { |
return globalPropertyAccess(element); |
} |
+ @override |
+ jsAst.Template templateForBuiltin(JsBuiltin builtin) { |
+ switch (builtin) { |
+ case JsBuiltin.dartObjectConstructor: |
+ return jsAst.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; |
+ } |
+ } |
+ |
List<jsAst.Statement> buildTrivialNsmHandlers(){ |
return nsmEmitter.buildTrivialNsmHandlers(); |
} |
@@ -1019,7 +1052,7 @@ class OldEmitter implements Emitter { |
cspPrecompiledFunctionFor(outputUnit).add(js.statement(r''' |
{ |
- #constructorName.builtin$cls = #constructorNameString; |
+ #constructorName.#typeNameProperty = #constructorNameString; |
if (!"name" in #constructorName) |
#constructorName.name = #constructorNameString; |
$desc = $collectedClasses.#constructorName[1]; |
@@ -1030,6 +1063,7 @@ class OldEmitter implements Emitter { |
} |
}''', |
{"constructorName": constructorName, |
+ "typeNameProperty": typeNameProperty, |
"constructorNameString": js.string(constructorName), |
"hasIsolateSupport": hasIsolateSupport, |
"fieldNamesArray": fieldNamesArray})); |