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

Unified Diff: pkg/front_end/lib/src/fasta/source/diet_listener.dart

Issue 2788153002: Create separate scopes for constructors, setters, and other members. (Closed)
Patch Set: One more flaky standalone/io test. Created 3 years, 8 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: pkg/front_end/lib/src/fasta/source/diet_listener.dart
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 0b7b385aeceee14412a2055a184a67c73e8eb74d..42c137d7dd443150786e42cc4591574d75529df3 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -31,8 +31,6 @@ import '../builder/builder.dart';
import 'source_library_builder.dart' show SourceLibraryBuilder;
-import '../kernel/kernel_library_builder.dart' show isConstructorName;
-
class DietListener extends StackListener {
final SourceLibraryBuilder library;
@@ -420,7 +418,7 @@ class DietListener extends StackListener {
assert(currentClass == null);
currentClass = lookupBuilder(token, null, name);
assert(memberScope == library.scope);
- memberScope = currentClass.computeInstanceScope(memberScope);
+ memberScope = currentClass.scope;
}
@override
@@ -516,37 +514,33 @@ class DietListener extends StackListener {
}
Builder lookupBuilder(Token token, Token getOrSet, String name) {
+ // TODO(ahe): Can I move this to Scope or ScopeBuilder?
Builder builder;
if (currentClass != null) {
- builder = currentClass.members[name];
- if (builder == null && isConstructorName(name, currentClass.name)) {
- int index = name.indexOf(".");
- name = index == -1 ? "" : name.substring(index + 1);
- builder = currentClass.members[name];
+ if (getOrSet != null && optional("set", getOrSet)) {
+ builder = currentClass.scope.setters[name];
+ } else {
+ builder = currentClass.scope.local[name];
+ }
+ if (builder == null) {
+ if (name == currentClass.name) {
+ name = "";
+ } else {
+ int index = name.indexOf(".");
+ name = name.substring(index + 1);
+ }
+ builder = currentClass.constructors.local[name];
}
+ } else if (getOrSet != null && optional("set", getOrSet)) {
+ builder = library.scope.setters[name];
} else {
- builder = library.members[name];
+ builder = library.scopeBuilder[name];
}
if (builder == null) {
return internalError("Builder not found: $name", uri, token.charOffset);
}
if (builder.next != null) {
- Builder getterBuilder;
- Builder setterBuilder;
- Builder current = builder;
- while (current != null) {
- if (current.isGetter && getterBuilder == null) {
- getterBuilder = current;
- } else if (current.isSetter && setterBuilder == null) {
- setterBuilder = current;
- } else {
- return inputError(uri, token.charOffset, "Duplicated name: $name");
- }
- current = current.next;
- }
- assert(getOrSet != null);
- if (optional("get", getOrSet)) return getterBuilder;
- if (optional("set", getOrSet)) return setterBuilder;
+ return inputError(uri, token.charOffset, "Duplicated name: $name");
}
return builder;
}
« no previous file with comments | « pkg/front_end/lib/src/fasta/scope.dart ('k') | pkg/front_end/lib/src/fasta/source/source_class_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698