@fink/loxia
Version:
A fink to JavaScript compiler.
173 lines (151 loc) • 5.85 kB
JavaScript
import { starts_with as starts_with_0 } from "@fink/std-lib/str.js";
import { add as add_0 } from "../context.js";
import { any as any_0 } from "../context.js";
import { ir_fn as ir_fn_0 } from "../context.js";
import { transform as transform_0 } from "../transform.js";
import { str as str_4 } from "../literals/string.js";
import { rec_e as rec_e_0 } from "../literals/record.js";
import { rec_s as rec_s_0 } from "../literals/record.js";
import { lst as lst_0 } from "../literals/list.js";
import { lst_a as lst_a_0 } from "../literals/list.js";
import { transform_import as transform_import_0 } from "./import.js";
import { transform_imp as transform_imp_0 } from "./import.js";
import { imp as imp_0 } from "./import.js";
const mod_1 = (exp_id_0, dirs_id_0, res_id_0, drec_0, ctx_0) => {
const result_0 = ir_fn_0(`mod`, [exp_id_0, dirs_id_0], res_id_0, {
loc: drec_0.loc
}, ctx_0);
return result_0;
};
const ident_to_key_0 = (drec_1, ctx_1) => {
const result_1 = str_4(drec_1.value, `key`, {
loc: drec_1.loc
}, ctx_1);
return result_1;
};
const add_export_0 = (exp_id_1, expr_0, ctx_2) => {
const dlst_0 = transform_0(expr_0, `ares`, ctx_2);
const val_2 = dlst_0[0];
const dlst_4 = ident_to_key_0(expr_0.left, dlst_0[2]);
const dlst_5 = rec_s_0(exp_id_1, dlst_4[1], val_2.at(-1)[1][0], `exports`, expr_0, dlst_4[2]);
return [[...val_2, ...dlst_4[0], ...dlst_5[0]], dlst_5[1], dlst_5[2]];
};
const transform_exprs_0 = (...args_3) => {
transform_exprs_0: do {
const dlst_6 = args_3[0];
const hdm_0 = dlst_6[0];
const expr_1 = undefined === hdm_0 ? false : hdm_0;
const tail_24 = dlst_6.slice(1);
const exp_id_2 = args_3[1];
const ctx_3 = args_3[2];
const out_0 = args_3[3];
/* istanbul ignore else */
if (expr_1 === false) {
return [out_0, exp_id_2, ctx_3];
}
/* istanbul ignore else */
if (null != expr_1) {
const itm_4 = expr_1.right;
/* istanbul ignore else */
if (null != itm_4) {
/* istanbul ignore else */
if (itm_4.op === `import`) {
const dlst_11 = transform_0(expr_1.right.right, `uri`, ctx_3);
const dlst_12 = transform_imp_0(expr_1.left, dlst_11[1], dlst_11[2]);
args_3 = [tail_24, exp_id_2, dlst_12[1], [...out_0, ...dlst_11[0], ...dlst_12[0]]];
continue transform_exprs_0;
}
}
}
/* istanbul ignore else */
if (null != expr_1) {
/* istanbul ignore else */
if (expr_1.op === `import`) {
const dlst_9 = transform_0(expr_1.right, `uri`, ctx_3);
const dlst_10 = imp_0(dlst_9[1], false, `sidefx`, expr_1, dlst_9[2]);
args_3 = [tail_24, exp_id_2, dlst_10[2], [...out_0, ...dlst_9[0], ...dlst_10[0]]];
continue transform_exprs_0;
}
}
/* istanbul ignore else */
if (null != expr_1) {
/* istanbul ignore else */
if (expr_1.op === `=`) {
const itm_1 = expr_1.left;
/* istanbul ignore else */
if (null != itm_1) {
/* istanbul ignore else */
if (itm_1.type === `ident`) {
const dlst_8 = add_export_0(exp_id_2, expr_1, ctx_3);
args_3 = [tail_24, dlst_8[1], dlst_8[2], [...out_0, ...dlst_8[0]]];
continue transform_exprs_0;
}
}
}
}
const dlst_7 = transform_0(expr_1, `mex`, ctx_3);
args_3 = [tail_24, exp_id_2, dlst_7[2], [...out_0, ...dlst_7[0]]];
continue transform_exprs_0;
} while (true);
};
const transform_directives_0 = (expr_2, ctx_4) => {
const dlst_13 = lst_0(`drctvs`, expr_2, ctx_4);
const drctvs_1 = dlst_13[0];
const dirs_id_1 = dlst_13[1];
const next_ctx_5 = dlst_13[2];
const comments_0 = expr_2.exprs[0].comments;
/* istanbul ignore else */
if (null != comments_0) {
const itm_6 = comments_0.leading;
/* 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.op === `#`) {
const itm_9 = itm_7.loc;
/* istanbul ignore else */
if (null != itm_9) {
const itm_10 = itm_9.start;
/* istanbul ignore else */
if (null != itm_10) {
/* istanbul ignore else */
if (itm_10.line === 1) {
const val_11 = starts_with_0(itm_7.value, `!`);
/* istanbul ignore else */
if (true === val_11) {
const dlst_15 = str_4(`#${comments_0.leading[0].value}`, `shbng`, expr_2, next_ctx_5);
const dlst_16 = lst_a_0(dirs_id_1, dlst_15[1], `drctvs`, expr_2, dlst_15[2]);
return [[...drctvs_1, ...dlst_15[0], ...dlst_16[0]], dlst_16[1], dlst_16[2]];
}
}
}
}
}
}
}
}
return [drctvs_1, dirs_id_1, next_ctx_5];
};
const transform_module_0 = (expr_3, result_27, ctx_5) => {
const dlst_17 = rec_e_0(`exports`, expr_3, ctx_5);
const dlst_18 = transform_directives_0(expr_3, dlst_17[2]);
const dlst_19 = transform_exprs_0(expr_3.exprs, dlst_17[1], dlst_18[2], []);
const dlst_20 = mod_1(dlst_19[1], dlst_18[1], result_27, expr_3, dlst_19[2]);
return [[...dlst_17[0], ...dlst_19[0], ...dlst_18[0], ...dlst_20[0]], dlst_20[2]];
};
const add_module_0 = ctx_6 => {
const pfn_0 = add_0(`module`, any_0, transform_module_0);
const ppr_0 = pfn_0(ctx_6);
const pfn_1 = add_0(`import`, any_0, transform_import_0);
const ppr_1 = pfn_1(ppr_0);
return ppr_1;
};
export const mod = mod_1,
ident_to_key = ident_to_key_0,
add_export = add_export_0,
transform_exprs = transform_exprs_0,
transform_directives = transform_directives_0,
transform_module = transform_module_0,
add_module = add_module_0;