Skip to content

Commit c07ce3f

Browse files
authored
cgen,json2: improve -nofloat support (#13117)
1 parent 4ce6e66 commit c07ce3f

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

vlib/v/gen/c/cgen.v

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,9 @@ pub fn (mut g Gen) init() {
645645
g.cheaders.writeln(get_guarded_include_text('<stddef.h>', 'The C compiler can not find <stddef.h>. Please install build-essentials')) // size_t, ptrdiff_t
646646
}
647647
}
648+
if g.pref.nofloat {
649+
g.cheaders.writeln('#define VNOFLOAT 1')
650+
}
648651
g.cheaders.writeln(c_builtin_types)
649652
if g.pref.is_bare {
650653
g.cheaders.writeln(c_bare_headers)

vlib/v/gen/c/cheaders.v

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,10 +656,19 @@ typedef uint8_t byte;
656656
typedef uint32_t rune;
657657
typedef size_t usize;
658658
typedef ptrdiff_t isize;
659+
#ifndef VNOFLOAT
659660
typedef float f32;
660661
typedef double f64;
662+
#else
663+
typedef int32_t f32;
664+
typedef int64_t f64;
665+
#endif
661666
typedef int64_t int_literal;
667+
#ifndef VNOFLOAT
662668
typedef double float_literal;
669+
#else
670+
typedef int64_t float_literal;
671+
#endif
663672
typedef unsigned char* byteptr;
664673
typedef void* voidptr;
665674
typedef char* charptr;

vlib/x/json2/decoder.v

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,10 @@ fn (mut p Parser) decode_value() ?Any {
106106
kind := p.tok.kind
107107
p.next_with_err() ?
108108
if p.convert_type {
109-
if kind == .float {
110-
return Any(tl.f64())
109+
$if !nofloat ? {
110+
if kind == .float {
111+
return Any(tl.f64())
112+
}
111113
}
112114
return Any(tl.i64())
113115
}

vlib/x/json2/encoder.v

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,25 @@ pub fn (f Any) json_str() string {
7373
return f.str()
7474
}
7575
f32 {
76-
str_f32 := f.str()
77-
if str_f32.ends_with('.') {
78-
return '${str_f32}0'
76+
$if !nofloat ? {
77+
str_f32 := f.str()
78+
if str_f32.ends_with('.') {
79+
return '${str_f32}0'
80+
}
81+
return str_f32
7982
}
80-
return str_f32
83+
84+
return '0'
8185
}
8286
f64 {
83-
str_f64 := f.str()
84-
if str_f64.ends_with('.') {
85-
return '${str_f64}0'
87+
$if !nofloat ? {
88+
str_f64 := f.str()
89+
if str_f64.ends_with('.') {
90+
return '${str_f64}0'
91+
}
92+
return str_f64
8693
}
87-
return str_f64
94+
return '0'
8895
}
8996
map[string]Any {
9097
return f.str()

0 commit comments

Comments
 (0)