diff --git a/_test/p4/p4.go b/_test/p4/p4.go new file mode 100644 index 000000000..d0c41bb77 --- /dev/null +++ b/_test/p4/p4.go @@ -0,0 +1,3 @@ +package p4 + +var Value1 = "value1" diff --git a/_test/p5.go b/_test/p5.go new file mode 100644 index 000000000..08be9ea61 --- /dev/null +++ b/_test/p5.go @@ -0,0 +1,10 @@ +package main + +import "github.com/traefik/yaegi/_test/p5" + +func main() { + println(*p5.Value1) +} + +// Output: +// value1 diff --git a/_test/p5/p5.go b/_test/p5/p5.go new file mode 100644 index 000000000..82a37efbc --- /dev/null +++ b/_test/p5/p5.go @@ -0,0 +1,8 @@ +package p5 + +import "github.com/traefik/yaegi/_test/p4" + +var ( + Value1 = &val1 + val1 = p4.Value1 +) diff --git a/interp/cfg.go b/interp/cfg.go index 81204c576..34c1df0c9 100644 --- a/interp/cfg.go +++ b/interp/cfg.go @@ -2420,15 +2420,22 @@ func genGlobalVarDecl(nodes []*node, sc *scope) (*node, error) { func getVarDependencies(nod *node, sc *scope) (deps []*node) { nod.Walk(func(n *node) bool { - if n.kind == identExpr { - if sym, _, ok := sc.lookup(n.ident); ok { - if sym.kind != varSym || !sym.global || sym.node == nod { - return false - } - deps = append(deps, sym.node) - } + if n.kind != identExpr { + return true } - return true + // Process ident nodes, and avoid false dependencies. + if n.anc.kind == selectorExpr && childPos(n) == 1 { + return false + } + sym, _, ok := sc.lookup(n.ident) + if !ok { + return false + } + if sym.kind != varSym || !sym.global || sym.node == nod { + return false + } + deps = append(deps, sym.node) + return false }, nil) return deps }