Skip to content

Commit 72babe6

Browse files
author
Adam Hrbac
committed
fix extended arg and interpreter transfer handling
1 parent 14934e0 commit 72babe6

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys_settrace.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,59 @@
44
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backward_over_async_listcomp_v2
55
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backward_over_listcomp
66
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backward_over_listcomp_v2
7+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_into_try_except_block
8+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_into_try_finally_block
79
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_into_while_block
810
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_out_of_async_with_block
911
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_out_of_try_except_block
1012
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_out_of_try_finally_block
1113
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_backwards_out_of_with_block
1214
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_between_async_with_blocks
1315
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_between_except_blocks
16+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_between_except_blocks_2
1417
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_between_with_blocks
18+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_extended_args_for_iter
19+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_extended_args_unpack_ex_simple
20+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_extended_args_unpack_ex_tricky
1521
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forward_over_async_listcomp
1622
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forward_over_listcomp
23+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_into_try_except_block
24+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_into_try_finally_block
1725
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_into_while_block
1826
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_out_of_async_with_block
1927
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_out_of_try_except_block
2028
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_out_of_try_finally_block
2129
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_forwards_out_of_with_block
30+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_is_none_backwards
31+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_is_none_forwards
32+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_is_not_none_backwards
33+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_is_not_none_forwards
34+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_or_pop
2235
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_async_for_block_backwards
2336
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_async_for_block_forwards
2437
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_async_with_assignment
2538
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_async_with_block_within_for_block
2639
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_async_with_block_within_with_block
40+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_bare_except_block
2741
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_block_backwards
2842
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_block_forwards
2943
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_complex_nested_blocks
44+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_qualified_except_block
3045
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_with_assignment
3146
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_with_block_within_for_block
3247
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_out_of_with_block_within_with_block
3348
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_over_async_for_block_before_else
3449
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_over_break_in_try_finally_block
3550
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_over_for_block_before_else
3651
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_over_return_in_try_finally_block
52+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_over_try_except
3753
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_simple_backwards
3854
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_simple_forwards
3955
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_to_codeless_line
4056
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_to_firstlineno
4157
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_to_same_line
58+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_with_null_on_stack_load_global
59+
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_with_null_on_stack_push_null
4260
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_jump_within_except_block
4361
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_large_function
4462
*graalpython.lib-python.3.test.test_sys_settrace.JumpTestCase.test_no_jump_backwards_into_for_block

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/compiler/CodeUnit.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -631,10 +631,15 @@ public List<ArrayList<StackItem>> computeStackElems() {
631631
ArrayDeque<Integer> todo = new ArrayDeque<>();
632632
todo.addFirst(0);
633633
while (!todo.isEmpty()) {
634-
int i = todo.removeLast();
635-
assert blocks.get(i) != null : "Reached block without determining its stack state";
636-
opCodeAt(code, i, (bci, op, oparg, followingArgs) -> {
637-
ArrayList<StackItem> next = blocks.get(bci);
634+
int firstBci = todo.removeLast();
635+
assert blocks.get(firstBci) != null : "Reached block without determining its stack state";
636+
opCodeAt(code, firstBci, (bci, op, oparg, followingArgs) -> {
637+
// firstBci can be different from bci if EXTEND_ARG is used
638+
// the stack is kept both at firstBci and bci
639+
ArrayList<StackItem> next = blocks.get(firstBci);
640+
if (firstBci != bci) {
641+
blocks.set(bci, next);
642+
}
638643
for (int j = 0; j < exceptionHandlerRanges.length; j += 4) {
639644
int start = exceptionHandlerRanges[j];
640645
int handler = exceptionHandlerRanges[j + 2];

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/compiler/OpCodes.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -1003,6 +1003,9 @@ public int getNextBci(int bci, int oparg, boolean withJump) {
10031003
case RAISE_VARARGS:
10041004
case END_EXC_HANDLER:
10051005
return -1;
1006+
case EXTENDED_ARG:
1007+
assert false : "EXTENDED_ARG passed to getNextBci.";
1008+
return -1;
10061009
default:
10071010
return bci + length();
10081011
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode/PBytecodeRootNode.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,6 +1137,14 @@ public boolean isReturnCalled() {
11371137
return this.getTraceData().returnCalled;
11381138
}
11391139

1140+
public int getJumpBci() {
1141+
return this.getTraceData().jumpBci;
1142+
}
1143+
1144+
public void setJumpBci(int target) {
1145+
this.getTraceData().jumpBci = target;
1146+
}
1147+
11401148
public void setReturnCalled(boolean value) {
11411149
this.getTraceData().returnCalled = value;
11421150
}
@@ -1187,6 +1195,8 @@ private static final class InstrumentationData {
11871195
private boolean exceptionNotified;
11881196
private boolean returnCalled;
11891197

1198+
private int jumpBci;
1199+
11901200
private PythonContext.PythonThreadState threadState = null;
11911201
}
11921202

@@ -1302,7 +1312,7 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
13021312
// instructions. A jump can happen non-deterministically and thus break this
13031313
// assumption
13041314
CompilerDirectives.transferToInterpreterAndInvalidate();
1305-
bci = virtualFrame.getInt(bciSlot);
1315+
bci = mutableData.getJumpBci();
13061316
stackTop += stackDiff;
13071317
continue;
13081318
}
@@ -2946,7 +2956,7 @@ private int traceLine(VirtualFrame virtualFrame, MutableLoopData mutableData, by
29462956
throw PRaiseNode.getUncached().raise(ValueError, ErrorMessages.LINE_D_COMES_BEFORE_THE_CURRENT_CODE_BLOCK, pyFrame.getJumpDestLine());
29472957
} else {
29482958
ret = computeJumpStackDifference(bci, newBci);
2949-
setCurrentBci(virtualFrame, bcioffset, newBci);
2959+
mutableData.setJumpBci(newBci);
29502960
}
29512961
}
29522962
}

0 commit comments

Comments
 (0)