From 12de7719c07ad0cec3cc67567339210a8b4d4665 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 15 Feb 2017 15:34:24 +0100 Subject: [PATCH 1/2] fix solidity state / locals --- src/solidity/astHelper.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/solidity/astHelper.js b/src/solidity/astHelper.js index 03f3b5ffd3..71f7f591cb 100644 --- a/src/solidity/astHelper.js +++ b/src/solidity/astHelper.js @@ -10,14 +10,18 @@ var AstWalker = require('../util/astWalker') function extractContractDefinitions (sourcesList) { var ret = { contractsById: {}, - contractsByName: {} + contractsByName: {}, + sourcesByContract: {} } var walker = new AstWalker() - walker.walkAstList(sourcesList, { 'ContractDefinition': function (node) { - ret.contractsById[node.id] = node - ret.contractsByName[node.attributes.name] = node - return false - }}) + for (var k in sourcesList) { + walker.walk(sourcesList[k].AST, { 'ContractDefinition': function (node) { + ret.contractsById[node.id] = node + ret.sourcesByContract[node.id] = k + ret.contractsByName[k + ':' + node.attributes.name] = node + return false + }}) + } return ret } @@ -83,7 +87,11 @@ function extractStatesDefinitions (sourcesList, contracts) { var ret = {} for (var contract in contracts.contractsById) { var name = contracts.contractsById[contract].attributes.name - ret[name] = extractStateDefinitions(name, sourcesList, contracts) + var source = contracts.sourcesByContract[contract] + var fullName = source + ':' + name + var state = extractStateDefinitions(fullName, sourcesList, contracts) + ret[fullName] = state + ret[name] = state // solc < 0.4.9 } return ret } From 588f962282ae6376e24675b77fea03ff24fbb905 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 15 Feb 2017 15:44:27 +0100 Subject: [PATCH 2/2] fix tests --- test/solidity/decodeInfo.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/solidity/decodeInfo.js b/test/solidity/decodeInfo.js index 9cb6f34d41..540cd57850 100644 --- a/test/solidity/decodeInfo.js +++ b/test/solidity/decodeInfo.js @@ -9,7 +9,7 @@ tape('solidity', function (t) { t.test('astHelper, decodeInfo', function (st) { var output = compiler.compile(contracts, 0) - var state = index.solidity.astHelper.extractStateDefinitions('contractUint', output.sources) + var state = index.solidity.astHelper.extractStateDefinitions(':contractUint', output.sources) var states = index.solidity.astHelper.extractStatesDefinitions(output.sources) var stateDef = state.stateDefinitions var decodeInfo = index.solidity.decodeInfo.parseType(stateDef[0].attributes.type, states, 'contractUint') @@ -21,7 +21,7 @@ tape('solidity', function (t) { decodeInfo = index.solidity.decodeInfo.parseType(stateDef[4].attributes.type, states, 'contractUint') checkDecodeInfo(st, decodeInfo, 1, 16, 'bytes16') - state = index.solidity.astHelper.extractStateDefinitions('contractStructAndArray', output.sources) + state = index.solidity.astHelper.extractStateDefinitions(':contractStructAndArray', output.sources) stateDef = state.stateDefinitions decodeInfo = index.solidity.decodeInfo.parseType(stateDef[1].attributes.type, states, 'contractStructAndArray') checkDecodeInfo(st, decodeInfo, 2, 32, 'struct contractStructAndArray.structDef') @@ -30,7 +30,7 @@ tape('solidity', function (t) { decodeInfo = index.solidity.decodeInfo.parseType(stateDef[3].attributes.type, states, 'contractStructAndArray') checkDecodeInfo(st, decodeInfo, 2, 32, 'bytes12[4]') - state = index.solidity.astHelper.extractStateDefinitions('contractArray', output.sources) + state = index.solidity.astHelper.extractStateDefinitions(':contractArray', output.sources) stateDef = state.stateDefinitions decodeInfo = index.solidity.decodeInfo.parseType(stateDef[0].attributes.type, states, 'contractArray') checkDecodeInfo(st, decodeInfo, 1, 32, 'uint32[5]') @@ -39,12 +39,12 @@ tape('solidity', function (t) { decodeInfo = index.solidity.decodeInfo.parseType(stateDef[2].attributes.type, states, 'contractArray') checkDecodeInfo(st, decodeInfo, 4, 32, 'int16[][3][][4]') - state = index.solidity.astHelper.extractStateDefinitions('contractEnum', output.sources) + state = index.solidity.astHelper.extractStateDefinitions(':contractEnum', output.sources) stateDef = state.stateDefinitions decodeInfo = index.solidity.decodeInfo.parseType(stateDef[1].attributes.type, states, 'contractEnum') checkDecodeInfo(st, decodeInfo, 1, 2, 'enum') - state = index.solidity.astHelper.extractStateDefinitions('contractSmallVariable', output.sources) + state = index.solidity.astHelper.extractStateDefinitions(':contractSmallVariable', output.sources) stateDef = state.stateDefinitions decodeInfo = index.solidity.decodeInfo.parseType(stateDef[0].attributes.type, states, 'contractSmallVariable') checkDecodeInfo(st, decodeInfo, 1, 1, 'int8') @@ -61,7 +61,7 @@ tape('solidity', function (t) { output = compiler.compile(simplecontracts, 0) - state = index.solidity.astHelper.extractStateDefinitions('simpleContract', output.sources) + state = index.solidity.astHelper.extractStateDefinitions(':simpleContract', output.sources) states = index.solidity.astHelper.extractStatesDefinitions(output.sources) stateDef = state.stateDefinitions decodeInfo = index.solidity.decodeInfo.parseType(stateDef[2].attributes.type, states, 'simpleContract') @@ -71,12 +71,12 @@ tape('solidity', function (t) { decodeInfo = index.solidity.decodeInfo.parseType(stateDef[4].attributes.type, states, 'simpleContract') checkDecodeInfo(st, decodeInfo, 1, 1, 'enum') - state = index.solidity.astHelper.extractStateDefinitions('test2', output.sources) + state = index.solidity.astHelper.extractStateDefinitions(':test2', output.sources) stateDef = state.stateDefinitions decodeInfo = index.solidity.decodeInfo.parseType(stateDef[0].attributes.type, states, 'test1') checkDecodeInfo(st, decodeInfo, 0, 32, 'struct test1.str') - state = index.solidity.stateDecoder.extractStateVariables('test2', output.sources) + state = index.solidity.stateDecoder.extractStateVariables(':test2', output.sources) checkDecodeInfo(st, decodeInfo, 0, 32, 'struct test1.str') st.end()