diff --git a/vlib/json/json_primitives.v b/vlib/json/json_primitives.v index 9d83eb15cd..9aad77306f 100644 --- a/vlib/json/json_primitives.v +++ b/vlib/json/json_primitives.v @@ -11,9 +11,23 @@ module json struct C.cJSON { valueint int valuedouble f32 - valuestring byteptr + valuestring charptr } +fn C.cJSON_IsTrue(&C.cJSON) bool + +fn C.cJSON_CreateNumber(int) &C.cJSON + +fn C.cJSON_CreateBool(bool) &C.cJSON + +fn C.cJSON_CreateString(charptr) &C.cJSON + +fn C.cJSON_Parse(charptr) &C.cJSON + +fn C.cJSON_PrintUnformatted(&C.cJSON) charptr + +fn C.cJSON_Print(&C.cJSON) charptr + pub fn decode(typ voidptr, s string) ?voidptr { // compiler implementation return 0 @@ -108,23 +122,9 @@ fn decode_string(root &C.cJSON) string { } // println('decode string valuestring="$root.valuestring"') // return tos(root.valuestring, _strlen(root.valuestring)) - return unsafe { tos_clone(root.valuestring) } // , _strlen(root.valuestring)) + return unsafe { tos_clone(byteptr(root.valuestring)) } // , _strlen(root.valuestring)) } -fn C.cJSON_IsTrue(voidptr) bool - -fn C.cJSON_CreateNumber(int) &C.cJSON - -fn C.cJSON_CreateBool(bool) &C.cJSON - -fn C.cJSON_CreateString(charptr) &C.cJSON - -fn C.cJSON_Parse(charptr) &C.cJSON - -fn C.cJSON_PrintUnformatted(voidptr) byteptr - -fn C.cJSON_Print(voidptr) byteptr - fn decode_bool(root &C.cJSON) bool { if isnil(root) { return false @@ -178,24 +178,24 @@ fn encode_bool(val bool) &C.cJSON { } fn encode_string(val string) &C.cJSON { - return C.cJSON_CreateString(val.str) + return C.cJSON_CreateString(charptr(val.str)) } // /////////////////////// // user := decode_User(json_parse(js_string_var)) fn json_parse(s string) &C.cJSON { - return C.cJSON_Parse(s.str) + return C.cJSON_Parse(charptr(s.str)) } // json_string := json_print(encode_User(user)) fn json_print(json &C.cJSON) string { s := C.cJSON_PrintUnformatted(json) - return unsafe { tos(s, C.strlen(s)) } + return unsafe { tos(byteptr(s), C.strlen(s)) } } fn json_print_pretty(json &C.cJSON) string { s := C.cJSON_Print(json) - return unsafe { tos(s, C.strlen(s)) } + return unsafe { tos(byteptr(s), C.strlen(s)) } } // / cjson wrappers diff --git a/vlib/v/gen/c/json.v b/vlib/v/gen/c/json.v index 0d3053656a..018cb373e5 100644 --- a/vlib/v/gen/c/json.v +++ b/vlib/v/gen/c/json.v @@ -50,7 +50,7 @@ $dec_fn_dec { if (error_ptr != NULL) { // fprintf(stderr, "Error in decode() for $styp error_ptr=: %s\\n", error_ptr); // printf("\\nbad js=%%s\\n", js.str); - return (Option_$styp){.state = 2,.err = v_error(tos2(error_ptr))}; + return (Option_$styp){.state = 2,.err = v_error(tos2((byteptr)error_ptr))}; } } ') @@ -211,10 +211,10 @@ fn (mut g Gen) decode_array(value_type table.Type) string { fn_name := js_dec_name(styp) mut s := '' if is_js_prim(styp) { - s = '$styp val = ${fn_name}(jsval); ' + s = '$styp val = ${fn_name}((cJSON *)jsval); ' } else { s = ' - Option_$styp val2 = $fn_name (jsval); + Option_$styp val2 = $fn_name ((cJSON *)jsval); if(val2.state != 0) { array_free(&res); return *(Option_Array_$styp*)&val2; @@ -224,7 +224,7 @@ fn (mut g Gen) decode_array(value_type table.Type) string { } return ' if(root && !cJSON_IsArray(root) && !cJSON_IsNull(root)) { - return (Option_Array_$styp){.state = 2, .err = v_error(string_add(_SLIT("Json element is not an array: "), tos2(cJSON_PrintUnformatted(root))))}; + return (Option_Array_$styp){.state = 2, .err = v_error(string_add(_SLIT("Json element is not an array: "), tos2((byteptr)cJSON_PrintUnformatted(root))))}; } res = __new_array(0, 0, sizeof($styp)); const cJSON *jsval = NULL; @@ -268,14 +268,14 @@ fn (mut g Gen) decode_map(key_type table.Type, value_type table.Type) string { } return ' if(!cJSON_IsObject(root) && !cJSON_IsNull(root)) { - return (Option_Map_${styp}_$styp_v){ .state = 2, .err = v_error( string_add(_SLIT("Json element is not an object: "), tos2(cJSON_PrintUnformatted(root))) )}; + return (Option_Map_${styp}_$styp_v){ .state = 2, .err = v_error( string_add(_SLIT("Json element is not an object: "), tos2((byteptr)cJSON_PrintUnformatted(root))) )}; } res = new_map_2(sizeof($styp), sizeof($styp_v), $hash_fn, $key_eq_fn, $clone_fn, $free_fn); cJSON *jsval = NULL; cJSON_ArrayForEach(jsval, root) { $s - string key = tos2( (byteptr) jsval->string ); + string key = tos2((byteptr)jsval->string); map_set_1(&res, &key, &val); } '