compiler: extend manifest generation with custom types
This commit is contained in:
parent
cee1836183
commit
25f8545cdf
2 changed files with 41 additions and 0 deletions
|
@ -201,6 +201,21 @@ func (c *codegen) scTypeFromExpr(typ ast.Expr) string {
|
||||||
if c.typeOf(typ) == nil {
|
if c.typeOf(typ) == nil {
|
||||||
return "Any"
|
return "Any"
|
||||||
}
|
}
|
||||||
|
if named, ok := t.(*types.Named); ok {
|
||||||
|
if isInteropPath(named.String()) {
|
||||||
|
name := named.Obj().Name()
|
||||||
|
pkg := named.Obj().Pkg().Name()
|
||||||
|
switch pkg {
|
||||||
|
case "blockchain", "contract":
|
||||||
|
return "Array" // Block, Transaction, Contract
|
||||||
|
case "interop":
|
||||||
|
if name != "Interface" {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "InteropInterface"
|
||||||
|
}
|
||||||
|
}
|
||||||
switch t := t.Underlying().(type) {
|
switch t := t.Underlying().(type) {
|
||||||
case *types.Basic:
|
case *types.Basic:
|
||||||
info := t.Info()
|
info := t.Info()
|
||||||
|
|
|
@ -15,6 +15,10 @@ import (
|
||||||
|
|
||||||
func TestCodeGen_DebugInfo(t *testing.T) {
|
func TestCodeGen_DebugInfo(t *testing.T) {
|
||||||
src := `package foo
|
src := `package foo
|
||||||
|
import "github.com/nspcc-dev/neo-go/pkg/interop"
|
||||||
|
import "github.com/nspcc-dev/neo-go/pkg/interop/storage"
|
||||||
|
import "github.com/nspcc-dev/neo-go/pkg/interop/blockchain"
|
||||||
|
import "github.com/nspcc-dev/neo-go/pkg/interop/contract"
|
||||||
func Main(op string) bool {
|
func Main(op string) bool {
|
||||||
var s string
|
var s string
|
||||||
_ = s
|
_ = s
|
||||||
|
@ -42,6 +46,12 @@ func MethodByteArray() []byte { return nil }
|
||||||
func MethodArray() []bool { return nil }
|
func MethodArray() []bool { return nil }
|
||||||
func MethodStruct() struct{} { return struct{}{} }
|
func MethodStruct() struct{} { return struct{}{} }
|
||||||
func unexportedMethod() int { return 1 }
|
func unexportedMethod() int { return 1 }
|
||||||
|
func MethodParams(addr interop.Hash160, h interop.Hash256,
|
||||||
|
sig interop.Signature, pub interop.PublicKey,
|
||||||
|
inter interop.Interface, ctr contract.Contract,
|
||||||
|
ctx storage.Context, tx blockchain.Transaction) bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
type MyStruct struct {}
|
type MyStruct struct {}
|
||||||
func (ms MyStruct) MethodOnStruct() { }
|
func (ms MyStruct) MethodOnStruct() { }
|
||||||
func (ms *MyStruct) MethodOnPointerToStruct() { }
|
func (ms *MyStruct) MethodOnPointerToStruct() { }
|
||||||
|
@ -72,6 +82,7 @@ func (ms *MyStruct) MethodOnPointerToStruct() { }
|
||||||
"unexportedMethod": "Integer",
|
"unexportedMethod": "Integer",
|
||||||
"MethodOnStruct": "Void",
|
"MethodOnStruct": "Void",
|
||||||
"MethodOnPointerToStruct": "Void",
|
"MethodOnPointerToStruct": "Void",
|
||||||
|
"MethodParams": "Boolean",
|
||||||
}
|
}
|
||||||
for i := range d.Methods {
|
for i := range d.Methods {
|
||||||
name := d.Methods[i].ID
|
name := d.Methods[i].ID
|
||||||
|
@ -201,6 +212,21 @@ func (ms *MyStruct) MethodOnPointerToStruct() { }
|
||||||
},
|
},
|
||||||
ReturnType: smartcontract.StringType,
|
ReturnType: smartcontract.StringType,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "methodParams",
|
||||||
|
Offset: 125,
|
||||||
|
Parameters: []manifest.Parameter{
|
||||||
|
manifest.NewParameter("addr", smartcontract.Hash160Type),
|
||||||
|
manifest.NewParameter("h", smartcontract.Hash256Type),
|
||||||
|
manifest.NewParameter("sig", smartcontract.SignatureType),
|
||||||
|
manifest.NewParameter("pub", smartcontract.PublicKeyType),
|
||||||
|
manifest.NewParameter("inter", smartcontract.InteropInterfaceType),
|
||||||
|
manifest.NewParameter("ctr", smartcontract.ArrayType),
|
||||||
|
manifest.NewParameter("ctx", smartcontract.InteropInterfaceType),
|
||||||
|
manifest.NewParameter("tx", smartcontract.ArrayType),
|
||||||
|
},
|
||||||
|
ReturnType: smartcontract.BoolType,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Events: []manifest.Event{},
|
Events: []manifest.Event{},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue