diff options
author | 2015-11-06 13:15:59 +0000 | |
---|---|---|
committer | 2015-11-06 16:40:02 +0000 | |
commit | 37349a05513f9277d4e0200b07cfe3623da2a35c (patch) | |
tree | 963fa2ed2da2d2f2aba00baa4b1cde45c00869b4 /src | |
parent | 0ec13b9f03417142ca63b9fe1eb85827d6308233 (diff) |
Compile return statements to byte code
--
MOS_MIGRATED_REVID=107225692
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java index 3b8646879d..82c0c97ef7 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java @@ -13,7 +13,14 @@ // limitations under the License. package com.google.devtools.build.lib.syntax; +import com.google.common.base.Optional; import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.syntax.compiler.DebugInfo; +import com.google.devtools.build.lib.syntax.compiler.LoopLabels; +import com.google.devtools.build.lib.syntax.compiler.VariableScope; + +import net.bytebuddy.implementation.bytecode.ByteCodeAppender; +import net.bytebuddy.implementation.bytecode.member.MethodReturn; /** * A wrapper Statement class for return expressions. @@ -73,4 +80,12 @@ public class ReturnStatement extends Statement { } returnExpression.validate(env); } + + @Override + ByteCodeAppender compile( + VariableScope scope, Optional<LoopLabels> loopLabels, DebugInfo debugInfo) { + ByteCodeAppender compiledExpression = returnExpression.compile(scope, debugInfo); + return new ByteCodeAppender.Compound( + compiledExpression, new ByteCodeAppender.Simple(MethodReturn.REFERENCE)); + } } |