···
if (typeof pattern === 'function') {
18
-
return pattern(state);
18
+
while (typeof pattern === 'function') pattern = pattern(state);
} else if (typeof pattern === 'string') {
const end = state.index + pattern.length;
const sub = state.input.slice(state.index, end);
···
export const match = (name, transform) => (quasis, ...expressions) => {
52
-
expressions.map((expression, i) => `_exec(state, _e${i})`)
53
+
expressions.map((expression, i) => `_e(state, _${i})`)
const makeMatcher = new Function(
58
-
...expressions.map((_expression, i) => `_e${i}`),
59
-
'return ' + astRoot(ast, '_name', transform ? '_transform' : null)
57
+
'_e,_n,_t,' + expressions.map((_expression, i) => `_${i}`).join(','),
58
+
'return ' + astRoot(ast, '_n', transform ? '_t' : null)
return makeMatcher(_exec, name, transform, ...expressions.map(_pattern));