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

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: Created 5 years, 7 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 dc1f7da028f625417cb7b05660134ce13b7311fc..cfa442a7e1e3f5cbe7fe6780f92b2f844567c439 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,19 +157,19 @@ 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]));
}
if (backend.isAccessibleByReflection(fieldElement)) {
DartType type = fieldElement.type;
- reflectionMarker = '-${task.metadataCollector.reifyType(type)}';
+ fieldNameParts..add(new jsAst.LiteralString('-'))
+ ..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;
}
}
@@ -257,7 +257,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) {
@@ -286,7 +286,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;
@@ -301,7 +301,7 @@ class ClassEmitter extends CodeEmitterHelper {
ClassBuilder staticsBuilder = new ClassBuilder(classElement, namer);
if (emitFields(cls, staticsBuilder, emitStatics: true)) {
jsAst.ObjectInitializer initializer =
- staticsBuilder.toObjectInitializer();
+ staticsBuilder.toObjectInitializer(compiler);
compiler.dumpInfoTask.registerElementAst(classElement,
initializer);
jsAst.Node property = initializer.properties.single;
@@ -321,7 +321,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);
compiler.dumpInfoTask.registerElementAst(classBuilder.element, propertyValue);
enclosingBuilder.addProperty(className, propertyValue);
@@ -330,14 +331,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