checker: fix `function x is private` error in main, for `pub const abc = x()` in a (sub)module

pull/12866/head
Delyan Angelov 2021-12-16 12:03:49 +02:00
parent 674f99a658
commit caac89d6ca
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
3 changed files with 15 additions and 0 deletions

View File

@ -3818,9 +3818,13 @@ pub fn (mut c Checker) ident(mut node ast.Ident) ast.Type {
}
mut typ := obj.typ
if typ == 0 {
old_c_mod := c.mod
c.mod = obj.mod
c.inside_const = true
typ = c.expr(obj.expr)
c.inside_const = false
c.mod = old_c_mod
if obj.expr is ast.CallExpr {
if obj.expr.or_block.kind != .absent {
typ = typ.clear_flag(.optional)

View File

@ -4,6 +4,11 @@ fn test_mod1_can_still_be_found_through_parent_project_vmod() {
assert 1051 == m.f()
}
fn test_pub_const_using_private_fn_for_its_initialisation() {
println(m.my_version)
assert m.my_version == '0.0.1'
}
/*
NB: this main program is under bin/ , but it still
can find mod1, because the parent project has v.mod,

View File

@ -13,3 +13,9 @@ import v.tests.project_with_modules_having_submodules.mod1.mod14
pub fn f() int {
return 1000 + mod11.f() + mod12.f() + mod13.f() + mod14.f()
}
pub const my_version = get_version()
fn get_version() string {
return '0.0.1'
}