compiler: simplify convert.To* processing

With inlining there is no need for special logic in compiler.
This commit is contained in:
Evgeniy Stratonikov 2021-03-02 14:43:58 +03:00
parent e754ca62db
commit 56fe6574c9
3 changed files with 4 additions and 14 deletions

View file

@ -327,6 +327,5 @@ func canInline(s string) bool {
return false return false
} }
return !strings.HasPrefix(s[len(interopPrefix):], "/neogointernal") && return !strings.HasPrefix(s[len(interopPrefix):], "/neogointernal") &&
!strings.HasPrefix(s[len(interopPrefix):], "/util") && !strings.HasPrefix(s[len(interopPrefix):], "/util")
!strings.HasPrefix(s[len(interopPrefix):], "/convert")
} }

View file

@ -1708,15 +1708,6 @@ func (c *codegen) convertBuiltin(expr *ast.CallExpr) {
c.emitStoreByIndex(varGlobal, c.exceptionIndex) c.emitStoreByIndex(varGlobal, c.exceptionIndex)
case "delete": case "delete":
emit.Opcodes(c.prog.BinWriter, opcode.REMOVE) emit.Opcodes(c.prog.BinWriter, opcode.REMOVE)
case "ToInteger", "ToByteArray", "ToBool":
typ := stackitem.IntegerT
switch name {
case "ToByteArray":
typ = stackitem.ByteArrayT
case "ToBool":
typ = stackitem.BooleanT
}
c.emitConvert(typ)
case "Remove": case "Remove":
if !isCompoundSlice(c.typeOf(expr.Args[0])) { if !isCompoundSlice(c.typeOf(expr.Args[0])) {
c.prog.Err = errors.New("`Remove` supports only non-byte slices") c.prog.Err = errors.New("`Remove` supports only non-byte slices")

View file

@ -3,15 +3,15 @@ package convert
// ToInteger converts it's argument to an Integer. // ToInteger converts it's argument to an Integer.
func ToInteger(v interface{}) int64 { func ToInteger(v interface{}) int64 {
return 0 return v.(int64)
} }
// ToByteArray converts it's argument to a ByteArray. // ToByteArray converts it's argument to a ByteArray.
func ToByteArray(v interface{}) []byte { func ToByteArray(v interface{}) []byte {
return nil return v.([]byte)
} }
// ToBool converts it's argument to a Boolean. // ToBool converts it's argument to a Boolean.
func ToBool(v interface{}) bool { func ToBool(v interface{}) bool {
return false return v.(bool)
} }