neo-go/_pkg.dev/vm/vm_ops_exceptions.go
Roman Khimov ddd1d92ff1 pkg: hide it by moving to _pkg.dev
The idea here is to preserve the history of `dev` branch development and its
code when merging with the `master`. Later this code could be moved into the
masters code where appropriate.
2019-08-20 18:39:50 +03:00

39 lines
1.1 KiB
Go

package vm
import (
"errors"
"github.com/CityOfZion/neo-go/pkg/vm/stack"
)
// vm exceptions
// THROWIFNOT faults if the item on the top of the stack
// does not evaluate to true
// For specific logic on how a number of bytearray is evaluated can be seen
// from the boolean conversion methods on the stack items
func THROWIFNOT(op stack.Instruction, ctx *stack.Context, istack *stack.Invocation, rstack *stack.RandomAccess) (Vmstate, error) {
// Pop item from top of stack
item, err := ctx.Estack.Pop()
if err != nil {
return FAULT, err
}
// Convert to a boolean
ok, err := item.Boolean()
if err != nil {
return FAULT, err
}
// If false, throw
if !ok.Value() {
return FAULT, errors.New("item on top of stack evaluates to false")
}
return NONE, nil
}
// THROW returns a FAULT VM state. This indicate that there is an error in the
// current context loaded program.
func THROW(op stack.Instruction, ctx *stack.Context, istack *stack.Invocation, rstack *stack.RandomAccess) (Vmstate, error) {
return FAULT, errors.New("the execution of the script program end with an error")
}