Fix true/false scoped method definition function visibilities

experimental-options
cgewecke 3 years ago
parent df84fbf037
commit 63ad6770e6
  1. 46
      lib/injector.js

@ -85,7 +85,7 @@ class Injector {
_getFileScopedHashMethodDefinition(id, contract){ _getFileScopedHashMethodDefinition(id, contract){
const hash = web3Utils.keccak256(id).slice(2,10); const hash = web3Utils.keccak256(id).slice(2,10);
const method = this._getDefaultMethodIdentifier(id); const method = this._getDefaultMethodIdentifier(id);
return `\nfunction ${method}(bytes8 c__${hash}) public pure {}\n`; return `\nfunction ${method}(bytes8 c__${hash}) pure {}\n`;
} }
/** /**
@ -100,6 +100,19 @@ class Injector {
return `function ${method}(bytes8 c__${hash}) internal pure returns (bool){ return true; }\n`; return `function ${method}(bytes8 c__${hash}) internal pure returns (bool){ return true; }\n`;
} }
/**
* Generates a solidity statement injection defining a method
* *which returns boolean true* to pass instrumentation hash to.
* Declared once per file. (Has no visibility modifier)
* @param {String} fileName
* @return {String} ex: bytes32[1] memory _sc_82e0891
*/
_getFileScopeTrueMethodDefinition(id){
const hash = web3Utils.keccak256(id).slice(2,10);
const method = this._getTrueMethodIdentifier(id);
return `function ${method}(bytes8 c__${hash}) pure returns (bool){ return true; }\n`;
}
/** /**
* Generates a solidity statement injection defining a method * Generates a solidity statement injection defining a method
* *which returns boolean false* to pass instrumentation hash to. * *which returns boolean false* to pass instrumentation hash to.
@ -112,6 +125,19 @@ class Injector {
return `function ${method}(bytes8 c__${hash}) internal pure returns (bool){ return false; }\n`; return `function ${method}(bytes8 c__${hash}) internal pure returns (bool){ return false; }\n`;
} }
/**
* Generates a solidity statement injection defining a method
* *which returns boolean false* to pass instrumentation hash to.
* Declared once per file. (Has no visibility modifier)
* @param {String} fileName
* @return {String} ex: bytes32[1] memory _sc_82e0891
*/
_getFileScopedFalseMethodDefinition(id){
const hash = web3Utils.keccak256(id).slice(2,10);
const method = this._getFalseMethodIdentifier(id);
return `function ${method}(bytes8 c__${hash}) pure returns (bool){ return false; }\n`;
}
_getModifierDefinitions(contractId, instrumentation){ _getModifierDefinitions(contractId, instrumentation){
let injection = ''; let injection = '';
@ -312,11 +338,23 @@ class Injector {
? this._getFileScopedHashMethodDefinition(id) ? this._getFileScopedHashMethodDefinition(id)
: this._getDefaultMethodDefinition(id); : this._getDefaultMethodDefinition(id);
const trueMethodDefinition = (injection.isFileScoped)
? this._getFileScopeTrueMethodDefinition(id)
: this._getTrueMethodDefinition(id);
const falseMethodDefinition = (injection.isFileScoped)
? this._getFileScopedFalseMethodDefinition(id)
: this._getFalseMethodDefinition(id);
const modifierDefinition = (injection.isFileScoped)
? ""
: this._getModifierDefinitions(id, instrumentation);
contract.instrumented = `${start}` + contract.instrumented = `${start}` +
`${methodDefinition}` + `${methodDefinition}` +
`${this._getTrueMethodDefinition(id)}` + `${trueMethodDefinition}` +
`${this._getFalseMethodDefinition(id)}` + `${falseMethodDefinition}` +
`${this._getModifierDefinitions(id, instrumentation)}` + `${modifierDefinition}` +
`${end}`; `${end}`;
} }

Loading…
Cancel
Save