@ -3,11 +3,14 @@ var ButtonNavigator = require('./ButtonNavigator')
var Slider = require ( './Slider' )
var EventManager = require ( '../lib/eventManager' )
var yo = require ( 'yo-yo' )
var utils = require ( '../helpers/util.js' )
function StepManager ( _parent , _traceManager ) {
this . event = new EventManager ( )
this . parent = _parent
this . traceManager = _traceManager
this . sourceMapByAddress = { }
this . solidityMode = false
var self = this
this . parent . event . register ( 'newTraceLoaded' , this , function ( ) {
@ -21,11 +24,23 @@ function StepManager (_parent, _traceManager) {
} )
} )
this . slider = new Slider ( this . traceManager )
this . slider = new Slider ( this . traceManager , ( step ) => {
return this . solidityMode ? this . resolveToReducedTrace ( step , 0 ) : step
} )
this . slider . event . register ( 'moved' , this , function ( step ) {
self . sliderMoved ( step )
} )
this . parent . callTree . event . register ( 'callTreeReady' , ( ) => {
this . solidityMode = true
this . parent . vmDebugger . asmCode . event . register ( 'hide' , ( ) => {
this . solidityMode = this . parent . callTree . reducedTrace . length !== 0
} )
this . parent . vmDebugger . asmCode . event . register ( 'show' , ( ) => {
this . solidityMode = false
} )
} )
this . buttonNavigator = new ButtonNavigator ( _parent , this . traceManager )
this . buttonNavigator . event . register ( 'stepIntoBack' , this , function ( ) {
self . stepIntoBack ( )
@ -39,9 +54,6 @@ function StepManager (_parent, _traceManager) {
this . buttonNavigator . event . register ( 'stepOverForward' , this , function ( ) {
self . stepOverForward ( )
} )
this . buttonNavigator . event . register ( 'jumpNextCall' , this , function ( ) {
self . jumpNextCall ( )
} )
this . buttonNavigator . event . register ( 'jumpOut' , this , function ( ) {
self . jumpOut ( )
} )
@ -50,6 +62,20 @@ function StepManager (_parent, _traceManager) {
} )
}
StepManager . prototype . resolveToReducedTrace = function ( value , incr ) {
if ( this . parent . callTree . reducedTrace . length ) {
var nextSource = utils . findClosestIndex ( value , this . parent . callTree . reducedTrace )
nextSource = nextSource + incr
if ( nextSource <= 0 ) {
nextSource = 0
} else if ( nextSource > this . parent . callTree . reducedTrace . length ) {
nextSource = this . parent . callTree . reducedTrace . length - 1
}
return this . parent . callTree . reducedTrace [ nextSource ]
}
return value
}
StepManager . prototype . render = function ( ) {
return (
yo ` <div>
@ -93,7 +119,12 @@ StepManager.prototype.stepIntoForward = function () {
if ( ! this . traceManager . isLoaded ( ) ) {
return
}
var step = this . currentStepIndex + 1
var step = this . currentStepIndex
if ( this . solidityMode ) {
step = this . resolveToReducedTrace ( step , 1 )
} else {
step += 1
}
if ( ! this . traceManager . inRange ( step ) ) {
return
}
@ -105,7 +136,12 @@ StepManager.prototype.stepIntoBack = function () {
if ( ! this . traceManager . isLoaded ( ) ) {
return
}
var step = this . currentStepIndex - 1
var step = this . currentStepIndex
if ( this . solidityMode ) {
step = this . resolveToReducedTrace ( step , - 1 )
} else {
step -= 1
}
if ( ! this . traceManager . inRange ( step ) ) {
return
}
@ -118,6 +154,9 @@ StepManager.prototype.stepOverForward = function () {
return
}
var step = this . traceManager . findStepOverForward ( this . currentStepIndex )
if ( this . solidityMode ) {
step = this . resolveToReducedTrace ( step , 1 )
}
this . slider . setValue ( step )
this . changeState ( step )
}
@ -127,15 +166,9 @@ StepManager.prototype.stepOverBack = function () {
return
}
var step = this . traceManager . findStepOverBack ( this . currentStepIndex )
this . slider . setValue ( step )
this . changeState ( step )
}
StepManager . prototype . jumpNextCall = function ( ) {
if ( ! this . traceManager . isLoaded ( ) ) {
return
if ( this . solidityMode ) {
step = this . resolveToReducedTrace ( step , - 1 )
}
var step = this . traceManager . findNextCall ( this . currentStepIndex )
this . slider . setValue ( step )
this . changeState ( step )
}
@ -145,6 +178,9 @@ StepManager.prototype.jumpOut = function () {
return
}
var step = this . traceManager . findStepOut ( this . currentStepIndex )
if ( this . solidityMode ) {
step = this . resolveToReducedTrace ( step , 0 )
}
this . slider . setValue ( step )
this . changeState ( step )
}