@@ -482,7 +482,14 @@ fn (mut g Gen) gen_struct_enc_dec(type_info ast.TypeInfo, styp string, mut enc s
482
482
// it has to be encoded as a unix timestamp number
483
483
enc.writeln ('\t cJSON_AddItemToObject(o, "$name ", json__encode_u64(val.${c_name(field.name)} ._v_unix));' )
484
484
} else {
485
- enc.writeln ('\t cJSON_AddItemToObject(o, "$name ", ${enc_name} (val.${c_name(field.name)} ));\n ' )
485
+ if ! field.typ.is_real_pointer () {
486
+ enc.writeln ('\t cJSON_AddItemToObject(o, "$name ", ${enc_name} (val.${c_name(field.name)} ));\n ' )
487
+ } else {
488
+ sptr_value := 'val.${c_name(field.name)} '
489
+ enc.writeln ('\t if ($sptr_value != 0) {' )
490
+ enc.writeln ('\t\t cJSON_AddItemToObject(o, "$name ", ${enc_name} (*$sptr_value ));' )
491
+ enc.writeln ('\t }\n ' )
492
+ }
486
493
}
487
494
}
488
495
}
@@ -499,7 +506,8 @@ fn gen_js_get(styp string, tmp string, name string, mut dec strings.Builder, is_
499
506
500
507
fn gen_js_get_opt (dec_name string , field_type string , styp string , tmp string , name string , mut dec strings.Builder, is_required bool ) {
501
508
gen_js_get (styp, tmp, name, mut dec, is_required)
502
- dec.writeln ('\t ${option_name} _$field_type $tmp ;' )
509
+ value_field_type := field_type.trim_right ('*' )
510
+ dec.writeln ('\t ${option_name} _$value_field_type $tmp ;' )
503
511
dec.writeln ('\t if (jsonroot_$tmp ) {' )
504
512
dec.writeln ('\t\t $tmp = ${dec_name} (jsonroot_$tmp );' )
505
513
dec.writeln ('\t\t if (${tmp} .state != 0) {' )
@@ -509,13 +517,14 @@ fn gen_js_get_opt(dec_name string, field_type string, styp string, tmp string, n
509
517
}
510
518
511
519
fn js_enc_name (typ string ) string {
512
- suffix := if typ.ends_with ('*' ) { typ.replace ('*' , ' ' ) } else { typ }
520
+ suffix := if typ.ends_with ('*' ) { typ.trim_right ('*' ) } else { typ }
513
521
name := 'json__encode_$suffix '
514
522
return util.no_dots (name)
515
523
}
516
524
517
525
fn js_dec_name (typ string ) string {
518
- name := 'json__decode_$typ '
526
+ suffix := if typ.ends_with ('*' ) { typ.trim_right ('*' ) } else { typ }
527
+ name := 'json__decode_$suffix '
519
528
return util.no_dots (name)
520
529
}
521
530
0 commit comments