From 6ed176515daa1dfd8c48f4f29c0dd2563027d23d Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Sun, 6 Oct 2024 19:06:50 +0530 Subject: [PATCH] checker: disallow blank ident in const and global decl (#22415) --- vlib/v/checker/checker.v | 12 ++++++++++++ .../checker/tests/const_blank_ident_as_name_err.out | 3 +++ .../v/checker/tests/const_blank_ident_as_name_err.vv | 1 + .../tests/globals/global_blank_ident_as_name_err.out | 5 +++++ .../tests/globals/global_blank_ident_as_name_err.vv | 3 +++ 5 files changed, 24 insertions(+) create mode 100644 vlib/v/checker/tests/const_blank_ident_as_name_err.out create mode 100644 vlib/v/checker/tests/const_blank_ident_as_name_err.vv create mode 100644 vlib/v/checker/tests/globals/global_blank_ident_as_name_err.out create mode 100644 vlib/v/checker/tests/globals/global_blank_ident_as_name_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 968842e65..fb99b0d7c 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1776,6 +1776,14 @@ fn (mut c Checker) const_decl(mut node ast.ConstDecl) { } c.error('duplicate of a module name `${field.name}`', name_pos) } + if const_name == '_' { + name_pos := token.Pos{ + ...field.pos + len: util.no_cur_mod(field.name, c.mod).len + } + c.error('cannot use `_` as a const name', name_pos) + return + } c.const_names << field.name } for i, mut field in node.fields { @@ -2308,6 +2316,10 @@ fn (mut c Checker) global_decl(mut node ast.GlobalDecl) { if field.name in ast.global_reserved_type_names { c.error('invalid use of reserved type `${field.name}` as a global name', field.pos) } + if field.name == '_' { + c.error('cannot use `_` as a global name', field.pos) + return + } if field.name in c.global_names { c.error('duplicate global `${field.name}`', field.pos) diff --git a/vlib/v/checker/tests/const_blank_ident_as_name_err.out b/vlib/v/checker/tests/const_blank_ident_as_name_err.out new file mode 100644 index 000000000..dae1ae26f --- /dev/null +++ b/vlib/v/checker/tests/const_blank_ident_as_name_err.out @@ -0,0 +1,3 @@ +vlib/v/checker/tests/const_blank_ident_as_name_err.vv:1:7: error: cannot use `_` as a const name + 1 | const _ = 23 + | ^ diff --git a/vlib/v/checker/tests/const_blank_ident_as_name_err.vv b/vlib/v/checker/tests/const_blank_ident_as_name_err.vv new file mode 100644 index 000000000..33705e140 --- /dev/null +++ b/vlib/v/checker/tests/const_blank_ident_as_name_err.vv @@ -0,0 +1 @@ +const _ = 23 diff --git a/vlib/v/checker/tests/globals/global_blank_ident_as_name_err.out b/vlib/v/checker/tests/globals/global_blank_ident_as_name_err.out new file mode 100644 index 000000000..f50f1eb27 --- /dev/null +++ b/vlib/v/checker/tests/globals/global_blank_ident_as_name_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/globals/global_blank_ident_as_name_err.vv:2:5: error: cannot use `_` as a global name + 1 | __global ( + 2 | _ = 23 + | ^ + 3 | ) diff --git a/vlib/v/checker/tests/globals/global_blank_ident_as_name_err.vv b/vlib/v/checker/tests/globals/global_blank_ident_as_name_err.vv new file mode 100644 index 000000000..f06128282 --- /dev/null +++ b/vlib/v/checker/tests/globals/global_blank_ident_as_name_err.vv @@ -0,0 +1,3 @@ +__global ( + _ = 23 +) -- 2.39.5