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

Unified Diff: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart

Issue 1153243003: dart2js: Use frequency of occurence to sort metadata indices. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Addressed sra's comments Created 5 years, 6 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
Index: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
index b95c6648237f4dec3b222c5f58edcb91b61aca8a..b567868bd4a5b1fcdde7e2e3bdf73386ec282757 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart
@@ -128,19 +128,19 @@ class ClassEmitter extends CodeEmitterHelper {
fieldMetadata.add(metadata);
recordMangledField(fieldElement, accessorName,
namer.privateName(fieldElement.memberName));
- String fieldName = name;
- String fieldCode = '';
- String reflectionMarker = '';
+ List<jsAst.Literal> fieldNameParts = <jsAst.Literal>[];
if (!needsAccessor) {
// Emit field for constructor generation.
assert(!classIsNative);
+ fieldNameParts.add(js.stringPart(name));
} else {
// Emit (possibly renaming) field name so we can add accessors at
// runtime.
if (name != accessorName) {
- fieldName = '$accessorName:$name';
+ fieldNameParts.add(js.stringPart(accessorName));
+ fieldNameParts.add(js.stringPart(':'));
}
-
+ fieldNameParts.add(js.stringPart(name));
if (field.needsInterceptedGetter) {
emitter.interceptorEmitter.interceptorInvocationNames.add(
namer.getterForElement(fieldElement));
@@ -157,9 +157,9 @@ class ClassEmitter extends CodeEmitterHelper {
if (code == 0) {
compiler.internalError(fieldElement,
'Field code is 0 ($fieldElement).');
- } else {
- fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE];
}
+ fieldNameParts.add(
+ js.stringPart(FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE]));
}
// Fields can only be reflected if their declaring class is reflectable
// (as they are only accessible via [ClassMirror.declarations]).
@@ -167,19 +167,17 @@ class ClassEmitter extends CodeEmitterHelper {
// reflectable in some sense, which leads to [isAccessibleByReflection]
// reporting `true`.
if (backend.isAccessibleByReflection(fieldElement)) {
+ fieldNameParts.add(new jsAst.LiteralString('-'));
if (fieldElement.isTopLevel ||
backend.isAccessibleByReflection(fieldElement.enclosingClass)) {
DartType type = fieldElement.type;
- reflectionMarker = '-${task.metadataCollector.reifyType(type)}';
- } else {
- reflectionMarker = '-';
+ fieldNameParts.add(task.metadataCollector.reifyType(type));
}
}
- String builtFieldname = '$fieldName$fieldCode$reflectionMarker';
- builder.addField(builtFieldname);
+ jsAst.Literal fieldNameAst = js.concatenateStrings(fieldNameParts);
+ builder.addField(fieldNameAst);
// Add 1 because adding a field to the class also requires a comma
- compiler.dumpInfoTask.recordFieldNameSize(fieldElement,
- builtFieldname.length + 1);
+ compiler.dumpInfoTask.registerElementAst(fieldElement, fieldNameAst);
fieldsAdded = true;
}
}
@@ -267,7 +265,7 @@ class ClassEmitter extends CodeEmitterHelper {
void emitRuntimeTypeInformation(Class cls, ClassBuilder builder) {
assert(builder.functionType == null);
if (cls.functionTypeIndex != null) {
- builder.functionType = '${cls.functionTypeIndex}';
+ builder.functionType = cls.functionTypeIndex;
}
for (Method method in cls.isChecks) {
@@ -296,7 +294,7 @@ class ClassEmitter extends CodeEmitterHelper {
if (backend.isAccessibleByReflection(classElement)) {
List<DartType> typeVars = classElement.typeVariables;
Iterable typeVariableProperties = emitter.typeVariableHandler
- .typeVariablesOf(classElement).map(js.number);
+ .typeVariablesOf(classElement);
ClassElement superclass = classElement.superclass;
bool hasSuper = superclass != null;
@@ -331,7 +329,8 @@ class ClassEmitter extends CodeEmitterHelper {
}
// TODO(ahe): This method (generateClass) should return a jsAst.Expression.
- jsAst.ObjectInitializer propertyValue = classBuilder.toObjectInitializer();
+ jsAst.ObjectInitializer propertyValue =
+ classBuilder.toObjectInitializer();
compiler.dumpInfoTask.registerElementAst(classBuilder.element, propertyValue);
enclosingBuilder.addProperty(className, propertyValue);
@@ -340,14 +339,15 @@ class ClassEmitter extends CodeEmitterHelper {
if (!backend.isAccessibleByReflection(classElement)) {
enclosingBuilder.addProperty("+$reflectionName", js.number(0));
} else {
- List<int> types = <int>[];
+ List<jsAst.Expression> types = <jsAst.Expression>[];
if (classElement.supertype != null) {
types.add(task.metadataCollector.reifyType(classElement.supertype));
}
for (DartType interface in classElement.interfaces) {
types.add(task.metadataCollector.reifyType(interface));
}
- enclosingBuilder.addProperty("+$reflectionName", js.numArray(types));
+ enclosingBuilder.addProperty("+$reflectionName",
+ new jsAst.ArrayInitializer(types));
}
}
}

Powered by Google App Engine
This is Rietveld 408576698