Added recoverable option

This commit is contained in:
obscuren 2014-07-24 12:12:00 +02:00
parent 306b5bcff3
commit 3c3292d505

View File

@ -37,6 +37,8 @@ type Vm struct {
BreakPoints []int64 BreakPoints []int64
Stepping bool Stepping bool
Fn string Fn string
Recoverable bool
} }
type Environment interface { type Environment interface {
@ -62,10 +64,11 @@ func New(env Environment) *Vm {
lt = LogTyDiff lt = LogTyDiff
} }
return &Vm{env: env, logTy: lt} return &Vm{env: env, logTy: lt, Recoverable: true}
} }
func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) { func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
if self.Recoverable {
// Recover from any require exception // Recover from any require exception
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@ -74,6 +77,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
vmlogger.Errorln("vm err", err) vmlogger.Errorln("vm err", err)
} }
}() }()
}
// Debug hook // Debug hook
if self.Dbg != nil { if self.Dbg != nil {