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