diff --git a/vlib/v/checker/tests/bin_lit_without_digit_err.out b/vlib/v/checker/tests/bin_lit_without_digit_err.out new file mode 100644 index 0000000000..c6c54f29b3 --- /dev/null +++ b/vlib/v/checker/tests/bin_lit_without_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/bin_lit_without_digit_err.v:2:14: error: number part of this binary is not provided + 1 | fn main() { + 2 | println(0b) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/bin_lit_without_digit_err.vv b/vlib/v/checker/tests/bin_lit_without_digit_err.vv new file mode 100644 index 0000000000..34f1b34438 --- /dev/null +++ b/vlib/v/checker/tests/bin_lit_without_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(0b) +} diff --git a/vlib/v/checker/tests/bin_lit_wrong_digit_err.out b/vlib/v/checker/tests/bin_lit_wrong_digit_err.out new file mode 100644 index 0000000000..b04cc32c7f --- /dev/null +++ b/vlib/v/checker/tests/bin_lit_wrong_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/bin_lit_wrong_digit_err.v:2:18: error: this binary number has unsuitable digit `2` + 1 | fn main() { + 2 | println(0b1112) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/bin_lit_wrong_digit_err.vv b/vlib/v/checker/tests/bin_lit_wrong_digit_err.vv new file mode 100644 index 0000000000..b8347fa736 --- /dev/null +++ b/vlib/v/checker/tests/bin_lit_wrong_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(0b1112) +} diff --git a/vlib/v/checker/tests/dec_lit_wrong_digit_err.out b/vlib/v/checker/tests/dec_lit_wrong_digit_err.out new file mode 100644 index 0000000000..448166d1bb --- /dev/null +++ b/vlib/v/checker/tests/dec_lit_wrong_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/dec_lit_wrong_digit_err.v:2:18: error: this number has unsuitable digit `q` + 1 | fn main() { + 2 | println(12345q) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/dec_lit_wrong_digit_err.vv b/vlib/v/checker/tests/dec_lit_wrong_digit_err.vv new file mode 100644 index 0000000000..02edf7a22f --- /dev/null +++ b/vlib/v/checker/tests/dec_lit_wrong_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(12345q) +} diff --git a/vlib/v/checker/tests/float_lit_exp_not_integer_err.out b/vlib/v/checker/tests/float_lit_exp_not_integer_err.out new file mode 100644 index 0000000000..282375012d --- /dev/null +++ b/vlib/v/checker/tests/float_lit_exp_not_integer_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/float_lit_exp_not_integer_err.v:2:17: error: exponential part should be integer + 1 | fn main() { + 2 | println(45e2.5) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/float_lit_exp_not_integer_err.vv b/vlib/v/checker/tests/float_lit_exp_not_integer_err.vv new file mode 100644 index 0000000000..a1bd559754 --- /dev/null +++ b/vlib/v/checker/tests/float_lit_exp_not_integer_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(45e2.5) +} diff --git a/vlib/v/checker/tests/float_lit_exp_without_digit_err.out b/vlib/v/checker/tests/float_lit_exp_without_digit_err.out new file mode 100644 index 0000000000..e53c5c8202 --- /dev/null +++ b/vlib/v/checker/tests/float_lit_exp_without_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/float_lit_exp_without_digit_err.v:2:14: error: exponent has no digits + 1 | fn main() { + 2 | println(2E) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/float_lit_exp_without_digit_err.vv b/vlib/v/checker/tests/float_lit_exp_without_digit_err.vv new file mode 100644 index 0000000000..6d3d9f1e79 --- /dev/null +++ b/vlib/v/checker/tests/float_lit_exp_without_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(2E) +} diff --git a/vlib/v/checker/tests/float_lit_too_many_points_err.out b/vlib/v/checker/tests/float_lit_too_many_points_err.out new file mode 100644 index 0000000000..6c15a29497 --- /dev/null +++ b/vlib/v/checker/tests/float_lit_too_many_points_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/float_lit_too_many_points_err.v:2:19: error: too many decimal points in number + 1 | fn main() { + 2 | println(123.45.67) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/float_lit_too_many_points_err.vv b/vlib/v/checker/tests/float_lit_too_many_points_err.vv new file mode 100644 index 0000000000..e787cab5c9 --- /dev/null +++ b/vlib/v/checker/tests/float_lit_too_many_points_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(123.45.67) +} diff --git a/vlib/v/checker/tests/hex_lit_without_digit_err.out b/vlib/v/checker/tests/hex_lit_without_digit_err.out new file mode 100644 index 0000000000..7ca6c95f9c --- /dev/null +++ b/vlib/v/checker/tests/hex_lit_without_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/hex_lit_without_digit_err.v:2:14: error: number part of this hexadecimal is not provided + 1 | fn main() { + 2 | println(0x) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/hex_lit_without_digit_err.vv b/vlib/v/checker/tests/hex_lit_without_digit_err.vv new file mode 100644 index 0000000000..7063035102 --- /dev/null +++ b/vlib/v/checker/tests/hex_lit_without_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(0x) +} diff --git a/vlib/v/checker/tests/hex_lit_wrong_digit_err.out b/vlib/v/checker/tests/hex_lit_wrong_digit_err.out new file mode 100644 index 0000000000..fec442e13a --- /dev/null +++ b/vlib/v/checker/tests/hex_lit_wrong_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/hex_lit_wrong_digit_err.v:2:18: error: this hexadecimal number has unsuitable digit `g` + 1 | fn main() { + 2 | println(0x111g) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/hex_lit_wrong_digit_err.vv b/vlib/v/checker/tests/hex_lit_wrong_digit_err.vv new file mode 100644 index 0000000000..11a84b14db --- /dev/null +++ b/vlib/v/checker/tests/hex_lit_wrong_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(0x111g) +} diff --git a/vlib/v/checker/tests/oct_lit_without_digit_err.out b/vlib/v/checker/tests/oct_lit_without_digit_err.out new file mode 100644 index 0000000000..b25a6c7335 --- /dev/null +++ b/vlib/v/checker/tests/oct_lit_without_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/oct_lit_without_digit_err.v:2:14: error: number part of this octal is not provided + 1 | fn main() { + 2 | println(0o) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/oct_lit_without_digit_err.vv b/vlib/v/checker/tests/oct_lit_without_digit_err.vv new file mode 100644 index 0000000000..195a010b69 --- /dev/null +++ b/vlib/v/checker/tests/oct_lit_without_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(0o) +} diff --git a/vlib/v/checker/tests/oct_lit_wrong_digit_err.out b/vlib/v/checker/tests/oct_lit_wrong_digit_err.out new file mode 100644 index 0000000000..dc791d1ea4 --- /dev/null +++ b/vlib/v/checker/tests/oct_lit_wrong_digit_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/oct_lit_wrong_digit_err.v:2:18: error: this octal number has unsuitable digit `8` + 1 | fn main() { + 2 | println(0o1118) + | ^ + 3 | } diff --git a/vlib/v/checker/tests/oct_lit_wrong_digit_err.vv b/vlib/v/checker/tests/oct_lit_wrong_digit_err.vv new file mode 100644 index 0000000000..235e1a9a7a --- /dev/null +++ b/vlib/v/checker/tests/oct_lit_wrong_digit_err.vv @@ -0,0 +1,3 @@ +fn main() { + println(0o1118) +} diff --git a/vlib/v/scanner/scanner.v b/vlib/v/scanner/scanner.v index f75dcba5f6..7adce523b4 100644 --- a/vlib/v/scanner/scanner.v +++ b/vlib/v/scanner/scanner.v @@ -174,9 +174,11 @@ fn (mut s Scanner) ident_bin_number() string { s.pos++ } if start_pos + 2 == s.pos { + s.pos-- // adjust error position s.error('number part of this binary is not provided') } else if has_wrong_digit { + s.pos-- // adjust error position s.error('this binary number has unsuitable digit `${first_wrong_digit.str()}`') } number := filter_num_sep(s.text.str, start_pos, s.pos) @@ -203,9 +205,11 @@ fn (mut s Scanner) ident_hex_number() string { s.pos++ } if start_pos + 2 == s.pos { + s.pos-- // adjust error position s.error('number part of this hexadecimal is not provided') } else if has_wrong_digit { + s.pos-- // adjust error position s.error('this hexadecimal number has unsuitable digit `${first_wrong_digit.str()}`') } number := filter_num_sep(s.text.str, start_pos, s.pos) @@ -232,9 +236,11 @@ fn (mut s Scanner) ident_oct_number() string { s.pos++ } if start_pos + 2 == s.pos { + s.pos-- // adjust error position s.error('number part of this octal is not provided') } else if has_wrong_digit { + s.pos-- // adjust error position s.error('this octal number has unsuitable digit `${first_wrong_digit.str()}`') } number := filter_num_sep(s.text.str, start_pos, s.pos) @@ -335,10 +341,12 @@ fn (mut s Scanner) ident_dec_number() string { } if has_wrong_digit { // error check: wrong digit + s.pos-- // adjust error position s.error('this number has unsuitable digit `${first_wrong_digit.str()}`') } else if s.text[s.pos - 1] in [`e`, `E`] { // error check: 5e + s.pos-- // adjust error position s.error('exponent has no digits') } else if s.pos < s.text.len && s.text[s.pos] == `.` && !is_range && !is_float_without_fraction && !call_method {