Merge branch 'develop' of github.com:ethereum/eth-go into feature/ethutil-refactor
This commit is contained in:
		
						commit
						4fb2905b1e
					
				| @ -24,14 +24,10 @@ var ( | ||||
| 	GasTx      = big.NewInt(500) | ||||
| ) | ||||
| 
 | ||||
| func CalculateTxGas(initSize *big.Int) *big.Int { | ||||
| 	totalGas := new(big.Int) | ||||
| 
 | ||||
| 	txTotalBytes := new(big.Int).Set(initSize) | ||||
| 	txTotalBytes.Div(txTotalBytes, ethutil.Big32) | ||||
| 	totalGas.Add(totalGas, new(big.Int).Mul(txTotalBytes, GasSStore)) | ||||
| 
 | ||||
| 	return totalGas | ||||
| type Debugger interface { | ||||
| 	BreakHook(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool | ||||
| 	StepHook(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool | ||||
| 	BreakPoints() []int64 | ||||
| } | ||||
| 
 | ||||
| type Vm struct { | ||||
| @ -53,14 +49,13 @@ type Vm struct { | ||||
| 	err error | ||||
| 
 | ||||
| 	// Debugging
 | ||||
| 	Hook        DebugHook | ||||
| 	Dbg Debugger | ||||
| 
 | ||||
| 	BreakPoints []int64 | ||||
| 	Stepping    bool | ||||
| 	Fn          string | ||||
| } | ||||
| 
 | ||||
| type DebugHook func(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool | ||||
| 
 | ||||
| type RuntimeVars struct { | ||||
| 	Origin      []byte | ||||
| 	Block       *Block | ||||
| @ -754,12 +749,14 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { | ||||
| 
 | ||||
| 		vm.Endl() | ||||
| 
 | ||||
| 		if vm.Hook != nil { | ||||
| 			for _, instrNo := range vm.BreakPoints { | ||||
| 				if pc.Cmp(big.NewInt(instrNo)) == 0 || vm.Stepping { | ||||
| 					vm.Stepping = true | ||||
| 
 | ||||
| 					if !vm.Hook(prevStep, op, mem, stack, closure.Object()) { | ||||
| 		if vm.Dbg != nil { | ||||
| 			for _, instrNo := range vm.Dbg.BreakPoints() { | ||||
| 				if pc.Cmp(big.NewInt(instrNo)) == 0 { | ||||
| 					if !vm.Dbg.BreakHook(prevStep, op, mem, stack, closure.Object()) { | ||||
| 						return nil, nil | ||||
| 					} | ||||
| 				} else if vm.Stepping { | ||||
| 					if !vm.Dbg.StepHook(prevStep, op, mem, stack, closure.Object()) { | ||||
| 						return nil, nil | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| @ -39,7 +39,7 @@ func (msg *logMessage) send(logger LogSystem) { | ||||
| 
 | ||||
| var logMessages chan (*logMessage) | ||||
| var logSystems []LogSystem | ||||
| var drained = true | ||||
| var quit chan bool | ||||
| 
 | ||||
| type LogLevel uint8 | ||||
| 
 | ||||
| @ -54,6 +54,7 @@ const ( | ||||
| 
 | ||||
| // log messages are dispatched to log writers
 | ||||
| func start() { | ||||
| out: | ||||
| 	for { | ||||
| 		select { | ||||
| 		case msg := <-logMessages: | ||||
| @ -62,15 +63,23 @@ func start() { | ||||
| 					msg.send(logSystem) | ||||
| 				} | ||||
| 			} | ||||
| 		default: | ||||
| 			drained = true | ||||
| 		case <-quit: | ||||
| 			break out | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // waits until log messages are drained (dispatched to log writers)
 | ||||
| func Flush() { | ||||
| 	for !drained { | ||||
| 	quit <- true | ||||
| 
 | ||||
| done: | ||||
| 	for { | ||||
| 		select { | ||||
| 		case <-logMessages: | ||||
| 		default: | ||||
| 			break done | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -88,6 +97,7 @@ func AddLogSystem(logSystem LogSystem) { | ||||
| 	defer mutex.Unlock() | ||||
| 	if logSystems == nil { | ||||
| 		logMessages = make(chan *logMessage) | ||||
| 		quit = make(chan bool) | ||||
| 		go start() | ||||
| 	} | ||||
| 	logSystems = append(logSystems, logSystem) | ||||
| @ -96,7 +106,6 @@ func AddLogSystem(logSystem LogSystem) { | ||||
| func (logger *Logger) sendln(level LogLevel, v ...interface{}) { | ||||
| 	if logMessages != nil { | ||||
| 		msg := newPrintlnLogMessage(level, logger.tag, v...) | ||||
| 		drained = false | ||||
| 		logMessages <- msg | ||||
| 	} | ||||
| } | ||||
| @ -104,7 +113,6 @@ func (logger *Logger) sendln(level LogLevel, v ...interface{}) { | ||||
| func (logger *Logger) sendf(level LogLevel, format string, v ...interface{}) { | ||||
| 	if logMessages != nil { | ||||
| 		msg := newPrintfLogMessage(level, logger.tag, format, v...) | ||||
| 		drained = false | ||||
| 		logMessages <- msg | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user