UNPKG

@fink/loxia

Version:

A fink to JavaScript compiler.

180 lines (158 loc) 5.16 kB
import { reverse as reverse_0 } from "@fink/std-lib/iter.js"; import { transform as transform_0 } from "../transform.js"; import { unique_or_id as unique_or_id_0 } from "../context.js"; import { ir_fn as ir_fn_0 } from "../context.js"; import { str as str_4 } from "./string.js"; const rec_m_0 = (rec1_id_0, rec2_id_0, name_or_id_0, drec_0, ctx_0) => { const result_0 = ir_fn_0(`rec_m`, [rec1_id_0, rec2_id_0], name_or_id_0, { loc: drec_0.loc }, ctx_0); return result_0; }; const rec_s_0 = (rec_id_0, key_id_0, val_id_0, name_or_id_1, drec_1, ctx_1) => { const result_1 = ir_fn_0(`rec_s`, [rec_id_0, key_id_0, val_id_0], name_or_id_1, { loc: drec_1.loc }, ctx_1); return result_1; }; const rec_e_0 = (name_or_id_2, drec_2, ctx_2) => { const result_2 = ir_fn_0(`rec`, [], name_or_id_2, { loc: drec_2.loc }, ctx_2); return result_2; }; const members_as_rec_0 = (...args_3) => { members_as_rec_0: do { const expr_0 = args_3[0]; const val_3 = args_3[1]; /* istanbul ignore else */ if (null != expr_0) { /* istanbul ignore else */ if (expr_0.type === `member`) { args_3 = [expr_0.left, { type: `rec`, exprs: [{ type: `rec:kv`, left: expr_0.right, right: val_3 }], loc: expr_0.loc }]; continue members_as_rec_0; } } return { type: `rec`, exprs: [{ type: `rec:kv`, left: expr_0, right: val_3 }], loc: expr_0.loc }; } while (true); }; const transform_key_0 = (expr_1, ctx_3) => { /* istanbul ignore else */ if (null != expr_1) { /* istanbul ignore else */ if (expr_1.type === `ident`) { const result_11 = str_4(expr_1.value, `key`, expr_1, ctx_3); return result_11; } } const result_10 = transform_0(expr_1, `key`, ctx_3); return result_10; }; const transform_val_0 = (expr_2, key_id_1, ctx_4) => { /* istanbul ignore else */ if (null != expr_2) { const itm_3 = expr_2.left; /* istanbul ignore else */ if (null != itm_3) { /* istanbul ignore else */ if (itm_3.type === `ident`) { /* istanbul ignore else */ if (expr_2.right === false) { const result_15 = transform_0(expr_2.left, `val`, ctx_4); return result_15; } } } } /* istanbul ignore else */ if (null != expr_2) { /* istanbul ignore else */ if (expr_2.right === false) { return [[], key_id_1, ctx_4]; } } const result_13 = transform_0(expr_2.right, `val`, ctx_4); return result_13; }; const transform_kv_0 = (expr_3, out_id_0, ctx_5) => { const dlst_0 = unique_or_id_0(`rec`, expr_3, ctx_5); const rec_id_1 = dlst_0[0]; const key_ctx_0 = dlst_0[1]; /* istanbul ignore else */ if (null != expr_3) { /* istanbul ignore else */ if (expr_3.type === `spread`) { const dlst_4 = transform_0(expr_3.right, `sprd`, key_ctx_0); const dlst_5 = rec_m_0(rec_id_1, dlst_4[1], out_id_0, expr_3, dlst_4[2]); return [[...dlst_4[0], ...dlst_5[0]], rec_id_1, dlst_5[2]]; } } const dlst_1 = transform_key_0(expr_3.left, key_ctx_0); const key_id_2 = dlst_1[1]; const dlst_2 = transform_val_0(expr_3, key_id_2, dlst_1[2]); const dlst_3 = rec_s_0(rec_id_1, key_id_2, dlst_2[1], out_id_0, expr_3, dlst_2[2]); return [[...dlst_1[0], ...dlst_2[0], ...dlst_3[0]], rec_id_1, dlst_3[2]]; }; const transform_entries_0 = (...args_7) => { transform_entries_0: do { const dlst_6 = args_7[0]; const hdm_0 = dlst_6[0]; const expr_4 = undefined === hdm_0 ? false : hdm_0; const tail_42 = dlst_6.slice(1); const ctx_6 = args_7[1]; const result_id_0 = args_7[2]; const hdm_1 = args_7[3]; const out_0 = undefined === hdm_1 ? [] : hdm_1; /* istanbul ignore else */ if (expr_4 === false) { return [out_0, result_id_0, ctx_6]; } /* istanbul ignore else */ if (null != expr_4) { const itm_7 = expr_4.left; /* istanbul ignore else */ if (null != itm_7) { /* istanbul ignore else */ if (itm_7.type === `member`) { const drec_3 = members_as_rec_0(expr_4.left, expr_4.right); args_7 = [[...drec_3.exprs, ...tail_42], ctx_6, result_id_0, out_0]; continue transform_entries_0; } } } const dlst_7 = transform_kv_0(expr_4, result_id_0, ctx_6); args_7 = [tail_42, dlst_7[2], dlst_7[1], [...dlst_7[0], ...out_0]]; continue transform_entries_0; } while (true); }; const transform_record_0 = (node_0, result_31, ctx_7) => { const exprs_1 = reverse_0(node_0.exprs); const dlst_8 = transform_entries_0(exprs_1, ctx_7, result_31); const dlst_9 = rec_e_0(dlst_8[1], node_0, dlst_8[2]); return [[...dlst_9[0], ...dlst_8[0]], dlst_9[2]]; }; export const rec_m = rec_m_0, rec_s = rec_s_0, rec_e = rec_e_0, members_as_rec = members_as_rec_0, transform_key = transform_key_0, transform_val = transform_val_0, transform_kv = transform_kv_0, transform_entries = transform_entries_0, transform_record = transform_record_0;