From 0cb6dc47e41fb245e08cc6febf3e0430023ca79c Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Thu, 7 May 2020 11:54:35 +0300 Subject: [PATCH] vm: implement slot-related opcodes 1. Slot is a new mechanism for storing variables during execution which is more convenient than alt.stack. This commit implements support for slot opcodes in both vm and compiler. 2. Remove old alt.stack opcodes. 3. Do not process globals at the start of every function, but instead load them single time at main. --- pkg/compiler/analysis.go | 21 +++ pkg/compiler/codegen.go | 199 ++++++++++++------- pkg/compiler/debug.go | 8 + pkg/compiler/func_scope.go | 48 +++-- pkg/rpc/server/server_test.go | 6 +- pkg/rpc/server/testdata/test_contract.avm | Bin 858 -> 704 bytes pkg/rpc/server/testdata/testblocks.acc | Bin 113896 -> 113742 bytes pkg/vm/context.go | 8 +- pkg/vm/opcode/opcode.go | 55 +++++- pkg/vm/opcode/opcode_string.go | 220 +++++++++++++++------- pkg/vm/vm.go | 86 ++++++++- pkg/vm/vm_test.go | 93 ++++++--- 12 files changed, 552 insertions(+), 192 deletions(-) diff --git a/pkg/compiler/analysis.go b/pkg/compiler/analysis.go index fc2c36067..c2382cfd9 100644 --- a/pkg/compiler/analysis.go +++ b/pkg/compiler/analysis.go @@ -1,11 +1,14 @@ package compiler import ( + "errors" "fmt" "go/ast" "go/constant" "go/types" + "github.com/nspcc-dev/neo-go/pkg/vm/emit" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "golang.org/x/tools/go/loader" ) @@ -47,6 +50,24 @@ func typeAndValueForField(fld *types.Var) (types.TypeAndValue, error) { return types.TypeAndValue{}, nil } +// newGlobal creates new global variable. +func (c *codegen) newGlobal(name string) { + c.globals[name] = len(c.globals) +} + +// traverseGlobals visits and initializes global variables. +func (c *codegen) traverseGlobals(f ast.Node) { + n := countGlobals(f) + if n != 0 { + if n > 255 { + c.prog.BinWriter.Err = errors.New("too many global variables") + return + } + emit.Instruction(c.prog.BinWriter, opcode.INITSSLOT, []byte{byte(n)}) + } + c.convertGlobals(f) +} + // countGlobals counts the global variables in the program to add // them with the stack size of the function. func countGlobals(f ast.Node) (i int64) { diff --git a/pkg/compiler/codegen.go b/pkg/compiler/codegen.go index 709747e57..7d2f6e86e 100644 --- a/pkg/compiler/codegen.go +++ b/pkg/compiler/codegen.go @@ -43,6 +43,8 @@ type codegen struct { // Current funcScope being converted. scope *funcScope + globals map[string]int + // A mapping from label's names to their ids. labels map[labelWithType]uint16 // A list of nested label names together with evaluation stack depth. @@ -82,6 +84,14 @@ type labelWithStackSize struct { sz int } +type varType int + +const ( + varGlobal varType = iota + varLocal + varArgument +) + // newLabel creates a new label to jump to func (c *codegen) newLabel() (l uint16) { li := len(c.l) @@ -147,34 +157,6 @@ func (c *codegen) convertBasicType(t types.TypeAndValue, typ *types.Basic) { } } -func (c *codegen) emitLoadLocal(name string) { - pos := c.scope.loadLocal(name) - if pos < 0 { - c.prog.Err = fmt.Errorf("cannot load local variable with position: %d", pos) - return - } - c.emitLoadLocalPos(pos) -} - -func (c *codegen) emitLoadLocalPos(pos int) { - emit.Opcode(c.prog.BinWriter, opcode.DUPFROMALTSTACK) - emit.Int(c.prog.BinWriter, int64(pos)) - emit.Opcode(c.prog.BinWriter, opcode.PICKITEM) -} - -func (c *codegen) emitStoreLocal(pos int) { - emit.Opcode(c.prog.BinWriter, opcode.DUPFROMALTSTACK) - - if pos < 0 { - c.prog.Err = fmt.Errorf("invalid position to store local: %d", pos) - return - } - - emit.Int(c.prog.BinWriter, int64(pos)) - emit.Opcode(c.prog.BinWriter, opcode.ROT) - emit.Opcode(c.prog.BinWriter, opcode.SETITEM) -} - func (c *codegen) emitLoadField(i int) { emit.Int(c.prog.BinWriter, int64(i)) emit.Opcode(c.prog.BinWriter, opcode.PICKITEM) @@ -186,6 +168,81 @@ func (c *codegen) emitStoreStructField(i int) { emit.Opcode(c.prog.BinWriter, opcode.SETITEM) } +// getVarIndex returns variable type and position in corresponding slot, +// according to current scope. +func (c *codegen) getVarIndex(name string) (varType, int) { + if c.scope != nil { + if i, ok := c.scope.arguments[name]; ok { + return varArgument, i + } else if i, ok := c.scope.locals[name]; ok { + return varLocal, i + } + } + if i, ok := c.globals[name]; ok { + return varGlobal, i + } + + return varLocal, c.scope.newVariable(varLocal, name) +} + +func getBaseOpcode(t varType) (opcode.Opcode, opcode.Opcode) { + switch t { + case varGlobal: + return opcode.LDSFLD0, opcode.STSFLD0 + case varLocal: + return opcode.LDLOC0, opcode.STLOC0 + case varArgument: + return opcode.LDARG0, opcode.STARG0 + default: + panic("invalid type") + } +} + +// emitLoadVar loads specified variable to the evaluation stack. +func (c *codegen) emitLoadVar(name string) { + t, i := c.getVarIndex(name) + base, _ := getBaseOpcode(t) + if i < 7 { + emit.Opcode(c.prog.BinWriter, base+opcode.Opcode(i)) + } else { + emit.Instruction(c.prog.BinWriter, base+7, []byte{byte(i)}) + } +} + +// emitStoreVar stores top value from the evaluation stack in the specified variable. +func (c *codegen) emitStoreVar(name string) { + t, i := c.getVarIndex(name) + _, base := getBaseOpcode(t) + if i < 7 { + emit.Opcode(c.prog.BinWriter, base+opcode.Opcode(i)) + } else { + emit.Instruction(c.prog.BinWriter, base+7, []byte{byte(i)}) + } +} + +func (c *codegen) emitDefault(n ast.Expr) { + tv, ok := c.typeInfo.Types[n] + if !ok { + c.prog.Err = errors.New("invalid type") + return + } + if t, ok := tv.Type.(*types.Basic); ok { + info := t.Info() + switch { + case info&types.IsInteger != 0: + emit.Int(c.prog.BinWriter, 0) + case info&types.IsString != 0: + emit.Bytes(c.prog.BinWriter, []byte{}) + case info&types.IsBoolean != 0: + emit.Bool(c.prog.BinWriter, false) + default: + emit.Opcode(c.prog.BinWriter, opcode.PUSHNULL) + } + return + } + emit.Opcode(c.prog.BinWriter, opcode.PUSHNULL) +} + // convertGlobals traverses the AST and only converts global declarations. // If we call this in convertFuncDecl then it will load all global variables // into the scope of the function. @@ -231,9 +288,17 @@ func (c *codegen) convertFuncDecl(file ast.Node, decl *ast.FuncDecl) { // All globals copied into the scope of the function need to be added // to the stack size of the function. - emit.Int(c.prog.BinWriter, f.stackSize()+countGlobals(file)) - emit.Opcode(c.prog.BinWriter, opcode.NEWARRAY) - emit.Opcode(c.prog.BinWriter, opcode.TOALTSTACK) + sizeLoc := f.countLocals() + if sizeLoc > 255 { + c.prog.Err = errors.New("maximum of 255 local variables is allowed") + } + sizeArg := f.countArgs() + if sizeArg > 255 { + c.prog.Err = errors.New("maximum of 255 local variables is allowed") + } + if sizeLoc != 0 || sizeArg != 0 { + emit.Instruction(c.prog.BinWriter, opcode.INITSLOT, []byte{byte(sizeLoc), byte(sizeArg)}) + } // We need to handle methods, which in Go, is just syntactic sugar. // The method receiver will be passed in as first argument. @@ -250,23 +315,18 @@ func (c *codegen) convertFuncDecl(file ast.Node, decl *ast.FuncDecl) { c.prog.Err = fmt.Errorf("method receives for non-struct types is not yet supported") return } - l := c.scope.newLocal(ident.Name) - c.emitStoreLocal(l) + // only create an argument here, it will be stored via INITSLOT + c.scope.newVariable(varArgument, ident.Name) } } // Load the arguments in scope. for _, arg := range decl.Type.Params.List { for _, id := range arg.Names { - l := c.scope.newLocal(id.Name) - c.emitStoreLocal(l) + // only create an argument here, it will be stored via INITSLOT + c.scope.newVariable(varArgument, id.Name) } } - // Load in all the global variables in to the scope of the function. - // This is not necessary for syscalls. - if !isSyscall(f) { - c.convertGlobals(file) - } ast.Walk(c, decl.Body) @@ -275,8 +335,6 @@ func (c *codegen) convertFuncDecl(file ast.Node, decl *ast.FuncDecl) { // This can be the case with void and named-return functions. if !lastStmtIsReturn(decl) { c.saveSequencePoint(decl.Body) - emit.Opcode(c.prog.BinWriter, opcode.FROMALTSTACK) - emit.Opcode(c.prog.BinWriter, opcode.DROP) emit.Opcode(c.prog.BinWriter, opcode.RET) } @@ -305,25 +363,32 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { switch t := spec.(type) { case *ast.ValueSpec: for _, id := range t.Names { - c.scope.newLocal(id.Name) + if c.scope == nil { + // it is a global declaration + c.newGlobal(id.Name) + } else { + c.scope.newLocal(id.Name) + } c.registerDebugVariable(id.Name, t.Type) } if len(t.Values) != 0 { for i, val := range t.Values { ast.Walk(c, val) - l := c.scope.loadLocal(t.Names[i].Name) - c.emitStoreLocal(l) + c.emitStoreVar(t.Names[i].Name) } } else if c.isCompoundArrayType(t.Type) { emit.Opcode(c.prog.BinWriter, opcode.PUSH0) emit.Opcode(c.prog.BinWriter, opcode.NEWARRAY) - l := c.scope.loadLocal(t.Names[0].Name) - c.emitStoreLocal(l) + c.emitStoreVar(t.Names[0].Name) } else if n, ok := c.isStructType(t.Type); ok { emit.Int(c.prog.BinWriter, int64(n)) emit.Opcode(c.prog.BinWriter, opcode.NEWSTRUCT) - l := c.scope.loadLocal(t.Names[0].Name) - c.emitStoreLocal(l) + c.emitStoreVar(t.Names[0].Name) + } else { + for _, id := range t.Names { + c.emitDefault(t.Type) + c.emitStoreVar(id.Name) + } } } } @@ -337,11 +402,10 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { case *ast.Ident: switch n.Tok { case token.ADD_ASSIGN, token.SUB_ASSIGN, token.MUL_ASSIGN, token.QUO_ASSIGN, token.REM_ASSIGN: - c.emitLoadLocal(t.Name) + c.emitLoadVar(t.Name) ast.Walk(c, n.Rhs[0]) // can only add assign to 1 expr on the RHS c.convertToken(n.Tok) - l := c.scope.loadLocal(t.Name) - c.emitStoreLocal(l) + c.emitStoreVar(t.Name) case token.DEFINE: if !multiRet { c.registerDebugVariable(t.Name, n.Rhs[i]) @@ -355,8 +419,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { if t.Name == "_" { emit.Opcode(c.prog.BinWriter, opcode.DROP) } else { - l := c.scope.loadLocal(t.Name) - c.emitStoreLocal(l) + c.emitStoreVar(t.Name) } } @@ -366,7 +429,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { ast.Walk(c, n.Rhs[i]) typ := c.typeInfo.ObjectOf(expr).Type().Underlying() if strct, ok := typ.(*types.Struct); ok { - c.emitLoadLocal(expr.Name) // load the struct + c.emitLoadVar(expr.Name) // load the struct i := indexOfStruct(strct, t.Sel.Name) // get the index of the field c.emitStoreStructField(i) // store the field } @@ -380,7 +443,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { case *ast.IndexExpr: ast.Walk(c, n.Rhs[i]) name := t.X.(*ast.Ident).Name - c.emitLoadLocal(name) + c.emitLoadVar(name) switch ind := t.Index.(type) { case *ast.BasicLit: indexStr := ind.Value @@ -391,7 +454,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { } c.emitStoreStructField(index) case *ast.Ident: - c.emitLoadLocal(ind.Name) + c.emitLoadVar(ind.Name) emit.Opcode(c.prog.BinWriter, opcode.ROT) emit.Opcode(c.prog.BinWriter, opcode.SETITEM) default: @@ -404,7 +467,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { case *ast.SliceExpr: name := n.X.(*ast.Ident).Name - c.emitLoadLocal(name) + c.emitLoadVar(name) if n.Low != nil { ast.Walk(c, n.Low) @@ -442,7 +505,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { for i := len(results.List) - 1; i >= 0; i-- { names := results.List[i].Names for j := len(names) - 1; j >= 0; j-- { - c.emitLoadLocal(names[j].Name) + c.emitLoadVar(names[j].Name) } } } @@ -454,8 +517,6 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { } c.saveSequencePoint(n) - emit.Opcode(c.prog.BinWriter, opcode.FROMALTSTACK) - emit.Opcode(c.prog.BinWriter, opcode.DROP) // Cleanup the stack. emit.Opcode(c.prog.BinWriter, opcode.RET) return nil @@ -557,7 +618,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { } else if tv := c.typeInfo.Types[n]; tv.Value != nil { c.emitLoadConst(tv) } else { - c.emitLoadLocal(n.Name) + c.emitLoadVar(n.Name) } return nil @@ -723,7 +784,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { c.convertBuiltin(n) case name != "": // Function was not found thus is can be only an invocation of func-typed variable. - c.emitLoadLocal(name) + c.emitLoadVar(name) emit.Opcode(c.prog.BinWriter, opcode.CALLA) case isSyscall(f): c.convertSyscall(n, f.selector.Name, f.name) @@ -738,7 +799,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { case *ast.Ident: typ := c.typeInfo.ObjectOf(t).Type().Underlying() if strct, ok := typ.(*types.Struct); ok { - c.emitLoadLocal(t.Name) // load the struct + c.emitLoadVar(t.Name) // load the struct i := indexOfStruct(strct, n.Sel.Name) c.emitLoadField(i) // load the field } @@ -777,8 +838,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { // for i := 0; i < 10; i++ {} // Where the post stmt is ( i++ ) if ident, ok := n.X.(*ast.Ident); ok { - pos := c.scope.loadLocal(ident.Name) - c.emitStoreLocal(pos) + c.emitStoreVar(ident.Name) } return nil @@ -913,9 +973,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { if n.Key != nil { emit.Opcode(c.prog.BinWriter, opcode.DUP) - - pos := c.scope.loadLocal(n.Key.(*ast.Ident).Name) - c.emitStoreLocal(pos) + c.emitStoreVar(n.Key.(*ast.Ident).Name) } ast.Walk(c, n.Body) @@ -1315,6 +1373,8 @@ func (c *codegen) compile(info *buildInfo, pkg *loader.PackageInfo) error { } } + c.traverseGlobals(mainFile) + // convert the entry point first. c.convertFuncDecl(mainFile, main) @@ -1354,6 +1414,7 @@ func newCodegen(info *buildInfo, pkg *loader.PackageInfo) *codegen { l: []int{}, funcs: map[string]*funcScope{}, lambda: map[string]*funcScope{}, + globals: map[string]int{}, labels: map[labelWithType]uint16{}, typeInfo: &pkg.Info, diff --git a/pkg/compiler/debug.go b/pkg/compiler/debug.go index 0d607eaae..29af3f425 100644 --- a/pkg/compiler/debug.go +++ b/pkg/compiler/debug.go @@ -115,6 +115,10 @@ type Event struct { } func (c *codegen) saveSequencePoint(n ast.Node) { + if c.scope == nil { + // do not save globals for now + return + } fset := c.buildInfo.program.Fset start := fset.Position(n.Pos()) end := fset.Position(n.End()) @@ -143,6 +147,10 @@ func (c *codegen) emitDebugInfo() *DebugInfo { } func (c *codegen) registerDebugVariable(name string, expr ast.Expr) { + if c.scope == nil { + // do not save globals for now + return + } typ := c.scTypeFromExpr(expr) c.scope.variables = append(c.scope.variables, name+","+typ) } diff --git a/pkg/compiler/func_scope.go b/pkg/compiler/func_scope.go index d3f3810fc..d9e81916d 100644 --- a/pkg/compiler/func_scope.go +++ b/pkg/compiler/func_scope.go @@ -27,7 +27,8 @@ type funcScope struct { variables []string // Local variables - locals map[string]int + locals map[string]int + arguments map[string]int // voidCalls are basically functions that return their value // into nothing. The stack has their return value but there @@ -51,6 +52,7 @@ func newFuncScope(decl *ast.FuncDecl, label uint16) *funcScope { decl: decl, label: label, locals: map[string]int{}, + arguments: map[string]int{}, voidCalls: map[*ast.CallExpr]bool{}, variables: []string{}, i: -1, @@ -84,7 +86,7 @@ func (c *funcScope) analyzeVoidCalls(node ast.Node) bool { return true } -func (c *funcScope) stackSize() int64 { +func (c *funcScope) countLocals() int { size := 0 ast.Inspect(c.decl, func(n ast.Node) bool { switch n := n.(type) { @@ -110,28 +112,38 @@ func (c *funcScope) stackSize() int64 { } return true }) + return size +} - numArgs := len(c.decl.Type.Params.List) - // Also take care of struct methods recv: e.g. (t Token).Foo(). +func (c *funcScope) countArgs() int { + n := c.decl.Type.Params.NumFields() if c.decl.Recv != nil { - numArgs += len(c.decl.Recv.List) + n += c.decl.Recv.NumFields() } + return n +} + +func (c *funcScope) stackSize() int64 { + size := c.countLocals() + numArgs := c.countArgs() return int64(size + numArgs + len(c.voidCalls)) } +// newVariable creates a new local variable or argument in the scope of the function. +func (c *funcScope) newVariable(t varType, name string) int { + c.i++ + switch t { + case varLocal: + c.locals[name] = c.i + case varArgument: + c.arguments[name] = c.i + default: + panic("invalid type") + } + return c.i +} + // newLocal creates a new local variable into the scope of the function. func (c *funcScope) newLocal(name string) int { - c.i++ - c.locals[name] = c.i - return c.i -} - -// loadLocal loads the position of a local variable inside the scope of the function. -func (c *funcScope) loadLocal(name string) int { - i, ok := c.locals[name] - if !ok { - // should emit a compiler warning. - return c.newLocal(name) - } - return i + return c.newVariable(varLocal, name) } diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index e038a584c..4bac91ab6 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -48,18 +48,18 @@ type rpcTestCase struct { check func(t *testing.T, e *executor, result interface{}) } -const testContractHash = "a4bea0d56fad00a972135d54b381516205d78484" +const testContractHash = "33f3421677fab7f620bd70582f468b4a18df1e5d" var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["c296c0929350d051b9b40cace54db5a3eac4b730a8851e958795d44918f23c08"]`, + params: `["3f1579e797fedb83b66a85fe21d427a119d0e25ef662582e56393fd0d70e4691"]`, result: func(e *executor) interface{} { return &result.ApplicationLog{} }, check: func(t *testing.T, e *executor, acc interface{}) { res, ok := acc.(*result.ApplicationLog) require.True(t, ok) - expectedTxHash, err := util.Uint256DecodeStringLE("c296c0929350d051b9b40cace54db5a3eac4b730a8851e958795d44918f23c08") + expectedTxHash, err := util.Uint256DecodeStringLE("3f1579e797fedb83b66a85fe21d427a119d0e25ef662582e56393fd0d70e4691") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) diff --git a/pkg/rpc/server/testdata/test_contract.avm b/pkg/rpc/server/testdata/test_contract.avm index 4afd3f630d0d5dfa4f342cb9d7bb6ca8bf1ede32..ed72f09df1f796e52c0b64ff121a8c13cbca7181 100755 GIT binary patch literal 704 zcmZ`%zfaph6m~z{Y5Sr4q8W}<+Hnx?ge?#JDKO)H7>);u@o1GoR(y|Fygv1c_+>w!(d1tNoNG9h^Z zO-b=;&dIjs*cS>ng3!klk+gu#5^Ov68wJ!EqG18sWf0W+*@!sykwP}ooQ^oDs)4os z@Wip7DyT6+1TjB+7Zq@HzdhMqI{vM7en4A>!8T@>h~S`$f*=Xg)Ev66{`NO4uXWvZ z;_<1w|MG)w32;|$OqK?CvXd`Q%Ha%Y5KE&lDd3(AEX|N=8C7a8O0}JZ8jKQ7;e(>m zyGy1h&r3>YNfG=JLVGSq>k1x}>066*M0v)<>NvC-XR33ZT*2d#(8esyq6qsqWTG2o zELinGW`3LMG39!-(U>i&7~CLVr$)@UQDJvJP)5!=)t!_#Af#3g)G@>IUf#;j(jxiz q^y^PxO&jVQM9drHzj8p6(UpQ~d*)(VJ_!>fFlTCeukCfI;5oNVA;@L` literal 858 zcmaJI)sR9Etng(f8v(~CbOKc1f>e;`#=mkPBz zi#IC%1D#lqx-nQ0NL~0HNFBNNd(S<-%CpNiOzVxA-W#hMULx|8dU@NU zoHMOrdUarYaaPveTQ-zkb$P$YOR}RViZ*cGwXQa7)&Ow>nUW3yr~lFUX}daicRSZh ziqci@IyQhBxBtVyeOtTD@h&U211`DR1-7~N@C)(TI&}> zj@Y@xRhNZz+%b zHue29$TEH4JpbNbwO#E;8~Wm!Mz!xeczU#EGZO+^i~xX{i?CcM(8={3+j66Xj*31YA(Z7PkJt@Ka*&Fy$_y#1s0;u87knTOod5s; diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index ea5e93376eec6226cb4b23ec976cb9624aa81009..16577dde5d13aba4d07033954f1b37be6fedb8dd 100644 GIT binary patch literal 113742 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 literal 113896 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

