diff --git a/include/pocketpy/pocketpy.h b/include/pocketpy/pocketpy.h index a90ad65e..d7e04ed9 100644 --- a/include/pocketpy/pocketpy.h +++ b/include/pocketpy/pocketpy.h @@ -251,8 +251,6 @@ PK_API py_Name py_namev(c11_sv); /// Convert a name to a `c11_sv`. PK_API c11_sv py_name2sv(py_Name); -#define py_ismagicname(name) (true) - /************* Meta Operations *************/ /// Create a new type. @@ -612,12 +610,18 @@ PK_API int py_equal(py_Ref lhs, py_Ref rhs) PY_RAISE; /// 1: lhs < rhs, 0: lhs >= rhs, -1: error PK_API int py_less(py_Ref lhs, py_Ref rhs) PY_RAISE; -#define py_eq(lhs, rhs) py_binaryop(lhs, rhs, __eq__, __eq__) -#define py_ne(lhs, rhs) py_binaryop(lhs, rhs, __ne__, __ne__) -#define py_lt(lhs, rhs) py_binaryop(lhs, rhs, __lt__, __gt__) -#define py_le(lhs, rhs) py_binaryop(lhs, rhs, __le__, __ge__) -#define py_gt(lhs, rhs) py_binaryop(lhs, rhs, __gt__, __lt__) -#define py_ge(lhs, rhs) py_binaryop(lhs, rhs, __ge__, __le__) +/// lhs == rhs +PK_API bool py_eq(py_Ref lhs, py_Ref rhs) PY_RAISE PY_RETURN; +/// lhs != rhs +PK_API bool py_ne(py_Ref lhs, py_Ref rhs) PY_RAISE PY_RETURN; +/// lhs < rhs +PK_API bool py_lt(py_Ref lhs, py_Ref rhs) PY_RAISE PY_RETURN; +/// lhs <= rhs +PK_API bool py_le(py_Ref lhs, py_Ref rhs) PY_RAISE PY_RETURN; +/// lhs > rhs +PK_API bool py_gt(py_Ref lhs, py_Ref rhs) PY_RAISE PY_RETURN; +/// lhs >= rhs +PK_API bool py_ge(py_Ref lhs, py_Ref rhs) PY_RAISE PY_RETURN; /// Python equivalent to `callable(val)`. PK_API bool py_callable(py_Ref val); diff --git a/src/interpreter/ceval.c b/src/interpreter/ceval.c index af09c1f9..4f1ad49e 100644 --- a/src/interpreter/ceval.c +++ b/src/interpreter/ceval.c @@ -602,32 +602,32 @@ FrameResult VM__run_top_frame(VM* self) { DISPATCH(); } /*****************************/ -#define CASE_BINARY_OP(label, op, rop)\ - case label: {\ - if(!pk_stack_binaryop(self, op, rop)) goto __ERROR;\ - POP();\ - *TOP() = self->last_retval;\ - DISPATCH();\ - } - CASE_BINARY_OP(OP_BINARY_ADD, __add__, __radd__) - CASE_BINARY_OP(OP_BINARY_SUB, __sub__, __rsub__) - CASE_BINARY_OP(OP_BINARY_MUL, __mul__, __rmul__) - CASE_BINARY_OP(OP_BINARY_TRUEDIV, __truediv__, __rtruediv__) - CASE_BINARY_OP(OP_BINARY_FLOORDIV, __floordiv__, __rfloordiv__) - CASE_BINARY_OP(OP_BINARY_MOD, __mod__, __rmod__) - CASE_BINARY_OP(OP_BINARY_POW, __pow__, __rpow__) - CASE_BINARY_OP(OP_BINARY_LSHIFT, __lshift__, 0) - CASE_BINARY_OP(OP_BINARY_RSHIFT, __rshift__, 0) - CASE_BINARY_OP(OP_BINARY_AND, __and__, 0) - CASE_BINARY_OP(OP_BINARY_OR, __or__, 0) - CASE_BINARY_OP(OP_BINARY_XOR, __xor__, 0) - CASE_BINARY_OP(OP_BINARY_MATMUL, __matmul__, 0) - CASE_BINARY_OP(OP_COMPARE_LT, __lt__, __gt__) - CASE_BINARY_OP(OP_COMPARE_LE, __le__, __ge__) - CASE_BINARY_OP(OP_COMPARE_EQ, __eq__, __eq__) - CASE_BINARY_OP(OP_COMPARE_NE, __ne__, __ne__) - CASE_BINARY_OP(OP_COMPARE_GT, __gt__, __lt__) - CASE_BINARY_OP(OP_COMPARE_GE, __ge__, __le__) +#define CASE_BINARY_OP(label, op, rop) \ + case label: { \ + if(!pk_stack_binaryop(self, op, rop)) goto __ERROR; \ + POP(); \ + *TOP() = self->last_retval; \ + DISPATCH(); \ + } + CASE_BINARY_OP(OP_BINARY_ADD, __add__, __radd__) + CASE_BINARY_OP(OP_BINARY_SUB, __sub__, __rsub__) + CASE_BINARY_OP(OP_BINARY_MUL, __mul__, __rmul__) + CASE_BINARY_OP(OP_BINARY_TRUEDIV, __truediv__, __rtruediv__) + CASE_BINARY_OP(OP_BINARY_FLOORDIV, __floordiv__, __rfloordiv__) + CASE_BINARY_OP(OP_BINARY_MOD, __mod__, __rmod__) + CASE_BINARY_OP(OP_BINARY_POW, __pow__, __rpow__) + CASE_BINARY_OP(OP_BINARY_LSHIFT, __lshift__, 0) + CASE_BINARY_OP(OP_BINARY_RSHIFT, __rshift__, 0) + CASE_BINARY_OP(OP_BINARY_AND, __and__, 0) + CASE_BINARY_OP(OP_BINARY_OR, __or__, 0) + CASE_BINARY_OP(OP_BINARY_XOR, __xor__, 0) + CASE_BINARY_OP(OP_BINARY_MATMUL, __matmul__, 0) + CASE_BINARY_OP(OP_COMPARE_LT, __lt__, __gt__) + CASE_BINARY_OP(OP_COMPARE_LE, __le__, __ge__) + CASE_BINARY_OP(OP_COMPARE_EQ, __eq__, __eq__) + CASE_BINARY_OP(OP_COMPARE_NE, __ne__, __ne__) + CASE_BINARY_OP(OP_COMPARE_GT, __gt__, __lt__) + CASE_BINARY_OP(OP_COMPARE_GE, __ge__, __le__) #undef CASE_BINARY_OP case OP_IS_OP: { bool res = py_isidentical(SECOND(), TOP()); @@ -1319,17 +1319,11 @@ bool py_binaryop(py_Ref lhs, py_Ref rhs, py_Name op, py_Name rop) { return ok; } -bool py_binaryadd(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __add__, __radd__); -} +bool py_binaryadd(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __add__, __radd__); } -bool py_binarysub(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __sub__, __rsub__); -} +bool py_binarysub(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __sub__, __rsub__); } -bool py_binarymul(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __mul__, __rmul__); -} +bool py_binarymul(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __mul__, __rmul__); } bool py_binarytruediv(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __truediv__, __rtruediv__); @@ -1339,37 +1333,33 @@ bool py_binaryfloordiv(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __floordiv__, __rfloordiv__); } -bool py_binarymod(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __mod__, __rmod__); -} +bool py_binarymod(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __mod__, __rmod__); } -bool py_binarypow(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __pow__, __rpow__); -} +bool py_binarypow(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __pow__, __rpow__); } -bool py_binarylshift(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __lshift__, 0); -} +bool py_binarylshift(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __lshift__, 0); } -bool py_binaryrshift(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __rshift__, 0); -} +bool py_binaryrshift(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __rshift__, 0); } -bool py_binaryand(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __and__, 0); -} +bool py_binaryand(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __and__, 0); } -bool py_binaryor(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __or__, 0); -} +bool py_binaryor(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __or__, 0); } -bool py_binaryxor(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __xor__, 0); -} +bool py_binaryxor(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __xor__, 0); } -bool py_binarymatmul(py_Ref lhs, py_Ref rhs) { - return py_binaryop(lhs, rhs, __matmul__, 0); -} +bool py_binarymatmul(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __matmul__, 0); } + +bool py_eq(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __eq__, __eq__); } + +bool py_ne(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __ne__, __ne__); } + +bool py_lt(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __lt__, __gt__); } + +bool py_le(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __le__, __ge__); } + +bool py_gt(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __gt__, __lt__); } + +bool py_ge(py_Ref lhs, py_Ref rhs) { return py_binaryop(lhs, rhs, __ge__, __le__); } static bool stack_format_object(VM* self, c11_sv spec) { // format TOS via `spec` inplace diff --git a/src/public/internal.c b/src/public/internal.c index 8017762e..d27e6db7 100644 --- a/src/public/internal.c +++ b/src/public/internal.c @@ -233,7 +233,7 @@ bool pk_loadmethod(py_StackRef self, py_Name name) { } py_Ref py_tpfindmagic(py_Type t, py_Name name) { - assert(py_ismagicname(name)); + // assert(py_ismagicname(name)); return py_tpfindname(t, name); } @@ -260,7 +260,7 @@ py_Type py_tpbase(py_Type t) { } PK_DEPRECATED py_Ref py_tpgetmagic(py_Type type, py_Name name) { - assert(py_ismagicname(name)); + // assert(py_ismagicname(name)); py_TypeInfo* ti = pk__type_info(type); py_Ref retval = py_getdict(&ti->self, name); return retval != NULL ? retval : py_NIL(); @@ -283,7 +283,7 @@ bool py_tpcall(py_Type type, int argc, py_Ref argv) { bool pk_callmagic(py_Name name, int argc, py_Ref argv) { assert(argc >= 1); - assert(py_ismagicname(name)); + // assert(py_ismagicname(name)); py_Ref tmp = py_tpfindmagic(argv->type, name); if(!tmp) return AttributeError(argv, name); return py_call(tmp, argc, argv);