forked from TrueCloudLab/neoneo-go
Merge pull request #1808 from nspcc-dev/compiler/importalias
compiler: fix import alias handling
This commit is contained in:
commit
c0d066f031
3 changed files with 24 additions and 3 deletions
|
@ -246,7 +246,11 @@ func (c *codegen) analyzeFuncUsage() funcUsage {
|
||||||
case *ast.CallExpr:
|
case *ast.CallExpr:
|
||||||
switch t := n.Fun.(type) {
|
switch t := n.Fun.(type) {
|
||||||
case *ast.Ident:
|
case *ast.Ident:
|
||||||
usage[c.getIdentName("", t.Name)] = true
|
var pkgPath string
|
||||||
|
if !isMain {
|
||||||
|
pkgPath = pkg.Path()
|
||||||
|
}
|
||||||
|
usage[c.getIdentName(pkgPath, t.Name)] = true
|
||||||
case *ast.SelectorExpr:
|
case *ast.SelectorExpr:
|
||||||
name, _ := c.getFuncNameFromSelector(t)
|
name, _ := c.getFuncNameFromSelector(t)
|
||||||
usage[name] = true
|
usage[name] = true
|
||||||
|
@ -254,7 +258,7 @@ func (c *codegen) analyzeFuncUsage() funcUsage {
|
||||||
case *ast.FuncDecl:
|
case *ast.FuncDecl:
|
||||||
// exported functions are always assumed to be used
|
// exported functions are always assumed to be used
|
||||||
if isMain && n.Name.IsExported() {
|
if isMain && n.Name.IsExported() {
|
||||||
usage[c.getFuncNameFromDecl(pkg.Path(), n)] = true
|
usage[c.getFuncNameFromDecl("", n)] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -1986,7 +1986,11 @@ func (c *codegen) compile(info *buildInfo, pkg *loader.PackageInfo) error {
|
||||||
case *ast.FuncDecl:
|
case *ast.FuncDecl:
|
||||||
// Don't convert the function if it's not used. This will save a lot
|
// Don't convert the function if it's not used. This will save a lot
|
||||||
// of bytecode space.
|
// of bytecode space.
|
||||||
name := c.getFuncNameFromDecl(pkg.Path(), n)
|
pkgPath := ""
|
||||||
|
if pkg != c.mainPkg.Pkg { // not a main package
|
||||||
|
pkgPath = pkg.Path()
|
||||||
|
}
|
||||||
|
name := c.getFuncNameFromDecl(pkgPath, n)
|
||||||
if !isInitFunc(n) && !isDeployFunc(n) && funUsage.funcUsed(name) &&
|
if !isInitFunc(n) && !isDeployFunc(n) && funUsage.funcUsed(name) &&
|
||||||
(!isInteropPath(pkg.Path()) && !canInline(pkg.Path())) {
|
(!isInteropPath(pkg.Path()) && !canInline(pkg.Path())) {
|
||||||
c.convertFuncDecl(f, n, pkg)
|
c.convertFuncDecl(f, n, pkg)
|
||||||
|
|
|
@ -48,3 +48,16 @@ func TestMultipleDirFileImport(t *testing.T) {
|
||||||
`
|
`
|
||||||
eval(t, src, big.NewInt(1))
|
eval(t, src, big.NewInt(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestImportNameSameAsOwn(t *testing.T) {
|
||||||
|
src := `package foo
|
||||||
|
import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/foo"
|
||||||
|
func get3() int { return 3 }
|
||||||
|
func Main() int {
|
||||||
|
return get3()
|
||||||
|
}
|
||||||
|
func unused() int {
|
||||||
|
return foo.Bar()
|
||||||
|
}`
|
||||||
|
eval(t, src, big.NewInt(3))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue