UNPKG

@fink/loxia

Version:

A fink to JavaScript compiler.

507 lines (442 loc) 16 kB
import { _in_ } from "@fink/js-interop/runtime.js"; import { reverse as reverse_0 } from "@fink/std-lib/iter.js"; import { add as add_0 } from "../context.js"; import { any as any_0 } from "../context.js"; import { unique_or_id as unique_or_id_0 } from "../context.js"; import { ir_fn as ir_fn_0 } from "../context.js"; import { transform as transform_0 } from "../transform.js"; import { members_as_rec as members_as_rec_0 } from "../literals/record.js"; import { str as str_5 } from "../literals/string.js"; import { bind as bind_0 } from "../identifier/init.js"; import { bind_x as bind_x_0 } from "../identifier/init.js"; const lst_h_0 = (lst_id_0, name_or_id_0, drec_0, ctx_0) => { const result_0 = ir_fn_0(`lst_h`, [lst_id_0], name_or_id_0, { loc: drec_0.loc }, ctx_0); return result_0; }; const lst_r_0 = (lst_id_1, name_or_id_1, drec_1, ctx_1) => { const result_1 = ir_fn_0(`lst_r`, [lst_id_1], name_or_id_1, { loc: drec_1.loc }, ctx_1); return result_1; }; const lst_t_0 = (lst_id_2, drec_2, ctx_2) => { const result_2 = ir_fn_0(`lst_t`, [lst_id_2], `tail`, { loc: drec_2.loc }, ctx_2); return result_2; }; const if_v_0 = (val_id_0, true_val_id_0, false_val_id_0, name_or_id_2, drec_3, ctx_3) => { const result_3 = ir_fn_0(`ifv`, [val_id_0, true_val_id_0, false_val_id_0], name_or_id_2, { loc: drec_3.loc }, ctx_3); return result_3; }; const rec_g_0 = (rec_id_0, key_id_0, name_or_id_3, drec_4, ctx_4) => { const result_4 = ir_fn_0(`rec_g`, [rec_id_0, key_id_0], name_or_id_3, { loc: drec_4.loc }, ctx_4); return result_4; }; const rec_d_0 = (rec_id_1, keys_0, name_or_id_4, drec_5, ctx_5) => { const result_5 = ir_fn_0(`rec_d`, [rec_id_1, ...keys_0], name_or_id_4, { loc: drec_5.loc }, ctx_5); return result_5; }; const rec_get_0 = (rec_id_2, key_id_1, val_id_1, fallback_0, drec_6, ctx_6) => { const loc_6 = drec_6.loc; /* istanbul ignore else */ if (fallback_0 === false) { const result_10 = rec_g_0(rec_id_2, key_id_1, val_id_1, { loc: loc_6 }, ctx_6); return result_10; } const dlst_0 = rec_g_0(rec_id_2, key_id_1, `hdm`, { loc: loc_6 }, ctx_6); const tmp_id_0 = dlst_0[1]; const dlst_1 = if_v_0(tmp_id_0, tmp_id_0, fallback_0, val_id_1, { loc: loc_6 }, dlst_0[2]); return [[...dlst_0[0], ...dlst_1[0]], dlst_1[1], dlst_1[2]]; }; const get_key_val_0 = (rec_id_3, expr_0, fallback_1, ctx_7) => { let ret_8; ret_8: { /* istanbul ignore else */ if (null != expr_0) { const itm_8 = expr_0.left; /* istanbul ignore else */ if (null != itm_8) { /* istanbul ignore else */ if (itm_8.type === `ident`) { /* istanbul ignore else */ if (expr_0.right === false) { const dlst_9 = bind_0(expr_0.left, ctx_7); const dlst_10 = str_5(expr_0.left.value, `key`, expr_0.left, dlst_9[1]); ret_8 = [dlst_10[0], dlst_10[1], dlst_9[0], dlst_10[2]]; /* istanbul ignore next */ break ret_8; } } } } /* istanbul ignore else */ if (null != expr_0) { const itm_4 = expr_0.left; /* istanbul ignore else */ if (null != itm_4) { /* istanbul ignore else */ if (itm_4.type === `ident`) { const itm_6 = expr_0.right; /* istanbul ignore else */ if (null != itm_6) { /* istanbul ignore else */ if (itm_6.type === `ident`) { const dlst_7 = bind_0(expr_0.right, ctx_7); const dlst_8 = str_5(expr_0.left.value, `key`, expr_0.left, dlst_7[1]); ret_8 = [dlst_8[0], dlst_8[1], dlst_7[0], dlst_8[2]]; /* istanbul ignore next */ break ret_8; } } } } } /* istanbul ignore else */ if (null != expr_0) { const itm_2 = expr_0.right; /* istanbul ignore else */ if (null != itm_2) { /* istanbul ignore else */ if (itm_2.type === `ident`) { const dlst_5 = bind_0(expr_0.right, ctx_7); const dlst_6 = transform_0(expr_0.left, `key`, dlst_5[1]); ret_8 = [dlst_6[0], dlst_6[1], dlst_5[0], dlst_6[2]]; /* istanbul ignore next */ break ret_8; } } } /* istanbul ignore else */ if (null != expr_0) { const itm_0 = expr_0.left; /* istanbul ignore else */ if (null != itm_0) { /* istanbul ignore else */ if (itm_0.type === `ident`) { const dlst_4 = str_5(expr_0.left.value, `key`, expr_0.left, ctx_7); ret_8 = [dlst_4[0], dlst_4[1], `val`, dlst_4[2]]; /* istanbul ignore next */ break ret_8; } } } const dlst_3 = transform_0(expr_0.left, `key`, ctx_7); ret_8 = [dlst_3[0], dlst_3[1], `val`, dlst_3[2]]; /* istanbul ignore next */ break ret_8; } const dlst_2 = ret_8; const key_id_7 = dlst_2[1]; const dlst_11 = rec_get_0(rec_id_3, key_id_7, dlst_2[2], fallback_1, expr_0, dlst_2[3]); return [[...dlst_2[0], ...dlst_11[0]], key_id_7, dlst_11[1], dlst_11[2]]; }; const transform_dr_0 = (...args_8) => { transform_dr_0: do { const dlst_12 = args_8[0]; const hdm_0 = dlst_12[0]; const expr_1 = undefined === hdm_0 ? false : hdm_0; const tail_72 = dlst_12.slice(1); const rec_id_4 = args_8[1]; const ctx_8 = args_8[2]; const transform_dl_0 = args_8[3]; const hdm_1 = args_8[4]; const keys_1 = undefined === hdm_1 ? [] : hdm_1; const hdm_2 = args_8[5]; const prev_0 = undefined === hdm_2 ? [] : hdm_2; const hdm_3 = args_8[6]; const fallback_2 = undefined === hdm_3 ? false : hdm_3; /* istanbul ignore else */ if (expr_1 === false) { return [prev_0, rec_id_4, ctx_8]; } /* istanbul ignore else */ if (null != expr_1) { /* istanbul ignore else */ if (expr_1.type === `spread`) { const dlst_20 = bind_0(expr_1.right, ctx_8); const dlst_21 = rec_d_0(rec_id_4, keys_1, dlst_20[0], expr_1, dlst_20[1]); args_8 = [tail_72, rec_id_4, dlst_21[2], transform_dl_0, keys_1, [...prev_0, ...dlst_21[0]]]; continue transform_dr_0; } } /* istanbul ignore else */ if (null != expr_1) { /* istanbul ignore else */ if (expr_1.right === false) { const dlst_19 = get_key_val_0(rec_id_4, expr_1, fallback_2, ctx_8); args_8 = [tail_72, rec_id_4, dlst_19[3], transform_dl_0, [...keys_1, dlst_19[1]], [...prev_0, ...dlst_19[0]]]; continue transform_dr_0; } } /* istanbul ignore else */ if (null != expr_1) { const itm_19 = expr_1.right; /* istanbul ignore else */ if (null != itm_19) { /* istanbul ignore else */ if (itm_19.type === `assign`) { const drec_8 = expr_1.right; const dlst_18 = transform_0(drec_8.right, `flbk`, ctx_8); args_8 = [[{ ...expr_1, right: drec_8.left }, ...tail_72], rec_id_4, dlst_18[2], transform_dl_0, keys_1, [...prev_0, ...dlst_18[0]], dlst_18[1]]; continue transform_dr_0; } } } /* istanbul ignore else */ if (null != expr_1) { const itm_17 = expr_1.left; /* istanbul ignore else */ if (null != itm_17) { /* istanbul ignore else */ if (itm_17.type === `member`) { const drec_7 = members_as_rec_0(expr_1.left, expr_1.right); args_8 = [[...drec_7.exprs, ...tail_72], rec_id_4, ctx_8, transform_dl_0, keys_1, prev_0, fallback_2]; continue transform_dr_0; } } } /* istanbul ignore else */ if (null != expr_1) { const itm_15 = expr_1.right; /* istanbul ignore else */ if (null != itm_15) { /* istanbul ignore else */ if (true === _in_(itm_15.type, [`ident`, `empty`])) { const dlst_17 = get_key_val_0(rec_id_4, expr_1, fallback_2, ctx_8); args_8 = [tail_72, rec_id_4, dlst_17[3], transform_dl_0, [...keys_1, dlst_17[1]], [...prev_0, ...dlst_17[0]]]; continue transform_dr_0; } } } /* istanbul ignore else */ if (null != expr_1) { const itm_13 = expr_1.right; /* istanbul ignore else */ if (null != itm_13) { /* istanbul ignore else */ if (itm_13.type === `rec`) { const dlst_15 = get_key_val_0(rec_id_4, expr_1, fallback_2, ctx_8); const dlst_16 = transform_dr_0(expr_1.right.exprs, dlst_15[2], dlst_15[3], transform_dl_0); args_8 = [tail_72, rec_id_4, dlst_16[2], transform_dl_0, [...keys_1, dlst_15[1]], [...prev_0, ...dlst_15[0], ...dlst_16[0]]]; continue transform_dr_0; } } } /* istanbul ignore else */ if (null != expr_1) { const itm_11 = expr_1.right; /* istanbul ignore else */ if (null != itm_11) { /* istanbul ignore else */ if (itm_11.type === `list`) { const dlst_13 = get_key_val_0(rec_id_4, expr_1, fallback_2, ctx_8); const dlst_14 = transform_dl_0(expr_1.right.exprs, dlst_13[2], dlst_13[3], []); args_8 = [tail_72, rec_id_4, dlst_14[2], transform_dl_0, [...keys_1, dlst_13[1]], [...prev_0, ...dlst_13[0], ...dlst_14[0]]]; continue transform_dr_0; } } } /* istanbul ignore next */ return; } while (true); }; const head_tail_0 = (lst_id_3, val_id_9, drec_9, ctx_9, hdm_4) => { const loc_7 = drec_9.loc; const fallback_3 = undefined === hdm_4 ? false : hdm_4; const dlst_22 = lst_t_0(lst_id_3, { loc: loc_7 }, ctx_9); const hd_ctx_0 = dlst_22[2]; let ret_12; ret_12: { /* istanbul ignore else */ if (fallback_3 === false) { const dlst_26 = lst_h_0(lst_id_3, val_id_9, { loc: loc_7 }, hd_ctx_0); ret_12 = [dlst_26[0], dlst_26[2]]; /* istanbul ignore next */ break ret_12; } const dlst_24 = lst_h_0(lst_id_3, `hdm`, { loc: loc_7 }, hd_ctx_0); const hd_id_0 = dlst_24[1]; const dlst_25 = if_v_0(hd_id_0, hd_id_0, fallback_3, val_id_9, { loc: loc_7 }, dlst_24[2]); ret_12 = [[...dlst_24[0], ...dlst_25[0]], dlst_25[2]]; /* istanbul ignore next */ break ret_12; } const dlst_23 = ret_12; return [[...dlst_23[0], ...dlst_22[0]], dlst_22[1], dlst_23[1]]; }; const transform_dl_1 = (...args_10) => { transform_dl_1: do { const dlst_27 = args_10[0]; const hdm_5 = dlst_27[0]; const expr_2 = undefined === hdm_5 ? false : hdm_5; const tail_130 = dlst_27.slice(1); const lst_id_4 = args_10[1]; const ctx_10 = args_10[2]; const hdm_6 = args_10[3]; const prev_1 = undefined === hdm_6 ? [] : hdm_6; const fallback_4 = args_10[4]; /* istanbul ignore else */ if (expr_2 === false) { return [prev_1, lst_id_4, ctx_10]; } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.type === `ident`) { const dlst_41 = bind_0(expr_2, ctx_10); const dlst_42 = head_tail_0(lst_id_4, dlst_41[0], expr_2, dlst_41[1], fallback_4); args_10 = [tail_130, dlst_42[1], dlst_42[2], [...prev_1, ...dlst_42[0]]]; continue transform_dl_1; } } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.type === `assign`) { const dlst_40 = transform_0(expr_2.right, `flbk`, ctx_10); args_10 = [[expr_2.left, ...tail_130], lst_id_4, dlst_40[2], [...prev_1, ...dlst_40[0]], dlst_40[1]]; continue transform_dl_1; } } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.type === `empty`) { const dlst_38 = unique_or_id_0(`unused`, expr_2, ctx_10); const dlst_39 = head_tail_0(lst_id_4, dlst_38[0], expr_2, dlst_38[1]); args_10 = [tail_130, dlst_39[1], dlst_39[2], [...prev_1, ...dlst_39[0]]]; continue transform_dl_1; } } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.type === `spread`) { const dlst_34 = lst_r_0(lst_id_4, `rtail`, expr_2, ctx_10); const rev_exprs_0 = reverse_0(tail_130); const dlst_35 = transform_dl_1(rev_exprs_0, dlst_34[1], dlst_34[2], [...prev_1, ...dlst_34[0]]); const out_8 = dlst_35[0]; const tail_id_3 = dlst_35[1]; const spread_ctx_0 = dlst_35[2]; /* istanbul ignore else */ if (expr_2.right === false) { return [out_8, tail_id_3, spread_ctx_0]; } const dlst_36 = bind_0(expr_2.right, spread_ctx_0); const id_0 = dlst_36[0]; const dlst_37 = lst_r_0(tail_id_3, id_0, expr_2, dlst_36[1]); return [[...out_8, ...dlst_37[0]], id_0, dlst_37[2]]; } } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.type === `list`) { const dlst_31 = unique_or_id_0(`dlst`, expr_2, ctx_10); const val_id_11 = dlst_31[0]; const dlst_32 = head_tail_0(lst_id_4, val_id_11, expr_2, dlst_31[1], fallback_4); const dlst_33 = transform_dl_1(expr_2.exprs, val_id_11, dlst_32[2], []); args_10 = [tail_130, dlst_32[1], dlst_33[2], [...prev_1, ...dlst_32[0], ...dlst_33[0]]]; continue transform_dl_1; } } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.type === `rec`) { const dlst_28 = unique_or_id_0(`drec`, expr_2, ctx_10); const val_id_10 = dlst_28[0]; const dlst_29 = head_tail_0(lst_id_4, val_id_10, expr_2, dlst_28[1], fallback_4); const dlst_30 = transform_dr_0(expr_2.exprs, val_id_10, dlst_29[2], transform_dl_1, []); args_10 = [tail_130, dlst_29[1], dlst_30[2], [...prev_1, ...dlst_29[0], ...dlst_30[0]]]; continue transform_dl_1; } } /* istanbul ignore next */ return; } while (true); }; const transform_assign_0 = (node_0, _1, ctx_11) => { const value_6 = node_0.left; /* istanbul ignore else */ if (null != value_6) { /* istanbul ignore else */ if (value_6.type === `list`) { const dlst_47 = transform_0(node_0.right, `dlst`, ctx_11); const dlst_48 = transform_dl_1(node_0.left.exprs, dlst_47[1], dlst_47[2]); return [[...dlst_47[0], ...dlst_48[0]], dlst_48[2]]; } } /* istanbul ignore else */ if (null != value_6) { /* istanbul ignore else */ if (value_6.type === `rec`) { const dlst_45 = transform_0(node_0.right, `drec`, ctx_11); const dlst_46 = transform_dr_0(node_0.left.exprs, dlst_45[1], dlst_45[2], transform_dl_1); return [[...dlst_45[0], ...dlst_46[0]], dlst_46[2]]; } } /* istanbul ignore else */ if (null != value_6) { /* istanbul ignore else */ if (value_6.type === `ident`) { const name_0 = node_0.left.value; const dlst_43 = unique_or_id_0(name_0, node_0.left, { ...ctx_11, self_name: name_0 }); const l_id_0 = dlst_43[0]; const dlst_44 = transform_0(node_0.right, l_id_0, dlst_43[1]); const { self_name: _key_116, ...bind_ctx_0 } = dlst_44[2]; const end_ctx_5 = bind_x_0(node_0.left, l_id_0, bind_ctx_0); return [dlst_44[0], end_ctx_5]; } } /* istanbul ignore next */ return; }; const add_assignment_0 = ctx_12 => { const pfn_0 = add_0(any_0, `=`, transform_assign_0); const ppr_0 = pfn_0(ctx_12); return ppr_0; }; export const lst_h = lst_h_0, lst_r = lst_r_0, lst_t = lst_t_0, if_v = if_v_0, rec_g = rec_g_0, rec_d = rec_d_0, rec_get = rec_get_0, get_key_val = get_key_val_0, transform_dr = transform_dr_0, head_tail = head_tail_0, transform_dl = transform_dl_1, transform_assign = transform_assign_0, add_assignment = add_assignment_0;