From dd209448cd70852de3dd09ab7649bc82165027ff Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 9 Oct 2018 15:03:10 -0400 Subject: [PATCH] move execution context out of original debugger --- remix-debug/src/Ethdebugger.js | 85 ++++++++++++++-------------- remix-debug/src/debugger/debugger.js | 59 +++++++++++++++++-- 2 files changed, 97 insertions(+), 47 deletions(-) diff --git a/remix-debug/src/Ethdebugger.js b/remix-debug/src/Ethdebugger.js index e8862fb63c..e6b7b87752 100644 --- a/remix-debug/src/Ethdebugger.js +++ b/remix-debug/src/Ethdebugger.js @@ -13,11 +13,8 @@ var remixLib = require('remix-lib') var TraceManager = remixLib.trace.TraceManager var CodeManager = remixLib.code.CodeManager var traceHelper = remixLib.helpers.trace -var init = remixLib.init -var executionContext = remixLib.execution.executionContext +// var executionContext = remixLib.execution.executionContext var EventManager = remixLib.EventManager -var Web3Providers = remixLib.vm.Web3Providers -var DummyProvider = remixLib.vm.DummyProvider /** * Ethdebugger is a wrapper around a few classes that helps debugging a transaction @@ -36,16 +33,16 @@ function Ethdebugger (opts) { this.opts = opts || {} if (!this.opts.compilationResult) this.opts.compilationResult = () => { return null } - this.executionContext = opts.executionContext || executionContext - this.web3 = opts.web3 || this.executionContext.web3 + // this.executionContext = opts.executionContext || executionContext + this.web3 = opts.web3 this.event = new EventManager() this.tx - this.web3Providers = new Web3Providers() - this.addProvider('DUMMYWEB3', new DummyProvider()) - this.switchProvider('DUMMYWEB3') + // this.web3Providers = new Web3Providers() + // this.addProvider('DUMMYWEB3', new DummyProvider()) + // this.switchProvider('DUMMYWEB3') this.traceManager = new TraceManager({web3: this.web3}) this.codeManager = new CodeManager(this.traceManager) @@ -164,39 +161,43 @@ Ethdebugger.prototype.storageViewAt = function (step, address) { }, this.storageResolver, this.traceManager) } /* set env */ -Ethdebugger.prototype.web3 = function () { - return this.web3 -} - -Ethdebugger.prototype.addProvider = function (type, obj) { - this.web3Providers.addProvider(type, obj) - this.event.trigger('providerAdded', [type]) -} - -Ethdebugger.prototype.switchProvider = function (type) { - var self = this - this.web3Providers.get(type, function (error, obj) { - if (error) { - console.log('provider ' + type + ' not defined') - } else { - self.web3 = obj - self.setManagers() - // self.traceManager.web3 = self.web3 - self.executionContext.detectNetwork((error, network) => { - if (error || !network) { - self.web3Debug = obj - self.web3 = obj - } else { - var webDebugNode = init.web3DebugNode(network.name) - self.web3Debug = !webDebugNode ? obj : webDebugNode - self.web3 = !webDebugNode ? obj : webDebugNode - } - self.setManagers() - }) - self.event.trigger('providerChanged', [type]) - } - }) -} +// Ethdebugger.prototype.web3 = function () { +// return this.web3 +// } + +Ethdebugger.prototype.updateWeb3 = function (web3) { + this.web3 = web3 +} + +// Ethdebugger.prototype.addProvider = function (type, obj) { +// this.web3Providers.addProvider(type, obj) +// this.event.trigger('providerAdded', [type]) +// } +// +// Ethdebugger.prototype.switchProvider = function (type) { +// var self = this +// this.web3Providers.get(type, function (error, obj) { +// if (error) { +// console.log('provider ' + type + ' not defined') +// } else { +// self.web3 = obj +// self.setManagers() +// // self.traceManager.web3 = self.web3 +// self.executionContext.detectNetwork((error, network) => { +// if (error || !network) { +// self.web3Debug = obj +// self.web3 = obj +// } else { +// var webDebugNode = init.web3DebugNode(network.name) +// self.web3Debug = !webDebugNode ? obj : webDebugNode +// self.web3 = !webDebugNode ? obj : webDebugNode +// } +// self.setManagers() +// }) +// self.event.trigger('providerChanged', [type]) +// } +// }) +// } Ethdebugger.prototype.debug = function (tx) { this.setCompilationResult(this.opts.compilationResult()) diff --git a/remix-debug/src/debugger/debugger.js b/remix-debug/src/debugger/debugger.js index f8366c5594..a3189315d1 100644 --- a/remix-debug/src/debugger/debugger.js +++ b/remix-debug/src/debugger/debugger.js @@ -7,6 +7,10 @@ var traceHelper = remixLib.helpers.trace var StepManager = require('./stepManager') var VmDebuggerLogic = require('./VmDebugger') +var Web3Providers = remixLib.vm.Web3Providers +var DummyProvider = remixLib.vm.DummyProvider +var init = remixLib.init + function Debugger (options) { var self = this this.event = new EventManager() @@ -16,7 +20,8 @@ function Debugger (options) { this.compiler = options.compiler this.debugger = new Ethdebugger({ - executionContext: this.executionContext, + // executionContext: this.executionContext, + web3: this.executionContext.web3, compilationResult: () => { var compilationResult = this.compiler.lastCompilationResult if (compilationResult) { @@ -26,6 +31,10 @@ function Debugger (options) { } }) + this.web3Providers = new Web3Providers() + this.addProvider('DUMMYWEB3', new DummyProvider()) + this.switchProvider('DUMMYWEB3') + this.breakPointManager = new remixLib.code.BreakpointManager(this.debugger, (sourceLocation) => { return self.offsetToLineColumnConverter.offsetToLineColumn(sourceLocation, sourceLocation.file, this.compiler.lastCompilationResult.source.sources, this.compiler.lastCompilationResult.data.sources) }, (step) => { @@ -51,12 +60,52 @@ function Debugger (options) { self.step_manager.jumpTo(step) }) - this.debugger.addProvider('vm', this.executionContext.vm()) - this.debugger.addProvider('injected', this.executionContext.internalWeb3()) - this.debugger.addProvider('web3', this.executionContext.internalWeb3()) - this.debugger.switchProvider(this.executionContext.getProvider()) + this.addProvider('vm', this.executionContext.vm()) + this.addProvider('injected', this.executionContext.internalWeb3()) + this.addProvider('web3', this.executionContext.internalWeb3()) + this.switchProvider(this.executionContext.getProvider()) } + + +Debugger.prototype.addProvider = function (type, obj) { + this.web3Providers.addProvider(type, obj) + this.event.trigger('providerAdded', [type]) +} + +Debugger.prototype.switchProvider = function (type) { + var self = this + this.web3Providers.get(type, function (error, obj) { + if (error) { + console.log('provider ' + type + ' not defined') + } else { + //self.web3 = obj + self.debugger.updateWeb3(obj) + self.debugger.setManagers() + // self.traceManager.web3 = self.web3 + self.executionContext.detectNetwork((error, network) => { + if (error || !network) { + // self.web3Debug = obj + // self.web3 = obj + self.debugger.updateWeb3(obj) + } else { + var webDebugNode = init.web3DebugNode(network.name) + // self.web3Debug = !webDebugNode ? obj : webDebugNode + // self.web3 = !webDebugNode ? obj : webDebugNode + self.debugger.updateWeb3(!webDebugNode ? obj : webDebugNode) + } + self.debugger.setManagers() + }) + self.event.trigger('providerChanged', [type]) + } + }) +} + + + + + + Debugger.prototype.registerAndHighlightCodeItem = function (index) { const self = this // register selected code item, highlight the corresponding source location