diff options
author | 2017-10-23 18:21:36 +0200 | |
---|---|---|
committer | 2017-10-23 18:42:47 +0200 | |
commit | 95429134d4aae813db008fb9073c98cf0bb7f5e2 (patch) | |
tree | cad63b382215e8f86bf55edb5221f7f91de9beb4 /src/main/java/com/google | |
parent | 0a82e703427bad76884396c171a4517e88474d69 (diff) |
Preserve `pass` statements in the Skylark AST.
RELNOTES: none
PiperOrigin-RevId: 173125138
Diffstat (limited to 'src/main/java/com/google')
5 files changed, 43 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Eval.java b/src/main/java/com/google/devtools/build/lib/syntax/Eval.java index 4842374765..9a1ed7a46c 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Eval.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Eval.java @@ -206,6 +206,8 @@ public class Eval { case LOAD: execLoad((LoadStatement) st); break; + case PASS: + break; case RETURN: execReturn((ReturnStatement) st); break; 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 e59f3295af..ac0902a1e2 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 @@ -1120,8 +1120,7 @@ public class Parser { // small_stmt | 'pass' private void parseSmallStatementOrPass(List<Statement> list) { if (token.kind == TokenKind.PASS) { - // Skip the token, don't add it to the list. - // It has no existence in the AST. + list.add(setLocation(new PassStatement(), token.left, token.right)); expect(TokenKind.PASS); } else { list.add(parseSmallStatement()); diff --git a/src/main/java/com/google/devtools/build/lib/syntax/PassStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/PassStatement.java new file mode 100644 index 0000000000..e0351002ef --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/syntax/PassStatement.java @@ -0,0 +1,37 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.syntax; + +import java.io.IOException; + +/** Syntax node for a `pass` statement. */ +public class PassStatement extends Statement { + + @Override + public void prettyPrint(Appendable buffer, int indentLevel) throws IOException { + printIndent(buffer, indentLevel); + buffer.append("pass\n"); + } + + @Override + public void accept(SyntaxTreeVisitor visitor) { + visitor.visit(this); + } + + @Override + public Kind kind() { + return Kind.PASS; + } +} diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Statement.java b/src/main/java/com/google/devtools/build/lib/syntax/Statement.java index 1f08bbb030..43363fc310 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Statement.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Statement.java @@ -33,6 +33,7 @@ public abstract class Statement extends ASTNode { FUNCTION_DEF, IF, LOAD, + PASS, RETURN, } diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java b/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java index c7c0eb0e53..22bc8b724b 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java @@ -141,6 +141,8 @@ public class SyntaxTreeVisitor { visitBlock(node.getStatements()); } + public void visit(PassStatement node) {} + public void visit(ReturnStatement node) { if (node.getReturnExpression() != null) { visit(node.getReturnExpression()); |