Support if statements without a list of statements

This commit is contained in:
Andre Medeiros 2018-09-26 11:13:14 -04:00
parent 0848d81b3e
commit fa8f4b4e41
3 changed files with 18 additions and 9 deletions

View File

@ -162,19 +162,19 @@ class ContractSource {
line: location.start.line line: location.start.line
}; };
children = [node.condition]
.concat(node.trueBody.statements);
if(node.falseBody) children = children.concat(node.falseBody.statements);
markLocations = [declarationLocation]; markLocations = [declarationLocation];
children = [node.condition];
if(node.trueBody.statements[0]) { let trueExpression = (node.trueBody && node.trueBody.statements && node.trueBody.statements[0]) || node.trueBody;
node.trueBody.statements[0]._parent = {type: 'b', id: node.id, idx: 0}; if(trueExpression) {
children = children.concat([].concat(trueExpression));
trueExpression._parent = {type: 'b', id: node.id, idx: 0};
} }
if(node.falseBody && node.falseBody.statements[0]) { let falseExpression = (node.falseBody && node.falseBody.statements && node.falseBody.statements[0]) || node.falseBody;
node.falseBody.statements[0]._parent = {type: 'b', id: node.id, idx: 1}; if(falseExpression) {
children = children.concat([].concat(falseExpression));
falseExpression._parent = {type: 'b', id: node.id, idx: 1};
} }
sourceMapToNodeType[node.src] = [{type: 'b', id: node.id, body: {loc: location}}]; sourceMapToNodeType[node.src] = [{type: 'b', id: node.id, body: {loc: location}}];

View File

@ -32,4 +32,9 @@ contract Branches {
function get() public view returns (uint retVal) { function get() public view returns (uint retVal) {
return storedData; return storedData;
} }
function smallFunctionWithoutStatements() public view returns (uint retVal) {
if(false) return storedData * 10;
if(true) return storedData * 20;
}
} }

View File

@ -28,4 +28,8 @@ contract("Branches", function() {
it("should return the smaller number", function(done) { it("should return the smaller number", function(done) {
Branches.methods.smaller(10).send().then(() => { done(); }); Branches.methods.smaller(10).send().then(() => { done(); });
}); });
it("should not crash code coverage on `if` without statements", function(done) {
Branches.methods.smallFunctionWithoutStatements().call().then(() => { done(); });
});
}); });