Update cJSONw.cpp

This commit is contained in:
blueloveTH 2023-10-15 15:26:56 +08:00
parent b3e77cdb51
commit ac5bc5ea0e

View File

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