mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
toml: fix scanner floating point detection (#18062)
This commit is contained in:
parent
8f767c9189
commit
bbfa25a17b
@ -591,6 +591,20 @@ fn (mut s Scanner) extract_number() !string {
|
|||||||
s.col++
|
s.col++
|
||||||
for s.pos < s.text.len {
|
for s.pos < s.text.len {
|
||||||
c = s.at()
|
c = s.at()
|
||||||
|
// Adjust scanner position to floating point numbers
|
||||||
|
mut i, mut float_precision := 1, 0
|
||||||
|
for c_ := u8(s.peek(i)); c_ != scanner.end_of_text && c_ != `\n`; c_ = u8(s.peek(i)) {
|
||||||
|
if !c_.is_digit() && c_ != `.` && c_ != `,` {
|
||||||
|
float_precision = 0
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if c_.is_digit() && c == `.` {
|
||||||
|
float_precision++
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
s.pos += float_precision
|
||||||
|
s.col += float_precision
|
||||||
// Handle signed exponent notation. I.e.: 3e2, 3E2, 3e-2, 3E+2, 3e0, 3.1e2, 3.1E2, -1E-1
|
// Handle signed exponent notation. I.e.: 3e2, 3E2, 3e-2, 3E+2, 3e0, 3.1e2, 3.1E2, -1E-1
|
||||||
if c in [`e`, `E`] && s.peek(1) in [`+`, `-`] && u8(s.peek(2)).is_digit() {
|
if c in [`e`, `E`] && s.peek(1) in [`+`, `-`] && u8(s.peek(2)).is_digit() {
|
||||||
s.pos += 2
|
s.pos += 2
|
||||||
|
@ -18,6 +18,13 @@ bools = [true, false, true, true]
|
|||||||
|
|
||||||
floats = [0.0, 1.0, 2.0, 3.0]
|
floats = [0.0, 1.0, 2.0, 3.0]
|
||||||
|
|
||||||
|
floats_br = [
|
||||||
|
0.0,
|
||||||
|
1.05,
|
||||||
|
2.025,
|
||||||
|
3.5001
|
||||||
|
]
|
||||||
|
|
||||||
int_map = {"a" = 0, "b" = 1, "c" = 2, "d" = 3}
|
int_map = {"a" = 0, "b" = 1, "c" = 2, "d" = 3}
|
||||||
|
|
||||||
[bio]
|
[bio]
|
||||||
@ -44,14 +51,15 @@ struct Bio {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct User {
|
struct User {
|
||||||
name string
|
name string
|
||||||
age int
|
age int
|
||||||
height f64
|
height f64
|
||||||
birthday toml.Date
|
birthday toml.Date
|
||||||
strings []string
|
strings []string
|
||||||
bools []bool
|
bools []bool
|
||||||
floats []f32
|
floats []f32
|
||||||
int_map map[string]int
|
floats_br []f32
|
||||||
|
int_map map[string]int
|
||||||
|
|
||||||
config toml.Any
|
config toml.Any
|
||||||
mut:
|
mut:
|
||||||
@ -73,6 +81,7 @@ fn test_reflect() {
|
|||||||
assert user.strings == ['v matures', 'like rings', 'spread in the', 'water']
|
assert user.strings == ['v matures', 'like rings', 'spread in the', 'water']
|
||||||
assert user.bools == [true, false, true, true]
|
assert user.bools == [true, false, true, true]
|
||||||
assert user.floats == [f32(0.0), 1.0, 2.0, 3.0]
|
assert user.floats == [f32(0.0), 1.0, 2.0, 3.0]
|
||||||
|
assert user.floats_br == [f32(0.0), 1.05, 2.025, 3.5001]
|
||||||
assert user.int_map == {
|
assert user.int_map == {
|
||||||
'a': 0
|
'a': 0
|
||||||
'b': 1
|
'b': 1
|
||||||
|
Loading…
Reference in New Issue
Block a user