|
@@ -16,21 +16,23 @@ _Code VM::compile(_Str source, _Str filename, CompileMode mode) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#define BIND_NUM_ARITH_OPT(name, op) \
|
|
#define BIND_NUM_ARITH_OPT(name, op) \
|
|
|
- _vm->bindMethodMulti<1>({"int","float"}, #name, [](VM* vm, const pkpy::ArgList& args){ \
|
|
|
|
|
- if(args[0]->is_type(vm->_tp_int) && args[1]->is_type(vm->_tp_int)){ \
|
|
|
|
|
- return vm->PyInt(vm->PyInt_AS_C(args[0]) op vm->PyInt_AS_C(args[1])); \
|
|
|
|
|
|
|
+ _vm->bindMethodMulti<1>({"int","float"}, #name, [](VM* vm, const pkpy::ArgList& args){ \
|
|
|
|
|
+ if(args[0]->is_type(vm->_tp_int) && args[1]->is_type(vm->_tp_int)){ \
|
|
|
|
|
+ return vm->PyInt(vm->PyInt_AS_C(args[0]) op vm->PyInt_AS_C(args[1])); \
|
|
|
}else{ \
|
|
}else{ \
|
|
|
- return vm->PyFloat(vm->num_to_float(args[0]) op vm->num_to_float(args[1])); \
|
|
|
|
|
|
|
+ return vm->PyFloat(vm->num_to_float(args[0]) op vm->num_to_float(args[1])); \
|
|
|
} \
|
|
} \
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
#define BIND_NUM_LOGICAL_OPT(name, op, is_eq) \
|
|
#define BIND_NUM_LOGICAL_OPT(name, op, is_eq) \
|
|
|
- _vm->bindMethodMulti<1>({"int","float"}, #name, [](VM* vm, const pkpy::ArgList& args){ \
|
|
|
|
|
- if(!vm->is_int_or_float(args[0], args[1])){ \
|
|
|
|
|
|
|
+ _vm->bindMethodMulti<1>({"int","float"}, #name, [](VM* vm, const pkpy::ArgList& args){ \
|
|
|
|
|
+ bool _0 = args[0]->is_type(vm->_tp_int) || args[0]->is_type(vm->_tp_float); \
|
|
|
|
|
+ bool _1 = args[1]->is_type(vm->_tp_int) || args[1]->is_type(vm->_tp_float); \
|
|
|
|
|
+ if(!_0 || !_1){ \
|
|
|
if constexpr(is_eq) return vm->PyBool(args[0] == args[1]); \
|
|
if constexpr(is_eq) return vm->PyBool(args[0] == args[1]); \
|
|
|
vm->typeError("unsupported operand type(s) for " #op ); \
|
|
vm->typeError("unsupported operand type(s) for " #op ); \
|
|
|
} \
|
|
} \
|
|
|
- return vm->PyBool(vm->num_to_float(args[0]) op vm->num_to_float(args[1])); \
|
|
|
|
|
|
|
+ return vm->PyBool(vm->num_to_float(args[0]) op vm->num_to_float(args[1])); \
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
|