@fink/loxia
Version:
A fink to JavaScript compiler.
180 lines (158 loc) • 5.16 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 { 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;