def op_jmp(engine): offset = engine.context.op_reader.read_int16() offset = engine.context.get_instruction_pointer() + offset - 3 if offset < 0 or offset > len(engine.context.code): return VMState.FAULT f_value = True if engine.op_code.value > ScriptOp.OP_JMP.value: if PushData.evaluation_stack_count(engine) < 1: return VMState.FAULT f_value = PushData.pop_bool(engine) print("pop_bool: ", f_value) if engine.op_code == ScriptOp.OP_JMPIFNOT: f_value = not f_value if f_value: engine.context.set_instruction_pointer(offset) print("fvalue: ", f_value) print("******get_instruction_pointer: ", engine.context.get_instruction_pointer()) return VMState.NONE
def op_bool_zip(engine): x2 = PushData.pop_bool(engine) x1 = PushData.pop_bool(engine) b = PushData.bool_zip(x2, x1, engine.op_code) PushData.push_data(engine, b) return VMState.NONE
def op_not(engine): x = PushData.pop_bool(engine) PushData.push_data(engine, not x) return VMState.NONE
def op_throw_if_not(engine): b = PushData.pop_bool(engine) if not b: return VMState.FAULT return VMState.NONE