def arithmetic_op(vm, func, arity): if len(vm.stack) < arity: raise Exception("Not enought arguments") args = [cast_to_number(vm.stack.pop()) for _ in range(arity)] result = func(*reversed(args)) vm.stack.append(valtype_from_number(result))
def op_depth(vm, instr): vm.stack.append(valtype_from_number(len(vm.stack)))
def push_bignum_instruction(bn): return push_data_instruction(valtype_from_number(bn))
def op_size(vm, instr): if len(vm.stack) < 1: raise Exception("OP_SIZE: Not enought arguments") vm.stack.append(valtype_from_number(len(vm.stack[-1])))
def op_1negate(vm, instr): vm.stack.append(valtype_from_number(-1))
def op_push_1_16(vm, instr): vm.stack.append(valtype_from_number(instr.opcode - (OP_1 - 1)))
def op_push_0(vm, instr): vm.stack.append(valtype_from_number(0)) # changed from ""