Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Unified Diff: sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart

Issue 217963002: Allow getField of methods. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address typo-comment. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sdk/lib/_internal/lib/js_helper.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « no previous file | sdk/lib/_internal/lib/js_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698