@fink/loxia
Version:
A fink to JavaScript compiler.
92 lines (80 loc) • 2.93 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";
const lst_0 = (name_or_id_0, drec_0, ctx_0) => {
const result_0 = ir_fn_0(`lst`, [], name_or_id_0, {
loc: drec_0.loc
}, ctx_0);
return result_0;
};
const lst_a_0 = (lst_id_0, val_id_0, name_or_id_1, drec_1, ctx_1) => {
const result_1 = ir_fn_0(`lst_a`, [lst_id_0, val_id_0], name_or_id_1, {
loc: drec_1.loc
}, ctx_1);
return result_1;
};
const lst_c_0 = (lst1_id_0, lst2_id_0, name_or_id_2, drec_2, ctx_2) => {
const result_2 = ir_fn_0(`lst_c`, [lst1_id_0, lst2_id_0], name_or_id_2, {
loc: drec_2.loc
}, ctx_2);
return result_2;
};
const transform_item_0 = (expr_0, out_id_0, ctx_3) => {
const dlst_0 = unique_or_id_0(`lst`, expr_0, ctx_3);
const lst_id_1 = dlst_0[0];
const item_ctx_0 = dlst_0[1];
/* istanbul ignore else */
if (null != expr_0) {
/* istanbul ignore else */
if (expr_0.type === `spread`) {
const dlst_4 = transform_0(expr_0.right, `items`, item_ctx_0);
const dlst_5 = lst_c_0(lst_id_1, dlst_4[1], out_id_0, expr_0, dlst_4[2]);
return [[...dlst_4[0], ...dlst_5[0]], lst_id_1, dlst_5[2]];
}
}
/* istanbul ignore else */
if (null != expr_0) {
/* istanbul ignore else */
if (expr_0.type === `empty`) {
const dlst_3 = lst_a_0(lst_id_1, {
i: `_`,
loc: expr_0.loc
}, out_id_0, expr_0, item_ctx_0);
return [dlst_3[0], lst_id_1, dlst_3[2]];
}
}
const dlst_1 = transform_0(expr_0, `item`, item_ctx_0);
const dlst_2 = lst_a_0(lst_id_1, dlst_1[1], out_id_0, expr_0, dlst_1[2]);
return [[...dlst_1[0], ...dlst_2[0]], lst_id_1, dlst_2[2]];
};
const transform_items_0 = (...args_4) => {
transform_items_0: do {
const dlst_6 = args_4[0];
const hdm_0 = dlst_6[0];
const expr_1 = undefined === hdm_0 ? false : hdm_0;
const ctx_4 = args_4[1];
const result_id_0 = args_4[2];
const hdm_1 = args_4[3];
const out_0 = undefined === hdm_1 ? [] : hdm_1;
/* istanbul ignore else */
if (expr_1 === false) {
return [out_0, result_id_0, ctx_4];
}
const dlst_7 = transform_item_0(expr_1, result_id_0, ctx_4);
args_4 = [dlst_6.slice(1), dlst_7[2], dlst_7[1], [...dlst_7[0], ...out_0]];
continue transform_items_0;
} while (true);
};
const transform_list_0 = (node_0, result_17, ctx_5) => {
const exprs_0 = reverse_0(node_0.exprs);
const dlst_8 = transform_items_0(exprs_0, ctx_5, result_17);
const dlst_9 = lst_0(dlst_8[1], node_0, dlst_8[2]);
return [[...dlst_9[0], ...dlst_8[0]], dlst_9[2]];
};
export const lst = lst_0,
lst_a = lst_a_0,
lst_c = lst_c_0,
transform_item = transform_item_0,
transform_items = transform_items_0,
transform_list = transform_list_0;