Index: sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart |
index 86058838c1cd2a01fc08e39064d8fe379468bb80..1e7210f91067f381ab73e72795d0f8a3a304a0b9 100644 |
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart |
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart |
@@ -105,6 +105,7 @@ String getReflectionDataParser(String classesCollector, |
if (getterStubName) { |
f = tearOff(funcs, array, isStatic, name, isIntercepted); |
+ f.getterStub = true; |
''' |
/* Used to create an isolate using spawnFunction.*/ |
''' |
@@ -114,28 +115,29 @@ String getReflectionDataParser(String classesCollector, |
if (getterStubName) functions.push(getterStubName); |
f.\$stubName = getterStubName; |
f.\$callName = null; |
+ if (isIntercepted) init.interceptedNames[getterStubName] = true; |
} |
if (isReflectable) { |
for (var i = 0; i < funcs.length; i++) { |
funcs[i].$reflectableField = 1; |
funcs[i].$reflectionInfoField = array; |
} |
- } |
- if (isReflectable) { |
+ var mangledNames = isStatic ? init.mangledGlobalNames : init.mangledNames; |
var unmangledName = ${readString("array", "unmangledNameIndex")}; |
- var reflectionName =''' // Break long line. |
- ''' unmangledName + ":" + requiredParameterCount +''' // Break long line. |
+''' |
+ // The function is either a getter, a setter, or a method. |
+ // If it is a method, it might also have a tear-off closure. |
+ // The unmangledName is the same as the getter-name. |
+''' |
+ var reflectionName = unmangledName; |
+ if (getterStubName) mangledNames[getterStubName] = reflectionName; |
+ if (isSetter) { |
+ reflectionName += "="; |
+ } else if (!isGetter) { |
+ reflectionName += ":" + requiredParameterCount +''' // Break long line. |
''' ":" + optionalParameterCount; |
- if (isGetter) { |
- reflectionName = unmangledName; |
- } else if (isSetter) { |
- reflectionName = unmangledName + "="; |
- } |
- if (isStatic) { |
- init.mangledGlobalNames[name] = reflectionName; |
- } else { |
- init.mangledNames[name] = reflectionName; |
} |
+ mangledNames[name] = reflectionName; |
funcs[0].$reflectionNameField = reflectionName; |
funcs[0].$metadataIndexField = unmangledNameIndex + 1; |
if (optionalParameterCount) descriptor[unmangledName + "*"] = funcs[0]; |
@@ -200,6 +202,7 @@ String getReflectionDataParser(String classesCollector, |
if (!init.statics) init.statics = map(); |
if (!init.typeInformation) init.typeInformation = map(); |
if (!init.globalFunctions) init.globalFunctions = map(); |
+ if (!init.interceptedNames) init.interceptedNames = map(); |
var libraries = init.libraries; |
var mangledNames = init.mangledNames; |
var mangledGlobalNames = init.mangledGlobalNames; |