From 1b47e2953d8187a6711655a60eb30dae07f5582f Mon Sep 17 00:00:00 2001 From: yuyi Date: Sun, 7 Mar 2021 21:09:38 +0800 Subject: [PATCH] checker: check undefined ident of struct (#9164) --- vlib/v/checker/checker.v | 3 +++ vlib/v/checker/tests/undefined_ident_of_struct.out | 7 +++++++ vlib/v/checker/tests/undefined_ident_of_struct.vv | 9 +++++++++ 3 files changed, 19 insertions(+) create mode 100644 vlib/v/checker/tests/undefined_ident_of_struct.out create mode 100644 vlib/v/checker/tests/undefined_ident_of_struct.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index cba69cf52d..3d2c80654a 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1063,6 +1063,9 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) { to_lock, pos = c.fail_if_immutable(expr.right) } ast.SelectorExpr { + if expr.expr_type == 0 { + return '', pos + } // retrieve table.Field c.ensure_type_exists(expr.expr_type, expr.pos) or { return '', pos } mut typ_sym := c.table.get_final_type_symbol(c.unwrap_generic(expr.expr_type)) diff --git a/vlib/v/checker/tests/undefined_ident_of_struct.out b/vlib/v/checker/tests/undefined_ident_of_struct.out new file mode 100644 index 0000000000..35e0a6cc6c --- /dev/null +++ b/vlib/v/checker/tests/undefined_ident_of_struct.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/undefined_ident_of_struct.vv:4:2: error: undefined ident: `f` + 2 | + 3 | fn get() { + 4 | f.a = 'test' + | ^ + 5 | } + 6 | diff --git a/vlib/v/checker/tests/undefined_ident_of_struct.vv b/vlib/v/checker/tests/undefined_ident_of_struct.vv new file mode 100644 index 0000000000..a426195483 --- /dev/null +++ b/vlib/v/checker/tests/undefined_ident_of_struct.vv @@ -0,0 +1,9 @@ +module main + +fn get() { + f.a = 'test' +} + +fn main() { + println('hello') +}