@fink/loxia
Version:
A fink to JavaScript compiler.
452 lines (394 loc) • 14.7 kB
JavaScript
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 { get_refs as get_refs_0 } from "../context.js";
import { transform_key as transform_key_0 } from "../literals/record.js";
import { members_as_rec as members_as_rec_0 } from "../literals/record.js";
import { cc as cc_0 } from "../func/init.js";
import { lst_h as lst_h_0 } from "../assignment/init.js";
import { lst_t as lst_t_0 } from "../assignment/init.js";
import { lst_r as lst_r_0 } from "../assignment/init.js";
import { rec_g as rec_g_0 } from "../assignment/init.js";
import { rec_d as rec_d_0 } from "../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]];
};
export const ac = ac_0,
cn = cn_0,
cif = cif_0,
is_val = is_val_0,
is_l = is_l_0,
is_r = is_r_0,
is_eq = is_eq_0,
transform_exprs = transform_exprs_0,
ht = ht_0,
transform_with_partial = transform_with_partial_0,
match_any = match_any_0,
match_eq = match_eq_0,
match_items = match_items_0,
match_list = match_list_0,
match_props = match_props_0,
match_rec = match_rec_8,
match_expr = match_expr_4,
match_res_exprs = match_res_exprs_0,
match_conditions = match_conditions_0,
transform_match = transform_match_0;