blueloveTH 1 год назад
Родитель
Сommit
2d9a06a3fc
3 измененных файлов с 9 добавлено и 9 удалено
  1. 7 3
      include/pocketpy/pocketpy.h
  2. 1 5
      src/common/strname.c
  3. 1 1
      src/compiler/compiler.c

+ 7 - 3
include/pocketpy/pocketpy.h

@@ -326,9 +326,13 @@ bool py_checktype(const py_Ref self, py_Type type);
 /// %t: py_Type
 /// %n: py_Name
 
-#define MAGIC_METHOD(x) extern uint16_t x;
-#include "pocketpy/xmacros/magics.h"
-#undef MAGIC_METHOD
+
+enum py_MagicMethods{
+    py_MagicMethods__NULL,  // 0 is reserved
+    #define MAGIC_METHOD(x) x,
+    #include "pocketpy/xmacros/magics.h"
+    #undef MAGIC_METHOD
+};
 
 enum py_PredefinedTypes{
     tp_object = 1, tp_type,

+ 1 - 5
src/common/strname.c

@@ -20,7 +20,7 @@ void pk_StrName__initialize() {
     c11_vector__ctor(&_r_interned, sizeof(c11_sv));
     _initialized = true;
 
-#define MAGIC_METHOD(x) x = pk_StrName__map(#x);
+#define MAGIC_METHOD(x) assert(x == py_name(#x));
 #include "pocketpy/xmacros/magics.h"
 #undef MAGIC_METHOD
 
@@ -94,10 +94,6 @@ bool py_ismagicname(py_Name name){
 }
 
 ///////////////////////////////////
-#define MAGIC_METHOD(x) uint16_t x;
-#include "pocketpy/xmacros/magics.h"
-#undef MAGIC_METHOD
-
 uint16_t pk_id_add;
 uint16_t pk_id_set;
 uint16_t pk_id_long;

+ 1 - 1
src/compiler/compiler.c

@@ -849,7 +849,7 @@ static void BinaryExpr__dtor(Expr* self_) {
     vtdelete(self->rhs);
 }
 
-static Opcode cmp_token2name(TokenIndex token) {
+static py_Name cmp_token2name(TokenIndex token) {
     switch(token) {
         case TK_LT: return __lt__;
         case TK_LE: return __le__;