@fink/loxia
Version:
A fink to JavaScript compiler.
182 lines (158 loc) • 5.11 kB
JavaScript
const {
_in_
} = require("@fink/js-interop/runtime.js");
const {
length: length_0
} = require("@fink/std-lib/iter.js");
const {
floor: floor_0
} = require("@fink/std-lib/math.js");
const alphabet_0 = `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`;
const base_0 = length_0(alphabet_0);
const to_id_0 = (...args_0) => {
to_id_0: do {
const idx_0 = args_0[0];
const hdm_0 = args_0[1];
const out_0 = undefined === hdm_0 ? `` : hdm_0;
const div_0 = floor_0(idx_0 / base_0);
const rem_0 = idx_0 % base_0;
/* istanbul ignore else */
if (div_0 === 0) {
return `${alphabet_0[rem_0]}${out_0}`;
}
args_0 = [div_0 - 1, `${alphabet_0[rem_0]}${out_0}`];
continue to_id_0;
} while (true);
};
const get_new_id_0 = (id_0, renames_0) => {
const hdm_1 = renames_0.id_cntr;
const id_cntr_0 = undefined === hdm_1 ? 0 : hdm_1;
const new_id_0 = to_id_0(id_cntr_0);
return [{ ...id_0,
i: new_id_0
}, { ...renames_0,
id_cntr: id_cntr_0 + 1,
[id_0.i]: new_id_0
}];
};
const replace_refs_0 = (...args_2) => {
replace_refs_0: do {
const dlst_0 = args_2[0];
const hdm_2 = dlst_0[0];
const id_1 = undefined === hdm_2 ? false : hdm_2;
const renames_1 = args_2[1];
const hdm_3 = args_2[2];
const out_1 = undefined === hdm_3 ? [] : hdm_3;
/* istanbul ignore else */
if (id_1 === false) {
return out_1;
}
const hdm_4 = renames_1[id_1.i];
args_2 = [dlst_0.slice(1), renames_1, [...out_1, { ...id_1,
i: undefined === hdm_4 ? id_1.i : hdm_4
}]];
continue replace_refs_0;
} while (true);
};
const rename_0 = (...args_3) => {
rename_0: do {
const dlst_1 = args_3[0];
const hdm_5 = dlst_1[0];
const id_2 = undefined === hdm_5 ? false : hdm_5;
const renames_2 = args_3[1];
const hdm_6 = args_3[2];
const out_2 = undefined === hdm_6 ? [] : hdm_6;
/* istanbul ignore else */
if (id_2 === false) {
return [out_2, renames_2];
}
const dlst_2 = get_new_id_0(id_2, renames_2);
args_3 = [dlst_1.slice(1), dlst_2[1], [...out_2, dlst_2[0]]];
continue rename_0;
} while (true);
};
const shorten_names_0 = (...args_4) => {
shorten_names_0: do {
const dlst_3 = args_4[0];
const hdm_7 = dlst_3[0];
const curr_0 = undefined === hdm_7 ? false : hdm_7;
const tail_15 = dlst_3.slice(1);
const hdm_8 = args_4[1];
const renames_3 = undefined === hdm_8 ? {} : hdm_8;
const hdm_9 = args_4[2];
const out_3 = undefined === hdm_9 ? [] : hdm_9;
/* istanbul ignore else */
if (curr_0 === false) {
return [out_3, renames_3];
}
/* istanbul ignore else */
if (null != curr_0) {
const itm_4 = curr_0[0];
/* istanbul ignore else */
if (null != itm_4) {
/* istanbul ignore else */
if (true === _in_(itm_4.f, [`int`, `float`, `str`, `bool`])) {
const dlst_15 = rename_0(curr_0[1], renames_3);
args_4 = [tail_15, dlst_15[1], [...out_3, [curr_0[0], dlst_15[0]]]];
continue shorten_names_0;
}
}
}
/* istanbul ignore else */
if (null != curr_0) {
const itm_2 = curr_0[0];
/* istanbul ignore else */
if (null != itm_2) {
/* istanbul ignore else */
if (true === _in_(itm_2.f, [`tpl_i`, `tpl_s`])) {
const expr_2 = curr_0[0];
const val_11 = expr_2.args;
const dlst_12 = replace_refs_0([val_11[0]], renames_3);
const dlst_13 = rename_0(curr_0[1], renames_3);
args_4 = [tail_15, dlst_13[1], [...out_3, [{ ...expr_2,
args: [dlst_12[0], ...val_11.slice(1)]
}, dlst_13[0]]]];
continue shorten_names_0;
}
}
}
/* istanbul ignore else */
if (null != curr_0) {
const itm_0 = curr_0[0];
/* istanbul ignore else */
if (null != itm_0) {
/* istanbul ignore else */
if (true === _in_(itm_0.f, [`fn`, `cn`])) {
const expr_1 = curr_0[0];
const dlst_7 = expr_1.args;
const dlst_8 = rename_0(dlst_7[0], renames_3);
const dlst_9 = shorten_names_0(dlst_7[1], dlst_8[1]);
const dlst_10 = rename_0(curr_0[1], dlst_9[1]);
args_4 = [tail_15, dlst_10[1], [...out_3, [{ ...expr_1,
args: [dlst_8[0], dlst_9[0]]
}, dlst_10[0]]]];
continue shorten_names_0;
}
}
}
const expr_0 = curr_0[0];
const nargs_0 = replace_refs_0(expr_0.args, renames_3);
const dlst_5 = rename_0(curr_0[1], renames_3);
args_4 = [tail_15, dlst_5[1], [...out_3, [{ ...expr_0,
args: nargs_0
}, dlst_5[0]]]];
continue shorten_names_0;
} while (true);
};
const optimize_names_0 = (exprs_0, ctx_0) => {
const dlst_16 = shorten_names_0(exprs_0);
return [dlst_16[0], ctx_0];
};
exports.alphabet = alphabet_0;
exports.base = base_0;
exports.to_id = to_id_0;
exports.get_new_id = get_new_id_0;
exports.replace_refs = replace_refs_0;
exports.rename = rename_0;
exports.shorten_names = shorten_names_0;
exports.optimize_names = optimize_names_0;