From 261ff3c65518197983a57b4d03ab52f3d5f3295b Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Wed, 22 Jul 2020 13:20:30 +0300 Subject: [PATCH 1/2] vm: remove alt.stack It is no longer present in NEO3. --- pkg/compiler/vm_test.go | 1 - pkg/vm/context.go | 3 --- pkg/vm/vm.go | 13 ------------- pkg/vm/vm_test.go | 1 - 4 files changed, 18 deletions(-) diff --git a/pkg/compiler/vm_test.go b/pkg/compiler/vm_test.go index 65f6aaab1..89d0d40c0 100644 --- a/pkg/compiler/vm_test.go +++ b/pkg/compiler/vm_test.go @@ -51,7 +51,6 @@ func evalWithArgs(t *testing.T, src string, op []byte, args []stackitem.Item, re func assertResult(t *testing.T, vm *vm.VM, result interface{}) { assert.Equal(t, result, vm.PopResult()) - assert.Equal(t, 0, vm.Astack().Len()) assert.Equal(t, 0, vm.Istack().Len()) } diff --git a/pkg/vm/context.go b/pkg/vm/context.go index 4f6ddadf7..146077268 100644 --- a/pkg/vm/context.go +++ b/pkg/vm/context.go @@ -32,9 +32,6 @@ type Context struct { // Evaluation stack pointer. estack *Stack - // Alt stack pointer. - astack *Stack - static *Slot local *Slot arguments *Slot diff --git a/pkg/vm/vm.go b/pkg/vm/vm.go index 7ce280883..673c5921b 100644 --- a/pkg/vm/vm.go +++ b/pkg/vm/vm.go @@ -70,7 +70,6 @@ type VM struct { istack *Stack // invocation stack. estack *Stack // execution stack. - astack *Stack // alt stack. refs *refCounter @@ -100,7 +99,6 @@ func NewWithTrigger(t trigger.Type) *VM { } vm.estack = vm.newItemStack("evaluation") - vm.astack = vm.newItemStack("alt") vm.RegisterInteropGetter(getDefaultVMInterop) return vm @@ -142,11 +140,6 @@ func (v *VM) Estack() *Stack { return v.estack } -// Astack returns the alt stack so interop hooks can utilize this. -func (v *VM) Astack() *Stack { - return v.astack -} - // Istack returns the invocation stack so interop hooks can utilize this. func (v *VM) Istack() *Stack { return v.istack @@ -264,7 +257,6 @@ func (v *VM) Load(prog []byte) { // Clear all stacks and state, it could be a reload. v.istack.Clear() v.estack.Clear() - v.astack.Clear() v.state = noneState v.gasConsumed = 0 v.LoadScript(prog) @@ -281,7 +273,6 @@ func (v *VM) LoadScript(b []byte) { func (v *VM) LoadScriptWithFlags(b []byte, f smartcontract.CallFlag) { ctx := NewContext(b) ctx.estack = v.estack - ctx.astack = v.astack ctx.callFlag = f v.istack.PushVal(ctx) } @@ -319,9 +310,6 @@ func (v *VM) PopResult() interface{} { // Stack returns json formatted representation of the given stack. func (v *VM) Stack(n string) string { var s *Stack - if n == "astack" { - s = v.astack - } if n == "istack" { s = v.istack } @@ -1304,7 +1292,6 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro newEstack.Push(elem) } v.estack = newEstack - v.astack = v.Context().astack } case opcode.NEWMAP: diff --git a/pkg/vm/vm_test.go b/pkg/vm/vm_test.go index fe324aa7c..359d26488 100644 --- a/pkg/vm/vm_test.go +++ b/pkg/vm/vm_test.go @@ -149,7 +149,6 @@ func TestPushBytes1to75(t *testing.T) { errExec := vm.execute(nil, opcode.RET, nil) require.NoError(t, errExec) - assert.Equal(t, 0, vm.astack.Len()) assert.Equal(t, 0, vm.istack.Len()) buf.Reset() } From 58a594e3d4ebfe4dffef5035abb8609bad8c80d3 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Wed, 22 Jul 2020 13:25:50 +0300 Subject: [PATCH 2/2] vm: remove rvcount It isn't used anymore. --- pkg/vm/context.go | 4 ---- pkg/vm/vm.go | 12 ++---------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/pkg/vm/context.go b/pkg/vm/context.go index 146077268..fba31f11e 100644 --- a/pkg/vm/context.go +++ b/pkg/vm/context.go @@ -26,9 +26,6 @@ type Context struct { // Breakpoints. breakPoints []int - // Return value count, -1 is unspecified. - rvcount int - // Evaluation stack pointer. estack *Stack @@ -53,7 +50,6 @@ func NewContext(b []byte) *Context { return &Context{ prog: b, breakPoints: []int{}, - rvcount: -1, } } diff --git a/pkg/vm/vm.go b/pkg/vm/vm.go index 673c5921b..bd5ab19fc 100644 --- a/pkg/vm/vm.go +++ b/pkg/vm/vm.go @@ -1233,7 +1233,6 @@ 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) offset := v.getJumpOffset(newCtx, parameter) @@ -1248,7 +1247,6 @@ 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.Position(), true) @@ -1270,13 +1268,9 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro } case opcode.RET: - oldCtx := v.istack.Pop().Value().(*Context) - rvcount := oldCtx.rvcount + v.istack.Pop() oldEstack := v.estack - if rvcount > 0 && oldEstack.Len() < rvcount { - panic("missing some return elements") - } if v.istack.Len() == 0 { v.state = haltState break @@ -1284,9 +1278,7 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro newEstack := v.Context().estack if oldEstack != newEstack { - if rvcount < 0 { - rvcount = oldEstack.Len() - } + rvcount := oldEstack.Len() for i := rvcount; i > 0; i-- { elem := oldEstack.RemoveAt(i - 1) newEstack.Push(elem)