compiler: allow to overload methods in manifest

Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgeniy Stratonikov 2021-10-16 14:10:17 +03:00
parent 67eac3a27f
commit 7758378d28
8 changed files with 128 additions and 0 deletions

View file

@ -2,6 +2,7 @@ package compiler
import (
"encoding/json"
"strings"
"testing"
"github.com/nspcc-dev/neo-go/internal/testserdes"
@ -361,3 +362,52 @@ func TestDebugInfo_MarshalJSON(t *testing.T) {
testserdes.MarshalUnmarshalJSON(t, d, new(DebugInfo))
}
func TestManifestOverload(t *testing.T) {
src := `package foo
func Main() int {
return 1
}
func Add3() int {
return Add3Aux(0)
}
func Add3Aux(a int) int {
return a + 3
}
func Add3Aux2(b int) int {
return b + 3
}
func Add4() int {
return 4
}`
_, di, err := CompileWithDebugInfo("foo", strings.NewReader(src))
require.NoError(t, err)
m, err := di.ConvertToManifest(&Options{Overloads: map[string]string{"add3Aux": "add3"}})
require.NoError(t, err)
require.NoError(t, m.ABI.IsValid())
require.NotNil(t, m.ABI.GetMethod("add3", 0))
require.NotNil(t, m.ABI.GetMethod("add3", 1))
require.Nil(t, m.ABI.GetMethod("add3Aux", 1))
t.Run("missing method", func(t *testing.T) {
_, err := di.ConvertToManifest(&Options{Overloads: map[string]string{"miss": "add3"}})
require.Error(t, err)
})
t.Run("parameter conflict", func(t *testing.T) {
_, err := di.ConvertToManifest(&Options{Overloads: map[string]string{"add4": "add3"}})
require.Error(t, err)
})
t.Run("parameter conflict, overload", func(t *testing.T) {
_, err := di.ConvertToManifest(&Options{Overloads: map[string]string{
"add3Aux": "add3",
"add3Aux2": "add3",
}})
require.Error(t, err)
})
t.Run("missing target method", func(t *testing.T) {
_, err := di.ConvertToManifest(&Options{Overloads: map[string]string{"add4": "add5"}})
require.Error(t, err)
})
}