1
0
blueloveTH 3 жил өмнө
parent
commit
57c8f9ede4
2 өөрчлөгдсөн 9 нэмэгдсэн , 15 устгасан
  1. 9 7
      src/pocketpy.h
  2. 0 8
      src/vm.h

+ 9 - 7
src/pocketpy.h

@@ -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]));                      \
     });
     });
     
     
 
 

+ 0 - 8
src/vm.h

@@ -686,14 +686,6 @@ public:
         bindFunc<ARGC>(builtins, funcName, fn);
         bindFunc<ARGC>(builtins, funcName, fn);
     }
     }
 
 
-    inline bool is_int_or_float(const PyVar& obj) const{
-        return obj->is_type(_tp_int) || obj->is_type(_tp_float);
-    }
-
-    inline bool is_int_or_float(const PyVar& obj1, const PyVar& obj2) const{
-        return is_int_or_float(obj1) && is_int_or_float(obj2);
-    }
-
     inline f64 num_to_float(const PyVar& obj){
     inline f64 num_to_float(const PyVar& obj){
         if (obj->is_type(_tp_int)){
         if (obj->is_type(_tp_int)){
             return (f64)PyInt_AS_C(obj);
             return (f64)PyInt_AS_C(obj);