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
This commit is contained in:
koda@google.com
2015-01-15 22:45:26 +00:00
parent a1cefa6d47
commit 016666613f
2 changed files with 26 additions and 26 deletions
@@ -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<String, jsAst.Expression> additionalProperties) {
ClassElement classElement = cls.element;
void generateClass(ClassElement classElement,
ClassBuilder properties,
Map<String, jsAst.Expression> 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,
@@ -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<ClassElement> 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,