From 5257336a53b90665318658a9ec3753dde474f610 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 12:47:03 +0100 Subject: [PATCH 01/29] dropdownpanel trigger display event --- src/ui/DropdownPanel.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ui/DropdownPanel.js b/src/ui/DropdownPanel.js index 55dc1f661c..7fa9399ddb 100644 --- a/src/ui/DropdownPanel.js +++ b/src/ui/DropdownPanel.js @@ -4,8 +4,10 @@ var ui = require('../helpers/ui') var styleDropdown = require('./styles/dropdownPanel') var basicStyles = require('./styles/basicStyles') var TreeView = require('./TreeView') +var EventManager = require('../lib/eventManager') function DropdownPanel (_name, _opts) { + this.event = new EventManager() if (!_opts) { _opts = {} } @@ -82,6 +84,7 @@ DropdownPanel.prototype.hide = function () { var el = this.view.querySelector('.dropdownpanel') el.style.display = 'none' caret.className = 'fa fa-caret-right' + this.event.trigger('hide', []) } } @@ -91,6 +94,7 @@ DropdownPanel.prototype.show = function () { var el = this.view.querySelector('.dropdownpanel') el.style.display = '' caret.className = 'fa fa-caret-down' + this.event.trigger('show', []) } } From 44549a406c1b77a3871dc879210cfdbcccd16ce8 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 12:47:33 +0100 Subject: [PATCH 02/29] CodeListView trigger display event --- src/ui/CodeListView.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ui/CodeListView.js b/src/ui/CodeListView.js index 3dc8fe0022..e7d5933745 100644 --- a/src/ui/CodeListView.js +++ b/src/ui/CodeListView.js @@ -3,8 +3,10 @@ var style = require('./styles/basicStyles') var yo = require('yo-yo') var ui = require('../helpers/ui') var DropdownPanel = require('./DropdownPanel') +var EventManager = require('../lib/eventManager') function CodeListView (_parent, _codeManager) { + this.event = new EventManager() this.parent = _parent this.codeManager = _codeManager this.code @@ -12,6 +14,12 @@ function CodeListView (_parent, _codeManager) { this.codeView this.itemSelected this.basicPanel = new DropdownPanel('Instructions', {json: false}) + this.basicPanel.event.register('hide', () => { + this.event.trigger('hide', []) + }) + this.basicPanel.event.register('show', () => { + this.event.trigger('show', []) + }) this.init() } From 6242a5f865f09d6da6f1fbeb80928eb1148256fc Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 12:47:59 +0100 Subject: [PATCH 03/29] change Slider to ES6 class --- src/ui/Slider.js | 94 ++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index edb94e3a48..905226215d 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -4,19 +4,20 @@ var EventManager = require('../lib/eventManager') var yo = require('yo-yo') var ui = require('../helpers/ui') -function Slider (_traceManager) { - this.event = new EventManager() - this.traceManager = _traceManager - this.max - this.disabled = true - this.view +class Slider { + constructor (_traceManager) { + this.event = new EventManager() + this.traceManager = _traceManager + this.max + this.disabled = true + this.view - this.previousValue = null -} + this.previousValue = null + } -Slider.prototype.render = function () { - var self = this - var view = yo`
+ render () { + var self = this + var view = yo`
` - if (!this.view) { - this.view = view + if (!this.view) { + this.view = view + } + return view } - return view -} -Slider.prototype.init = function (length) { - var slider = document.getElementById('slider') - slider.setAttribute('max', length - 1) - this.max = length - 1 - this.updateDisabled(length === 0) - this.disabled = length === 0 - this.setValue(0) -} + init (length) { + var slider = document.getElementById('slider') + slider.setAttribute('max', length - 1) + this.max = length - 1 + this.updateDisabled(length === 0) + this.disabled = length === 0 + this.setValue(0) + } -Slider.prototype.onChange = function (event) { - var value = parseInt(document.getElementById('slider').value) - if (value === this.previousValue) return - this.previousValue = value - this.event.trigger('moved', [value]) -} + onChange (event) { + var value = parseInt(document.getElementById('slider').value) + if (value === this.previousValue) return + this.previousValue = value + this.event.trigger('moved', [value]) + } -Slider.prototype.setValue = function (value) { - var slider = document.getElementById('slider') - var diff = value - slider.value - if (diff > 0) { - slider.stepUp(diff) - } else { - slider.stepDown(Math.abs(diff)) + setValue (value) { + var slider = document.getElementById('slider') + var diff = value - slider.value + if (diff > 0) { + slider.stepUp(diff) + } else { + slider.stepDown(Math.abs(diff)) + } + } + + updateDisabled (disabled) { + if (disabled) { + document.getElementById('slider').setAttribute('disabled', true) + } else { + document.getElementById('slider').removeAttribute('disabled') + } + } + + show () { + this.view.style.display = 'block' } -} -Slider.prototype.updateDisabled = function (disabled) { - if (disabled) { - document.getElementById('slider').setAttribute('disabled', true) - } else { - document.getElementById('slider').removeAttribute('disabled') + hide () { + this.view.style.display = 'none' } } From 4dfdb2b1e925e471de22d1eab89ee4ba77b3f564 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 12:48:19 +0100 Subject: [PATCH 04/29] add soliditySlider --- src/ui/SoliditySlider.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/ui/SoliditySlider.js diff --git a/src/ui/SoliditySlider.js b/src/ui/SoliditySlider.js new file mode 100644 index 0000000000..d411e80c7b --- /dev/null +++ b/src/ui/SoliditySlider.js @@ -0,0 +1,15 @@ +'use strict' +var Slider = require('./Slider') +var utils = require('../helpers/util.js') + +class SoliditySlider extends Slider { + constructor (_traceManager, reducedTraceBySourceLocation) { + super(_traceManager) + this.reducedTraceBySourceLocation = reducedTraceBySourceLocation + } + setValue (value) { + super.setValue(utils.findLowerBoundValue(value, this.reducedTraceBySourceLocation)) + } +} + +module.exports = SoliditySlider From 00cd1e71a25abd3dac3b18f50ab3e0b25c1fa71e Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 12:48:32 +0100 Subject: [PATCH 05/29] compute reducedTraceBySourceLocation --- src/util/internalCallTree.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/util/internalCallTree.js b/src/util/internalCallTree.js index 03782482eb..a5ed07809a 100644 --- a/src/util/internalCallTree.js +++ b/src/util/internalCallTree.js @@ -58,6 +58,7 @@ class InternalCallTree { this.scopeStarts = {} this.variableDeclarationByFile = {} this.astWalker = new AstWalker() + this.reducedTraceBySourceLocation = [] } /** @@ -90,6 +91,14 @@ async function buildTree (tree, step, scopeId) { var sourceLocation try { sourceLocation = await extractSourceLocation(tree, step) + var previous = this.reducedTraceBySourceLocation[this.reducedTraceBySourceLocation.length - 1] + if (previous && + (sourceLocation.jump !== previous.jump || + sourceLocation.start !== previous.start || + sourceLocation.length !== previous.length || + sourceLocation.file !== previous.file)) { + this.reducedTraceBySourceLocation.push(step) + } } catch (e) { return { outStep: step, error: 'InternalCallTree - Error resolving source location. ' + step + ' ' + e.message } } From ebd0115c13071cb249dadb997b298c6455bd8960 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 12:48:45 +0100 Subject: [PATCH 06/29] use soliditySlider --- src/ui/StepManager.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index c1a380ff24..7683bd7c55 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -1,13 +1,17 @@ 'use strict' var ButtonNavigator = require('./ButtonNavigator') var Slider = require('./Slider') +var SoliditySlider = require('./SoliditySlider') var EventManager = require('../lib/eventManager') +var SourceMappingDecoder = require('../util/sourceMappingDecoder') var yo = require('yo-yo') function StepManager (_parent, _traceManager) { this.event = new EventManager() + this.sourceMappingDecoder = new SourceMappingDecoder() this.parent = _parent this.traceManager = _traceManager + this.sourceMapByAddress = {} var self = this this.parent.event.register('newTraceLoaded', this, function () { @@ -16,6 +20,7 @@ function StepManager (_parent, _traceManager) { console.log(error) } else { self.slider.init(length) + self.soliditySlider.init(self.parent.callTree.reducedTraceBySourceLocation.length) self.init() } }) @@ -24,6 +29,14 @@ function StepManager (_parent, _traceManager) { this.slider = new Slider(this.traceManager) this.slider.event.register('moved', this, function (step) { self.sliderMoved(step) + self.soliditySlider.setValue(step) + }) + + this.soliditySlider = new SoliditySlider(this.traceManager, self.parent.callTree.reducedTraceBySourceLocation) + this.soliditySlider.event.register('moved', this, function (srcLocationStep) { + var step = self.parent.callTree.reducedTraceBySourceLocation[srcLocationStep] + self.sliderMoved(step) + self.slider.setValue(step) }) this.buttonNavigator = new ButtonNavigator(_parent, this.traceManager) @@ -48,12 +61,24 @@ function StepManager (_parent, _traceManager) { this.buttonNavigator.event.register('jumpToException', this, function (exceptionIndex) { self.jumpTo(exceptionIndex) }) + + if (this.parent.solidityProxy.loaded()) { + this.parent.vmDebugger.asmCode.register('hide', () => { + this.soliditySlider.show() + this.slider.hide() + }) + this.parent.vmDebugger.asmCode.register('show', () => { + this.soliditySlider.hide() + this.slider.show() + }) + } } StepManager.prototype.render = function () { return ( yo`
${this.slider.render()} + ${this.soliditySlider.render()} ${this.buttonNavigator.render()}
` ) @@ -61,12 +86,14 @@ StepManager.prototype.render = function () { StepManager.prototype.reset = function () { this.slider.setValue(0) + this.soliditySlider.setValue(0) this.currentStepIndex = 0 this.buttonNavigator.reset() } StepManager.prototype.init = function () { this.slider.setValue(0) + this.soliditySlider.setValue(0) this.changeState(0) } @@ -79,6 +106,7 @@ StepManager.prototype.jumpTo = function (step) { return } this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } @@ -98,6 +126,7 @@ StepManager.prototype.stepIntoForward = function () { return } this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } @@ -110,6 +139,7 @@ StepManager.prototype.stepIntoBack = function () { return } this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } @@ -119,6 +149,7 @@ StepManager.prototype.stepOverForward = function () { } var step = this.traceManager.findStepOverForward(this.currentStepIndex) this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } @@ -128,6 +159,7 @@ StepManager.prototype.stepOverBack = function () { } var step = this.traceManager.findStepOverBack(this.currentStepIndex) this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } @@ -137,6 +169,7 @@ StepManager.prototype.jumpNextCall = function () { } var step = this.traceManager.findNextCall(this.currentStepIndex) this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } @@ -146,6 +179,7 @@ StepManager.prototype.jumpOut = function () { } var step = this.traceManager.findStepOut(this.currentStepIndex) this.slider.setValue(step) + this.soliditySlider.setValue(step) this.changeState(step) } From c2ee1fc957fba471985bf1d1ee51f7743011c33e Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 17:27:46 +0100 Subject: [PATCH 07/29] trigger hide/show --- src/ui/DropdownPanel.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/DropdownPanel.js b/src/ui/DropdownPanel.js index 7fa9399ddb..c4941c6c16 100644 --- a/src/ui/DropdownPanel.js +++ b/src/ui/DropdownPanel.js @@ -72,9 +72,11 @@ DropdownPanel.prototype.toggle = function () { if (el.style.display === '') { el.style.display = 'none' caret.className = 'fa fa-caret-right' + this.event.trigger('hide', []) } else { el.style.display = '' caret.className = 'fa fa-caret-down' + this.event.trigger('show', []) } } From 446a6cc2d6fadf2aa7506aeadf5782bf5acc034b Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 17:28:06 +0100 Subject: [PATCH 08/29] use this.view instead of document --- src/ui/Slider.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index 905226215d..a707097e12 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -36,7 +36,7 @@ class Slider { } init (length) { - var slider = document.getElementById('slider') + var slider = this.view.querySelector('#slider') slider.setAttribute('max', length - 1) this.max = length - 1 this.updateDisabled(length === 0) @@ -45,14 +45,14 @@ class Slider { } onChange (event) { - var value = parseInt(document.getElementById('slider').value) + var value = parseInt(this.view.querySelector('#slider').value) if (value === this.previousValue) return this.previousValue = value this.event.trigger('moved', [value]) } setValue (value) { - var slider = document.getElementById('slider') + var slider = this.view.querySelector('#slider') var diff = value - slider.value if (diff > 0) { slider.stepUp(diff) @@ -63,9 +63,9 @@ class Slider { updateDisabled (disabled) { if (disabled) { - document.getElementById('slider').setAttribute('disabled', true) + this.view.querySelector('#slider').setAttribute('disabled', true) } else { - document.getElementById('slider').removeAttribute('disabled') + this.view.querySelector('#slider').removeAttribute('disabled') } } From b5ae84175717877e669436ea4aba964ac671b630 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 17:28:29 +0100 Subject: [PATCH 09/29] add setReducedTrace --- src/ui/SoliditySlider.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ui/SoliditySlider.js b/src/ui/SoliditySlider.js index d411e80c7b..cc9dd54cc7 100644 --- a/src/ui/SoliditySlider.js +++ b/src/ui/SoliditySlider.js @@ -3,12 +3,18 @@ var Slider = require('./Slider') var utils = require('../helpers/util.js') class SoliditySlider extends Slider { - constructor (_traceManager, reducedTraceBySourceLocation) { + constructor (_traceManager) { super(_traceManager) - this.reducedTraceBySourceLocation = reducedTraceBySourceLocation + this.reducedTraceBySourceLocation } - setValue (value) { - super.setValue(utils.findLowerBoundValue(value, this.reducedTraceBySourceLocation)) + setValue (_value) { + if (this.reducedTraceBySourceLocation) { + super.setValue(utils.findLowerBound(_value, this.reducedTraceBySourceLocation)) + } + } + setReducedTrace (_reducedTraceBySourceLocation) { + super.init(_reducedTraceBySourceLocation.length) + this.reducedTraceBySourceLocation = _reducedTraceBySourceLocation } } From d35ba6eb4b22db64e05b61502c436b08ae95fd98 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 17:29:04 +0100 Subject: [PATCH 10/29] load solidity slider when callTreeReady --- src/ui/StepManager.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index 7683bd7c55..7fa3a59b68 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -20,7 +20,6 @@ function StepManager (_parent, _traceManager) { console.log(error) } else { self.slider.init(length) - self.soliditySlider.init(self.parent.callTree.reducedTraceBySourceLocation.length) self.init() } }) @@ -32,11 +31,24 @@ function StepManager (_parent, _traceManager) { self.soliditySlider.setValue(step) }) - this.soliditySlider = new SoliditySlider(this.traceManager, self.parent.callTree.reducedTraceBySourceLocation) - this.soliditySlider.event.register('moved', this, function (srcLocationStep) { - var step = self.parent.callTree.reducedTraceBySourceLocation[srcLocationStep] - self.sliderMoved(step) - self.slider.setValue(step) + this.soliditySlider = new SoliditySlider(this.traceManager) + + this.parent.callTree.event.register('callTreeReady', () => { + this.soliditySlider.setReducedTrace(this.parent.callTree.reducedTraceBySourceLocation) + this.soliditySlider.event.register('moved', this, function (srcLocationStep) { + var step = self.parent.callTree.reducedTraceBySourceLocation[srcLocationStep] + self.sliderMoved(step) + self.slider.setValue(step) + }) + + this.parent.vmDebugger.asmCode.event.register('hide', () => { + this.soliditySlider.show() + this.slider.hide() + }) + this.parent.vmDebugger.asmCode.event.register('show', () => { + this.soliditySlider.hide() + this.slider.show() + }) }) this.buttonNavigator = new ButtonNavigator(_parent, this.traceManager) @@ -61,17 +73,6 @@ function StepManager (_parent, _traceManager) { this.buttonNavigator.event.register('jumpToException', this, function (exceptionIndex) { self.jumpTo(exceptionIndex) }) - - if (this.parent.solidityProxy.loaded()) { - this.parent.vmDebugger.asmCode.register('hide', () => { - this.soliditySlider.show() - this.slider.hide() - }) - this.parent.vmDebugger.asmCode.register('show', () => { - this.soliditySlider.hide() - this.slider.show() - }) - } } StepManager.prototype.render = function () { From 922fe9879484433aaf1412522a4b9b76bcef7cdb Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2017 17:29:23 +0100 Subject: [PATCH 11/29] store only array of step --- src/util/internalCallTree.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/util/internalCallTree.js b/src/util/internalCallTree.js index a5ed07809a..a7135b0a5b 100644 --- a/src/util/internalCallTree.js +++ b/src/util/internalCallTree.js @@ -87,17 +87,17 @@ async function buildTree (tree, step, scopeId) { let subScope = 1 tree.scopeStarts[step] = scopeId tree.scopes[scopeId] = { firstStep: step, locals: {} } + var currentSourceLocation = {} while (step < tree.traceManager.trace.length) { var sourceLocation try { sourceLocation = await extractSourceLocation(tree, step) - var previous = this.reducedTraceBySourceLocation[this.reducedTraceBySourceLocation.length - 1] - if (previous && - (sourceLocation.jump !== previous.jump || - sourceLocation.start !== previous.start || - sourceLocation.length !== previous.length || - sourceLocation.file !== previous.file)) { - this.reducedTraceBySourceLocation.push(step) + if (sourceLocation.jump !== currentSourceLocation.jump || + sourceLocation.start !== currentSourceLocation.start || + sourceLocation.length !== currentSourceLocation.length || + sourceLocation.file !== currentSourceLocation.file) { + tree.reducedTraceBySourceLocation.push(step) + currentSourceLocation = sourceLocation } } catch (e) { return { outStep: step, error: 'InternalCallTree - Error resolving source location. ' + step + ' ' + e.message } From 1d32da5cbfe9413f20d7d81baea1edc351c3475a Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 6 Feb 2017 13:04:51 +0100 Subject: [PATCH 12/29] set solidityMode to slider --- src/ui/Slider.js | 14 ++++++++++++++ src/ui/StepManager.js | 28 +++------------------------- src/util/internalCallTree.js | 4 ++-- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index a707097e12..8993f5207e 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -2,6 +2,7 @@ var style = require('./styles/sliderStyles') var EventManager = require('../lib/eventManager') var yo = require('yo-yo') +var utils = require('../helpers/util.js') var ui = require('../helpers/ui') class Slider { @@ -11,6 +12,7 @@ class Slider { this.max this.disabled = true this.view + this.solidityMode = false this.previousValue = null } @@ -46,6 +48,10 @@ class Slider { onChange (event) { var value = parseInt(this.view.querySelector('#slider').value) + if (this.solidityMode) { + value = utils.findLowerBound(value, this.reducedTrace) + this.view.querySelector('#slider').value = value + } if (value === this.previousValue) return this.previousValue = value this.event.trigger('moved', [value]) @@ -61,6 +67,14 @@ class Slider { } } + setReducedTrace (trace) { + this.reducedTrace = trace + } + + setSolidityMode (mode) { + this.solidityMode = false + } + updateDisabled (disabled) { if (disabled) { this.view.querySelector('#slider').setAttribute('disabled', true) diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index 7fa3a59b68..d3d1561997 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -1,7 +1,6 @@ 'use strict' var ButtonNavigator = require('./ButtonNavigator') var Slider = require('./Slider') -var SoliditySlider = require('./SoliditySlider') var EventManager = require('../lib/eventManager') var SourceMappingDecoder = require('../util/sourceMappingDecoder') var yo = require('yo-yo') @@ -28,26 +27,15 @@ function StepManager (_parent, _traceManager) { this.slider = new Slider(this.traceManager) this.slider.event.register('moved', this, function (step) { self.sliderMoved(step) - self.soliditySlider.setValue(step) }) - this.soliditySlider = new SoliditySlider(this.traceManager) - this.parent.callTree.event.register('callTreeReady', () => { - this.soliditySlider.setReducedTrace(this.parent.callTree.reducedTraceBySourceLocation) - this.soliditySlider.event.register('moved', this, function (srcLocationStep) { - var step = self.parent.callTree.reducedTraceBySourceLocation[srcLocationStep] - self.sliderMoved(step) - self.slider.setValue(step) - }) - + this.slider.setReducedTrace(this.parent.callTree.reducedTrace) this.parent.vmDebugger.asmCode.event.register('hide', () => { - this.soliditySlider.show() - this.slider.hide() + this.slider.setSolidityMode(true) }) this.parent.vmDebugger.asmCode.event.register('show', () => { - this.soliditySlider.hide() - this.slider.show() + this.slider.setSolidityMode(false) }) }) @@ -79,7 +67,6 @@ StepManager.prototype.render = function () { return ( yo`
${this.slider.render()} - ${this.soliditySlider.render()} ${this.buttonNavigator.render()}
` ) @@ -87,14 +74,12 @@ StepManager.prototype.render = function () { StepManager.prototype.reset = function () { this.slider.setValue(0) - this.soliditySlider.setValue(0) this.currentStepIndex = 0 this.buttonNavigator.reset() } StepManager.prototype.init = function () { this.slider.setValue(0) - this.soliditySlider.setValue(0) this.changeState(0) } @@ -107,7 +92,6 @@ StepManager.prototype.jumpTo = function (step) { return } this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } @@ -127,7 +111,6 @@ StepManager.prototype.stepIntoForward = function () { return } this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } @@ -140,7 +123,6 @@ StepManager.prototype.stepIntoBack = function () { return } this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } @@ -150,7 +132,6 @@ StepManager.prototype.stepOverForward = function () { } var step = this.traceManager.findStepOverForward(this.currentStepIndex) this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } @@ -160,7 +141,6 @@ StepManager.prototype.stepOverBack = function () { } var step = this.traceManager.findStepOverBack(this.currentStepIndex) this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } @@ -170,7 +150,6 @@ StepManager.prototype.jumpNextCall = function () { } var step = this.traceManager.findNextCall(this.currentStepIndex) this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } @@ -180,7 +159,6 @@ StepManager.prototype.jumpOut = function () { } var step = this.traceManager.findStepOut(this.currentStepIndex) this.slider.setValue(step) - this.soliditySlider.setValue(step) this.changeState(step) } diff --git a/src/util/internalCallTree.js b/src/util/internalCallTree.js index a7135b0a5b..c9fa25d855 100644 --- a/src/util/internalCallTree.js +++ b/src/util/internalCallTree.js @@ -58,7 +58,7 @@ class InternalCallTree { this.scopeStarts = {} this.variableDeclarationByFile = {} this.astWalker = new AstWalker() - this.reducedTraceBySourceLocation = [] + this.reducedTrace = [] } /** @@ -96,7 +96,7 @@ async function buildTree (tree, step, scopeId) { sourceLocation.start !== currentSourceLocation.start || sourceLocation.length !== currentSourceLocation.length || sourceLocation.file !== currentSourceLocation.file) { - tree.reducedTraceBySourceLocation.push(step) + tree.reducedTrace.push(step) currentSourceLocation = sourceLocation } } catch (e) { From 9d566f6ab7a03d95cdc4e9fbcbbab092444f465b Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 6 Feb 2017 13:55:06 +0100 Subject: [PATCH 13/29] move 'solidityMode' to stepManager --- src/ui/Slider.js | 7 +------ src/ui/StepManager.js | 47 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index 8993f5207e..68c45789bd 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -2,7 +2,6 @@ var style = require('./styles/sliderStyles') var EventManager = require('../lib/eventManager') var yo = require('yo-yo') -var utils = require('../helpers/util.js') var ui = require('../helpers/ui') class Slider { @@ -48,10 +47,6 @@ class Slider { onChange (event) { var value = parseInt(this.view.querySelector('#slider').value) - if (this.solidityMode) { - value = utils.findLowerBound(value, this.reducedTrace) - this.view.querySelector('#slider').value = value - } if (value === this.previousValue) return this.previousValue = value this.event.trigger('moved', [value]) @@ -72,7 +67,7 @@ class Slider { } setSolidityMode (mode) { - this.solidityMode = false + this.solidityMode = mode } updateDisabled (disabled) { diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index d3d1561997..55ad37709f 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -4,6 +4,7 @@ var Slider = require('./Slider') var EventManager = require('../lib/eventManager') var SourceMappingDecoder = require('../util/sourceMappingDecoder') var yo = require('yo-yo') +var utils = require('../helpers/util.js') function StepManager (_parent, _traceManager) { this.event = new EventManager() @@ -11,6 +12,7 @@ function StepManager (_parent, _traceManager) { this.parent = _parent this.traceManager = _traceManager this.sourceMapByAddress = {} + this.solidityMode = false var self = this this.parent.event.register('newTraceLoaded', this, function () { @@ -30,12 +32,12 @@ function StepManager (_parent, _traceManager) { }) this.parent.callTree.event.register('callTreeReady', () => { - this.slider.setReducedTrace(this.parent.callTree.reducedTrace) + this.solidityMode = true this.parent.vmDebugger.asmCode.event.register('hide', () => { - this.slider.setSolidityMode(true) + this.solidityMode = true }) this.parent.vmDebugger.asmCode.event.register('show', () => { - this.slider.setSolidityMode(false) + this.solidityMode = false }) }) @@ -63,6 +65,15 @@ function StepManager (_parent, _traceManager) { }) } +StepManager.prototype.resolveToReducedTrace = function (value, incr) { + if (this.parent.callTree.reducedTrace.length) { + var nextSource = utils.findLowerBound(value, this.parent.callTree.reducedTrace) + nextSource = nextSource < this.parent.callTree.reducedTrace.length - 1 ? nextSource + incr : nextSource + return this.parent.callTree.reducedTrace[nextSource] + } + return value +} + StepManager.prototype.render = function () { return ( yo`
@@ -99,6 +110,10 @@ StepManager.prototype.sliderMoved = function (step) { if (!this.traceManager.inRange(step)) { return } + if (this.solidityMode) { + step = this.resolveToReducedTrace(step, 0) + this.slider.setValue(step) + } this.changeState(step) } @@ -106,7 +121,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 } @@ -118,7 +138,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 } @@ -131,6 +156,9 @@ StepManager.prototype.stepOverForward = function () { return } var step = this.traceManager.findStepOverForward(this.currentStepIndex) + if (this.solidityMode) { + step = this.resolveToReducedTrace(step, 0) + } this.slider.setValue(step) this.changeState(step) } @@ -140,6 +168,9 @@ StepManager.prototype.stepOverBack = function () { return } var step = this.traceManager.findStepOverBack(this.currentStepIndex) + if (this.solidityMode) { + step = this.resolveToReducedTrace(step, 0) + } this.slider.setValue(step) this.changeState(step) } @@ -149,6 +180,9 @@ StepManager.prototype.jumpNextCall = function () { return } var step = this.traceManager.findNextCall(this.currentStepIndex) + if (this.solidityMode) { + step = this.resolveToReducedTrace(step, 0) + } this.slider.setValue(step) this.changeState(step) } @@ -158,6 +192,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) } From 26b7db863faf9fe09dfdd7979438960e25903836 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 6 Feb 2017 15:56:27 +0100 Subject: [PATCH 14/29] remove solidity slider --- src/ui/SoliditySlider.js | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 src/ui/SoliditySlider.js diff --git a/src/ui/SoliditySlider.js b/src/ui/SoliditySlider.js deleted file mode 100644 index cc9dd54cc7..0000000000 --- a/src/ui/SoliditySlider.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict' -var Slider = require('./Slider') -var utils = require('../helpers/util.js') - -class SoliditySlider extends Slider { - constructor (_traceManager) { - super(_traceManager) - this.reducedTraceBySourceLocation - } - setValue (_value) { - if (this.reducedTraceBySourceLocation) { - super.setValue(utils.findLowerBound(_value, this.reducedTraceBySourceLocation)) - } - } - setReducedTrace (_reducedTraceBySourceLocation) { - super.init(_reducedTraceBySourceLocation.length) - this.reducedTraceBySourceLocation = _reducedTraceBySourceLocation - } -} - -module.exports = SoliditySlider From 95215515eabdf53aba2349182944c952c5b144eb Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 6 Feb 2017 16:07:40 +0100 Subject: [PATCH 15/29] remove show/hide from Slider --- src/ui/Slider.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index 68c45789bd..c179a8ee82 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -77,14 +77,6 @@ class Slider { this.view.querySelector('#slider').removeAttribute('disabled') } } - - show () { - this.view.style.display = 'block' - } - - hide () { - this.view.style.display = 'none' - } } module.exports = Slider From 5e9c4f2826cb694ddc59a7531d91de1232c016d2 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 6 Feb 2017 16:13:57 +0100 Subject: [PATCH 16/29] remove SourceMappingDecoder --- src/ui/StepManager.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index 55ad37709f..3b92134991 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -2,13 +2,11 @@ var ButtonNavigator = require('./ButtonNavigator') var Slider = require('./Slider') var EventManager = require('../lib/eventManager') -var SourceMappingDecoder = require('../util/sourceMappingDecoder') var yo = require('yo-yo') var utils = require('../helpers/util.js') function StepManager (_parent, _traceManager) { this.event = new EventManager() - this.sourceMappingDecoder = new SourceMappingDecoder() this.parent = _parent this.traceManager = _traceManager this.sourceMapByAddress = {} From c585be9204081262e9f9cfb080e32b309a6948b7 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 7 Feb 2017 14:12:16 +0100 Subject: [PATCH 17/29] override step using callback --- src/ui/Slider.js | 15 +++++++-------- src/ui/StepManager.js | 8 +++----- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index c179a8ee82..e6c24e95dc 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -5,13 +5,14 @@ var yo = require('yo-yo') var ui = require('../helpers/ui') class Slider { - constructor (_traceManager) { + constructor (_traceManager, _stepOverride) { this.event = new EventManager() this.traceManager = _traceManager this.max this.disabled = true this.view this.solidityMode = false + this.stepOverride = _stepOverride this.previousValue = null } @@ -47,19 +48,17 @@ class Slider { onChange (event) { var value = parseInt(this.view.querySelector('#slider').value) + if (this.stepOverride) { + value = this.stepOverride(value) + this.setValue(value) + } if (value === this.previousValue) return this.previousValue = value this.event.trigger('moved', [value]) } setValue (value) { - var slider = this.view.querySelector('#slider') - var diff = value - slider.value - if (diff > 0) { - slider.stepUp(diff) - } else { - slider.stepDown(Math.abs(diff)) - } + this.view.querySelector('#slider').value = value } setReducedTrace (trace) { diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index 3b92134991..22505ce4a8 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -24,7 +24,9 @@ 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) }) @@ -108,10 +110,6 @@ StepManager.prototype.sliderMoved = function (step) { if (!this.traceManager.inRange(step)) { return } - if (this.solidityMode) { - step = this.resolveToReducedTrace(step, 0) - this.slider.setValue(step) - } this.changeState(step) } From c2f516e8ab7bf8df70b668c49054556bf8c495fe Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 7 Feb 2017 14:17:49 +0100 Subject: [PATCH 18/29] don't switch to solidity mode if no src location --- src/ui/StepManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index 22505ce4a8..6b3fb96835 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -34,7 +34,7 @@ function StepManager (_parent, _traceManager) { this.parent.callTree.event.register('callTreeReady', () => { this.solidityMode = true this.parent.vmDebugger.asmCode.event.register('hide', () => { - this.solidityMode = true + this.solidityMode = this.parent.callTree.reducedTrace.length !== 0 }) this.parent.vmDebugger.asmCode.event.register('show', () => { this.solidityMode = false From 64bd4dcb64d611e5dbd3af88fd83ef89ef3663e6 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 13 Feb 2017 12:45:42 +0100 Subject: [PATCH 19/29] change only if different --- src/ui/Slider.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index e6c24e95dc..c6f7b569d3 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -49,8 +49,11 @@ class Slider { onChange (event) { var value = parseInt(this.view.querySelector('#slider').value) if (this.stepOverride) { - value = this.stepOverride(value) - this.setValue(value) + var correctedValue = this.stepOverride(value) + if (correctedValue !== value) { + this.setValue(correctedValue) + value = correctedValue + } } if (value === this.previousValue) return this.previousValue = value From ad1749fb3cbcfd1b8195c7a0fb89c144c7185fe7 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 13 Feb 2017 12:46:34 +0100 Subject: [PATCH 20/29] remove unneened --- src/ui/Slider.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/ui/Slider.js b/src/ui/Slider.js index c6f7b569d3..cd2e9f1606 100644 --- a/src/ui/Slider.js +++ b/src/ui/Slider.js @@ -64,14 +64,6 @@ class Slider { this.view.querySelector('#slider').value = value } - setReducedTrace (trace) { - this.reducedTrace = trace - } - - setSolidityMode (mode) { - this.solidityMode = mode - } - updateDisabled (disabled) { if (disabled) { this.view.querySelector('#slider').setAttribute('disabled', true) From 6f3dba44ed957654865fda341736b3a8ce92cb1c Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 13 Feb 2017 13:00:24 +0100 Subject: [PATCH 21/29] fix stepoverback stepoverforward --- src/ui/StepManager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/StepManager.js b/src/ui/StepManager.js index 6b3fb96835..dbbc2f91a1 100644 --- a/src/ui/StepManager.js +++ b/src/ui/StepManager.js @@ -153,7 +153,7 @@ StepManager.prototype.stepOverForward = function () { } var step = this.traceManager.findStepOverForward(this.currentStepIndex) if (this.solidityMode) { - step = this.resolveToReducedTrace(step, 0) + step = this.resolveToReducedTrace(step, 1) } this.slider.setValue(step) this.changeState(step) @@ -165,7 +165,7 @@ StepManager.prototype.stepOverBack = function () { } var step = this.traceManager.findStepOverBack(this.currentStepIndex) if (this.solidityMode) { - step = this.resolveToReducedTrace(step, 0) + step = this.resolveToReducedTrace(step, -1) } this.slider.setValue(step) this.changeState(step) From 2ec51c3b62583161a9adfe6a521d1b52826094c9 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 13 Feb 2017 13:03:41 +0100 Subject: [PATCH 22/29] remove jump next call --- src/ui/ButtonNavigator.js | 7 ------- src/ui/StepManager.js | 15 --------------- 2 files changed, 22 deletions(-) diff --git a/src/ui/ButtonNavigator.js b/src/ui/ButtonNavigator.js index 8d23aa5521..f3b03a1777 100644 --- a/src/ui/ButtonNavigator.js +++ b/src/ui/ButtonNavigator.js @@ -10,7 +10,6 @@ function ButtonNavigator (_parent, _traceManager) { this.overBackDisabled = true this.intoForwardDisabled = true this.overForwardDisabled = true - this.nextCallDisabled = true this.jumpOutDisabled = true this.traceManager = _traceManager @@ -67,8 +66,6 @@ ButtonNavigator.prototype.render = function () { -