UNPKG

@fink/loxia

Version:

A fink to JavaScript compiler.

461 lines (390 loc) 12.6 kB
const { _in_ } = require("@fink/js-interop/runtime.js"); const types_0 = require("@babel/types"); const arrowFunctionExpression_0 = types_0.arrowFunctionExpression; const blockStatement_0 = types_0.blockStatement; const returnStatement_0 = types_0.returnStatement; const restElement_0 = types_0.restElement; const labeledStatement_0 = types_0.labeledStatement; const { get_refs: get_refs_0 } = require("../../ir/context.js"); const { dec_ref: dec_ref_0 } = require("../../ir/context.js"); const { update_value: update_value_0 } = require("../../ir/context.js"); const { transform_exprs: transform_exprs_0 } = require("../transform.js"); const { add: add_0 } = require("../context.js"); const { set_js: set_js_0 } = require("../context.js"); const { set_js2: set_js2_0 } = require("../context.js"); const { ident: ident_0 } = require("../identifier/init.js"); const clean_args_0 = (...args_0) => { clean_args_0: do { const args_1 = args_0[0]; const body_0 = args_0[1]; const ctx_0 = args_0[2]; const hdm_0 = args_0[3]; const out_0 = undefined === hdm_0 ? [] : hdm_0; /* istanbul ignore else */ if (null != args_1) { /* istanbul ignore else */ if (true === args_1.c < 0) { return [out_0, body_0, ctx_0]; } } /* istanbul ignore else */ if (null != args_1) { /* istanbul ignore else */ if (undefined !== args_1[args_1.c]) { args_0 = [{ ...args_1, c: args_1.c - 1 }, body_0, ctx_0, [args_1[args_1.c], ...out_0]]; continue clean_args_0; } } const unused_0 = ident_0({ i: `_${args_1.c}` }); args_0 = [{ ...args_1, c: args_1.c - 1 }, body_0, ctx_0, [unused_0, ...out_0]]; continue clean_args_0; } while (true); }; const split_args_body_0 = (...args_2) => { split_args_body_0: do { const dlst_0 = args_2[0]; const hdm_1 = dlst_0[0]; const expr_0 = undefined === hdm_1 ? false : hdm_1; const tail_5 = dlst_0.slice(1); const args_id_0 = args_2[1]; const ctx_1 = args_2[2]; const hdm_2 = args_2[3]; const args_3 = undefined === hdm_2 ? { c: -1 } : hdm_2; const hdm_3 = args_2[4]; const body_1 = undefined === hdm_3 ? [] : hdm_3; /* istanbul ignore else */ if (expr_0 === false) { return [args_3, body_1, ctx_1]; } /* istanbul ignore else */ if (null != expr_0) { const itm_11 = expr_0[0]; /* istanbul ignore else */ if (null != itm_11) { /* istanbul ignore else */ if (itm_11.f === `tpl_i`) { const itm_13 = itm_11.args; /* istanbul ignore else */ if (null != itm_13) { const itm_14 = itm_13[0]; /* istanbul ignore else */ if (null != itm_14) { /* istanbul ignore else */ if (itm_14.i === args_id_0.i) { const val_17 = expr_0[0].args; const idx_0 = val_17[1]; const arg_id_0 = expr_0[1][0]; /* istanbul ignore else */ if (true === idx_0 < 0) { args_2 = [tail_5, args_id_0, ctx_1, args_3, [...body_1, expr_0]]; continue split_args_body_0; } /* istanbul ignore else */ if (null != args_3) { /* istanbul ignore else */ if (args_3.foo === true) { args_2 = [tail_5, args_id_0, ctx_1, args_3, [...body_1, [{ ...expr_0[0], args: [val_17[0], idx_0 - args_3.c - 1] }, [arg_id_0]]]]; continue split_args_body_0; } } const arg_32 = ident_0(arg_id_0); const ppr_0 = (prtl_0 => { const pfn_1 = set_js2_0(expr_0, arg_32, prtl_0); return pfn_1; })(ctx_1); const ppr_1 = (prtl_1 => { const pfn_3 = dec_ref_0(args_id_0, prtl_1); return pfn_3; })(ppr_0); args_2 = [tail_5, args_id_0, ppr_1, { ...args_3, c: idx_0, [idx_0]: arg_32 }, body_1]; continue split_args_body_0; } } } } } } /* istanbul ignore else */ if (null != expr_0) { const itm_4 = expr_0[0]; /* istanbul ignore else */ if (null != itm_4) { /* istanbul ignore else */ if (itm_4.f === `tpl_s`) { const itm_6 = itm_4.args; /* istanbul ignore else */ if (null != itm_6) { const itm_7 = itm_6[0]; /* istanbul ignore else */ if (null != itm_7) { /* istanbul ignore else */ if (itm_7.i === args_id_0.i) { const drec_2 = expr_0[0]; const key_35 = `args`; const val_10 = drec_2.args; const args_id_1 = val_10[0]; const start_0 = val_10[1]; const end_0 = val_10[2]; const { args: _key_35, ...rex_0 } = drec_2; let ret_3; ret_3: { /* istanbul ignore else */ if (null != [start_0, end_0]) { /* istanbul ignore else */ if (start_0 === args_3.c + 1) { /* istanbul ignore else */ if (end_0 === 0) { const slc_0 = ident_0(args_id_1); const next_ctx_1 = set_js2_0(expr_0, slc_0, ctx_1); ret_3 = [[], next_ctx_1]; /* istanbul ignore next */ break ret_3; } } } ret_3 = [[[{ ...rex_0, args: [args_id_1, start_0 - args_3.c - 1, end_0] }, expr_0[1]]], ctx_1]; /* istanbul ignore next */ break ret_3; } const dlst_4 = ret_3; args_2 = [tail_5, args_id_1, dlst_4[1], { ...args_3, foo: true }, [...body_1, ...dlst_4[0]]]; continue split_args_body_0; } } } } } } /* istanbul ignore else */ if (null != expr_0) { const itm_2 = expr_0[0]; /* istanbul ignore else */ if (null != itm_2) { /* istanbul ignore else */ if (true === _in_(itm_2.f, [`fn`, `cn`])) { const foo_0 = expr_0[0]; const val_6 = foo_0.args; const dlst_2 = split_args_body_0(val_6[1], args_id_0, ctx_1, args_3); args_2 = [tail_5, args_id_0, dlst_2[2], dlst_2[0], [...body_1, [{ ...foo_0, args: [val_6[0], dlst_2[1]] }, expr_0[1]]]]; continue split_args_body_0; } } } args_2 = [tail_5, args_id_0, ctx_1, args_3, [...body_1, expr_0]]; continue split_args_body_0; } while (true); }; const transform_normal_fn_0 = (expr_1, ctx_2) => { const val_24 = expr_1[0].args; const fn_args_0 = val_24[0]; const res_id_0 = expr_1[1][0]; const args_id_2 = fn_args_0[0]; const hdm_4 = fn_args_0[2]; const self_id_0 = undefined === hdm_4 ? false : hdm_4; const sprd_7 = returnStatement_0(); const self_ctx_0 = set_js_0(fn_args_0[1], { ...sprd_7, leadingComments: [{ type: `CommentBlock`, value: ` istanbul ignore next ` }] }, ctx_2); let ret_10; ret_10: { /* istanbul ignore else */ if (self_id_0 === false) { ret_10 = self_ctx_0; /* istanbul ignore next */ break ret_10; } const ppr_2 = (prtl_2 => { const arg_56 = ident_0(res_id_0); const pfn_5 = set_js_0(self_id_0, arg_56, prtl_2); return pfn_5; })(self_ctx_0); const ppr_3 = (prtl_3 => { const pfn_7 = update_value_0(self_id_0, { ignore_refs: true }, prtl_3); return pfn_7; })(ppr_2); const ppr_4 = (prtl_4 => { const pfn_9 = update_value_0(res_id_0, { inline: false }, prtl_4); return pfn_9; })(ppr_3); ret_10 = ppr_4; /* istanbul ignore next */ break ret_10; } const body_ctx_0 = ret_10; const ppr_5 = (prtl_5 => { const pfn_11 = split_args_body_0(val_24[1], args_id_2, prtl_5); return pfn_11; })(body_ctx_0); const ppr_6 = (prtl_6 => { const pfn_13 = clean_args_0(...prtl_6); return pfn_13; })(ppr_5); const args_26 = ppr_6[0]; const fn_ctx_0 = ppr_6[2]; const value_6 = get_refs_0(args_id_2, fn_ctx_0); let ret_16; ret_16: { /* istanbul ignore else */ if (true === value_6 > 0) { const arg_66 = ident_0(args_id_2); const item_36 = restElement_0(arg_66); ret_16 = [...args_26, item_36]; /* istanbul ignore next */ break ret_16; } ret_16 = args_26; /* istanbul ignore next */ break ret_16; } const all_args_0 = ret_16; const dlst_12 = transform_exprs_0(ppr_6[1], fn_ctx_0); const arg_71 = blockStatement_0(dlst_12[0]); const js_0 = arrowFunctionExpression_0(all_args_0, arg_71); const result_44 = set_js2_0(expr_1, js_0, dlst_12[1]); return result_44; }; const transform_tco_fn_0 = (expr_2, ctx_3) => { const val_32 = expr_2[0].args; const fn_args_1 = val_32[0]; const res_id_1 = expr_2[1][0]; const args_id_3 = fn_args_1[0]; const self_id_1 = fn_args_1[2]; const sprd_9 = returnStatement_0(); const ppr_7 = (prtl_7 => { const pfn_15 = set_js_0(fn_args_1[1], { ...sprd_9, leadingComments: [{ type: `CommentBlock`, value: ` istanbul ignore next ` }] }, prtl_7); return pfn_15; })(ctx_3); const ppr_8 = (prtl_8 => { const arg_79 = ident_0(res_id_1); const pfn_17 = set_js_0(self_id_1, arg_79, prtl_8); return pfn_17; })(ppr_7); const ppr_9 = (prtl_9 => { const pfn_19 = update_value_0(self_id_1, { args_id: args_id_3, label_id: res_id_1, ignore_refs: true }, prtl_9); return pfn_19; })(ppr_8); const dlst_16 = transform_exprs_0(val_32[1], ppr_9); const arg_86 = ident_0(args_id_3); const item_38 = restElement_0(arg_86); const arg_90 = ident_0(res_id_1); const arg_93 = types_0.booleanLiteral(true); const arg_95 = blockStatement_0(dlst_16[0]); const arg_92 = types_0.doWhileStatement(arg_93, arg_95); const item_39 = labeledStatement_0(arg_90, arg_92); const arg_88 = blockStatement_0([item_39]); const js_1 = arrowFunctionExpression_0([item_38], arg_88); const result_51 = set_js2_0(expr_2, js_1, dlst_16[1]); return result_51; }; const transform_fn_0 = (expr_3, ctx_4) => { /* istanbul ignore else */ if (null != expr_3) { const itm_17 = expr_3[0]; /* istanbul ignore else */ if (null != itm_17) { /* istanbul ignore else */ if (itm_17.tco === true) { const result_54 = transform_tco_fn_0(expr_3, ctx_4); return result_54; } } } const result_53 = transform_normal_fn_0(expr_3, ctx_4); return result_53; }; const transform_cont_0 = (expr_4, ctx_5) => { const val_40 = expr_4[0].args; const hdm_5 = val_40[0][0]; const ret_id_2 = undefined === hdm_5 ? false : hdm_5; const dlst_19 = transform_exprs_0(val_40[1], ctx_5); const body_4 = dlst_19[0]; let ret_25; ret_25: { /* istanbul ignore else */ if (ret_id_2 === false) { const result_60 = blockStatement_0(body_4); ret_25 = result_60; /* istanbul ignore next */ break ret_25; } const arg_106 = ident_0(ret_id_2); const arg_108 = blockStatement_0(body_4); const result_59 = labeledStatement_0(arg_106, arg_108); ret_25 = result_59; /* istanbul ignore next */ break ret_25; } const js_2 = ret_25; const result_61 = set_js2_0(expr_4, js_2, dlst_19[1]); return result_61; }; const add_funcs_0 = ctx_6 => { const pfn_20 = add_0(`fn`, transform_fn_0); const ppr_10 = pfn_20(ctx_6); const pfn_21 = add_0(`cn`, transform_cont_0); const ppr_11 = pfn_21(ppr_10); return ppr_11; }; exports.clean_args = clean_args_0; exports.split_args_body = split_args_body_0; exports.transform_normal_fn = transform_normal_fn_0; exports.transform_tco_fn = transform_tco_fn_0; exports.transform_fn = transform_fn_0; exports.transform_cont = transform_cont_0; exports.add_funcs = add_funcs_0;