Merge pull request #1880 from nspcc-dev/compiler-inlining-fixes

Compiler inlining fixes
This commit is contained in:
Roman Khimov 2021-04-06 15:20:36 +03:00 committed by GitHub
commit a44cd71b9d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 1 deletions

View file

@ -162,7 +162,6 @@ func (c *codegen) countLocalsInline(decl *ast.FuncDecl, pkg *types.Package, f *f
switch n := n.(type) { switch n := n.(type) {
case *ast.CallExpr: case *ast.CallExpr:
size += c.countLocalsCall(n, pkg) size += c.countLocalsCall(n, pkg)
return false
case *ast.FuncType: case *ast.FuncType:
num := n.Results.NumFields() num := n.Results.NumFields()
if num != 0 && len(n.Results.List[0].Names) != 0 { if num != 0 && len(n.Results.List[0].Names) != 0 {

View file

@ -209,6 +209,15 @@ func TestInlineGlobalVariable(t *testing.T) {
}) })
} }
func TestInlineVariadicInInlinedCall(t *testing.T) {
src := `package foo
import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/inline"
func Main() int {
return inline.SumSquared(inline.SumVar(3, 4) - 2, 3)
}`
eval(t, src, big.NewInt(64))
}
func TestInlineConversion(t *testing.T) { func TestInlineConversion(t *testing.T) {
src1 := `package foo src1 := `package foo
import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/inline" import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/inline"
@ -255,3 +264,13 @@ func TestInlineConversionQualified(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, b2, b1) require.Equal(t, b2, b1)
} }
func TestPackageVarsInInlinedCalls(t *testing.T) {
src := `package foo
import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/inline"
import "github.com/nspcc-dev/neo-go/pkg/compiler/testdata/inline/b"
func Main() int {
return inline.Sum(inline.A, b.A)
}`
eval(t, src, big.NewInt(13))
}

View file

@ -39,6 +39,10 @@ func VarSum(a int, b ...int) int {
return sum return sum
} }
func SumVar(a, b int) int {
return VarSum(a, b)
}
func Concat(n int) int { func Concat(n int) int {
return n*100 + b.A*10 + A return n*100 + b.A*10 + A
} }