Index: pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart |
index d2dd9fd125cef5ae0ee6b746f6b3c13d42362f03..138062e26a8c418e75b9c2f2ec94012c37d503ae 100644 |
--- a/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart |
+++ b/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart |
@@ -4,39 +4,32 @@ |
library dart2js.js_emitter.lazy_emitter.model_emitter; |
-import '../../compiler.dart' show |
- Compiler; |
-import '../../constants/values.dart' show |
- ConstantValue, |
- FunctionConstantValue; |
-import '../../core_types.dart' show |
- CoreClasses; |
-import '../../elements/elements.dart' show |
- ClassElement, |
- FunctionElement; |
+import '../../compiler.dart' show Compiler; |
+import '../../constants/values.dart' show ConstantValue, FunctionConstantValue; |
+import '../../core_types.dart' show CoreClasses; |
+import '../../elements/elements.dart' show ClassElement, FunctionElement; |
import '../../js/js.dart' as js; |
-import '../../js_backend/js_backend.dart' show |
- JavaScriptBackend, |
- Namer, |
- ConstantEmitter; |
+import '../../js_backend/js_backend.dart' |
+ show JavaScriptBackend, Namer, ConstantEmitter; |
import '../js_emitter.dart' show NativeEmitter; |
import '../constant_ordering.dart' show deepCompareConstants; |
-import 'package:js_runtime/shared/embedded_names.dart' show |
- CREATE_NEW_ISOLATE, |
- DEFERRED_LIBRARY_URIS, |
- DEFERRED_LIBRARY_HASHES, |
- GET_TYPE_FROM_NAME, |
- INITIALIZE_LOADED_HUNK, |
- INTERCEPTORS_BY_TAG, |
- IS_HUNK_INITIALIZED, |
- IS_HUNK_LOADED, |
- LEAF_TAGS, |
- MANGLED_GLOBAL_NAMES, |
- METADATA, |
- TYPE_TO_INTERCEPTOR_MAP, |
- TYPES; |
+import 'package:js_runtime/shared/embedded_names.dart' |
+ show |
+ CREATE_NEW_ISOLATE, |
+ DEFERRED_LIBRARY_URIS, |
+ DEFERRED_LIBRARY_HASHES, |
+ GET_TYPE_FROM_NAME, |
+ INITIALIZE_LOADED_HUNK, |
+ INTERCEPTORS_BY_TAG, |
+ IS_HUNK_INITIALIZED, |
+ IS_HUNK_LOADED, |
+ LEAF_TAGS, |
+ MANGLED_GLOBAL_NAMES, |
+ METADATA, |
+ TYPE_TO_INTERCEPTOR_MAP, |
+ TYPES; |
import '../js_emitter.dart' show NativeGenerator, buildTearOffCode; |
import '../model.dart'; |
@@ -60,10 +53,8 @@ class ModelEmitter { |
ModelEmitter(Compiler compiler, Namer namer, this.nativeEmitter) |
: this.compiler = compiler, |
this.namer = namer { |
- |
this.constantEmitter = new ConstantEmitter( |
- compiler, namer, this.generateConstantReference, |
- constantListGenerator); |
+ compiler, namer, this.generateConstantReference, constantListGenerator); |
} |
js.Expression constantListGenerator(js.Expression array) { |
@@ -81,9 +72,9 @@ class ModelEmitter { |
} |
bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) { |
- if (constant.isFunction) return true; // Already emitted. |
- if (constant.isPrimitive) return true; // Inlined. |
- if (constant.isDummy) return true; // Inlined. |
+ if (constant.isFunction) return true; // Already emitted. |
+ if (constant.isPrimitive) return true; // Inlined. |
+ if (constant.isDummy) return true; // Inlined. |
// The name is null when the constant is already a JS constant. |
// TODO(floitsch): every constant should be registered, so that we can |
// share the ones that take up too much space (like some strings). |
@@ -130,8 +121,8 @@ class ModelEmitter { |
if (isConstantInlinedOrAlreadyEmitted(value)) { |
return constantEmitter.generate(value); |
} |
- return js.js('#.#()', [namer.globalObjectForConstant(value), |
- namer.constantName(value)]); |
+ return js.js('#.#()', |
+ [namer.globalObjectForConstant(value), namer.constantName(value)]); |
} |
int emitProgram(Program program) { |
@@ -144,8 +135,8 @@ class ModelEmitter { |
// We have to emit the deferred fragments first, since we need their |
// deferred hash (which depends on the output) when emitting the main |
// fragment. |
- List<js.Expression> fragmentsCode = deferredFragments.map( |
- (DeferredFragment deferredUnit) { |
+ List<js.Expression> fragmentsCode = |
+ deferredFragments.map((DeferredFragment deferredUnit) { |
js.Expression types = |
program.metadataTypesForOutputUnit(deferredUnit.outputUnit); |
return emitDeferredFragment(types, deferredUnit, program.holders); |
@@ -163,16 +154,17 @@ class ModelEmitter { |
for (int i = 0; i < fragmentsCode.length; ++i) { |
String code = js.createCodeBuffer(fragmentsCode[i], compiler).getText(); |
totalSize += code.length; |
- compiler.outputProvider(fragments[i+1].outputFileName, deferredExtension) |
+ compiler.outputProvider( |
+ fragments[i + 1].outputFileName, deferredExtension) |
..add(code) |
..close(); |
} |
String mainCode = js.createCodeBuffer(mainAst, compiler).getText(); |
compiler.outputProvider(mainFragment.outputFileName, 'js') |
- ..add(buildGeneratedBy(compiler)) |
- ..add(mainCode) |
- ..close(); |
+ ..add(buildGeneratedBy(compiler)) |
+ ..add(mainCode) |
+ ..close(); |
totalSize += mainCode.length; |
return totalSize; |
@@ -187,7 +179,7 @@ class ModelEmitter { |
/// |
/// See [_UnparsedNode] for details. |
js.Literal unparse(Compiler compiler, js.Node value, |
- {bool protectForEval: true}) { |
+ {bool protectForEval: true}) { |
return new js.UnparsedNode(value, compiler, protectForEval); |
} |
@@ -208,31 +200,31 @@ class ModelEmitter { |
js.Expression code = new js.ArrayInitializer(elements); |
- Map<String, dynamic> holes = |
- {'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap), |
- 'holders': emitHolders(program.holders), |
- 'tearOff': buildTearOffCode(backend), |
- 'parseFunctionDescriptor': |
- js.js.statement(parseFunctionDescriptorBoilerplate, |
- {'argumentCount': js.string(namer.requiredParameterField), |
- 'defaultArgumentValues': js.string(namer.defaultValuesField), |
- 'callName': js.string(namer.callNameField)}), |
- |
- 'cyclicThrow': |
- backend.emitter.staticFunctionAccess( |
- backend.helpers.cyclicThrowHelper), |
- 'outputContainsConstantList': program.outputContainsConstantList, |
- 'embeddedGlobals': emitEmbeddedGlobals(program), |
- 'readMetadataTypeFunction': readMetadataTypeFunction, |
- 'staticNonFinals': |
- emitStaticNonFinalFields(fragment.staticNonFinalFields), |
- 'operatorIsPrefix': js.string(namer.operatorIsPrefix), |
- 'callName': js.string(namer.callNameField), |
- 'argumentCount': js.string(namer.requiredParameterField), |
- 'defaultArgumentValues': js.string(namer.defaultValuesField), |
- 'eagerClasses': emitEagerClassInitializations(fragment.libraries), |
- 'invokeMain': fragment.invokeMain, |
- 'code': code}; |
+ Map<String, dynamic> holes = { |
+ 'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap), |
+ 'holders': emitHolders(program.holders), |
+ 'tearOff': buildTearOffCode(backend), |
+ 'parseFunctionDescriptor': |
+ js.js.statement(parseFunctionDescriptorBoilerplate, { |
+ 'argumentCount': js.string(namer.requiredParameterField), |
+ 'defaultArgumentValues': js.string(namer.defaultValuesField), |
+ 'callName': js.string(namer.callNameField) |
+ }), |
+ 'cyclicThrow': backend.emitter |
+ .staticFunctionAccess(backend.helpers.cyclicThrowHelper), |
+ 'outputContainsConstantList': program.outputContainsConstantList, |
+ 'embeddedGlobals': emitEmbeddedGlobals(program), |
+ 'readMetadataTypeFunction': readMetadataTypeFunction, |
+ 'staticNonFinals': |
+ emitStaticNonFinalFields(fragment.staticNonFinalFields), |
+ 'operatorIsPrefix': js.string(namer.operatorIsPrefix), |
+ 'callName': js.string(namer.callNameField), |
+ 'argumentCount': js.string(namer.requiredParameterField), |
+ 'defaultArgumentValues': js.string(namer.defaultValuesField), |
+ 'eagerClasses': emitEagerClassInitializations(fragment.libraries), |
+ 'invokeMain': fragment.invokeMain, |
+ 'code': code |
+ }; |
holes.addAll(nativeHoles(program)); |
@@ -256,7 +248,6 @@ class ModelEmitter { |
nativeHoles['nativeIsolateAffinityTagInitialization'] = |
nativeIsolateAffinityTagInitialization; |
- |
js.Expression nativeInfoAccess = js.js('nativeInfo', []); |
js.Expression constructorAccess = js.js('constructor', []); |
Function subclassReadGenerator = (js.Expression subclass) { |
@@ -264,8 +255,7 @@ class ModelEmitter { |
}; |
js.Expression interceptorsByTagAccess = |
generateEmbeddedGlobalAccess(INTERCEPTORS_BY_TAG); |
- js.Expression leafTagsAccess = |
- generateEmbeddedGlobalAccess(LEAF_TAGS); |
+ js.Expression leafTagsAccess = generateEmbeddedGlobalAccess(LEAF_TAGS); |
js.Statement nativeInfoHandler = NativeGenerator.buildNativeInfoHandler( |
nativeInfoAccess, |
constructorAccess, |
@@ -292,15 +282,17 @@ class ModelEmitter { |
// that covers the entire program. |
List<js.Statement> statements = [ |
- new js.ExpressionStatement( |
- new js.VariableDeclarationList(holders.map((e) => |
- new js.VariableInitialization( |
- new js.VariableDeclaration(e.name, allowRename: false), |
- new js.ObjectInitializer(const []))).toList())), |
- js.js.statement('var holders = #', new js.ArrayInitializer( |
- holders.map((e) => new js.VariableUse(e.name)) |
- .toList(growable: false))), |
- js.js.statement('var holdersMap = Object.create(null)') |
+ new js.ExpressionStatement(new js.VariableDeclarationList(holders |
+ .map((e) => new js.VariableInitialization( |
+ new js.VariableDeclaration(e.name, allowRename: false), |
+ new js.ObjectInitializer(const []))) |
+ .toList())), |
+ js.js.statement( |
+ 'var holders = #', |
+ new js.ArrayInitializer(holders |
+ .map((e) => new js.VariableUse(e.name)) |
+ .toList(growable: false))), |
+ js.js.statement('var holdersMap = Object.create(null)') |
]; |
return new js.Block(statements); |
} |
@@ -313,15 +305,14 @@ class ModelEmitter { |
} |
if (program.typeToInterceptorMap != null) { |
- globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP), |
- program.typeToInterceptorMap)); |
+ globals.add(new js.Property( |
+ js.string(TYPE_TO_INTERCEPTOR_MAP), program.typeToInterceptorMap)); |
} |
if (program.hasIsolateSupport) { |
String isolateName = namer.staticStateHolder; |
- globals.add( |
- new js.Property(js.string(CREATE_NEW_ISOLATE), |
- js.js('function () { return $isolateName; }'))); |
+ globals.add(new js.Property(js.string(CREATE_NEW_ISOLATE), |
+ js.js('function () { return $isolateName; }'))); |
// TODO(floitsch): add remaining isolate functions. |
} |
@@ -332,20 +323,21 @@ class ModelEmitter { |
globals.addAll(emitMetadata(program)); |
if (program.needsNativeSupport) { |
- globals.add(new js.Property(js.string(INTERCEPTORS_BY_TAG), |
- js.js('Object.create(null)', []))); |
- globals.add(new js.Property(js.string(LEAF_TAGS), |
- js.js('Object.create(null)', []))); |
+ globals.add(new js.Property( |
+ js.string(INTERCEPTORS_BY_TAG), js.js('Object.create(null)', []))); |
+ globals.add(new js.Property( |
+ js.string(LEAF_TAGS), js.js('Object.create(null)', []))); |
} |
js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals); |
- List<js.Statement> statements = |
- [new js.ExpressionStatement( |
- new js.VariableDeclarationList( |
- [new js.VariableInitialization( |
- new js.VariableDeclaration("init", allowRename: false), |
- globalsObject)]))]; |
+ List<js.Statement> statements = [ |
+ new js.ExpressionStatement(new js.VariableDeclarationList([ |
+ new js.VariableInitialization( |
+ new js.VariableDeclaration("init", allowRename: false), |
+ globalsObject) |
+ ])) |
+ ]; |
return new js.Block(statements); |
} |
@@ -355,17 +347,22 @@ class ModelEmitter { |
CoreClasses coreClasses = compiler.coreClasses; |
// We want to keep the original names for the most common core classes when |
// calling toString on them. |
- List<ClassElement> nativeClassesNeedingUnmangledName = |
- [coreClasses.intClass, coreClasses.doubleClass, coreClasses.numClass, |
- coreClasses.stringClass, coreClasses.boolClass, coreClasses.nullClass, |
- coreClasses.listClass]; |
+ List<ClassElement> nativeClassesNeedingUnmangledName = [ |
+ coreClasses.intClass, |
+ coreClasses.doubleClass, |
+ coreClasses.numClass, |
+ coreClasses.stringClass, |
+ coreClasses.boolClass, |
+ coreClasses.nullClass, |
+ coreClasses.listClass |
+ ]; |
nativeClassesNeedingUnmangledName.forEach((element) { |
- names.add(new js.Property(js.quoteName(namer.className(element)), |
- js.string(element.name))); |
+ names.add(new js.Property( |
+ js.quoteName(namer.className(element)), js.string(element.name))); |
}); |
- return new js.Property(js.string(MANGLED_GLOBAL_NAMES), |
- new js.ObjectInitializer(names)); |
+ return new js.Property( |
+ js.string(MANGLED_GLOBAL_NAMES), new js.ObjectInitializer(names)); |
} |
js.Statement emitDeferredInitializerGlobal(Map loadMap) { |
@@ -378,7 +375,6 @@ class ModelEmitter { |
Iterable<js.Property> emitEmbeddedGlobalsForDeferredLoading( |
Map<String, List<Fragment>> loadMap) { |
- |
List<js.Property> globals = <js.Property>[]; |
js.ArrayInitializer fragmentUris(List<Fragment> fragments) { |
@@ -402,44 +398,44 @@ class ModelEmitter { |
count++; |
}); |
- globals.add(new js.Property(js.string(DEFERRED_LIBRARY_URIS), |
- new js.ObjectInitializer(uris))); |
- globals.add(new js.Property(js.string(DEFERRED_LIBRARY_HASHES), |
- new js.ObjectInitializer(hashes))); |
+ globals.add(new js.Property( |
+ js.string(DEFERRED_LIBRARY_URIS), new js.ObjectInitializer(uris))); |
+ globals.add(new js.Property( |
+ js.string(DEFERRED_LIBRARY_HASHES), new js.ObjectInitializer(hashes))); |
js.Expression isHunkLoadedFunction = |
js.js("function(hash) { return !!$deferredInitializersGlobal[hash]; }"); |
- globals.add(new js.Property(js.string(IS_HUNK_LOADED), |
- isHunkLoadedFunction)); |
+ globals |
+ .add(new js.Property(js.string(IS_HUNK_LOADED), isHunkLoadedFunction)); |
js.Expression isHunkInitializedFunction = |
js.js("function(hash) { return false; }"); |
- globals.add(new js.Property(js.string(IS_HUNK_INITIALIZED), |
- isHunkInitializedFunction)); |
+ globals.add(new js.Property( |
+ js.string(IS_HUNK_INITIALIZED), isHunkInitializedFunction)); |
js.Expression typesAccess = generateEmbeddedGlobalAccess(TYPES); |
/// See [emitEmbeddedGlobalsForDeferredLoading] for the format of the |
/// deferred hunk. |
- js.Expression initializeLoadedHunkFunction = |
- js.js(""" |
+ js.Expression initializeLoadedHunkFunction = js.js( |
+ """ |
function(hash) { |
var hunk = $deferredInitializersGlobal[hash]; |
$setupProgramName(hunk[0], #typesAccess.length); |
eval(hunk[1]); |
var deferredTypes = eval(hunk[2]); |
#typesAccess.push.apply(#typesAccess, deferredTypes); |
- }""", {'typesAccess': typesAccess}); |
+ }""", |
+ {'typesAccess': typesAccess}); |
- globals.add(new js.Property(js.string(INITIALIZE_LOADED_HUNK), |
- initializeLoadedHunkFunction)); |
+ globals.add(new js.Property( |
+ js.string(INITIALIZE_LOADED_HUNK), initializeLoadedHunkFunction)); |
return globals; |
} |
js.Property emitGetTypeFromName() { |
- js.Expression function = |
- js.js( """function(name) { |
+ js.Expression function = js.js("""function(name) { |
return holdersMap[name][name].ensureResolved(); |
}"""); |
return new js.Property(js.string(GET_TYPE_FROM_NAME), function); |
@@ -451,14 +447,16 @@ class ModelEmitter { |
// Types are non-evaluated and must be compiled at first use. |
// Compiled strings are guaranteed not to be strings, and it's thus safe |
// to use a type-test to determine if a type has already been compiled. |
- return js.js.statement('''function $readMetadataTypeName(index) { |
+ return js.js.statement( |
+ '''function $readMetadataTypeName(index) { |
var type = #typesAccess[index]; |
if (typeof type == 'string') { |
type = expressionCompile(type); |
#typesAccess[index] = type; |
} |
return type; |
- }''', {"typesAccess": generateEmbeddedGlobalAccess(TYPES)}); |
+ }''', |
+ {"typesAccess": generateEmbeddedGlobalAccess(TYPES)}); |
} |
js.Template get templateForReadType { |
@@ -474,17 +472,19 @@ class ModelEmitter { |
// Types are non-evaluated and must be compiled at first use. |
// Compiled strings are guaranteed not to be strings, and it's thus safe |
// to use a type-test to determine if a type has already been compiled. |
- return js.js.statement('''function $readMetadataName(index) { |
+ return js.js.statement( |
+ '''function $readMetadataName(index) { |
var lazyMetadata = #lazyMetadataAccess[index]; |
if (typeof lazyMetadata == 'string') { |
#metadataAccess[index] = expressionCompile(lazyMetadata); |
#lazyMetadataAccess[index] = null; |
} |
return #metadataAccess[index]; |
- }''', { |
- "lazyMetadataAccess": generateEmbeddedGlobalAccess(lazyMetadataName), |
- "metadataAccess": generateEmbeddedGlobalAccess(METADATA) |
- }); |
+ }''', |
+ { |
+ "lazyMetadataAccess": generateEmbeddedGlobalAccess(lazyMetadataName), |
+ "metadataAccess": generateEmbeddedGlobalAccess(METADATA) |
+ }); |
} |
js.Template get templateForReadMetadata { |
@@ -509,8 +509,7 @@ class ModelEmitter { |
} |
js.Expression emitDeferredFragment(js.Expression deferredTypes, |
- DeferredFragment fragment, |
- List<Holder> holders) { |
+ DeferredFragment fragment, List<Holder> holders) { |
// TODO(floitsch): initialize eager classes. |
// TODO(floitsch): the hash must depend on the output. |
int hash = fragment.hashCode; |
@@ -527,15 +526,14 @@ class ModelEmitter { |
// This is the code that must be evaluated after all deferred classes have |
// been setup. |
js.Statement immediateCode = new js.Block([ |
- emitStaticNonFinalFields(fragment.staticNonFinalFields), |
- emitEagerClassInitializations(fragment.libraries)]); |
- |
+ emitStaticNonFinalFields(fragment.staticNonFinalFields), |
+ emitEagerClassInitializations(fragment.libraries) |
+ ]); |
js.Literal immediateString = unparse(compiler, immediateCode); |
- js.ArrayInitializer hunk = |
- new js.ArrayInitializer([deferredArray, immediateString, |
- deferredTypes]); |
+ js.ArrayInitializer hunk = new js.ArrayInitializer( |
+ [deferredArray, immediateString, deferredTypes]); |
return js.js("$deferredInitializersGlobal[$hash] = #", hunk); |
} |
@@ -563,18 +561,19 @@ class ModelEmitter { |
js.Block emitStaticNonFinalFields(List<StaticField> fields) { |
Iterable<js.Statement> statements = fields.map((StaticField field) { |
- return js.js.statement("#.# = #;", |
- [field.holder.name, field.name, field.code]); |
+ return js.js |
+ .statement("#.# = #;", [field.holder.name, field.name, field.code]); |
}); |
return new js.Block(statements.toList()); |
} |
js.Expression emitLazilyInitializedStatics(List<StaticField> fields) { |
- Iterable fieldDescriptors = fields.expand((field) => |
- [ js.quoteName(field.name), |
+ Iterable fieldDescriptors = fields.expand((field) => [ |
+ js.quoteName(field.name), |
js.quoteName(namer.deriveLazyInitializerName(field.name)), |
js.number(field.holder.index), |
- emitLazyInitializer(field) ]); |
+ emitLazyInitializer(field) |
+ ]); |
return new js.ArrayInitializer(fieldDescriptors.toList(growable: false)); |
} |
@@ -583,18 +582,17 @@ class ModelEmitter { |
return js.js.statement('new #.#()', [cls.holder.name, cls.name]); |
} |
- List<js.Statement> instantiations = |
- libraries.expand((Library library) => library.classes) |
- .where((Class cls) => cls.isEager) |
- .map(createInstantiation) |
- .toList(growable: false); |
+ List<js.Statement> instantiations = libraries |
+ .expand((Library library) => library.classes) |
+ .where((Class cls) => cls.isEager) |
+ .map(createInstantiation) |
+ .toList(growable: false); |
return new js.Block(instantiations); |
} |
// This string should be referenced wherever JavaScript code makes assumptions |
// on the mixin format. |
- static final String nativeInfoDescription = |
- "A class is encoded as follows:" |
+ static final String nativeInfoDescription = "A class is encoded as follows:" |
" [name, class-code, holder-index], or " |
" [name, class-code, native-info, holder-index]."; |
@@ -632,8 +630,8 @@ class ModelEmitter { |
js.Name name = cls.name; |
Iterable<js.Name> assignments = fieldNames.map((js.Name field) { |
- return js.js("this.#field = #field", {"field": field}); |
- }); |
+ return js.js("this.#field = #field", {"field": field}); |
+ }); |
return js.js('function #(#) { # }', [name, fieldNames, assignments]); |
} |
@@ -641,9 +639,12 @@ class ModelEmitter { |
Method _generateGetter(Field field) { |
String getterTemplateFor(int flags) { |
switch (flags) { |
- case 1: return "function() { return this[#]; }"; |
- case 2: return "function(receiver) { return receiver[#]; }"; |
- case 3: return "function(receiver) { return this[#]; }"; |
+ case 1: |
+ return "function() { return this[#]; }"; |
+ case 2: |
+ return "function(receiver) { return receiver[#]; }"; |
+ case 3: |
+ return "function(receiver) { return this[#]; }"; |
} |
return null; |
} |
@@ -657,9 +658,12 @@ class ModelEmitter { |
Method _generateSetter(Field field) { |
String setterTemplateFor(int flags) { |
switch (flags) { |
- case 1: return "function(val) { return this[#] = val; }"; |
- case 2: return "function(receiver, val) { return receiver[#] = val; }"; |
- case 3: return "function(receiver, val) { return this[#] = val; }"; |
+ case 1: |
+ return "function(val) { return this[#] = val; }"; |
+ case 2: |
+ return "function(receiver, val) { return receiver[#] = val; }"; |
+ case 3: |
+ return "function(receiver, val) { return this[#] = val; }"; |
} |
return null; |
} |
@@ -689,8 +693,10 @@ class ModelEmitter { |
"reference."; |
js.Expression emitClass(Class cls) { |
- List elements = [js.quoteName(cls.superclassName, allowNull: true), |
- js.number(cls.superclassHolderIndex)]; |
+ List elements = [ |
+ js.quoteName(cls.superclassName, allowNull: true), |
+ js.number(cls.superclassHolderIndex) |
+ ]; |
if (cls.isMixinApplication) { |
MixinApplication mixin = cls; |
@@ -708,9 +714,14 @@ class ModelEmitter { |
Iterable<Method> typeVariableReaderStubs = cls.typeVariableReaderStubs; |
Iterable<Method> noSuchMethodStubs = cls.noSuchMethodStubs; |
Iterable<Method> gettersSetters = _generateGettersSetters(cls); |
- Iterable<Method> allMethods = |
- [methods, isChecks, callStubs, typeVariableReaderStubs, |
- noSuchMethodStubs, gettersSetters].expand((x) => x); |
+ Iterable<Method> allMethods = [ |
+ methods, |
+ isChecks, |
+ callStubs, |
+ typeVariableReaderStubs, |
+ noSuchMethodStubs, |
+ gettersSetters |
+ ].expand((x) => x); |
elements.addAll(allMethods.expand(emitInstanceMethod)); |
return unparse(compiler, new js.ArrayInitializer(elements)); |
@@ -813,15 +824,14 @@ function parseFunctionDescriptor(proto, name, descriptor, typesOffset) { |
method.optionalParameterDefaultValues; |
List<js.Property> properties = <js.Property>[]; |
defaultValues.forEach((String name, ConstantValue value) { |
- properties.add(new js.Property(js.string(name), |
- generateConstantReference(value))); |
+ properties.add( |
+ new js.Property(js.string(name), generateConstantReference(value))); |
}); |
return new js.ObjectInitializer(properties); |
} |
} |
Iterable<js.Expression> emitInstanceMethod(Method method) { |
- |
List<js.Expression> makeNameCodePair(Method method) { |
return [js.quoteName(method.name), method.code]; |
} |
@@ -905,8 +915,11 @@ function parseFunctionDescriptor(proto, name, descriptor, typesOffset) { |
data.add(js.number(method.requiredParameterCount)); |
data.add(_encodeOptionalParameterDefaultValues(method)); |
} |
- return [js.quoteName(method.name), holderIndex, |
- new js.ArrayInitializer(data)]; |
+ return [ |
+ js.quoteName(method.name), |
+ holderIndex, |
+ new js.ArrayInitializer(data) |
+ ]; |
} else { |
method.parameterStubs.forEach(_addMethod); |
} |
@@ -1257,5 +1270,4 @@ function parseFunctionDescriptor(proto, name, descriptor, typesOffset) { |
})(Date.now(), #code) |
}"""; |
- |
} |