Index: pkg/front_end/lib/src/fasta/kernel/verifier.dart |
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart |
index 17c984c390ccd6891e7e25d6890e2f2192dc9341..af08d4675d213794971aa7c4fe5ead311e0ba806 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart |
@@ -46,13 +46,37 @@ class FastaVerifyingVisitor extends VerifyingVisitor |
this.isOutline = isOutline; |
} |
+ String checkLocation(TreeNode node, String name) { |
sjindel
2017/08/16 10:27:01
How are these changes related?
ahe
2017/08/16 11:59:15
Without the change on line 79, Uri.parse would thr
ahe
2017/08/16 12:01:47
It would throw a NSM error *before* I modified ker
|
+ if (name == null || name.contains("#")) { |
+ // TODO(ahe): Investigate if these checks can be enabled: |
+ // if (node.fileUri != null && node is! Library) { |
+ // problem(node, "A synthetic node shouldn't have a fileUri", |
+ // context: node); |
+ // } |
+ // if (node.fileOffset != -1) { |
+ // problem(node, "A synthetic node shouldn't have a fileOffset", |
+ // context: node); |
+ // } |
+ return fileUri; |
+ } else { |
+ if (node.fileUri == null) { |
+ problem(node, "'$name' has no fileUri", context: node); |
+ return fileUri; |
+ } |
+ if (node.fileOffset == -1 && node is! Library) { |
+ problem(node, "'$name' has no fileOffset", context: node); |
+ } |
+ return node.fileUri; |
+ } |
+ } |
+ |
@override |
problem(TreeNode node, String details, {TreeNode context}) { |
node ??= (context ?? this.context); |
int offset = node?.fileOffset ?? -1; |
LocatedMessage message = templateInternalVerificationError |
.withArguments(details) |
- .withLocation(Uri.parse(fileUri), offset); |
+ .withLocation(fileUri == null ? null : Uri.parse(fileUri), offset); |
CompilerContext.current.report(message, Severity.error); |
errors.add(message); |
} |
@@ -68,25 +92,25 @@ class FastaVerifyingVisitor extends VerifyingVisitor |
@override |
visitLibrary(Library node) { |
- fileUri = node.fileUri; |
+ fileUri = checkLocation(node, node.name); |
super.visitLibrary(node); |
} |
@override |
visitClass(Class node) { |
- fileUri = node.fileUri; |
+ fileUri = checkLocation(node, node.name); |
super.visitClass(node); |
} |
@override |
visitField(Field node) { |
- fileUri = node.fileUri; |
+ fileUri = checkLocation(node, node.name.name); |
super.visitField(node); |
} |
@override |
visitProcedure(Procedure node) { |
- fileUri = node.fileUri; |
+ fileUri = checkLocation(node, node.name.name); |
super.visitProcedure(node); |
} |