function isNegativeLookbehindAvailable() {
try {
new RegExp('(?<!.)');
return true;
} catch (_) {
return false;
}
}
var SOL_NUMBER_RE = /-?(\b0[xX]([a-fA-F0-9]_?)*[a-fA-F0-9]|(\b[1-9](_?\d)*(\.((\d_?)*\d)?)?|\.\d(_?\d)*)([eE][-+]?\d(_?\d)*)?|\b0)(?!\w|\$)/;
if (isNegativeLookbehindAvailable()) {
SOL_NUMBER_RE = SOL_NUMBER_RE.source.replace(/\\b/g, '(?<!\\$)\\b');
}
var SOL_NUMBER = {
className: 'number',
begin: SOL_NUMBER_RE,
relevance: 0,
};
var SOL_ASSEMBLY_KEYWORDS = {
keyword:
'assembly ' +
'let function ' +
'if switch case default for leave ' +
'break continue ' +
'u256 ' + 'jump jumpi ' +
'stop return revert selfdestruct invalid',
built_in:
'add sub mul div sdiv mod smod exp not lt gt slt sgt eq iszero ' +
'and or xor byte shl shr sar ' +
'addmod mulmod signextend keccak256 ' +
'pc pop ' +
'dup1 dup2 dup3 dup4 dup5 dup6 dup7 dup8 dup9 dup10 dup11 dup12 dup13 dup14 dup15 dup16 ' +
'swap1 swap2 swap3 swap4 swap5 swap6 swap7 swap8 swap9 swap10 swap11 swap12 swap13 swap14 swap15 swap16 ' +
'mload mstore mstore8 sload sstore msize ' +
'gas address balance selfbalance caller callvalue ' +
'calldataload calldatasize calldatacopy codesize codecopy extcodesize extcodecopy returndatasize returndatacopy extcodehash ' +
'create create2 call callcode delegatecall staticcall ' +
'log0 log1 log2 log3 log4 ' +
'chainid origin gasprice basefee blockhash coinbase timestamp number difficulty prevrandao gaslimit',
literal:
'true false'
};
var HEX_APOS_STRING_MODE = {
className: 'string',
begin: /\bhex'(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?'/, };
var HEX_QUOTE_STRING_MODE = {
className: 'string',
begin: /\bhex"(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?"/, };
function solAposStringMode(hljs) {
return hljs.inherit(
hljs.APOS_STRING_MODE, { begin: /(\bunicode)?'/ }
);
}
function solQuoteStringMode(hljs) {
return hljs.inherit(
hljs.QUOTE_STRING_MODE, { begin: /(\bunicode)?"/ }
);
}
function baseAssembly(hljs) {
var SOL_APOS_STRING_MODE = solAposStringMode(hljs);
var SOL_QUOTE_STRING_MODE = solQuoteStringMode(hljs);
var SOL_ASSEMBLY_LEXEMES_RE = /[A-Za-z_$][A-Za-z_$0-9.]*/;
var SOL_ASSEMBLY_TITLE_MODE =
hljs.inherit(hljs.TITLE_MODE, {
begin: /[A-Za-z$_][0-9A-Za-z$_]*/,
lexemes: SOL_ASSEMBLY_LEXEMES_RE,
keywords: SOL_ASSEMBLY_KEYWORDS
});
var SOL_ASSEMBLY_FUNC_PARAMS = {
className: 'params',
begin: /\(/, end: /\)/,
excludeBegin: true,
excludeEnd: true,
lexemes: SOL_ASSEMBLY_LEXEMES_RE,
keywords: SOL_ASSEMBLY_KEYWORDS,
contains: [
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
SOL_APOS_STRING_MODE,
SOL_QUOTE_STRING_MODE,
SOL_NUMBER
]
};
var SOL_ASSEMBLY_OPERATORS = {
className: 'operator',
begin: /:=|->/
};
return {
keywords: SOL_ASSEMBLY_KEYWORDS,
lexemes: SOL_ASSEMBLY_LEXEMES_RE,
contains: [
SOL_APOS_STRING_MODE,
SOL_QUOTE_STRING_MODE,
HEX_APOS_STRING_MODE,
HEX_QUOTE_STRING_MODE,
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
SOL_NUMBER,
SOL_ASSEMBLY_OPERATORS,
{ className: 'function',
lexemes: SOL_ASSEMBLY_LEXEMES_RE,
beginKeywords: 'function', end: '{', excludeEnd: true,
contains: [
SOL_ASSEMBLY_TITLE_MODE,
SOL_ASSEMBLY_FUNC_PARAMS,
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
SOL_ASSEMBLY_OPERATORS
],
}
]
};
}
module.exports = {
SOL_ASSEMBLY_KEYWORDS,
baseAssembly,
solAposStringMode,
solQuoteStringMode,
HEX_APOS_STRING_MODE,
HEX_QUOTE_STRING_MODE,
SOL_NUMBER,
isNegativeLookbehindAvailable
};