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

Unified Diff: lib/compiler/implementation/ssa/builder.dart

Issue 10970015: Throw an exception when invalid source file location is encountered. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 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: lib/compiler/implementation/ssa/builder.dart
diff --git a/lib/compiler/implementation/ssa/builder.dart b/lib/compiler/implementation/ssa/builder.dart
index 716e3f3919887693ea711c8f16859c78078897d5..5edf8c75f59396c321f5f4093f592eca534b1a7d 100644
--- a/lib/compiler/implementation/ssa/builder.dart
+++ b/lib/compiler/implementation/ssa/builder.dart
@@ -1459,20 +1459,32 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
}
HInstruction attachPosition(HInstruction target, Node node) {
- target.sourcePosition = sourceFileLocationForToken(node.getBeginToken());
+ target.sourcePosition = sourceFileLocationForBeginToken(node);
return target;
}
- SourceFileLocation sourceFileLocationForToken(Token token) {
+ SourceFileLocation sourceFileLocationForBeginToken(Node node) =>
+ sourceFileLocationForToken(node, node.getBeginToken());
+
+ SourceFileLocation sourceFileLocationForEndToken(Node node) =>
+ sourceFileLocationForToken(node, node.getEndToken());
+
+ SourceFileLocation sourceFileLocationForToken(Node node, Token token) {
Element element = sourceElementStack.last();
// TODO(johnniwinther): remove the 'element.patch' hack.
if (element is FunctionElement) {
FunctionElement functionElement = element;
if (functionElement.patch != null) element = functionElement.patch;
}
- SourceFile sourceFile = element.getCompilationUnit().script.file;
- return new SourceFileLocation(sourceFile, token);
- }
+ Script script = element.getCompilationUnit().script;
+ SourceFile sourceFile = script.file;
+ SourceFileLocation location = new SourceFileLocation(sourceFile, token);
+ if (!location.isValid()) {
+ throw MessageKind.INVALID_SOURCE_FILE_LOCATION.message(
+ [token.charOffset, sourceFile.filename, sourceFile.text.length]);
+ }
+ return location;
+}
void visit(Node node) {
if (node !== null) node.accept(this);
@@ -1672,8 +1684,8 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
wrapExpressionGraph(updateGraph),
conditionBlock.loopInformation.target,
conditionBlock.loopInformation.labels,
- sourceFileLocationForToken(loop.getBeginToken()),
- sourceFileLocationForToken(loop.getEndToken()));
+ sourceFileLocationForBeginToken(loop),
+ sourceFileLocationForEndToken(loop));
startBlock.setBlockFlow(info, current);
loopInfo.loopBlockInformation = info;
@@ -1801,8 +1813,8 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
null,
loopEntryBlock.loopInformation.target,
loopEntryBlock.loopInformation.labels,
- sourceFileLocationForToken(node.getBeginToken()),
- sourceFileLocationForToken(node.getEndToken()));
+ sourceFileLocationForBeginToken(node),
+ sourceFileLocationForEndToken(node));
loopEntryBlock.setBlockFlow(loopBlockInfo, current);
loopInfo.loopBlockInformation = loopBlockInfo;
}

Powered by Google App Engine
This is Rietveld 408576698