@fink/larix
Version:
A parser for generating fink's AST.
51 lines (46 loc) • 1.2 kB
JavaScript
import { add_operator } from "@fink/prattler/expressions.js";
import { next_is, curr_loc, curr_value } from "@fink/prattler/parser.js";
import { prefix } from "../expressions.js";
import { single_expression } from "../block/expr.js";
export const spread = (token_type, expr_type) => ({ ...prefix(token_type),
nud: lbp => ctx => {
const {
start
} = curr_loc(ctx);
const op = curr_value(ctx);
let _do_result;
ˆmatch_2: {
const ˆvalue_1 = ctx;
/* istanbul ignore else */
if (next_is(ˆvalue_1, `,`)) {
_do_result = [false, ctx];
break ˆmatch_2;
}
{
{
const [expr, next_ctx] = single_expression(ctx, lbp);
_do_result = [expr, next_ctx];
}
break ˆmatch_2;
}
}
const [right, next_ctx] = _do_result;
_do_result = undefined;
const {
end
} = curr_loc(next_ctx);
return [{
type: expr_type,
op,
right,
loc: {
start,
end
}
}, next_ctx];
}
});
export const add_spread_operator = ctx => {
let ˆpipe_result_3 = ctx;
return ˆpipe_result_3 = add_operator(spread(`...`, `spread`))(ˆpipe_result_3);
};