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..8377766eacf60d48f71d5e9b4498ceeb4b970791 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,7 @@ mainBuffer.add(r''' |
mainBuffer.add('(function(${namer.currentIsolate})$_{$n'); |
} |
+ 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 +1216,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 +1263,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 +1289,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 +1328,7 @@ mainBuffer.add(r''' |
} |
} |
mainBuffer |
- ..write(getReflectionDataParser(classesCollector, namer)) |
+ ..write(getReflectionDataParser(classesCollector, backend)) |
..write('([$n'); |
List<Element> sortedElements = |
@@ -1361,8 +1358,6 @@ mainBuffer.add(r''' |
classesCollector = oldClassesCollector; |
} |
- containerBuilder.emitStaticFunctionGetters(mainBuffer); |
- |
typeTestEmitter.emitRuntimeTypeSupport(mainBuffer); |
interceptorEmitter.emitGetInterceptorMethods(mainBuffer); |
interceptorEmitter.emitOneShotInterceptors(mainBuffer); |
@@ -1537,7 +1532,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'); |