-qu>GS+`~OP~}Q>0E|Ue2r@)RyPl{uRbVP8xsDy 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 diff --git a/pkg/vm/context.go b/pkg/vm/context.go index 4c610ee9e..08c439ac4 100644 --- a/pkg/vm/context.go +++ b/pkg/vm/context.go @@ -34,6 +34,9 @@ type Context struct { // Alt stack pointer. astack *Stack + local *Slot + arguments *Slot + // Script hash of the prog. scriptHash util.Uint160 @@ -107,8 +110,11 @@ func (c *Context) Next() (opcode.Opcode, []byte, error) { } case opcode.JMP, opcode.JMPIF, opcode.JMPIFNOT, opcode.JMPEQ, opcode.JMPNE, opcode.JMPGT, opcode.JMPGE, opcode.JMPLT, opcode.JMPLE, - opcode.CALL, opcode.ISTYPE, opcode.CONVERT, opcode.NEWARRAYT: + opcode.CALL, opcode.ISTYPE, opcode.CONVERT, opcode.NEWARRAYT, + opcode.INITSSLOT, opcode.LDSFLD, opcode.STSFLD, opcode.LDARG, opcode.STARG, opcode.LDLOC, opcode.STLOC: numtoread = 1 + case opcode.INITSLOT: + numtoread = 2 case opcode.JMPL, opcode.JMPIFL, opcode.JMPIFNOTL, opcode.JMPEQL, opcode.JMPNEL, opcode.JMPGTL, opcode.JMPGEL, opcode.JMPLTL, opcode.JMPLEL, opcode.CALLL, opcode.SYSCALL, opcode.PUSHA: diff --git a/pkg/vm/opcode/opcode.go b/pkg/vm/opcode/opcode.go index 87fe98a53..026e1b01e 100644 --- a/pkg/vm/opcode/opcode.go +++ b/pkg/vm/opcode/opcode.go @@ -93,10 +93,57 @@ const ( REVERSE4 Opcode = 0x54 REVERSEN Opcode = 0x55 - // Old stack opcodes - DUPFROMALTSTACK Opcode = 0x6A - TOALTSTACK Opcode = 0x6B - FROMALTSTACK Opcode = 0x6C + // Slots + INITSSLOT Opcode = 0x56 + INITSLOT Opcode = 0x57 + LDSFLD0 Opcode = 0x58 + LDSFLD1 Opcode = 0x59 + LDSFLD2 Opcode = 0x5A + LDSFLD3 Opcode = 0x5B + LDSFLD4 Opcode = 0x5C + LDSFLD5 Opcode = 0x5D + LDSFLD6 Opcode = 0x5E + LDSFLD Opcode = 0x5F + STSFLD0 Opcode = 0x60 + STSFLD1 Opcode = 0x61 + STSFLD2 Opcode = 0x62 + STSFLD3 Opcode = 0x63 + STSFLD4 Opcode = 0x64 + STSFLD5 Opcode = 0x65 + STSFLD6 Opcode = 0x66 + STSFLD Opcode = 0x67 + LDLOC0 Opcode = 0x68 + LDLOC1 Opcode = 0x69 + LDLOC2 Opcode = 0x6A + LDLOC3 Opcode = 0x6B + LDLOC4 Opcode = 0x6C + LDLOC5 Opcode = 0x6D + LDLOC6 Opcode = 0x6E + LDLOC Opcode = 0x6F + STLOC0 Opcode = 0x70 + STLOC1 Opcode = 0x71 + STLOC2 Opcode = 0x72 + STLOC3 Opcode = 0x73 + STLOC4 Opcode = 0x74 + STLOC5 Opcode = 0x75 + STLOC6 Opcode = 0x76 + STLOC Opcode = 0x77 + LDARG0 Opcode = 0x78 + LDARG1 Opcode = 0x79 + LDARG2 Opcode = 0x7A + LDARG3 Opcode = 0x7B + LDARG4 Opcode = 0x7C + LDARG5 Opcode = 0x7D + LDARG6 Opcode = 0x7E + LDARG Opcode = 0x7F + STARG0 Opcode = 0x80 + STARG1 Opcode = 0x81 + STARG2 Opcode = 0x82 + STARG3 Opcode = 0x83 + STARG4 Opcode = 0x84 + STARG5 Opcode = 0x85 + STARG6 Opcode = 0x86 + STARG Opcode = 0x87 // Splice CAT Opcode = 0x8B diff --git a/pkg/vm/opcode/opcode_string.go b/pkg/vm/opcode/opcode_string.go index 747556a7f..74852c03e 100644 --- a/pkg/vm/opcode/opcode_string.go +++ b/pkg/vm/opcode/opcode_string.go @@ -82,9 +82,56 @@ func _() { _ = x[REVERSE3-83] _ = x[REVERSE4-84] _ = x[REVERSEN-85] - _ = x[DUPFROMALTSTACK-106] - _ = x[TOALTSTACK-107] - _ = x[FROMALTSTACK-108] + _ = x[INITSSLOT-86] + _ = x[INITSLOT-87] + _ = x[LDSFLD0-88] + _ = x[LDSFLD1-89] + _ = x[LDSFLD2-90] + _ = x[LDSFLD3-91] + _ = x[LDSFLD4-92] + _ = x[LDSFLD5-93] + _ = x[LDSFLD6-94] + _ = x[LDSFLD-95] + _ = x[STSFLD0-96] + _ = x[STSFLD1-97] + _ = x[STSFLD2-98] + _ = x[STSFLD3-99] + _ = x[STSFLD4-100] + _ = x[STSFLD5-101] + _ = x[STSFLD6-102] + _ = x[STSFLD-103] + _ = x[LDLOC0-104] + _ = x[LDLOC1-105] + _ = x[LDLOC2-106] + _ = x[LDLOC3-107] + _ = x[LDLOC4-108] + _ = x[LDLOC5-109] + _ = x[LDLOC6-110] + _ = x[LDLOC-111] + _ = x[STLOC0-112] + _ = x[STLOC1-113] + _ = x[STLOC2-114] + _ = x[STLOC3-115] + _ = x[STLOC4-116] + _ = x[STLOC5-117] + _ = x[STLOC6-118] + _ = x[STLOC-119] + _ = x[LDARG0-120] + _ = x[LDARG1-121] + _ = x[LDARG2-122] + _ = x[LDARG3-123] + _ = x[LDARG4-124] + _ = x[LDARG5-125] + _ = x[LDARG6-126] + _ = x[LDARG-127] + _ = x[STARG0-128] + _ = x[STARG1-129] + _ = x[STARG2-130] + _ = x[STARG3-131] + _ = x[STARG4-132] + _ = x[STARG5-133] + _ = x[STARG6-134] + _ = x[STARG-135] _ = x[CAT-139] _ = x[SUBSTR-140] _ = x[LEFT-141] @@ -143,7 +190,7 @@ func _() { _ = x[CONVERT-219] } -const _Opcode_name = "PUSHINT8PUSHINT16PUSHINT32PUSHINT64PUSHINT128PUSHINT256PUSHAPUSHNULLPUSHDATA1PUSHDATA2PUSHDATA4PUSHM1PUSH0PUSH1PUSH2PUSH3PUSH4PUSH5PUSH6PUSH7PUSH8PUSH9PUSH10PUSH11PUSH12PUSH13PUSH14PUSH15PUSH16NOPJMPJMPLJMPIFJMPIFLJMPIFNOTJMPIFNOTLJMPEQJMPEQLJMPNEJMPNELJMPGTJMPGTLJMPGEJMPGELJMPLTJMPLTLJMPLEJMPLELCALLCALLLCALLAABORTASSERTTHROWRETSYSCALLDEPTHDROPNIPXDROPCLEARDUPOVERPICKTUCKSWAPOLDPUSH1ROLLREVERSE3REVERSE4REVERSENDUPFROMALTSTACKTOALTSTACKFROMALTSTACKCATSUBSTRLEFTRIGHTINVERTANDORXOREQUALNOTEQUALSIGNABSNEGATEINCDECADDSUBMULDIVMODSHLSHRNOTBOOLANDBOOLORNZNUMEQUALNUMNOTEQUALLTLTEGTGTEMINMAXWITHINPACKUNPACKNEWARRAY0NEWARRAYNEWARRAYTNEWSTRUCT0NEWSTRUCTNEWMAPSIZEHASKEYKEYSVALUESPICKITEMAPPENDSETITEMREVERSEITEMSREMOVECLEARITEMSISNULLISTYPECONVERT" +const _Opcode_name = "PUSHINT8PUSHINT16PUSHINT32PUSHINT64PUSHINT128PUSHINT256PUSHAPUSHNULLPUSHDATA1PUSHDATA2PUSHDATA4PUSHM1PUSH0PUSH1PUSH2PUSH3PUSH4PUSH5PUSH6PUSH7PUSH8PUSH9PUSH10PUSH11PUSH12PUSH13PUSH14PUSH15PUSH16NOPJMPJMPLJMPIFJMPIFLJMPIFNOTJMPIFNOTLJMPEQJMPEQLJMPNEJMPNELJMPGTJMPGTLJMPGEJMPGELJMPLTJMPLTLJMPLEJMPLELCALLCALLLCALLAABORTASSERTTHROWRETSYSCALLDEPTHDROPNIPXDROPCLEARDUPOVERPICKTUCKSWAPOLDPUSH1ROLLREVERSE3REVERSE4REVERSENINITSSLOTINITSLOTLDSFLD0LDSFLD1LDSFLD2LDSFLD3LDSFLD4LDSFLD5LDSFLD6LDSFLDSTSFLD0STSFLD1STSFLD2STSFLD3STSFLD4STSFLD5STSFLD6STSFLDLDLOC0LDLOC1LDLOC2LDLOC3LDLOC4LDLOC5LDLOC6LDLOCSTLOC0STLOC1STLOC2STLOC3STLOC4STLOC5STLOC6STLOCLDARG0LDARG1LDARG2LDARG3LDARG4LDARG5LDARG6LDARGSTARG0STARG1STARG2STARG3STARG4STARG5STARG6STARGCATSUBSTRLEFTRIGHTINVERTANDORXOREQUALNOTEQUALSIGNABSNEGATEINCDECADDSUBMULDIVMODSHLSHRNOTBOOLANDBOOLORNZNUMEQUALNUMNOTEQUALLTLTEGTGTEMINMAXWITHINPACKUNPACKNEWARRAY0NEWARRAYNEWARRAYTNEWSTRUCT0NEWSTRUCTNEWMAPSIZEHASKEYKEYSVALUESPICKITEMAPPENDSETITEMREVERSEITEMSREMOVECLEARITEMSISNULLISTYPECONVERT" var _Opcode_map = map[Opcode]string{ 0: _Opcode_name[0:8], @@ -217,65 +264,112 @@ var _Opcode_map = map[Opcode]string{ 83: _Opcode_name[390:398], 84: _Opcode_name[398:406], 85: _Opcode_name[406:414], - 106: _Opcode_name[414:429], - 107: _Opcode_name[429:439], - 108: _Opcode_name[439:451], - 139: _Opcode_name[451:454], - 140: _Opcode_name[454:460], - 141: _Opcode_name[460:464], - 142: _Opcode_name[464:469], - 144: _Opcode_name[469:475], - 145: _Opcode_name[475:478], - 146: _Opcode_name[478:480], - 147: _Opcode_name[480:483], - 151: _Opcode_name[483:488], - 152: _Opcode_name[488:496], - 153: _Opcode_name[496:500], - 154: _Opcode_name[500:503], - 155: _Opcode_name[503:509], - 156: _Opcode_name[509:512], - 157: _Opcode_name[512:515], - 158: _Opcode_name[515:518], - 159: _Opcode_name[518:521], - 160: _Opcode_name[521:524], - 161: _Opcode_name[524:527], - 162: _Opcode_name[527:530], - 168: _Opcode_name[530:533], - 169: _Opcode_name[533:536], - 170: _Opcode_name[536:539], - 171: _Opcode_name[539:546], - 172: _Opcode_name[546:552], - 177: _Opcode_name[552:554], - 179: _Opcode_name[554:562], - 180: _Opcode_name[562:573], - 181: _Opcode_name[573:575], - 182: _Opcode_name[575:578], - 183: _Opcode_name[578:580], - 184: _Opcode_name[580:583], - 185: _Opcode_name[583:586], - 186: _Opcode_name[586:589], - 187: _Opcode_name[589:595], - 192: _Opcode_name[595:599], - 193: _Opcode_name[599:605], - 194: _Opcode_name[605:614], - 195: _Opcode_name[614:622], - 196: _Opcode_name[622:631], - 197: _Opcode_name[631:641], - 198: _Opcode_name[641:650], - 200: _Opcode_name[650:656], - 202: _Opcode_name[656:660], - 203: _Opcode_name[660:666], - 204: _Opcode_name[666:670], - 205: _Opcode_name[670:676], - 206: _Opcode_name[676:684], - 207: _Opcode_name[684:690], - 208: _Opcode_name[690:697], - 209: _Opcode_name[697:709], - 210: _Opcode_name[709:715], - 211: _Opcode_name[715:725], - 216: _Opcode_name[725:731], - 217: _Opcode_name[731:737], - 219: _Opcode_name[737:744], + 86: _Opcode_name[414:423], + 87: _Opcode_name[423:431], + 88: _Opcode_name[431:438], + 89: _Opcode_name[438:445], + 90: _Opcode_name[445:452], + 91: _Opcode_name[452:459], + 92: _Opcode_name[459:466], + 93: _Opcode_name[466:473], + 94: _Opcode_name[473:480], + 95: _Opcode_name[480:486], + 96: _Opcode_name[486:493], + 97: _Opcode_name[493:500], + 98: _Opcode_name[500:507], + 99: _Opcode_name[507:514], + 100: _Opcode_name[514:521], + 101: _Opcode_name[521:528], + 102: _Opcode_name[528:535], + 103: _Opcode_name[535:541], + 104: _Opcode_name[541:547], + 105: _Opcode_name[547:553], + 106: _Opcode_name[553:559], + 107: _Opcode_name[559:565], + 108: _Opcode_name[565:571], + 109: _Opcode_name[571:577], + 110: _Opcode_name[577:583], + 111: _Opcode_name[583:588], + 112: _Opcode_name[588:594], + 113: _Opcode_name[594:600], + 114: _Opcode_name[600:606], + 115: _Opcode_name[606:612], + 116: _Opcode_name[612:618], + 117: _Opcode_name[618:624], + 118: _Opcode_name[624:630], + 119: _Opcode_name[630:635], + 120: _Opcode_name[635:641], + 121: _Opcode_name[641:647], + 122: _Opcode_name[647:653], + 123: _Opcode_name[653:659], + 124: _Opcode_name[659:665], + 125: _Opcode_name[665:671], + 126: _Opcode_name[671:677], + 127: _Opcode_name[677:682], + 128: _Opcode_name[682:688], + 129: _Opcode_name[688:694], + 130: _Opcode_name[694:700], + 131: _Opcode_name[700:706], + 132: _Opcode_name[706:712], + 133: _Opcode_name[712:718], + 134: _Opcode_name[718:724], + 135: _Opcode_name[724:729], + 139: _Opcode_name[729:732], + 140: _Opcode_name[732:738], + 141: _Opcode_name[738:742], + 142: _Opcode_name[742:747], + 144: _Opcode_name[747:753], + 145: _Opcode_name[753:756], + 146: _Opcode_name[756:758], + 147: _Opcode_name[758:761], + 151: _Opcode_name[761:766], + 152: _Opcode_name[766:774], + 153: _Opcode_name[774:778], + 154: _Opcode_name[778:781], + 155: _Opcode_name[781:787], + 156: _Opcode_name[787:790], + 157: _Opcode_name[790:793], + 158: _Opcode_name[793:796], + 159: _Opcode_name[796:799], + 160: _Opcode_name[799:802], + 161: _Opcode_name[802:805], + 162: _Opcode_name[805:808], + 168: _Opcode_name[808:811], + 169: _Opcode_name[811:814], + 170: _Opcode_name[814:817], + 171: _Opcode_name[817:824], + 172: _Opcode_name[824:830], + 177: _Opcode_name[830:832], + 179: _Opcode_name[832:840], + 180: _Opcode_name[840:851], + 181: _Opcode_name[851:853], + 182: _Opcode_name[853:856], + 183: _Opcode_name[856:858], + 184: _Opcode_name[858:861], + 185: _Opcode_name[861:864], + 186: _Opcode_name[864:867], + 187: _Opcode_name[867:873], + 192: _Opcode_name[873:877], + 193: _Opcode_name[877:883], + 194: _Opcode_name[883:892], + 195: _Opcode_name[892:900], + 196: _Opcode_name[900:909], + 197: _Opcode_name[909:919], + 198: _Opcode_name[919:928], + 200: _Opcode_name[928:934], + 202: _Opcode_name[934:938], + 203: _Opcode_name[938:944], + 204: _Opcode_name[944:948], + 205: _Opcode_name[948:954], + 206: _Opcode_name[954:962], + 207: _Opcode_name[962:968], + 208: _Opcode_name[968:975], + 209: _Opcode_name[975:987], + 210: _Opcode_name[987:993], + 211: _Opcode_name[993:1003], + 216: _Opcode_name[1003:1009], + 217: _Opcode_name[1009:1015], + 219: _Opcode_name[1015:1022], } func (i Opcode) String() string { diff --git a/pkg/vm/vm.go b/pkg/vm/vm.go index c96de3977..07ca81046 100644 --- a/pkg/vm/vm.go +++ b/pkg/vm/vm.go @@ -75,6 +75,8 @@ type VM struct { estack *Stack // execution stack. astack *Stack // alt stack. + static *Slot + // Hash to verify in CHECKSIG/CHECKMULTISIG. checkhash []byte @@ -557,15 +559,80 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro } v.estack.PushVal(result) - // Stack operations. - case opcode.TOALTSTACK: - v.astack.Push(v.estack.Pop()) + case opcode.INITSSLOT: + if v.static != nil { + panic("already initialized") + } + if parameter[0] == 0 { + panic("zero argument") + } + v.static = v.newSlot(int(parameter[0])) - case opcode.FROMALTSTACK: - v.estack.Push(v.astack.Pop()) + case opcode.INITSLOT: + if ctx.local != nil || ctx.arguments != nil { + panic("already initialized") + } + if parameter[0] == 0 && parameter[1] == 0 { + panic("zero argument") + } + if parameter[0] > 0 { + ctx.local = v.newSlot(int(parameter[0])) + } + if parameter[1] > 0 { + sz := int(parameter[1]) + ctx.arguments = v.newSlot(sz) + for i := 0; i < sz; i++ { + ctx.arguments.Set(i, v.estack.Pop().Item()) + } + } - case opcode.DUPFROMALTSTACK: - v.estack.Push(v.astack.Dup(0)) + case opcode.LDSFLD0, opcode.LDSFLD1, opcode.LDSFLD2, opcode.LDSFLD3, opcode.LDSFLD4, opcode.LDSFLD5, opcode.LDSFLD6: + item := v.static.Get(int(op - opcode.LDSFLD0)) + v.estack.PushVal(item) + + case opcode.LDSFLD: + item := v.static.Get(int(parameter[0])) + v.estack.PushVal(item) + + case opcode.STSFLD0, opcode.STSFLD1, opcode.STSFLD2, opcode.STSFLD3, opcode.STSFLD4, opcode.STSFLD5, opcode.STSFLD6: + item := v.estack.Pop().Item() + v.static.Set(int(op-opcode.STSFLD0), item) + + case opcode.STSFLD: + item := v.estack.Pop().Item() + v.static.Set(int(parameter[0]), item) + + case opcode.LDLOC0, opcode.LDLOC1, opcode.LDLOC2, opcode.LDLOC3, opcode.LDLOC4, opcode.LDLOC5, opcode.LDLOC6: + item := ctx.local.Get(int(op - opcode.LDLOC0)) + v.estack.PushVal(item) + + case opcode.LDLOC: + item := ctx.local.Get(int(parameter[0])) + v.estack.PushVal(item) + + case opcode.STLOC0, opcode.STLOC1, opcode.STLOC2, opcode.STLOC3, opcode.STLOC4, opcode.STLOC5, opcode.STLOC6: + item := v.estack.Pop().Item() + ctx.local.Set(int(op-opcode.STLOC0), item) + + case opcode.STLOC: + item := v.estack.Pop().Item() + ctx.local.Set(int(parameter[0]), item) + + case opcode.LDARG0, opcode.LDARG1, opcode.LDARG2, opcode.LDARG3, opcode.LDARG4, opcode.LDARG5, opcode.LDARG6: + item := ctx.arguments.Get(int(op - opcode.LDARG0)) + v.estack.PushVal(item) + + case opcode.LDARG: + item := ctx.arguments.Get(int(parameter[0])) + v.estack.PushVal(item) + + case opcode.STARG0, opcode.STARG1, opcode.STARG2, opcode.STARG3, opcode.STARG4, opcode.STARG5, opcode.STARG6: + item := v.estack.Pop().Item() + ctx.arguments.Set(int(op-opcode.STARG0), item) + + case opcode.STARG: + item := v.estack.Pop().Item() + ctx.arguments.Set(int(parameter[0]), item) case opcode.CAT: b := v.estack.Pop().Bytes() @@ -1134,8 +1201,9 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro case opcode.CALL, opcode.CALLL: v.checkInvocationStackSize() - newCtx := ctx.Copy() + newCtx.local = nil + newCtx.arguments = nil newCtx.rvcount = -1 v.istack.PushVal(newCtx) @@ -1149,6 +1217,8 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro } newCtx := ctx.Copy() + newCtx.local = nil + newCtx.arguments = nil newCtx.rvcount = -1 v.istack.PushVal(newCtx) v.jumpIf(newCtx, ptr.pos, true) diff --git a/pkg/vm/vm_test.go b/pkg/vm/vm_test.go index 262e77cc5..a8d08c23d 100644 --- a/pkg/vm/vm_test.go +++ b/pkg/vm/vm_test.go @@ -370,10 +370,12 @@ func appendBigStruct(size uint16) []opcode.Opcode { } return append(prog, + opcode.INITSSLOT, 1, opcode.PUSHINT16, opcode.Opcode(size), opcode.Opcode(size>>8), // LE opcode.PACK, opcode.NEWSTRUCT, + opcode.STSFLD0, opcode.LDSFLD0, opcode.DUP, - opcode.PUSH0, opcode.NEWARRAY, opcode.TOALTSTACK, opcode.DUPFROMALTSTACK, + opcode.PUSH0, opcode.NEWARRAY, opcode.SWAP, opcode.APPEND, opcode.RET) } @@ -397,17 +399,17 @@ func TestStackLimit(t *testing.T) { }{ {opcode.PUSH2, 1}, {opcode.NEWARRAY, 3}, // array + 2 items - {opcode.TOALTSTACK, 3}, - {opcode.DUPFROMALTSTACK, 4}, + {opcode.STSFLD0, 3}, + {opcode.LDSFLD0, 4}, {opcode.NEWSTRUCT, 6}, // all items are copied {opcode.NEWMAP, 7}, {opcode.DUP, 8}, {opcode.PUSH2, 9}, - {opcode.DUPFROMALTSTACK, 10}, + {opcode.LDSFLD0, 10}, {opcode.SETITEM, 8}, // -3 items and 1 new element in map {opcode.DUP, 9}, {opcode.PUSH2, 10}, - {opcode.DUPFROMALTSTACK, 11}, + {opcode.LDSFLD0, 11}, {opcode.SETITEM, 8}, // -3 items and no new elements in map {opcode.DUP, 9}, {opcode.PUSH2, 10}, @@ -415,15 +417,18 @@ func TestStackLimit(t *testing.T) { {opcode.DROP, 6}, // DROP map with no elements } - prog := make([]opcode.Opcode, len(expected)) + prog := make([]opcode.Opcode, len(expected)+2) + prog[0] = opcode.INITSSLOT + prog[1] = 1 for i := range expected { - prog[i] = expected[i].inst + prog[i+2] = expected[i].inst } vm := load(makeProgram(prog...)) + require.NoError(t, vm.Step(), "failed to initialize static slot") for i := range expected { require.NoError(t, vm.Step()) - require.Equal(t, expected[i].size, vm.refs.size) + require.Equal(t, expected[i].size, vm.refs.size, "i: %d", i) } } @@ -477,18 +482,18 @@ func TestPushData4BigN(t *testing.T) { } func getEnumeratorProg(n int, isIter bool) (prog []byte) { - prog = append(prog, byte(opcode.TOALTSTACK)) + prog = []byte{byte(opcode.INITSSLOT), 1, byte(opcode.STSFLD0)} for i := 0; i < n; i++ { - prog = append(prog, byte(opcode.DUPFROMALTSTACK)) + prog = append(prog, byte(opcode.LDSFLD0)) prog = append(prog, getSyscallProg("Neo.Enumerator.Next")...) - prog = append(prog, byte(opcode.DUPFROMALTSTACK)) + prog = append(prog, byte(opcode.LDSFLD0)) prog = append(prog, getSyscallProg("Neo.Enumerator.Value")...) if isIter { - prog = append(prog, byte(opcode.DUPFROMALTSTACK)) + prog = append(prog, byte(opcode.LDSFLD0)) prog = append(prog, getSyscallProg("Neo.Iterator.Key")...) } } - prog = append(prog, byte(opcode.DUPFROMALTSTACK)) + prog = append(prog, byte(opcode.LDSFLD0)) prog = append(prog, getSyscallProg("Neo.Enumerator.Next")...) return @@ -583,7 +588,6 @@ func TestIteratorConcat(t *testing.T) { func TestIteratorKeys(t *testing.T) { prog := getSyscallProg("Neo.Iterator.Create") prog = append(prog, getSyscallProg("Neo.Iterator.Keys")...) - prog = append(prog, byte(opcode.TOALTSTACK), byte(opcode.DUPFROMALTSTACK)) prog = append(prog, getEnumeratorProg(2, false)...) v := load(prog) @@ -604,7 +608,6 @@ func TestIteratorKeys(t *testing.T) { func TestIteratorValues(t *testing.T) { prog := getSyscallProg("Neo.Iterator.Create") prog = append(prog, getSyscallProg("Neo.Iterator.Values")...) - prog = append(prog, byte(opcode.TOALTSTACK), byte(opcode.DUPFROMALTSTACK)) prog = append(prog, getEnumeratorProg(2, false)...) v := load(prog) @@ -716,11 +719,11 @@ func TestSerializeArrayBad(t *testing.T) { } func TestSerializeDupInteger(t *testing.T) { - prog := []byte{ - byte(opcode.PUSH0), byte(opcode.NEWARRAY), - byte(opcode.DUP), byte(opcode.PUSH2), byte(opcode.DUP), byte(opcode.TOALTSTACK), byte(opcode.APPEND), - byte(opcode.DUP), byte(opcode.FROMALTSTACK), byte(opcode.APPEND), - } + prog := makeProgram( + opcode.PUSH0, opcode.NEWARRAY, opcode.INITSSLOT, 1, + opcode.DUP, opcode.PUSH2, opcode.DUP, opcode.STSFLD0, opcode.APPEND, + opcode.DUP, opcode.LDSFLD0, opcode.APPEND, + ) vm := load(append(prog, getSerializeProg()...)) runVM(t, vm) @@ -801,9 +804,10 @@ func TestSerializeInterop(t *testing.T) { func callNTimes(n uint16) []byte { return makeProgram( opcode.PUSHINT16, opcode.Opcode(n), opcode.Opcode(n>>8), // little-endian - opcode.TOALTSTACK, opcode.DUPFROMALTSTACK, + opcode.INITSSLOT, 1, + opcode.STSFLD0, opcode.LDSFLD0, opcode.JMPIF, 0x3, opcode.RET, - opcode.FROMALTSTACK, opcode.DEC, + opcode.LDSFLD0, opcode.DEC, opcode.CALL, 0xF9) // -7 -> JMP to TOALTSTACK) } @@ -1171,9 +1175,10 @@ func testNEWARRAYIssue437(t *testing.T, i1, i2 opcode.Opcode, appended bool) { prog := makeProgram( opcode.PUSH2, i1, opcode.DUP, opcode.PUSH3, opcode.APPEND, - opcode.TOALTSTACK, opcode.DUPFROMALTSTACK, i2, + opcode.INITSSLOT, 1, + opcode.STSFLD0, opcode.LDSFLD0, i2, opcode.DUP, opcode.PUSH4, opcode.APPEND, - opcode.FROMALTSTACK, opcode.PUSH5, opcode.APPEND) + opcode.LDSFLD0, opcode.PUSH5, opcode.APPEND) vm := load(prog) vm.Run() @@ -1233,8 +1238,8 @@ func TestAPPEND(t *testing.T) { } func TestAPPENDCloneStruct(t *testing.T) { - prog := makeProgram(opcode.DUP, opcode.PUSH0, opcode.NEWSTRUCT, opcode.TOALTSTACK, - opcode.DUPFROMALTSTACK, opcode.APPEND, opcode.FROMALTSTACK, opcode.PUSH1, opcode.APPEND) + prog := makeProgram(opcode.DUP, opcode.PUSH0, opcode.NEWSTRUCT, opcode.INITSSLOT, 1, opcode.STSFLD0, + opcode.LDSFLD0, opcode.APPEND, opcode.LDSFLD0, opcode.PUSH1, opcode.APPEND) arr := []StackItem{&StructItem{[]StackItem{}}} runWithArgs(t, prog, NewArrayItem(arr), NewArrayItem(nil)) } @@ -2361,6 +2366,42 @@ func TestBitAndNumericOpcodes(t *testing.T) { } } +func TestSLOTOpcodes(t *testing.T) { + t.Run("Fail", func(t *testing.T) { + t.Run("EmptyStatic", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 0), nil)) + t.Run("EmptyLocal", getTestFuncForVM(makeProgram(opcode.INITSLOT, 0, 0), nil)) + t.Run("NotEnoughArguments", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 0, 2), nil, 1)) + t.Run("DoubleStatic", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 1, opcode.INITSSLOT, 1), nil)) + t.Run("DoubleLocal", getTestFuncForVM(makeProgram(opcode.INITSLOT, 1, 0, opcode.INITSLOT, 1, 0), nil)) + t.Run("DoubleArgument", getTestFuncForVM(makeProgram(opcode.INITSLOT, 0, 1, opcode.INITSLOT, 0, 1), nil, 1, 2)) + t.Run("LoadBigStatic", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 2, opcode.LDSFLD2), nil)) + t.Run("LoadBigLocal", getTestFuncForVM(makeProgram(opcode.INITSLOT, 2, 2, opcode.LDLOC2), nil, 1, 2)) + t.Run("LoadBigArgument", getTestFuncForVM(makeProgram(opcode.INITSLOT, 2, 2, opcode.LDARG2), nil, 1, 2)) + t.Run("StoreBigStatic", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 2, opcode.STSFLD2), nil, 0)) + t.Run("StoreBigLocal", getTestFuncForVM(makeProgram(opcode.INITSLOT, 2, 2, opcode.STLOC2), nil, 0, 1, 2)) + t.Run("StoreBigArgument", getTestFuncForVM(makeProgram(opcode.INITSLOT, 2, 2, opcode.STARG2), nil, 0, 1, 2)) + }) + + t.Run("Default", func(t *testing.T) { + t.Run("DefaultStatic", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 2, opcode.LDSFLD1), NullItem{})) + t.Run("DefaultLocal", getTestFuncForVM(makeProgram(opcode.INITSLOT, 2, 0, opcode.LDLOC1), NullItem{})) + t.Run("DefaultArgument", getTestFuncForVM(makeProgram(opcode.INITSLOT, 0, 2, opcode.LDARG1), 2, 2, 1)) + }) + + t.Run("Set/Get", func(t *testing.T) { + t.Run("FailCrossLoads", func(t *testing.T) { + t.Run("Static/Local", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 2, opcode.LDLOC1), nil)) + t.Run("Static/Argument", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 2, opcode.LDARG1), nil)) + t.Run("Local/Argument", getTestFuncForVM(makeProgram(opcode.INITSLOT, 0, 2, opcode.LDLOC1), nil)) + t.Run("Argument/Local", getTestFuncForVM(makeProgram(opcode.INITSLOT, 2, 0, opcode.LDARG1), nil)) + }) + + t.Run("Static", getTestFuncForVM(makeProgram(opcode.INITSSLOT, 8, opcode.STSFLD, 7, opcode.LDSFLD, 7), 42, 42)) + t.Run("Local", getTestFuncForVM(makeProgram(opcode.INITSLOT, 8, 0, opcode.STLOC, 7, opcode.LDLOC, 7), 42, 42)) + t.Run("Argument", getTestFuncForVM(makeProgram(opcode.INITSLOT, 0, 2, opcode.STARG, 1, opcode.LDARG, 1), 42, 42, 1, 2)) + }) +} + func makeProgram(opcodes ...opcode.Opcode) []byte { prog := make([]byte, len(opcodes)+1) // RET for i := 0; i < len(opcodes); i++ {