aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java67
1 files changed, 16 insertions, 51 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java b/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
index b1f079a14b..a0f6a33367 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
@@ -194,52 +194,27 @@ public class BuildFileAST extends ASTNode {
public boolean exec(Environment env, EventHandler eventHandler) throws InterruptedException {
boolean ok = true;
for (Statement stmt : stmts) {
- if (!execTopLevelStatement(stmt, env, eventHandler)) {
+ try {
+ stmt.exec(env);
+ } catch (EvalException e) {
ok = false;
+ // Do not report errors caused by a previous parsing error, as it has already been
+ // reported.
+ if (e.isDueToIncompleteAST()) {
+ continue;
+ }
+ // When the exception is raised from another file, report first the location in the
+ // BUILD file (as it is the most probable cause for the error).
+ Location exnLoc = e.getLocation();
+ Location nodeLoc = stmt.getLocation();
+ eventHandler.handle(Event.error(
+ (exnLoc == null || !nodeLoc.getPath().equals(exnLoc.getPath())) ? nodeLoc : exnLoc,
+ e.getMessage()));
}
}
return ok;
}
- /**
- * Executes tol-level statement of this build file in a given Environment.
- *
- * <p>If, for any reason, execution of a statement cannot be completed, an {@link EvalException}
- * is thrown by {@link Statement#exec(Environment)}. This exception is caught here and reported
- * through reporter. In effect, there is a
- * "try/except" block around every top level statement. Such exceptions are not ignored, though:
- * they are visible via the return value. Rules declared in a package containing any error
- * (including loading-phase semantical errors that cannot be checked here) must also be considered
- * "in error".
- *
- * <p>Note that this method will not affect the value of {@link #containsErrors()}; that refers
- * only to lexer/parser errors.
- *
- * @return true if no error occurred during execution.
- */
-
- public boolean execTopLevelStatement(Statement stmt, Environment env,
- EventHandler eventHandler) throws InterruptedException {
- try {
- stmt.exec(env);
- return true;
- } catch (EvalException e) {
- // Do not report errors caused by a previous parsing error, as it has already been
- // reported.
- if (e.isDueToIncompleteAST()) {
- return false;
- }
- // When the exception is raised from another file, report first the location in the
- // BUILD file (as it is the most probable cause for the error).
- Location exnLoc = e.getLocation();
- Location nodeLoc = stmt.getLocation();
- eventHandler.handle(Event.error(
- (exnLoc == null || !nodeLoc.getPath().equals(exnLoc.getPath())) ? nodeLoc : exnLoc,
- e.getMessage()));
- return false;
- }
- }
-
@Override
public String toString() {
return "BuildFileAST" + getStatements();
@@ -373,20 +348,10 @@ public class BuildFileAST extends ASTNode {
@Nullable
public static Object eval(Environment env, String... input)
throws EvalException, InterruptedException {
- BuildFileAST ast = parseAndValidateSkylarkString(env, input);
- return ast.eval(env);
- }
-
- /**
- * Parses and validates the lines from input and return the the AST
- * In case of error during validation, it throws an EvalException.
- */
- public static BuildFileAST parseAndValidateSkylarkString(Environment env, String[] input)
- throws EvalException {
BuildFileAST ast = parseSkylarkString(env.getEventHandler(), input);
ValidationEnvironment valid = new ValidationEnvironment(env);
valid.validateAst(ast.getStatements());
- return ast;
+ return ast.eval(env);
}
/**