UNPKG

@fink/loxia

Version:

A fink to JavaScript compiler.

169 lines (147 loc) 4.87 kB
import { add as add_0 } from "../context.js"; import { any as any_0 } from "../context.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 { get_refs as get_refs_0 } from "../context.js"; import { transform_dl as transform_dl_0 } from "../assignment/init.js"; import { bind_x as bind_x_0 } from "../identifier/init.js"; const cc_0 = (ret_id_0, res_id_0, name_or_id_0, drec_0, ctx_0) => { const result_0 = ir_fn_0(`cc`, [ret_id_0, res_id_0], name_or_id_0, { loc: drec_0.loc }, ctx_0); return result_0; }; const fnc_0 = (args_id_0, res_id_1, body_0, name_or_id_1, drec_1, ctx_1) => { const loc_1 = drec_1.loc; const dlst_0 = unique_or_id_0(`ret`, { loc: loc_1 }, ctx_1); const ret_id_1 = dlst_0[0]; const dlst_1 = cc_0(ret_id_1, res_id_1, undefined, { loc: loc_1 }, dlst_0[1]); const result_3 = ir_fn_0(`fn`, [[args_id_0, ret_id_1], [...body_0, ...dlst_1[0]]], name_or_id_1, { loc: loc_1 }, dlst_1[2]); return result_3; }; const zfnc_0 = (args_id_1, self_id_0, res_id_2, body_1, name_or_id_2, drec_2, ctx_2) => { const loc_2 = drec_2.loc; const dlst_2 = unique_or_id_0(`ret`, { loc: loc_2 }, ctx_2); const ret_id_2 = dlst_2[0]; const dlst_3 = cc_0(ret_id_2, res_id_2, undefined, { loc: loc_2 }, dlst_2[1]); const result_6 = ir_fn_0(`fn`, [[args_id_1, ret_id_2, self_id_0], [...body_1, ...dlst_3[0]]], name_or_id_2, { loc: loc_2 }, dlst_3[2]); return result_6; }; const transform_exprs_0 = (...args_3) => { transform_exprs_0: do { const dlst_4 = args_3[0]; const hdm_0 = dlst_4[0]; const expr_0 = undefined === hdm_0 ? false : hdm_0; const tail_29 = dlst_4.slice(1); const ctx_3 = args_3[1]; const out_0 = args_3[2]; /* istanbul ignore else */ if (expr_0 === false) { return [out_0, args_3[3], ctx_3]; } /* istanbul ignore else */ if (null != expr_0) { /* istanbul ignore else */ if (expr_0.value === `undefined`) { const dlst_6 = transform_0(expr_0, `result`, ctx_3); args_3 = [tail_29, dlst_6[2], [...out_0, ...dlst_6[0]], dlst_6[1]]; continue transform_exprs_0; } } const dlst_5 = transform_0(expr_0, `result`, ctx_3); args_3 = [tail_29, dlst_5[2], [...out_0, ...dlst_5[0]], dlst_5[1]]; continue transform_exprs_0; } while (true); }; const transform_args_0 = (drec_3, ctx_4) => { const dlst_7 = unique_or_id_0(`args`, { loc: drec_3.loc }, ctx_4); const args_id_2 = dlst_7[0]; const dlst_8 = transform_dl_0(drec_3.args, args_id_2, dlst_7[1]); return [dlst_8[0], args_id_2, dlst_8[2]]; }; const transform_func_0 = (expr_1, res_id_3, drec_4) => { const key_27 = `scopes`; const scopes_0 = drec_4.scopes; const key_28 = `self_name`; const hdm_1 = drec_4.self_name; const self_name_0 = undefined === hdm_1 ? false : hdm_1; const { scopes: _key_27, self_name: _key_28, ...ctx_5 } = drec_4; const func_ctx_0 = { ...ctx_5, scopes: [{}, ...scopes_0] }; let ret_8; ret_8: { /* istanbul ignore else */ if (self_name_0 === false) { ret_8 = [false, func_ctx_0]; /* istanbul ignore next */ break ret_8; } const dlst_10 = unique_or_id_0(`${res_id_3.i}`, expr_1, func_ctx_0); const self_id_1 = dlst_10[0]; const item_18 = bind_x_0({ value: self_name_0 }, self_id_1, dlst_10[1]); ret_8 = [self_id_1, item_18]; /* istanbul ignore next */ break ret_8; } const dlst_9 = ret_8; const self_id_2 = dlst_9[0]; const dlst_11 = transform_args_0(expr_1, dlst_9[1]); const args_id_3 = dlst_11[1]; const dlst_12 = transform_exprs_0(expr_1.exprs, dlst_11[2], []); const fn_res_id_0 = dlst_12[1]; const fn_ctx_0 = dlst_12[2]; const body_2 = [...dlst_11[0], ...dlst_12[0]]; let ret_9; ret_9: { const right_2 = get_refs_0(self_id_2, fn_ctx_0); /* istanbul ignore else */ if (true === (self_id_2 !== false && 0 < right_2)) { const result_26 = zfnc_0(args_id_3, self_id_2, fn_res_id_0, body_2, res_id_3, expr_1, fn_ctx_0); ret_9 = result_26; /* istanbul ignore next */ break ret_9; } const result_25 = fnc_0(args_id_3, fn_res_id_0, body_2, res_id_3, expr_1, fn_ctx_0); ret_9 = result_25; /* istanbul ignore next */ break ret_9; } const dlst_13 = ret_9; return [dlst_13[0], { ...dlst_13[2], scopes: scopes_0 }]; }; const add_func_0 = ctx_6 => { const pfn_0 = add_0(any_0, `fn`, transform_func_0); const ppr_0 = pfn_0(ctx_6); return ppr_0; }; export const cc = cc_0, fnc = fnc_0, zfnc = zfnc_0, transform_exprs = transform_exprs_0, transform_args = transform_args_0, transform_func = transform_func_0, add_func = add_func_0;