Only remove pure/view/constant from functions

Uses the preprocessor walking over the AST rather than a regex
fix/constant-variables
Alex Rea 7 years ago
parent af0b842ee7
commit 58a216cb85
  1. 10
      lib/app.js
  2. 9
      lib/preprocessor.js

@ -8,6 +8,7 @@ const istanbul = require('istanbul');
const getInstrumentedVersion = require('./instrumentSolidity.js');
const CoverageMap = require('./coverageMap.js');
const defaultTruffleConfig = require('./truffleConfig.js');
const preprocessor = require('./preprocessor');
const isWin = /^win/.test(process.platform);
@ -284,16 +285,11 @@ class App {
*/
postProcessPure(env) {
shell.ls(`${env}/**/*.sol`).forEach(file => {
const pureRe = /\spure\s/gi;
const viewRe = /\sview\s/gi;
const constantRe = /\sconstant\s/gi;
const contractPath = this.platformNeutralPath(file);
let contract = fs.readFileSync(contractPath).toString();
contract = contract.replace(pureRe, ' ');
contract = contract.replace(viewRe, ' ');
contract = contract.replace(constantRe, ' ');
contract = preprocessor.run(contract);
fs.writeFileSync(contractPath, contract);
})
});
}
/**

@ -50,6 +50,15 @@ module.exports.run = function r(contract) {
contract = blockWrap(contract, node.body);
keepRunning = true;
this.stopTraversal();
} else if (node.type === 'FunctionDeclaration' && node.modifiers) {
// We want to remove constant / pure / view from functions
for (let i = 0; i < node.modifiers.length; i++) {
if (['pure', 'constant', 'view'].indexOf(node.modifiers[i].name) > -1) {
contract = contract.slice(0, node.modifiers[i].start) + contract.slice(node.modifiers[i].end);
keepRunning = true;
this.stopTraversal();
}
}
}
},
});

Loading…
Cancel
Save