UNPKG

@fink/larix

Version:

A parser for generating fink's AST.

111 lines (95 loc) 2.23 kB
const { advance } = require("@fink/prattler/parser.js"); const { add_named_block, indented_block } = require("../block/init.js"); const { single_expression } = require("../block/expr.js"); const get_condition = ctx => { const [left, next_ctx] = single_expression(ctx, 0); { const ˆvalue_1 = left; /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_3, op: ˆp_4 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_3 === `block`) /* istanbul ignore else */ if (ˆp_4 === `else`) { return [left, next_ctx]; } } { return [left, advance(next_ctx)]; } } }; exports.get_condition = get_condition; const get_result = ctx => { const [{ exprs, comments, loc }, next_ctx] = indented_block(ctx); return [{ type: `block`, exprs, comments, loc }, next_ctx]; }; exports.get_result = get_result; const cond_result_expr = ctx => { // [{comments, ...left}, result_ctx] = get_condition ctx const [left, result_ctx] = get_condition(ctx); { const ˆvalue_5 = left; /* istanbul ignore else */ if (ˆvalue_5 != null) { const { type: ˆp_7, op: ˆp_8 } = ˆvalue_5; /* istanbul ignore else */ if (ˆp_7 === `block`) /* istanbul ignore else */ if (ˆp_8 === `else`) { return [left, result_ctx]; } } { { const [right, next_ctx] = get_result(result_ctx); const { start } = left.loc; const { end } = right.loc; // [{type: 'match:expr', left, right, loc: {start, end}, comments}, next_ctx] return [{ type: `match:expr`, left, right, loc: { start, end } }, next_ctx]; } } } }; exports.cond_result_expr = cond_result_expr; const add_conditionals = ctx => { let ˆpipe_result_9 = ctx; ˆpipe_result_9 = add_named_block(`match`, `block`, cond_result_expr)(ˆpipe_result_9); return ˆpipe_result_9 = add_named_block(`else`)(ˆpipe_result_9); }; exports.add_conditionals = add_conditionals;