checker: fix `function x is private` error in main, for `pub const abc = x()` in a (sub)module
parent
674f99a658
commit
caac89d6ca
|
@ -3818,9 +3818,13 @@ pub fn (mut c Checker) ident(mut node ast.Ident) ast.Type {
|
||||||
}
|
}
|
||||||
mut typ := obj.typ
|
mut typ := obj.typ
|
||||||
if typ == 0 {
|
if typ == 0 {
|
||||||
|
old_c_mod := c.mod
|
||||||
|
c.mod = obj.mod
|
||||||
c.inside_const = true
|
c.inside_const = true
|
||||||
typ = c.expr(obj.expr)
|
typ = c.expr(obj.expr)
|
||||||
c.inside_const = false
|
c.inside_const = false
|
||||||
|
c.mod = old_c_mod
|
||||||
|
|
||||||
if obj.expr is ast.CallExpr {
|
if obj.expr is ast.CallExpr {
|
||||||
if obj.expr.or_block.kind != .absent {
|
if obj.expr.or_block.kind != .absent {
|
||||||
typ = typ.clear_flag(.optional)
|
typ = typ.clear_flag(.optional)
|
||||||
|
|
|
@ -4,6 +4,11 @@ fn test_mod1_can_still_be_found_through_parent_project_vmod() {
|
||||||
assert 1051 == m.f()
|
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
|
NB: this main program is under bin/ , but it still
|
||||||
can find mod1, because the parent project has v.mod,
|
can find mod1, because the parent project has v.mod,
|
||||||
|
|
|
@ -13,3 +13,9 @@ import v.tests.project_with_modules_having_submodules.mod1.mod14
|
||||||
pub fn f() int {
|
pub fn f() int {
|
||||||
return 1000 + mod11.f() + mod12.f() + mod13.f() + mod14.f()
|
return 1000 + mod11.f() + mod12.f() + mod13.f() + mod14.f()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const my_version = get_version()
|
||||||
|
|
||||||
|
fn get_version() string {
|
||||||
|
return '0.0.1'
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue