output.append(1)
output.append(2)
+ @jump_test(1, 4, [5])
+ def test_jump_is_none_forwards(output):
+ x = None
+ if x is None:
+ output.append(3)
+ else:
+ output.append(5)
+
+ @jump_test(6, 5, [3, 5, 6])
+ def test_jump_is_none_backwards(output):
+ x = None
+ if x is None:
+ output.append(3)
+ else:
+ output.append(5)
+ output.append(6)
+
+ @jump_test(1, 4, [5])
+ def test_jump_is_not_none_forwards(output):
+ x = None
+ if x is not None:
+ output.append(3)
+ else:
+ output.append(5)
+
+ @jump_test(6, 5, [5, 5, 6])
+ def test_jump_is_not_none_backwards(output):
+ x = None
+ if x is not None:
+ output.append(3)
+ else:
+ output.append(5)
+ output.append(6)
+
@jump_test(3, 5, [2, 5])
def test_jump_out_of_block_forwards(output):
for i in 1, 2:
case POP_JUMP_BACKWARD_IF_FALSE:
case POP_JUMP_FORWARD_IF_TRUE:
case POP_JUMP_BACKWARD_IF_TRUE:
+ case POP_JUMP_FORWARD_IF_NONE:
+ case POP_JUMP_BACKWARD_IF_NONE:
+ case POP_JUMP_FORWARD_IF_NOT_NONE:
+ case POP_JUMP_BACKWARD_IF_NOT_NONE:
{
int64_t target_stack;
int j = get_arg(code, i);
if (opcode == POP_JUMP_FORWARD_IF_FALSE ||
opcode == POP_JUMP_FORWARD_IF_TRUE ||
opcode == JUMP_IF_FALSE_OR_POP ||
- opcode == JUMP_IF_TRUE_OR_POP)
+ opcode == JUMP_IF_TRUE_OR_POP ||
+ opcode == POP_JUMP_FORWARD_IF_NONE ||
+ opcode == POP_JUMP_FORWARD_IF_NOT_NONE)
{
j += i + 1;
}
else {
assert(opcode == POP_JUMP_BACKWARD_IF_FALSE ||
- opcode == POP_JUMP_BACKWARD_IF_TRUE);
+ opcode == POP_JUMP_BACKWARD_IF_TRUE ||
+ opcode == POP_JUMP_BACKWARD_IF_NONE ||
+ opcode == POP_JUMP_BACKWARD_IF_NOT_NONE);
j = i + 1 - j;
}
assert(j < len);