UNPKG

@fink/loxia

Version:

A fink to JavaScript compiler.

490 lines (420 loc) 14.8 kB
const { reverse: reverse_0 } = require("@fink/std-lib/iter.js"); const { transform: transform_0 } = require("../transform.js"); const { unique_or_id: unique_or_id_0 } = require("../context.js"); const { ir_fn: ir_fn_0 } = require("../context.js"); const { get_refs: get_refs_0 } = require("../context.js"); const { transform_key: transform_key_0 } = require("../literals/record.js"); const { members_as_rec: members_as_rec_0 } = require("../literals/record.js"); const { cc: cc_0 } = require("../func/init.js"); const { lst_h: lst_h_0 } = require("../assignment/init.js"); const { lst_t: lst_t_0 } = require("../assignment/init.js"); const { lst_r: lst_r_0 } = require("../assignment/init.js"); const { rec_g: rec_g_0 } = require("../assignment/init.js"); const { rec_d: rec_d_0 } = require("../assignment/init.js"); const ac_0 = (cont_id_0, name_or_id_0, drec_0, ctx_0) => { const result_0 = ir_fn_0(`ac`, [cont_id_0], name_or_id_0, { loc: drec_0.loc }, ctx_0); return result_0; }; const cn_0 = (args_2, body_0, name_or_id_1, drec_1, ctx_1) => { const result_1 = ir_fn_0(`cn`, [args_2, [...body_0]], name_or_id_1, { loc: drec_1.loc }, ctx_1); return result_1; }; const cif_0 = (cond_id_0, true_id_0, else_id_0, name_or_id_2, drec_2, ctx_2) => { const result_2 = ir_fn_0(`cif`, [cond_id_0, true_id_0, else_id_0], name_or_id_2, { loc: drec_2.loc }, ctx_2); return result_2; }; const is_val_0 = (val_id_0, name_0, drec_3, ctx_3) => { const result_3 = ir_fn_0(`isv`, [val_id_0], name_0, { loc: drec_3.loc }, ctx_3); return result_3; }; const is_l_0 = (val_id_1, name_or_id_3, drec_4, ctx_4) => { const result_4 = ir_fn_0(`is_l`, [val_id_1], name_or_id_3, { loc: drec_4.loc }, ctx_4); return result_4; }; const is_r_0 = (val_id_2, name_or_id_4, drec_5, ctx_5) => { const result_5 = ir_fn_0(`is_r`, [val_id_2], name_or_id_4, { loc: drec_5.loc }, ctx_5); return result_5; }; const is_eq_0 = (left_id_0, right_id_0, name_or_id_5, drec_6, ctx_6) => { const result_6 = ir_fn_0(`==`, [left_id_0, right_id_0], name_or_id_5, { loc: drec_6.loc }, ctx_6); return result_6; }; const transform_exprs_0 = (...args_8) => { transform_exprs_0: do { const dlst_0 = args_8[0]; const hdm_0 = dlst_0[0]; const expr_0 = undefined === hdm_0 ? false : hdm_0; const ctx_7 = args_8[1]; const out_0 = args_8[2]; /* istanbul ignore else */ if (expr_0 === false) { return [out_0, args_8[3], ctx_7]; } const dlst_1 = transform_0(expr_0, `result`, ctx_7); args_8 = [dlst_0.slice(1), dlst_1[2], [...out_0, ...dlst_1[0]], dlst_1[1]]; continue transform_exprs_0; } while (true); }; const ht_0 = (dlst_2, expr_1, ctx_8) => { const items_id_0 = dlst_2[0]; const dlst_3 = lst_h_0(items_id_0, `itm`, expr_1, ctx_8); const dlst_4 = lst_t_0(items_id_0, expr_1, dlst_3[2]); return [[dlst_3[1], [...dlst_2[1], ...dlst_3[0]]], [dlst_4[1], [...dlst_4[0]]], dlst_4[2]]; }; const transform_with_partial_0 = (expr_2, name_1, val_id_3, drec_7) => { const key_36 = `partial_ident`; const { partial_ident: _key_36, ...ctx_9 } = drec_7; const dlst_5 = transform_0(expr_2, name_1, { ...ctx_9, partial_ident: val_id_3 }); return [dlst_5[0], dlst_5[1], { ...dlst_5[2], partial_ident: drec_7.partial_ident }]; }; const match_any_0 = (dlst_6, expr_3, gen_true_0, else_id_1, ctx_10) => { const dlst_7 = is_val_0(dlst_6[0], `cond`, expr_3, ctx_10); const dlst_8 = gen_true_0(dlst_7[2]); const dlst_9 = cif_0(dlst_7[1], dlst_8[1], else_id_1, undefined, expr_3, dlst_8[2]); const result_20 = cn_0([], [...dlst_6[1], ...dlst_7[0], ...dlst_8[0], ...dlst_9[0]], `match`, expr_3, dlst_9[2]); return result_20; }; const match_eq_0 = (dlst_10, expr_4, gen_true_1, else_id_2, ctx_11) => { const val_id_5 = dlst_10[0]; const dlst_11 = transform_with_partial_0(expr_4, `val`, val_id_5, ctx_11); const cond_ctx_0 = dlst_11[2]; const value_1 = get_refs_0(val_id_5, cond_ctx_0); let ret_12; ret_12: { /* istanbul ignore else */ if (true === value_1 > 0) { ret_12 = { i: `true` }; /* istanbul ignore next */ break ret_12; } ret_12 = val_id_5; /* istanbul ignore next */ break ret_12; } const left_id_1 = ret_12; const dlst_12 = is_eq_0(left_id_1, dlst_11[1], `cond`, expr_4, cond_ctx_0); const dlst_13 = gen_true_1(dlst_12[2]); const dlst_14 = cif_0(dlst_12[1], dlst_13[1], else_id_2, undefined, expr_4, dlst_13[2]); const result_29 = cn_0([], [...dlst_10[1], ...dlst_11[0], ...dlst_12[0], ...dlst_13[0], ...dlst_14[0]], `match`, expr_4, dlst_14[2]); return result_29; }; const match_items_0 = (...args_13) => { match_items_0: do { const items_16 = args_13[0]; const dlst_15 = args_13[1]; const expr_5 = dlst_15[0]; const tail_96 = dlst_15.slice(1); const gen_true_2 = args_13[2]; const else_id_3 = args_13[3]; const ctx_12 = args_13[4]; const match_expr_0 = args_13[5]; /* istanbul ignore else */ if (null != expr_5) { /* istanbul ignore else */ if (expr_5.type === `empty`) { const dlst_20 = lst_t_0(items_16[0], expr_5, ctx_12); args_13 = [[dlst_20[1], [...items_16[1], ...dlst_20[0]]], tail_96, gen_true_2, else_id_3, dlst_20[2], match_expr_0]; continue match_items_0; } } /* istanbul ignore else */ if (null != expr_5) { /* istanbul ignore else */ if (expr_5.type === `spread`) { /* istanbul ignore else */ if (expr_5.right === false) { const dlst_18 = lst_r_0(items_16[0], `rtail`, expr_5, ctx_12); const rev_rest_0 = reverse_0(tail_96); args_13 = [[dlst_18[1], [...items_16[1], ...dlst_18[0]]], rev_rest_0, gen_true_2, else_id_3, dlst_18[2], match_expr_0]; continue match_items_0; } } } /* istanbul ignore else */ if (null != expr_5) { /* istanbul ignore else */ if (expr_5.type === `spread`) { const result_37 = match_expr_0(items_16, expr_5.right, gen_true_2, else_id_3, ctx_12); return result_37; } } const dlst_16 = ht_0(items_16, expr_5, ctx_12); let ret_15; ret_15: { /* istanbul ignore else */ if (null != tail_96) { /* istanbul ignore else */ if (undefined !== dlst_15[1]) { ret_15 = ctx_13 => { const result_35 = match_items_0(dlst_16[1], tail_96, gen_true_2, else_id_3, ctx_13, match_expr_0); return result_35; }; /* istanbul ignore next */ break ret_15; } } ret_15 = gen_true_2; /* istanbul ignore next */ break ret_15; } const match_rest_0 = ret_15; const result_36 = match_expr_0(dlst_16[0], expr_5, match_rest_0, else_id_3, dlst_16[2]); return result_36; } while (true); }; const match_list_0 = (dlst_21, expr_6, gen_true_3, else_id_4, ctx_14, match_expr_1) => { const val_id_6 = dlst_21[0]; const dlst_22 = is_l_0(val_id_6, `is_lst`, expr_6, ctx_14); const dlst_23 = match_items_0([val_id_6, []], expr_6.exprs, gen_true_3, else_id_4, dlst_22[2], match_expr_1); const dlst_24 = cif_0(dlst_22[1], dlst_23[1], else_id_4, undefined, expr_6, dlst_23[2]); const result_51 = cn_0([], [...dlst_21[1], ...dlst_22[0], ...dlst_23[0], ...dlst_24[0]], `match_lst`, expr_6, dlst_24[2]); return result_51; }; const match_props_0 = (...args_16) => { match_props_0: do { const rec_val_0 = args_16[0]; const dlst_25 = args_16[1]; const expr_7 = dlst_25[0]; const tail_138 = dlst_25.slice(1); const gen_true_4 = args_16[2]; const else_id_5 = args_16[3]; const ctx_15 = args_16[4]; const match_expr_2 = args_16[5]; const hdm_1 = args_16[6]; const keys_0 = undefined === hdm_1 ? [] : hdm_1; /* istanbul ignore else */ if (null != expr_7) { /* istanbul ignore else */ if (expr_7.type === `spread`) { const dlst_30 = rec_d_0(rec_val_0[0], keys_0, `spread`, expr_7, ctx_15); const result_68 = match_expr_2([dlst_30[1], [...rec_val_0[1], ...dlst_30[0]]], expr_7.right, gen_true_4, else_id_5, dlst_30[2]); return result_68; } } /* istanbul ignore else */ if (null != expr_7) { /* istanbul ignore else */ if (expr_7.type === `rec:kv`) { const itm_9 = expr_7.left; /* istanbul ignore else */ if (null != itm_9) { /* istanbul ignore else */ if (itm_9.type === `member`) { const drec_8 = members_as_rec_0(expr_7.left, expr_7.right); args_16 = [rec_val_0, [...drec_8.exprs, ...tail_138], gen_true_4, else_id_5, ctx_15, match_expr_2, keys_0]; continue match_props_0; } } } } /* istanbul ignore else */ if (null != expr_7) { /* istanbul ignore else */ if (expr_7.type === `rec:kv`) { const rec_id_0 = rec_val_0[0]; const dlst_27 = transform_key_0(expr_7.left, ctx_15); const key_id_0 = dlst_27[1]; const dlst_28 = rec_g_0(rec_id_0, key_id_0, `itm`, expr_7, dlst_27[2]); let ret_20; ret_20: { /* istanbul ignore else */ if (null != expr_7) { /* istanbul ignore else */ if (expr_7.right === false) { ret_20 = expr_7.left; /* istanbul ignore next */ break ret_20; } } ret_20 = expr_7.right; /* istanbul ignore next */ break ret_20; } const val_expr_0 = ret_20; let ret_21; ret_21: { /* istanbul ignore else */ if (null != tail_138) { /* istanbul ignore else */ if (undefined !== dlst_25[1]) { ret_21 = ctx_16 => { const result_62 = match_props_0([rec_id_0, []], tail_138, gen_true_4, else_id_5, ctx_16, match_expr_2, [...keys_0, key_id_0]); return result_62; }; /* istanbul ignore next */ break ret_21; } } ret_21 = gen_true_4; /* istanbul ignore next */ break ret_21; } const match_rest_1 = ret_21; const result_63 = match_expr_2([dlst_28[1], [...rec_val_0[1], ...dlst_27[0], ...dlst_28[0]]], val_expr_0, match_rest_1, else_id_5, dlst_28[2]); return result_63; } } /* istanbul ignore next */ return; } while (true); }; const match_rec_8 = (dlst_31, expr_8, gen_true_5, else_id_6, ctx_17, match_expr_3) => { const val_id_8 = dlst_31[0]; const dlst_32 = is_r_0(val_id_8, `is_rec`, expr_8, ctx_17); const dlst_33 = match_props_0([val_id_8, []], expr_8.exprs, gen_true_5, else_id_6, dlst_32[2], match_expr_3); const dlst_34 = cif_0(dlst_32[1], dlst_33[1], else_id_6, undefined, expr_8, dlst_33[2]); const result_73 = cn_0([], [...dlst_31[1], ...dlst_32[0], ...dlst_33[0], ...dlst_34[0]], `match_rec`, expr_8, dlst_34[2]); return result_73; }; const match_expr_4 = (val_25, expr_9, gen_true_6, else_id_7, ctx_18) => { /* istanbul ignore else */ if (null != expr_9) { /* istanbul ignore else */ if (expr_9.type === `list`) { const result_79 = match_list_0(val_25, expr_9, gen_true_6, else_id_7, ctx_18, match_expr_4); return result_79; } } /* istanbul ignore else */ if (null != expr_9) { /* istanbul ignore else */ if (expr_9.type === `rec`) { const result_78 = match_rec_8(val_25, expr_9, gen_true_6, else_id_7, ctx_18, match_expr_4); return result_78; } } /* istanbul ignore else */ if (null != expr_9) { /* istanbul ignore else */ if (expr_9.type === `partial`) { const result_77 = match_any_0(val_25, expr_9, gen_true_6, else_id_7, ctx_18); return result_77; } } const result_76 = match_eq_0(val_25, expr_9, gen_true_6, else_id_7, ctx_18); return result_76; }; const match_res_exprs_0 = (exprs_1, name_2, ret_id_0, drec_9, ctx_19) => { const loc_7 = drec_9.loc; const scopes_0 = ctx_19.scopes; const dlst_35 = transform_exprs_0(exprs_1, { ...ctx_19, scopes: [{}, ...scopes_0] }, []); const dlst_36 = cc_0(ret_id_0, dlst_35[1], undefined, { loc: loc_7 }, dlst_35[2]); const dlst_37 = cn_0([], [...dlst_35[0], ...dlst_36[0]], name_2, { loc: loc_7 }, dlst_36[2]); return [dlst_37[0], dlst_37[1], { ...dlst_37[2], scopes: scopes_0 }]; }; const match_conditions_0 = (dlst_38, dlst_39, ret_id_1, ctx_20) => { const hdm_2 = dlst_38[0]; const expr_10 = undefined === hdm_2 ? false : hdm_2; const val_id_9 = dlst_39[0]; /* istanbul ignore else */ if (expr_10 === false) { const result_93 = match_res_exprs_0([], `else`, ret_id_1, { todo: `loc` }, ctx_20); return result_93; } /* istanbul ignore else */ if (null != expr_10) { /* istanbul ignore else */ if (expr_10.op === `else`) { const result_92 = match_res_exprs_0(expr_10.exprs, `else`, ret_id_1, { loc: expr_10.loc }, ctx_20); return result_92; } } const true_expr_0 = expr_10.right; const dlst_40 = match_conditions_0(dlst_38.slice(1), [val_id_9, []], ret_id_1, ctx_20); const result_91 = match_expr_4([val_id_9, [...dlst_39[1], ...dlst_40[0]]], expr_10.left, ctx_21 => { const result_89 = match_res_exprs_0(true_expr_0.exprs, `match_res`, ret_id_1, true_expr_0, ctx_21); return result_89; }, dlst_40[1], dlst_40[2]); return result_91; }; const transform_match_0 = (node_0, result_94, ctx_22) => { const dlst_41 = unique_or_id_0(`ret`, node_0, ctx_22); const ret_id_2 = dlst_41[0]; const dlst_43 = transform_0(node_0.args[0], `value`, dlst_41[1]); const dlst_44 = match_conditions_0(node_0.exprs, [dlst_43[1], []], ret_id_2, dlst_43[2]); const match_id_2 = dlst_44[1]; const dlst_47 = cn_0([ret_id_2], dlst_44[0][0][0].args[1], match_id_2, node_0, dlst_44[2]); const dlst_48 = ac_0(match_id_2, result_94, node_0, dlst_47[2]); return [[...dlst_43[0], ...dlst_47[0], ...dlst_48[0]], dlst_48[2]]; }; exports.ac = ac_0; exports.cn = cn_0; exports.cif = cif_0; exports.is_val = is_val_0; exports.is_l = is_l_0; exports.is_r = is_r_0; exports.is_eq = is_eq_0; exports.transform_exprs = transform_exprs_0; exports.ht = ht_0; exports.transform_with_partial = transform_with_partial_0; exports.match_any = match_any_0; exports.match_eq = match_eq_0; exports.match_items = match_items_0; exports.match_list = match_list_0; exports.match_props = match_props_0; exports.match_rec = match_rec_8; exports.match_expr = match_expr_4; exports.match_res_exprs = match_res_exprs_0; exports.match_conditions = match_conditions_0; exports.transform_match = transform_match_0;