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

@ -50,6 +50,15 @@ module.exports.run = function r(contract) {
contract = blockWrap(contract, node.body); contract = blockWrap(contract, node.body);
keepRunning = true; keepRunning = true;
this.stopTraversal(); 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