Mirror: The magical sticky regex-based parser generator 🧙

Add function call inlining optimisation to JIT runtime

Changed files
+7 -3
src
+7 -3
src/core.js
··· 15 15 let match; 16 16 17 17 if (typeof pattern === 'function') { 18 - while (typeof pattern === 'function') pattern = pattern(state); 19 - return pattern; 18 + if (!pattern.length) pattern = pattern(); 19 + return pattern(state); 20 20 } else if (isStickySupported) { 21 21 pattern.lastIndex = state.index; 22 22 if (pattern.test(state.input)) { ··· 43 43 export const match = (name, transform) => (quasis, ...expressions) => { 44 44 const ast = parseDSL( 45 45 quasis, 46 - expressions.map((expression, i) => `_e(state, _${i})`) 46 + expressions.map((expression, i) => 47 + typeof expression === 'function' && expression.length 48 + ? `_${i}(state)` 49 + : `_e(state, _${i})` 50 + ) 47 51 ); 48 52 49 53 const makeMatcher = new Function(