Allow base contract string constructor args with open curly braces

string-interpolation
cgewecke 5 years ago
parent 5dd2d58152
commit 9e1d66b379
  1. 17
      lib/parse.js
  2. 5
      test/units/statements.js

@ -55,8 +55,21 @@ parse.ContractOrLibraryStatement = function(contract, expression) {
// We need to define a method to pass coverage hashes into at top of each contract. // We need to define a method to pass coverage hashes into at top of each contract.
// This lets us get a fresh stack for the hash and avoid stack-too-deep errors. // This lets us get a fresh stack for the hash and avoid stack-too-deep errors.
if (expression.kind !== 'interface'){ if (expression.kind !== 'interface'){
const start = expression.range[0]; let start = 0;
const end = contract.instrumented.slice(expression.range[0]).indexOf('{') + 1;
// It's possible a base contract will have constructor string arg
// which contains an open curly brace. Skip ahead pass the bases...
if (expression.baseContracts && expression.baseContracts.length){
for (let base of expression.baseContracts ){
if (base.range[1] > start){
start = base.range[1];
}
}
} else {
start = expression.range[0];
}
const end = contract.instrumented.slice(start).indexOf('{') + 1;
const loc = start + end;; const loc = start + end;;
(contract.injectionPoints[loc]) (contract.injectionPoints[loc])

@ -23,6 +23,11 @@ describe('generic statements', () => {
util.report(info.solcOutput.errors); util.report(info.solcOutput.errors);
}) })
it('should compile a base contract contructor with a string arg containing "{"', ()=> {
const info = util.instrumentAndCompile('statements/interpolation');
util.report(info.solcOutput.errors);
})
it('should instrument a single statement (first line of function)', () => { it('should instrument a single statement (first line of function)', () => {
const info = util.instrumentAndCompile('statements/single'); const info = util.instrumentAndCompile('statements/single');
util.report(info.solcOutput.errors); util.report(info.solcOutput.errors);

Loading…
Cancel
Save