blueloveTH 2 лет назад
Родитель
Сommit
068abe347f

+ 1 - 1
3rd/lua_bridge/src/lua_bridge.cpp

@@ -172,7 +172,7 @@ struct PyLuaTable: PyLuaObject{
                 lua_rawgeti(_L, LUA_REGISTRYINDEX, self.r);
                 List ret;
                 table_apply(vm, [&](PyObject* key, PyObject* val){
-                    PyObject* item = VAR(Tuple({key, val}));
+                    PyObject* item = VAR(Tuple(key, val));
                     ret.push_back(item);
                 });
                 lua_pop(_L, 1);

+ 0 - 1
include/pocketpy/common.h

@@ -13,7 +13,6 @@
 #include <map>
 #include <set>
 #include <algorithm>
-#include <initializer_list>
 #include <variant>
 #include <type_traits>
 #include <random>

+ 3 - 1
include/pocketpy/tuplelist.h

@@ -15,12 +15,14 @@ struct Tuple {
     int _size;
 
     Tuple(int n);
-    Tuple(std::initializer_list<PyObject*> list);
     Tuple(const Tuple& other);
     Tuple(Tuple&& other) noexcept;
     Tuple(List&& other) noexcept;
     ~Tuple();
 
+    Tuple(PyObject*, PyObject*);
+    Tuple(PyObject*, PyObject*, PyObject*);
+
     bool is_inlined() const { return _args == _inlined; }
     PyObject*& operator[](int i){ return _args[i]; }
     PyObject* operator[](int i) const { return _args[i]; }

+ 1 - 1
src/modules.cpp

@@ -205,7 +205,7 @@ void add_module_math(VM* vm){
     vm->bind_func<1>(mod, "modf", [](VM* vm, ArgsView args) {
         f64 i;
         f64 f = std::modf(CAST_F(args[0]), &i);
-        return VAR(Tuple({VAR(f), VAR(i)}));
+        return VAR(Tuple(VAR(f), VAR(i)));
     });
 
     vm->bind_func<1>(mod, "factorial", [](VM* vm, ArgsView args) {

+ 3 - 3
src/pocketpy.cpp

@@ -164,7 +164,7 @@ void init_builtins(VM* _vm) {
             i64 rhs = CAST(i64, args[1]);
             if(rhs == 0) vm->ZeroDivisionError();
             auto res = std::div(lhs, rhs);
-            return VAR(Tuple({VAR(res.quot), VAR(res.rem)}));
+            return VAR(Tuple(VAR(res.quot), VAR(res.rem)));
         }else{
             return vm->call_method(args[0], __divmod__, args[1]);
         }
@@ -1056,7 +1056,7 @@ void init_builtins(VM* _vm) {
         MappingProxy& self = _CAST(MappingProxy&, args[0]);
         List items;
         for(auto& item : self.attr().items()){
-            PyObject* t = VAR(Tuple({VAR(item.first.sv()), item.second}));
+            PyObject* t = VAR(Tuple(VAR(item.first.sv()), item.second));
             items.push_back(std::move(t));
         }
         return VAR(std::move(items));
@@ -1216,7 +1216,7 @@ void init_builtins(VM* _vm) {
         Tuple items(self.size());
         int j = 0;
         self.apply([&](PyObject* k, PyObject* v){
-            items[j++] = VAR(Tuple({k, v}));
+            items[j++] = VAR(Tuple(k, v));
         });
         return VAR(std::move(items));
     });

+ 9 - 3
src/tuplelist.cpp

@@ -33,9 +33,15 @@ Tuple::Tuple(List&& other) noexcept {
     other._data = nullptr;
 }
 
-Tuple::Tuple(std::initializer_list<PyObject*> list): Tuple(list.size()){
-    int i = 0;
-    for(PyObject* obj: list) _args[i++] = obj;
+Tuple::Tuple(PyObject* _0, PyObject* _1): Tuple(2){
+    _args[0] = _0;
+    _args[1] = _1;
+}
+
+Tuple::Tuple(PyObject* _0, PyObject* _1, PyObject* _2): Tuple(3){
+    _args[0] = _0;
+    _args[1] = _1;
+    _args[2] = _2;
 }
 
 Tuple::~Tuple(){ if(!is_inlined()) pool64_dealloc(_args); }