Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: lib/compiler/implementation/emitter.dart

Issue 9873012: Move member-iterating code into ClassElement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)) {

Powered by Google App Engine
This is Rietveld 408576698