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

Unified Diff: dart/pkg/compiler/lib/src/scanner/listener.dart

Issue 822423005: Avoid duplicated messages. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Should have no changes. Created 5 years, 11 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 | dart/pkg/compiler/lib/src/scanner/parser.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/pkg/compiler/lib/src/scanner/listener.dart
diff --git a/dart/pkg/compiler/lib/src/scanner/listener.dart b/dart/pkg/compiler/lib/src/scanner/listener.dart
index 79d6a11a3af6d67ca4f8976f885844f043f4f167..0ef1f5db15af6991c96040f33180819a647c0260 100644
--- a/dart/pkg/compiler/lib/src/scanner/listener.dart
+++ b/dart/pkg/compiler/lib/src/scanner/listener.dart
@@ -2318,7 +2318,7 @@ abstract class PartialFunctionMixin implements FunctionElement {
p.parseFunction(beginToken, getOrSet);
}
}
- cachedNode = parse(listener, this, parseFunction);
+ cachedNode = parse(listener, this, declarationSite, parseFunction);
return cachedNode;
}
@@ -2327,6 +2327,8 @@ abstract class PartialFunctionMixin implements FunctionElement {
void reusePartialFunctionMixin() {
cachedNode = null;
}
+
+ DeclarationSite get declarationSite;
}
class PartialFunctionElement extends FunctionElementX
@@ -2388,13 +2390,8 @@ class PartialFieldList extends VariableList with PartialElement {
if (definitions != null) return definitions;
listener.withCurrentElement(element, () {
definitions = parse(
- listener, element,
- (Parser parser) {
- if (hasParseError) {
- parser.listener.suppressParseErrors = true;
- }
- return parser.parseMember(beginToken);
- });
+ listener, element, declarationSite,
+ (Parser parser) => parser.parseMember(beginToken));
if (!hasParseError &&
!definitions.modifiers.isVar &&
@@ -2444,9 +2441,9 @@ class PartialTypedefElement extends TypedefElementX with PartialElement {
Node parseNode(DiagnosticListener listener) {
if (cachedNode != null) return cachedNode;
- cachedNode = parse(listener,
- this,
- (p) => p.parseTopLevelDeclaration(token));
+ cachedNode = parse(
+ listener, this, declarationSite,
+ (p) => p.parseTopLevelDeclaration(token));
return cachedNode;
}
@@ -2454,13 +2451,22 @@ class PartialTypedefElement extends TypedefElementX with PartialElement {
}
/// A [MetadataAnnotation] which is constructed on demand.
-class PartialMetadataAnnotation extends MetadataAnnotationX {
- final Token beginToken;
+class PartialMetadataAnnotation extends MetadataAnnotationX
+ implements PartialElement {
+ Token beginToken; // TODO(ahe): Make this final when issue 22065 is fixed.
+
final Token tokenAfterEndToken;
+
Expression cachedNode;
+ bool hasParseError = false;
+
PartialMetadataAnnotation(this.beginToken, this.tokenAfterEndToken);
+ bool get isErroneous => hasParseError;
+
+ DeclarationSite get declarationSite => this;
+
Token get endToken {
Token token = beginToken;
while (token.kind != EOF_TOKEN) {
@@ -2471,10 +2477,15 @@ class PartialMetadataAnnotation extends MetadataAnnotationX {
return token;
}
+ void set endToken(_) {
+ throw new UnsupportedError("endToken=");
+ }
+
Node parseNode(DiagnosticListener listener) {
if (cachedNode != null) return cachedNode;
Metadata metadata = parse(listener,
annotatedElement,
+ declarationSite,
(p) => p.parseMetadata(beginToken));
cachedNode = metadata.expression;
return cachedNode;
@@ -2488,19 +2499,21 @@ class PartialMetadataAnnotation extends MetadataAnnotationX {
}
}
-Node parse(DiagnosticListener diagnosticListener,
- Element element,
- doParse(Parser parser)) {
+Node parse(
+ DiagnosticListener diagnosticListener,
+ Element element,
+ PartialElement partial,
+ doParse(Parser parser)) {
CompilationUnitElement unit = element.compilationUnit;
NodeListener listener = new NodeListener(diagnosticListener, unit);
listener.memberErrors = listener.memberErrors.prepend(false);
try {
+ if (partial.hasParseError) {
+ listener.suppressParseErrors = true;
+ }
doParse(new Parser(listener));
} on ParserError catch (e) {
- if (element is PartialElement) {
- PartialElement partial = element as PartialElement;
- partial.hasParseError = true;
- }
+ partial.hasParseError = true;
return new ErrorNode(element.position, e.reason);
}
Node node = listener.popNode();
« no previous file with comments | « no previous file | dart/pkg/compiler/lib/src/scanner/parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698