aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-06-12 13:01:16 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-06-15 10:47:59 +0000
commit45deb33b92aa92f46e494a7cd4379b7040468883 (patch)
tree90c7d65af3d283f6b13fcb959a10afc8a75b9004 /src/main/java/com/google/devtools/build
parent225030849d61c7cc6f7a09e93654f316cf33b1df (diff)
Skylark: First argument of load() may no longer start with two slashes ("//")
-- MOS_MIGRATED_REVID=95833265
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Parser.java1
2 files changed, 27 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
index 414429ebd2..048857ba89 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
@@ -28,6 +28,7 @@ public final class LoadStatement extends Statement {
+ "It should either start with a slash or refer to a file in the current directory.";
private final ImmutableList<Ident> symbols;
private final PathFragment importPath;
+ private final String pathString;
/**
* Constructs an import statement.
@@ -35,6 +36,7 @@ public final class LoadStatement extends Statement {
LoadStatement(String path, List<Ident> symbols) {
this.symbols = ImmutableList.copyOf(symbols);
this.importPath = new PathFragment(path + ".bzl");
+ this.pathString = path;
}
public ImmutableList<Ident> getSymbols() {
@@ -72,6 +74,8 @@ public final class LoadStatement extends Statement {
@Override
void validate(ValidationEnvironment env) throws EvalException {
+ validateLoadPath();
+
if (!importPath.isAbsolute() && importPath.segmentCount() > 1) {
throw new EvalException(getLocation(), String.format(PATH_ERROR_MSG, importPath));
}
@@ -79,4 +83,26 @@ public final class LoadStatement extends Statement {
env.declare(symbol.getName(), getLocation());
}
}
+
+ /**
+ * Throws an exception if the path argument to load() does starts with more than one forward
+ * slash ('/')
+ *
+ * @throws EvalException if the path is empty or starts with two forward slashes
+ */
+ private void validateLoadPath() throws EvalException {
+ String error = null;
+
+ if (pathString.isEmpty()) {
+ error = "Path argument to load() must not be empty";
+ } else if (pathString.startsWith("//")) {
+ error =
+ "First argument of load() is a path, not a label. "
+ + "It should start with a single slash if it is an absolute path.";
+ }
+
+ if (error != null) {
+ throw new EvalException(getLocation(), error);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 8ea20eb7d3..86729d56ff 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -1075,6 +1075,7 @@ class Parser {
return;
}
String path = (String) token.value;
+
nextToken();
expect(TokenKind.COMMA);