Explorar o código

some refactor

blueloveTH hai 8 meses
pai
achega
25cbd9c1f1
Modificáronse 3 ficheiros con 64 adicións e 70 borrados
  1. 12 8
      include/pocketpy/pocketpy.h
  2. 49 59
      src/interpreter/ceval.c
  3. 3 3
      src/public/internal.c

+ 12 - 8
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);

+ 49 - 59
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

+ 3 - 3
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);