From ac5bc5ea0ec5191bd90a0acd2fd799846d8eddad Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sun, 15 Oct 2023 15:26:56 +0800 Subject: [PATCH] Update cJSONw.cpp --- 3rd/cjson/src/cJSONw.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/3rd/cjson/src/cJSONw.cpp b/3rd/cjson/src/cJSONw.cpp index af3bf6aa..ed2c28ad 100644 --- a/3rd/cjson/src/cJSONw.cpp +++ b/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 +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(_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(_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; }); }