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