|
|
|
@ -249,11 +249,12 @@ async function includeVariableDeclaration (tree, step, sourceLocation, scopeId, |
|
|
|
|
const contractObj = await tree.solidityProxy.contractObjectAt(step) |
|
|
|
|
let states = null |
|
|
|
|
const generatedSources = getGeneratedSources(tree, scopeId, contractObj) |
|
|
|
|
|
|
|
|
|
const variableDeclaration = resolveVariableDeclaration(tree, sourceLocation, generatedSources) |
|
|
|
|
const variableDeclarations = resolveVariableDeclaration(tree, sourceLocation, generatedSources) |
|
|
|
|
// using the vm trace step, the current source location and the ast,
|
|
|
|
|
// we check if the current vm trace step target a new ast node of type VariableDeclaration
|
|
|
|
|
// that way we know that there is a new local variable from here.
|
|
|
|
|
if (variableDeclarations && variableDeclarations.length) { |
|
|
|
|
for (const variableDeclaration of variableDeclarations) { |
|
|
|
|
if (variableDeclaration && !tree.scopes[scopeId].locals[variableDeclaration.name]) { |
|
|
|
|
try { |
|
|
|
|
const stack = tree.traceManager.getStackAt(step) |
|
|
|
@ -275,6 +276,9 @@ async function includeVariableDeclaration (tree, step, sourceLocation, scopeId, |
|
|
|
|
console.log(error) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// we check here if we are at the beginning inside a new function.
|
|
|
|
|
// if that is the case, we have to add to locals tree the inputs and output params
|
|
|
|
|
const functionDefinition = resolveFunctionDefinition(tree, previousSourceLocation, generatedSources) |
|
|
|
@ -351,7 +355,10 @@ function extractVariableDeclarations (ast, astWalker) { |
|
|
|
|
const ret = {} |
|
|
|
|
astWalker.walkFull(ast, (node) => { |
|
|
|
|
if (node.nodeType === 'VariableDeclaration' || node.nodeType === 'YulVariableDeclaration') { |
|
|
|
|
ret[node.src] = node |
|
|
|
|
ret[node.src] = [node] |
|
|
|
|
} |
|
|
|
|
if (node.nodeType === 'VariableDeclarationStatement' || node.nodeType === 'YulVariableDeclarationStatement') { |
|
|
|
|
ret[node.initialValue.src] = node.declarations
|
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
return ret |
|
|
|
|