UNPKG

@fink/larix

Version:

A parser for generating fink's AST.

51 lines (46 loc) 1.2 kB
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); };