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

Unified Diff: frog/leg/emitter.dart

Issue 9873012: Move member-iterating code into ClassElement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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: frog/leg/emitter.dart
diff --git a/frog/leg/emitter.dart b/frog/leg/emitter.dart
index 4ccf642cd1f602f57cc7de6a3d2ea066dcd4f31d..215c9e993bce7e48f23ace7d9aad805ebe217bce 100644
--- a/frog/leg/emitter.dart
+++ b/frog/leg/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