aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Klaas Boesche <klaasb@google.com>2015-11-06 13:15:59 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-11-06 16:40:02 +0000
commit37349a05513f9277d4e0200b07cfe3623da2a35c (patch)
tree963fa2ed2da2d2f2aba00baa4b1cde45c00869b4 /src
parent0ec13b9f03417142ca63b9fe1eb85827d6308233 (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.java15
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));
+ }
}