diff --git a/remix-debugger/src/ui/Ethdebugger.js b/remix-debugger/src/ui/Ethdebugger.js index a257852411..ba6aa7c71f 100644 --- a/remix-debugger/src/ui/Ethdebugger.js +++ b/remix-debugger/src/ui/Ethdebugger.js @@ -25,7 +25,11 @@ var css = csjs` margin-left: 10px; } ` -function Ethdebugger () { + +function Ethdebugger (opts) { + this.opts = opts || {} + if (!this.opts.compilationResult) this.opts.compilationResult = () => { return null } + var self = this this.event = new EventManager() @@ -107,6 +111,7 @@ Ethdebugger.prototype.setCompilationResult = function (compilationResult) { } Ethdebugger.prototype.debug = function (tx) { + this.setCompilationResult(this.opts.compilationResult()) if (tx instanceof Object) { this.txBrowser.load(tx.hash) } else if (tx instanceof String) { @@ -145,6 +150,7 @@ Ethdebugger.prototype.startDebugging = function (blockNumber, txIndex, tx) { if (this.traceManager.isLoading) { return } + this.setCompilationResult(this.opts.compilationResult()) this.statusMessage = 'Loading trace...' yo.update(this.view, this.render()) console.log('loading trace...') diff --git a/remix-solidity/src/decoder/internalCallTree.js b/remix-solidity/src/decoder/internalCallTree.js index 3cace1407c..04276e2bb3 100644 --- a/remix-solidity/src/decoder/internalCallTree.js +++ b/remix-solidity/src/decoder/internalCallTree.js @@ -200,7 +200,7 @@ function includeVariableDeclaration (tree, step, sourceLocation, scopeId, newLoc }) } var functionDefinition = resolveFunctionDefinition(tree, step, previousSourceLocation) - if (functionDefinition && newLocation && traceHelper.isJumpDestInstruction(tree.traceManager.trace[step - 1])) { + if (functionDefinition && ((newLocation && traceHelper.isJumpDestInstruction(tree.traceManager.trace[step - 1])) || functionDefinition.attributes.isConstructor)) { tree.functionCallStack.push(step) // means: the previous location was a function definition && JUMPDEST // => we are at the beginning of the function and input/output are setup