vm: implement PUSHNULL opcode
This commit is contained in:
parent
e50b529631
commit
3db030bbb6
3 changed files with 13 additions and 0 deletions
|
@ -89,6 +89,7 @@ const (
|
||||||
PUSHDATA2 Opcode = 0x4D
|
PUSHDATA2 Opcode = 0x4D
|
||||||
PUSHDATA4 Opcode = 0x4E
|
PUSHDATA4 Opcode = 0x4E
|
||||||
PUSHM1 Opcode = 0x4F
|
PUSHM1 Opcode = 0x4F
|
||||||
|
PUSHNULL Opcode = 0x50
|
||||||
PUSH1 Opcode = 0x51
|
PUSH1 Opcode = 0x51
|
||||||
PUSHT Opcode = PUSH1
|
PUSHT Opcode = PUSH1
|
||||||
PUSH2 Opcode = 0x52
|
PUSH2 Opcode = 0x52
|
||||||
|
|
|
@ -560,6 +560,9 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro
|
||||||
case opcode.PUSHDATA1, opcode.PUSHDATA2, opcode.PUSHDATA4:
|
case opcode.PUSHDATA1, opcode.PUSHDATA2, opcode.PUSHDATA4:
|
||||||
v.estack.PushVal(parameter)
|
v.estack.PushVal(parameter)
|
||||||
|
|
||||||
|
case opcode.PUSHNULL:
|
||||||
|
v.estack.PushVal(NullItem{})
|
||||||
|
|
||||||
// Stack operations.
|
// Stack operations.
|
||||||
case opcode.TOALTSTACK:
|
case opcode.TOALTSTACK:
|
||||||
v.astack.Push(v.estack.Pop())
|
v.astack.Push(v.estack.Pop())
|
||||||
|
|
|
@ -197,6 +197,15 @@ func TestStackLimitPUSH1Bad(t *testing.T) {
|
||||||
checkVMFailed(t, v)
|
checkVMFailed(t, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPUSHNULL(t *testing.T) {
|
||||||
|
prog := makeProgram(opcode.PUSHNULL, opcode.PUSHNULL, opcode.EQUAL)
|
||||||
|
v := load(prog)
|
||||||
|
require.NoError(t, v.Step())
|
||||||
|
require.Equal(t, 1, v.estack.Len())
|
||||||
|
runVM(t, v)
|
||||||
|
require.True(t, v.estack.Pop().Bool())
|
||||||
|
}
|
||||||
|
|
||||||
// appendBigStruct returns a program which:
|
// appendBigStruct returns a program which:
|
||||||
// 1. pushes size Structs on stack
|
// 1. pushes size Structs on stack
|
||||||
// 2. packs them into a new struct
|
// 2. packs them into a new struct
|
||||||
|
|
Loading…
Reference in a new issue