| Index: lib/compiler/implementation/emitter.dart
|
| diff --git a/lib/compiler/implementation/emitter.dart b/lib/compiler/implementation/emitter.dart
|
| index 277093408e06cfb4ac00bacbb2b73c0ae38e1c02..c7fb5b0ee3bd5c4090cab188afa99a368d746fd6 100644
|
| --- a/lib/compiler/implementation/emitter.dart
|
| +++ b/lib/compiler/implementation/emitter.dart
|
| @@ -235,30 +235,20 @@ function(child, parent) {
|
| StringBuffer argumentsBuffer,
|
| StringBuffer bodyBuffer) {
|
| bool isFirst = true;
|
| - do {
|
| + void generateFieldInit(ClassElement enclosingClass, Element member) {
|
| // TODO(floitsch): make sure there are no name clashes.
|
| - String className = namer.getName(classElement);
|
| -
|
| - void generateFieldInit(Element member) {
|
| - if (member.isInstanceMember() && member.kind == ElementKind.FIELD) {
|
| - if (!isFirst) argumentsBuffer.add(', ');
|
| - isFirst = false;
|
| - String memberName = namer.instanceFieldName(member.getLibrary(),
|
| - member.name);
|
| - argumentsBuffer.add('${className}_$memberName');
|
| - bodyBuffer.add(' this.$memberName = ${className}_$memberName;\n');
|
| - }
|
| - }
|
| -
|
| - for (Element element in classElement.members) {
|
| - generateFieldInit(element);
|
| - }
|
| - for (Element element in classElement.backendMembers) {
|
| - generateFieldInit(element);
|
| - }
|
| + String className = namer.getName(enclosingClass);
|
| + if (!isFirst) argumentsBuffer.add(', ');
|
| + isFirst = false;
|
| + String memberName = namer.instanceFieldName(member.getLibrary(),
|
| + member.name);
|
| + argumentsBuffer.add('${className}_$memberName');
|
| + bodyBuffer.add(' this.$memberName = ${className}_$memberName;\n');
|
| + }
|
|
|
| - classElement = classElement.superclass;
|
| - } while(classElement !== null);
|
| + classElement.forEachInstanceField(generateFieldInit,
|
| + includeBackendMembers: true,
|
| + includeSuperMembers: true);
|
| }
|
|
|
| void emitInherits(ClassElement cls, StringBuffer buffer) {
|
| @@ -307,16 +297,14 @@ function(child, parent) {
|
| emitInherits(classElement, buffer);
|
|
|
| String attachTo(String name) => '$className.prototype.$name';
|
| - for (Element member in classElement.members) {
|
| +
|
| + classElement.forEachMember(includeBackendMembers: true,
|
| + f: (ClassElement enclosing, Element member) {
|
| if (member.isInstanceMember()) {
|
| addInstanceMember(member, attachTo, buffer);
|
| }
|
| - }
|
| - for (Element member in classElement.backendMembers) {
|
| - if (member.isInstanceMember()) {
|
| - addInstanceMember(member, attachTo, buffer);
|
| - }
|
| - }
|
| + });
|
| +
|
| generateTypeTests(classElement, (Element other) {
|
| buffer.add('${attachTo(namer.operatorIs(other))} = ');
|
| if (nativeEmitter.requiresNativeIsCheck(other)) {
|
|
|