Mirror: The magical sticky regex-based parser generator 🧙

Simplify output of astExpression(...) generator

Changed files
+6 -19
src
babel
__snapshots__
+1 -1
src/babel/__snapshots__/plugin.test.js.snap
···
loop_3: for (var j3 = 0; 1; j3++) {
var y3 = state.y;
-
if (!_exec(state, _node_expression3)) {
if (j3) {
state.y = y3;
break loop_3;
···
loop_3: for (var j3 = 0; 1; j3++) {
var y3 = state.y;
+
if (x = _exec(state, _node_expression3)) {} else {
if (j3) {
state.y = y3;
break loop_3;
+5 -18
src/codegen.js
···
const restoreLength =
(opts.length && opts.abort && js`${_node}.length = ln${opts.length};`) ||
'';
-
-
const abort = js`
-
${opts.onAbort}
-
${restoreIndex(opts.index)}
-
${restoreLength}
-
${opts.abort}
-
`;
-
const expression = ast.expression.fn
? `${ast.expression.id}(${_state})`
: `${_exec}(${_state}, ${ast.expression.id})`;
-
if (!opts.capture) {
-
return js`
-
if (!${expression}) {
-
${abort}
-
}
-
`;
-
}
-
return js`
if (${_match} = ${expression}) {
-
${_node}.push(${_match});
} else {
-
${abort}
}
`;
};
···
const restoreLength =
(opts.length && opts.abort && js`${_node}.length = ln${opts.length};`) ||
'';
const expression = ast.expression.fn
? `${ast.expression.id}(${_state})`
: `${_exec}(${_state}, ${ast.expression.id})`;
return js`
if (${_match} = ${expression}) {
+
${opts.capture ? js`${_node}.push(${_match})` : ''}
} else {
+
${opts.onAbort}
+
${restoreIndex(opts.index)}
+
${restoreLength}
+
${opts.abort}
}
`;
};