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
Example #4
0
 def op_throw_if_not(engine):
     b = PushData.pop_bool(engine)
     if not b:
         return VMState.FAULT
     return VMState.NONE