From 53d7a554243a12d26f509f923fbfc82318183522 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sun, 23 Jun 2024 04:11:54 -0300 Subject: [PATCH] checker: fix `$if x {` condition, using `const x = $d('ident', false)` (fix #21709) (#21713) --- vlib/v/checker/checker.v | 7 +++++++ vlib/v/tests/if_comptime_check_const_test.v | 10 ++++++++++ 2 files changed, 17 insertions(+) create mode 100644 vlib/v/tests/if_comptime_check_const_test.v diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index f5bd90e70d..fd3f43e362 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4215,6 +4215,13 @@ fn (mut c Checker) find_obj_definition(obj ast.ScopeObject) !ast.Expr { if mut expr is ast.Ident { return c.find_definition(expr) } + if mut expr is ast.ComptimeCall && expr.is_compile_value { + if expr.result_type == ast.bool_type { + return ast.BoolLiteral{ + val: expr.compile_value.bool() + } + } + } if !expr.is_pure_literal() { return error('definition of `${name}` is unknown at compile time') } diff --git a/vlib/v/tests/if_comptime_check_const_test.v b/vlib/v/tests/if_comptime_check_const_test.v new file mode 100644 index 0000000000..b849ee398c --- /dev/null +++ b/vlib/v/tests/if_comptime_check_const_test.v @@ -0,0 +1,10 @@ +const x = $d('x', true) + +fn test_main() { + a := $if x { + 1 + } $else { + 0 + } + assert a == 1 +}