diff options
author | 2015-10-28 12:42:09 +0000 | |
---|---|---|
committer | 2015-10-28 16:04:50 +0000 | |
commit | b655167905dfac773b09c3f53185d8269fb47077 (patch) | |
tree | ba9ebd8154a5e934abdd54fc8e27deeee3d3c1d6 /src/main/java/com | |
parent | 1ffbbdd10f48660f834fd29da80b730ff276af6a (diff) |
Skylark interpreter optimization
Special-case the return statement to avoid throwing an exception.
--
MOS_MIGRATED_REVID=106488391
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java index 88b5c4b3e6..df0c1977ab 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java @@ -73,7 +73,13 @@ public class UserDefinedFunction extends BaseFunction { try { for (Statement stmt : statements) { - stmt.exec(env); + if (stmt instanceof ReturnStatement) { + // Performance optimization. + // Executing the statement would throw an exception, which is slow. + return ((ReturnStatement) stmt).getReturnExpression().eval(env); + } else { + stmt.exec(env); + } } } catch (ReturnStatement.ReturnException e) { return e.getValue(); |