fmt: keep _ separator in number literals (#7495)
parent
bf8cf8b817
commit
a6e6c48c36
|
@ -10,9 +10,9 @@ fn sum_types(a []Expr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
x := 0xdeadbeef
|
x := 0xdead_beef
|
||||||
u := 9978654321
|
u := 9_978_654_321
|
||||||
o := 0o664
|
o := 0o66_4
|
||||||
eprintln(' hex constant in decimal: $x')
|
eprintln(' hex constant in decimal: $x')
|
||||||
eprintln(' u constant in decimal: $u')
|
eprintln(' u constant in decimal: $u')
|
||||||
eprintln('octal constant in decimal: $o')
|
eprintln('octal constant in decimal: $o')
|
||||||
|
|
|
@ -39,8 +39,7 @@ pub mut:
|
||||||
line_ends []int // the positions of source lines ends (i.e. \n signs)
|
line_ends []int // the positions of source lines ends (i.e. \n signs)
|
||||||
nr_lines int // total number of lines in the source file that were scanned
|
nr_lines int // total number of lines in the source file that were scanned
|
||||||
is_vh bool // Keep newlines
|
is_vh bool // Keep newlines
|
||||||
is_fmt bool // Used only for skipping ${} in strings, since we need literal
|
is_fmt bool // Used for v fmt.
|
||||||
// string values when generating formatted code.
|
|
||||||
comments_mode CommentsMode
|
comments_mode CommentsMode
|
||||||
is_inside_toplvl_statement bool // *only* used in comments_mode: .toplevel_comments, toggled by parser
|
is_inside_toplvl_statement bool // *only* used in comments_mode: .toplevel_comments, toggled by parser
|
||||||
all_tokens []token.Token // *only* used in comments_mode: .toplevel_comments, contains all tokens
|
all_tokens []token.Token // *only* used in comments_mode: .toplevel_comments, contains all tokens
|
||||||
|
@ -174,8 +173,12 @@ fn (mut s Scanner) ident_name() string {
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
||||||
fn filter_num_sep(txt byteptr, start int, end int) string {
|
fn (s Scanner) num_lit(start int, end int) string {
|
||||||
|
if s.is_fmt {
|
||||||
|
return s.text[start..end]
|
||||||
|
}
|
||||||
unsafe {
|
unsafe {
|
||||||
|
txt := s.text.str
|
||||||
mut b := malloc(end - start + 1) // add a byte for the endstring 0
|
mut b := malloc(end - start + 1) // add a byte for the endstring 0
|
||||||
mut i1 := 0
|
mut i1 := 0
|
||||||
for i := start; i < end; i++ {
|
for i := start; i < end; i++ {
|
||||||
|
@ -223,7 +226,7 @@ fn (mut s Scanner) ident_bin_number() string {
|
||||||
s.pos = first_wrong_digit_pos // adjust error position
|
s.pos = first_wrong_digit_pos // adjust error position
|
||||||
s.error('this binary number has unsuitable digit `$first_wrong_digit.str()`')
|
s.error('this binary number has unsuitable digit `$first_wrong_digit.str()`')
|
||||||
}
|
}
|
||||||
number := filter_num_sep(s.text.str, start_pos, s.pos)
|
number := s.num_lit(start_pos, s.pos)
|
||||||
s.pos--
|
s.pos--
|
||||||
return number
|
return number
|
||||||
}
|
}
|
||||||
|
@ -265,7 +268,7 @@ fn (mut s Scanner) ident_hex_number() string {
|
||||||
s.pos = first_wrong_digit_pos // adjust error position
|
s.pos = first_wrong_digit_pos // adjust error position
|
||||||
s.error('this hexadecimal number has unsuitable digit `$first_wrong_digit.str()`')
|
s.error('this hexadecimal number has unsuitable digit `$first_wrong_digit.str()`')
|
||||||
}
|
}
|
||||||
number := filter_num_sep(s.text.str, start_pos, s.pos)
|
number := s.num_lit(start_pos, s.pos)
|
||||||
s.pos--
|
s.pos--
|
||||||
return number
|
return number
|
||||||
}
|
}
|
||||||
|
@ -304,7 +307,7 @@ fn (mut s Scanner) ident_oct_number() string {
|
||||||
s.pos = first_wrong_digit_pos // adjust error position
|
s.pos = first_wrong_digit_pos // adjust error position
|
||||||
s.error('this octal number has unsuitable digit `$first_wrong_digit.str()`')
|
s.error('this octal number has unsuitable digit `$first_wrong_digit.str()`')
|
||||||
}
|
}
|
||||||
number := filter_num_sep(s.text.str, start_pos, s.pos)
|
number := s.num_lit(start_pos, s.pos)
|
||||||
s.pos--
|
s.pos--
|
||||||
return number
|
return number
|
||||||
}
|
}
|
||||||
|
@ -416,7 +419,7 @@ fn (mut s Scanner) ident_dec_number() string {
|
||||||
s.error('too many decimal points in number')
|
s.error('too many decimal points in number')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
number := filter_num_sep(s.text.str, start_pos, s.pos)
|
number := s.num_lit(start_pos, s.pos)
|
||||||
s.pos--
|
s.pos--
|
||||||
return number
|
return number
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue