# HG changeset patch # User Thomas Wuerthinger # Date 1425037799 -3600 # Node ID 1ae2bbd0fc0785d4f3a56b52f648317997b9c1a2 # Parent 05e8c7567fab70b0702fd847c2310de04d12c810 Add a new ADD bytecode to the bytecode interpreter test. diff -r 05e8c7567fab -r 1ae2bbd0fc07 graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/BytecodeInterpreterPartialEvaluationTest.java --- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/BytecodeInterpreterPartialEvaluationTest.java Fri Feb 27 12:44:22 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/BytecodeInterpreterPartialEvaluationTest.java Fri Feb 27 12:49:59 2015 +0100 @@ -34,6 +34,7 @@ public static class Bytecode { public static final byte CONST = 0; public static final byte RETURN = 1; + public static final byte ADD = 2; } public static class Program extends RootNode { @@ -64,20 +65,27 @@ public Object execute(VirtualFrame frame) { int topOfStack = -1; int bci = 0; - - while (true) { - byte bc = bytecodes[bci]; - byte value = 0; - switch (bc) { - case Bytecode.CONST: - value = bytecodes[bci + 1]; - topOfStack = topOfStack + 1; - frame.setInt(stack[topOfStack], value); - bci = bci + 2; - break; - case Bytecode.RETURN: - return frame.getValue(stack[topOfStack]); + try { + while (true) { + byte bc = bytecodes[bci]; + byte value = 0; + switch (bc) { + case Bytecode.CONST: + value = bytecodes[bci + 1]; + topOfStack = topOfStack + 1; + frame.setInt(stack[topOfStack], value); + bci = bci + 2; + break; + case Bytecode.RETURN: + return frame.getInt(stack[topOfStack]); + case Bytecode.ADD: + frame.setInt(stack[topOfStack - 1], frame.getInt(stack[topOfStack]) + frame.getInt(stack[topOfStack - 1])); + bci = bci + 1; + break; + } } + } catch (FrameSlotTypeException e) { + throw new IllegalStateException("Program is invalid at bytecode index " + bci); } } } @@ -88,8 +96,13 @@ @Test public void simpleProgram() { - FrameDescriptor fd = new FrameDescriptor(); byte[] bytecodes = new byte[]{Bytecode.CONST, 42, Bytecode.RETURN}; assertPartialEvalEquals("constant42", new Program(bytecodes, 0, 2)); } + + @Test + public void simpleProgramWithAdd() { + byte[] bytecodes = new byte[]{Bytecode.CONST, 40, Bytecode.CONST, 2, Bytecode.ADD, Bytecode.RETURN}; + assertPartialEvalEquals("constant42", new Program(bytecodes, 0, 2)); + } }