Added recoverable option
This commit is contained in:
		
							parent
							
								
									306b5bcff3
								
							
						
					
					
						commit
						3c3292d505
					
				
							
								
								
									
										22
									
								
								ethvm/vm.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								ethvm/vm.go
									
									
									
									
									
								
							| @ -37,6 +37,8 @@ type Vm struct { | ||||
| 	BreakPoints []int64 | ||||
| 	Stepping    bool | ||||
| 	Fn          string | ||||
| 
 | ||||
| 	Recoverable bool | ||||
| } | ||||
| 
 | ||||
| type Environment interface { | ||||
| @ -62,18 +64,20 @@ func New(env Environment) *Vm { | ||||
| 		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) { | ||||
| 	// Recover from any require exception
 | ||||
| 	defer func() { | ||||
| 		if r := recover(); r != nil { | ||||
| 			ret = closure.Return(nil) | ||||
| 			err = fmt.Errorf("%v", r) | ||||
| 			vmlogger.Errorln("vm err", err) | ||||
| 		} | ||||
| 	}() | ||||
| 	if self.Recoverable { | ||||
| 		// Recover from any require exception
 | ||||
| 		defer func() { | ||||
| 			if r := recover(); r != nil { | ||||
| 				ret = closure.Return(nil) | ||||
| 				err = fmt.Errorf("%v", r) | ||||
| 				vmlogger.Errorln("vm err", err) | ||||
| 			} | ||||
| 		}() | ||||
| 	} | ||||
| 
 | ||||
| 	// Debug hook
 | ||||
| 	if self.Dbg != nil { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user