| Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
|
| index 1f5919ae49266190fa05130c2aad056bd4a976f3..c5c99d304f6fe786fe99a22c6002ea3583e657ae 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
|
| @@ -353,6 +353,16 @@ class CodeEmitterTask extends CompilerTask {
|
| js('var s = fields.split(";")'),
|
| js('fields = s[1] == "" ? [] : s[1].split(",")'),
|
| js('supr = s[0]'),
|
| + js('split = supr.split(":")'),
|
| + js.if_('split.length == 2', [
|
| + js('supr = split[0]'),
|
| + js('var functionSignature = split[1]'),
|
| + js.if_('functionSignature',
|
| + js('desc.\$signature = #',
|
| + js.fun('s',
|
| + js.return_(js.fun([], js.return_('init.metadata[s]'))))(
|
| + js('functionSignature'))))
|
| + ]),
|
|
|
| optional(needsMixinSupport, js.if_('supr && supr.indexOf("+") > 0', [
|
| js('s = supr.split("+")'),
|
| @@ -1198,6 +1208,9 @@ mainBuffer.add(r'''
|
| mainBuffer.add('(function(${namer.currentIsolate})$_{$n');
|
| }
|
|
|
| + // Using a named function here produces easier to read stack traces in
|
| + // Chrome/V8.
|
| + mainBuffer.add('function dart() {}');
|
| for (String globalObject in Namer.reservedGlobalObjectNames) {
|
| // The global objects start as so-called "slow objects". For V8, this
|
| // means that it won't try to make map transitions as we add properties
|
| @@ -1205,7 +1218,7 @@ mainBuffer.add(r'''
|
| // fast objects by calling "convertToFastObject" (see
|
| // [emitConvertToFastObjectFunction]).
|
| mainBuffer
|
| - ..write('var ${globalObject}$_=$_{}$N')
|
| + ..write('var ${globalObject}$_=${_}new dart$N')
|
| ..write('delete ${globalObject}.x$N');
|
| }
|
|
|
| @@ -1252,26 +1265,12 @@ mainBuffer.add(r'''
|
| nativeEmitter.finishGenerateNativeClasses();
|
| nativeEmitter.assembleCode(nativeBuffer);
|
|
|
| - // Might create methodClosures.
|
| if (!deferredClasses.isEmpty) {
|
| for (ClassElement element in deferredClasses) {
|
| generateClass(element, getElementDecriptor(element));
|
| }
|
| }
|
|
|
| - containerBuilder.emitStaticFunctionClosures();
|
| -
|
| - addComment('Method closures', mainBuffer);
|
| - // Now that we have emitted all classes, we know all the method
|
| - // closures that will be needed.
|
| - containerBuilder.methodClosures.forEach((String code, Element closure) {
|
| - // TODO(ahe): Some of these can be deferred.
|
| - String mangledName = namer.getNameOfClass(closure);
|
| - mainBuffer.add('$classesCollector.$mangledName$_=$_'
|
| - '[${namer.globalObjectFor(closure)},$_$code]');
|
| - mainBuffer.add("$N$n");
|
| - });
|
| -
|
| // After this assignment we will produce invalid JavaScript code if we use
|
| // the classesCollector variable.
|
| classesCollector = 'classesCollector should not be used from now on';
|
| @@ -1292,7 +1291,7 @@ mainBuffer.add(r'''
|
| if (classEmitter.emitFields(
|
| library, builder, null, emitStatics: true)) {
|
| getElementDescriptorForOutputUnit(library, "main")
|
| - .properties.addAll(builder.properties);
|
| + .properties.addAll(builder.toObjectInitializer().properties);
|
| }
|
| }
|
| }
|
| @@ -1331,7 +1330,7 @@ mainBuffer.add(r'''
|
| }
|
| }
|
| mainBuffer
|
| - ..write(getReflectionDataParser(classesCollector, namer))
|
| + ..write(getReflectionDataParser(classesCollector, backend))
|
| ..write('([$n');
|
|
|
| List<Element> sortedElements =
|
| @@ -1361,8 +1360,6 @@ mainBuffer.add(r'''
|
| classesCollector = oldClassesCollector;
|
| }
|
|
|
| - containerBuilder.emitStaticFunctionGetters(mainBuffer);
|
| -
|
| typeTestEmitter.emitRuntimeTypeSupport(mainBuffer);
|
| interceptorEmitter.emitGetInterceptorMethods(mainBuffer);
|
| interceptorEmitter.emitOneShotInterceptors(mainBuffer);
|
| @@ -1537,7 +1534,7 @@ if (typeof $printHelperName === "function") {
|
| '$_${namer.isolateName}.prototype$N$n'
|
| // The classesCollector object ($$).
|
| '$classesCollector$_=$_{};$n')
|
| - ..write(getReflectionDataParser(classesCollector, namer))
|
| + ..write(getReflectionDataParser(classesCollector, backend))
|
| ..write('([$n')
|
| ..addBuffer(deferredLibrariesBuffer)
|
| ..write('])$N');
|
|
|