blueloveTH 2 лет назад
Родитель
Сommit
ac5bc5ea0e
1 измененных файлов с 7 добавлено и 13 удалено
  1. 7 13
      3rd/cjson/src/cJSONw.cpp

+ 7 - 13
3rd/cjson/src/cJSONw.cpp

@@ -6,8 +6,8 @@ namespace pkpy{
 static cJSON* convert_python_object_to_cjson(PyObject* obj, VM* vm);
 static PyObject* convert_cjson_to_python_object(const cJSON * const item, VM* vm);
 
-
-static cJSON* convert_list_to_cjson(const List& list, VM* vm){
+template<typename T>
+static cJSON* convert_list_to_cjson(const T& list, VM* vm){
     cJSON *cjson_list = cJSON_CreateArray();
     for(auto& element : list){
         cJSON_AddItemToArray(cjson_list, convert_python_object_to_cjson(element, vm));
@@ -15,14 +15,6 @@ static cJSON* convert_list_to_cjson(const List& list, VM* vm){
     return cjson_list;
 }
 
-static cJSON* convert_tuple_to_cjson(const Tuple& tuple, VM* vm){
-    cJSON *cjson_list = cJSON_CreateArray();
-    for(auto& element : tuple){
-        cJSON_AddItemToArray(cjson_list, convert_python_object_to_cjson(element, vm));
-    }
-    return cjson_list;
-}
-
 static cJSON* covert_dict_to_cjson(const Dict& dict, VM* vm){
     cJSON *cjson_object = cJSON_CreateObject();
     dict.apply([&](PyObject* key, PyObject* val){
@@ -49,10 +41,10 @@ static cJSON* convert_python_object_to_cjson(PyObject* obj, VM* vm){
         return covert_dict_to_cjson(_CAST(Dict&, obj), vm);
     }
     else if (obj_t == vm->tp_list){
-        return convert_list_to_cjson(_CAST(List&, obj), vm);
+        return convert_list_to_cjson<List>(_CAST(List&, obj), vm);
     }
     else if(obj_t == vm->tp_tuple){
-        return convert_tuple_to_cjson(_CAST(Tuple&, obj), vm);
+        return convert_list_to_cjson<Tuple>(_CAST(Tuple&, obj), vm);
     }else if(obj == vm->None){
         return cJSON_CreateNull();
     }else{
@@ -136,7 +128,9 @@ void add_module_cjson(VM* vm){
         cJSON* cjson = convert_python_object_to_cjson(args[0], vm);
         char* str = cJSON_Print(cjson);
         cJSON_Delete(cjson);
-        return VAR(Str(str));
+        PyObject* ret = VAR((const char*)str);
+        hooks.free_fn(str);
+        return ret;
     });
 }