From 64eab72f4c4111af5bf7d7f3e45bffedda5b9a72 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sun, 10 Jul 2022 17:43:50 +0800 Subject: [PATCH] checker: fix anon fn using global variable (fix #15004) (#15008) --- vlib/v/checker/checker.v | 8 ++++++++ .../globals_run/global_var_in_anon_fn.run.out | 1 + .../tests/globals_run/global_var_in_anon_fn.vv | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 vlib/v/checker/tests/globals_run/global_var_in_anon_fn.run.out create mode 100644 vlib/v/checker/tests/globals_run/global_var_in_anon_fn.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 4ba88021ba..dd9940bda9 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2771,6 +2771,14 @@ pub fn (mut c Checker) ident(mut node ast.Ident) ast.Type { } if mut obj := c.file.global_scope.find(name) { match mut obj { + ast.GlobalField { + node.kind = .global + node.info = ast.IdentVar{ + typ: obj.typ + } + node.obj = obj + return obj.typ + } ast.ConstField { if !(obj.is_pub || obj.mod == c.mod || c.pref.is_test) { c.error('constant `$obj.name` is private', node.pos) diff --git a/vlib/v/checker/tests/globals_run/global_var_in_anon_fn.run.out b/vlib/v/checker/tests/globals_run/global_var_in_anon_fn.run.out new file mode 100644 index 0000000000..190a18037c --- /dev/null +++ b/vlib/v/checker/tests/globals_run/global_var_in_anon_fn.run.out @@ -0,0 +1 @@ +123 diff --git a/vlib/v/checker/tests/globals_run/global_var_in_anon_fn.vv b/vlib/v/checker/tests/globals_run/global_var_in_anon_fn.vv new file mode 100644 index 0000000000..1f97593e84 --- /dev/null +++ b/vlib/v/checker/tests/globals_run/global_var_in_anon_fn.vv @@ -0,0 +1,16 @@ +module main + +__global ( + number int +) + +fn init() { + number = 123 +} + +fn main() { + f1 := fn() { + println(number) + } + f1() +}