Commit 5508a81b authored by yann300's avatar yann300 Committed by GitHub

Merge pull request #200 from ethereum/fixState

Fix solidity state / locals
parents e13c8fe7 588f9622
......@@ -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
}
......
......@@ -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()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment