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