From 016666613fbdf2ea438f162386355f0afa23e2a2 Mon Sep 17 00:00:00 2001 From: "koda@google.com" Date: Thu, 15 Jan 2015 22:45:26 +0000 Subject: [PATCH] Revert r42934. R=floitsch@google.com Review URL: https://codereview.chromium.org//850343005 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42939 260f80e4-7a28-3924-810f-c04153c831b5 --- .../js_emitter/old_emitter/class_emitter.dart | 16 ++++----- .../src/js_emitter/old_emitter/emitter.dart | 36 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) 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 375be203337..6a838156437 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 @@ -11,11 +11,12 @@ class ClassEmitter extends CodeEmitterHelper { /** * Documentation wanted -- johnniwinther + * + * Invariant: [classElement] must be a declaration element. */ - void emitClass(Class cls, - ClassBuilder enclosingBuilder, - Map additionalProperties) { - ClassElement classElement = cls.element; + void generateClass(ClassElement classElement, + ClassBuilder properties, + Map additionalProperties) { final onlyForRti = emitter.typeTestRegistry.rtiNeededClasses.contains(classElement); @@ -31,9 +32,8 @@ class ClassEmitter extends CodeEmitterHelper { superName = namer.getNameOfClass(superclass); } - if (cls.isMixinApplication) { - MixinApplication mixinApplication = cls; - String mixinName = mixinApplication.mixinClass.name; + if (classElement.isMixinApplication) { + String mixinName = namer.getNameOfClass(computeMixinClass(classElement)); superName = '$superName+$mixinName'; emitter.needsMixinSupport = true; } @@ -60,7 +60,7 @@ class ClassEmitter extends CodeEmitterHelper { emitTypeVariableReaders(classElement, builder); emitClassBuilderWithReflectionData( - className, classElement, builder, enclosingBuilder); + className, classElement, builder, properties); } void emitClassConstructor(ClassElement classElement, diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart index 4bc14763d4d..f216b859952 100644 --- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart +++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart @@ -732,25 +732,24 @@ class OldEmitter implements Emitter { cspPrecompiledConstructorNamesFor(outputUnit))]); } - void emitClass(Class cls, ClassBuilder enclosingBuilder) { - ClassElement classElement = cls.element; + void generateClass(ClassElement classElement, ClassBuilder properties) { compiler.withCurrentElement(classElement, () { if (compiler.hasIncrementalSupport) { - ClassBuilder cachedBuilder = + ClassBuilder builder = cachedClassBuilders.putIfAbsent(classElement, () { ClassBuilder builder = new ClassBuilder(classElement, namer); - classEmitter.emitClass( - cls, builder, additionalProperties[classElement]); + classEmitter.generateClass( + classElement, builder, additionalProperties[classElement]); return builder; }); - invariant(classElement, cachedBuilder.fields.isEmpty); - invariant(classElement, cachedBuilder.superName == null); - invariant(classElement, cachedBuilder.functionType == null); - invariant(classElement, cachedBuilder.fieldMetadata == null); - enclosingBuilder.properties.addAll(cachedBuilder.properties); + invariant(classElement, builder.fields.isEmpty); + invariant(classElement, builder.superName == null); + invariant(classElement, builder.functionType == null); + invariant(classElement, builder.fieldMetadata == null); + properties.properties.addAll(builder.properties); } else { - classEmitter.emitClass( - cls, enclosingBuilder, additionalProperties[classElement]); + classEmitter.generateClass( + classElement, properties, additionalProperties[classElement]); } }); } @@ -1364,16 +1363,17 @@ class OldEmitter implements Emitter { } void emitLibrary(Library library) { - LibraryElement libraryElement = library.element; - emitStaticFunctions(library.statics); - ClassBuilder libraryBuilder = getElementDescriptor(libraryElement); - for (Class cls in library.classes) { - emitClass(cls, libraryBuilder); + Iterable classes = + library.classes.map((Class cls) => cls.element); + for (ClassElement element in classes) { + generateClass(element, getElementDescriptor(element)); } - classEmitter.emitFields(libraryElement, libraryBuilder, emitStatics: true); + LibraryElement libraryElement = library.element; + ClassBuilder builder = getElementDescriptor(libraryElement); + classEmitter.emitFields(library.element, builder, emitStatics: true); } void emitMainOutputUnit(Program program,