Skip to content

Commit 0ef8956

Browse files
drognanarlexicalscope
authored andcommittedJun 8, 2015
Improves termination logic
Termination instruction no longer throws exceptions Conflicts: svm-jinstruction/src/main/java/com/lexicalscope/svm/j/instruction/StateAssertion.java svm-jinstruction/src/main/java/com/lexicalscope/svm/j/instruction/concrete/exceptions/AThrowOp.java svm-partition-trace-symb/src/main/java/com/lexicalscope/svm/search2/TreeSearch.java svm-vm/src/main/java/com/lexicalscope/svm/vm/VmImpl.java
1 parent 2afee47 commit 0ef8956

File tree

9 files changed

+32
-8
lines changed

9 files changed

+32
-8
lines changed
 

‎svm-jcore/src/main/java/com/lexicalscope/svm/vm/j/JState.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public interface JState extends Snapshotable<JState>, VmState {
2020
StackFrame previousFrame();
2121
StackFrame currentFrame();
2222

23-
void complete();
23+
void terminate();
2424

2525
void advanceToNextInstruction();
2626
void advanceTo(Instruction instruction);

‎svm-jcore/src/main/java/com/lexicalscope/svm/vm/j/JStateAdaptor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ public StackFrame currentFrame() {
5454
}
5555

5656
@Override
57-
public void complete() {
57+
public void terminate() {
58+
delegate.terminate();
5859
}
5960

6061
@Override

‎svm-jcore/src/main/java/com/lexicalscope/svm/vm/j/JStateImpl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,8 @@ public StackFrame previousFrame() {
276276
}
277277

278278
@Override
279-
public void complete() {
279+
public void terminate() {
280+
search.reachedLeaf();
280281
heap = null;
281282
statics = null;
282283
}

‎svm-jinstruction/src/main/java/com/lexicalscope/svm/j/instruction/TerminateInstruction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class TerminateInstruction implements Instruction {
2222
@Override public void eval(final JState ctx) {
2323
// TODO[tim]: demeter
2424
ctx.setMeta(TerminationMetaKey.TERMINATION, true);
25-
throw new TerminationException();
25+
ctx.terminate();
2626
}
2727

2828
@Override public Collection<Instruction> targetOf() {

‎svm-jinstruction/src/main/java/com/lexicalscope/svm/j/instruction/concrete/method/MethodCallInstruction.java

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import com.lexicalscope.svm.heap.ObjectRef;
66
import com.lexicalscope.svm.j.instruction.MethodCallVop;
7+
import com.lexicalscope.svm.j.instruction.StateAssertion;
78
import com.lexicalscope.svm.j.instruction.concrete.klass.LoadingOp;
89
import com.lexicalscope.svm.j.instruction.factory.InstructionSource;
910
import com.lexicalscope.svm.stack.MethodScope;
@@ -108,6 +109,7 @@ private int argSize(final SMethodDescriptor targetMethod) {
108109
}
109110

110111
private static Resolution resolveVirtualMethod(final Object[] args, final SMethodDescriptor sMethodName, final JState ctx) {
112+
StateAssertion.assertState(ctx, args[0] != ctx.nullPointer(), "Cannot be null");
111113
final MethodResolver receiverKlass = receiver(args, sMethodName, ctx);
112114
return new Resolution(receiverKlass.virtualMethod(sMethodName));
113115
}

‎svm-partition-trace-symb/src/main/java/com/lexicalscope/svm/search2/TreeSearch.java

-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ public void selectAnotherTree(final List<TraceTree> withStatesAvailable) {
9090
}
9191

9292
@Override public void reachedLeaf() {
93-
pendingJState.complete();
9493
observer.leaf(pendingJState);
9594
results.add(pendingJState);
9695

‎svm-partition-trace-symb/src/test/java/com/lexicalscope/svm/partition/trace/symb/search/FakeVmState.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public FakeVmState(final String string) {
6363
}
6464

6565
@Override
66-
public void complete() {
66+
public void terminate() {
6767

6868
}
6969

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
package com.lexicalscope.svm.vm;
22

33

4-
public class TerminationException extends RuntimeException {}
4+
public class TerminationException extends RuntimeException {
5+
@Override
6+
public synchronized Throwable fillInStackTrace() {
7+
return null;
8+
}
9+
}

‎svm-vm/src/test/java/com/lexicalscope/svm/vm/TestVmImpl.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.lexicalscope.svm.vm;
22

3+
import org.hamcrest.Description;
34
import org.jmock.Expectations;
45
import org.jmock.Sequence;
6+
import org.jmock.api.Action;
7+
import org.jmock.api.Invocation;
58
import org.jmock.auto.Auto;
69
import org.jmock.auto.Mock;
710
import org.jmock.integration.junit4.JUnitRuleMockery;
@@ -19,6 +22,19 @@ public class TestVmImpl {
1922
@Mock protected VmState state0;
2023
@Mock protected VmState stateR;
2124

25+
private final Action callTermination = new Action() {
26+
@Override
27+
public Object invoke(Invocation invocation) throws Throwable {
28+
search.reachedLeaf();
29+
return null;
30+
}
31+
32+
@Override
33+
public void describeTo(Description description) {
34+
35+
}
36+
};
37+
2238
@Test public void pendingStatesAreEvaluatedWhileAvailable() {
2339
context.checking(new Expectations(){{
2440
oneOf(limits).reset(); inSequence(limitsOrder);
@@ -38,7 +54,7 @@ public class TestVmImpl {
3854
oneOf(limits).reset(); inSequence(limitsOrder);
3955
oneOf(search).pendingState(); will(returnValue(state0));
4056
oneOf(limits).withinLimits(); will(returnValue(true)); inSequence(limitsOrder);
41-
oneOf(state0).eval(); will(throwException(new TerminationException()));
57+
oneOf(state0).eval(); will(callTermination);
4258
oneOf(search).reachedLeaf();
4359
oneOf(limits).searchedState(); inSequence(limitsOrder);
4460
oneOf(search).pendingState(); will(returnValue(null));

0 commit comments

Comments
 (0)
Please sign in to comment.