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

Unified Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 2762283002: Switch to IdentifierContext. (Closed)
Patch Set: Created 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/fasta/kernel/body_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 93e10fb018195c5729e0803e9c208cdb678d2f11..eb3293679c144ca580d42acaba414182fd435cf2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -110,8 +110,6 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
Scope formalParameterScope;
- bool isFirstIdentifier = false;
-
bool inInitializer = false;
bool inCatchClause = false;
@@ -153,7 +151,6 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
@override
void push(Object node) {
- isFirstIdentifier = false;
inInitializer = false;
super.push(node);
}
@@ -715,16 +712,10 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
}
@override
- void beginExpression(Token token) {
- debugEvent("beginExpression");
- isFirstIdentifier = true;
- }
-
- @override
void handleIdentifier(Token token, IdentifierContext context) {
debugEvent("handleIdentifier");
String name = token.lexeme;
- if (isFirstIdentifier) {
+ if (context.isScopeReference) {
assert(!inInitializer ||
this.scope == enclosingScope ||
this.scope.parent == enclosingScope);
@@ -1150,11 +1141,6 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
push(new MapEntry(key, value));
}
- @override
- void beginLiteralSymbol(Token token) {
- isFirstIdentifier = false;
- }
-
String symbolPartToString(name) {
if (name is Identifier) {
return name.name;
@@ -1181,15 +1167,26 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
push(new SymbolLiteral(value));
}
- DartType toKernelType(String name, List<DartType> arguments, int charOffset) {
+ DartType kernelTypeFromString(
+ String name, List<DartType> arguments, int charOffset) {
Builder builder = scope.lookup(name, charOffset, uri);
- if (builder is TypeDeclarationBuilder) {
- return builder.buildTypesWithBuiltArguments(library, arguments);
- }
if (builder == null) {
warning("Type not found: '$name'.", charOffset);
+ return const DynamicType();
+ } else {
+ return kernelTypeFromBuilder(builder, arguments, charOffset);
+ }
+ }
+
+ DartType kernelTypeFromBuilder(
+ Builder builder, List<DartType> arguments, int charOffset) {
+ if (builder is TypeDeclarationBuilder) {
+ return builder.buildTypesWithBuiltArguments(library, arguments);
+ } else if (builder.hasProblem) {
+ ProblemBuilder problem = builder;
+ addCompileTimeError(charOffset, problem.message);
} else {
- warning("Not a type: '$name'.", charOffset);
+ warning("Not a type: '${builder.fullNameForErrors}'.", charOffset);
}
// TODO(ahe): Create an error somehow.
return const DynamicType();
@@ -1220,7 +1217,9 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
builder = scope.lookup(prefix, beginToken.charOffset, uri);
}
if (builder is PrefixBuilder) {
- name = builder.exports[suffix];
+ name = builderToFirstExpression(
+ builder.exports[suffix], suffix, beginToken.charOffset,
+ isPrefix: true);
} else {
push(const DynamicType());
addCompileTimeError(beginToken.charOffset,
@@ -1243,8 +1242,12 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
push(name.buildTypesWithBuiltArguments(library, arguments));
} else if (name is TypeBuilder) {
push(name.build(library));
+ } else if (name is Builder) {
+ push(kernelTypeFromBuilder(name, arguments, beginToken.charOffset));
+ } else if (name is String) {
+ push(kernelTypeFromString(name, arguments, beginToken.charOffset));
} else {
- push(toKernelType(name, arguments, beginToken.charOffset));
+ internalError("Unhandled: '${name.runtimeType}'.");
}
if (peek() is TypeParameterType) {
TypeParameterType type = peek();
@@ -1721,7 +1724,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
@override
void handleThisExpression(Token token, IdentifierContext context) {
debugEvent("ThisExpression");
- if (isFirstIdentifier && isInstanceContext) {
+ if (context.isScopeReference && isInstanceContext) {
push(new ThisAccessor(this, token.charOffset, inInitializer));
} else {
push(new IncompleteError(
@@ -1732,7 +1735,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
@override
void handleSuperExpression(Token token, IdentifierContext context) {
debugEvent("SuperExpression");
- if (isFirstIdentifier && isInstanceContext) {
+ if (context.isScopeReference && isInstanceContext) {
Member member = this.member.target;
member.transformerFlags |= TransformerFlag.superCalls;
push(new ThisAccessor(this, token.charOffset, inInitializer,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698