fix: correct resolve of type and symbols from imported source package

This commit is contained in:
Marc Vertes
2019-09-11 12:30:05 +02:00
committed by Traefiker Bot
parent 82dd3f2953
commit 3645904a15
2 changed files with 6 additions and 5 deletions

View File

@@ -1109,16 +1109,16 @@ func (interp *Interpreter) cfg(root *node) ([]*node, error) {
err = n.cfgErrorf("package %s \"%s\" has no symbol %s", n.child[0].ident, pkg, name)
}
} else if n.typ.cat == srcPkgT {
pkg, name := n.child[0].ident, n.child[1].ident
pkg, name := n.child[0].sym.path, n.child[1].ident
// Resolve source package symbol
if sym, ok := interp.scopes[pkg].sym[name]; ok {
if sym, ok := interp.srcPkg[pkg][name]; ok {
n.findex = sym.index
n.val = sym.node
n.gen = nop
n.typ = sym.typ
n.sym = sym
} else {
err = n.cfgErrorf("undefined selector: %s", n.child[1].ident)
err = n.cfgErrorf("undefined selector: %s.%s", pkg, name)
}
} else if m, lind := n.typ.lookupMethod(n.child[1].ident); m != nil {
if n.child[0].isType(sc) {
@@ -1474,7 +1474,7 @@ func (n *node) isType(sc *scope) bool {
if p, ok := n.interp.binPkg[sym.path]; ok && isBinType(p[name]) {
return true // Imported binary type
}
if p, ok := n.interp.scopes[pkg]; ok && p.sym[name] != nil && p.sym[name].kind == typeSym {
if p, ok := n.interp.srcPkg[sym.path]; ok && p[name] != nil && p[name].kind == typeSym {
return true // Imported source type
}
}

View File

@@ -277,7 +277,8 @@ func (interp *Interpreter) Eval(src string) (reflect.Value, error) {
}
if interp.universe.sym[pkgName] == nil {
// Make the package visible under a path identical to its name
interp.universe.sym[pkgName] = &symbol{typ: &itype{cat: srcPkgT}, path: pkgName}
interp.srcPkg[pkgName] = interp.scopes[pkgName].sym
interp.universe.sym[pkgName] = &symbol{kind: pkgSym, typ: &itype{cat: srcPkgT}, path: pkgName}
}
if interp.cfgDot {