@fink/loxia
Version:
A fink to JavaScript compiler.
430 lines (359 loc) • 10.4 kB
JavaScript
const {
_in_
} = require("@fink/js-interop/runtime.js");
const {
reverse: reverse_0
} = require("@fink/std-lib/iter.js");
const {
init_ctx: init_ctx_0
} = require("../ir/context.js");
const {
update_value: update_value_0
} = require("../ir/context.js");
const {
get_value: get_value_0
} = require("../ir/context.js");
const {
replace_idents: replace_idents_0
} = require("./identifier/init.js");
const {
add_module: add_module_0
} = require("./module/init.js");
const {
transfrom_module: transfrom_module_0
} = require("./module/init.js");
const {
add_import: add_import_0
} = require("./module/import.js");
const {
add_bool: add_bool_0
} = require("./literals/keyword.js");
const {
add_number: add_number_0
} = require("./literals/number.js");
const {
add_string: add_string_0
} = require("./literals/string.js");
const {
add_list: add_list_0
} = require("./literals/list.js");
const {
add_record: add_record_0
} = require("./literals/record.js");
const {
add_conditionals: add_conditionals_0
} = require("./conditionals/init.js");
const {
add_logical: add_logical_0
} = require("./logical/init.js");
const {
add_in: add_in_0
} = require("./logical/in.js");
const {
add_arithmitic: add_arithmitic_0
} = require("./arithmitic/init.js");
const {
add_comparison: add_comparison_0
} = require("./comparison/init.js");
const {
add_funcs: add_funcs_0
} = require("./func/init.js");
const {
add_calls: add_calls_0
} = require("./call/call.js");
const {
add_jsx: add_jsx_0
} = require("./jsx/init.js");
const {
add_async: add_async_0
} = require("./async/init.js");
const add_transformers_0 = ctx_0 => {
const ppr_0 = add_module_0(ctx_0);
const ppr_1 = add_import_0(ppr_0);
const ppr_2 = add_bool_0(ppr_1);
const ppr_3 = add_number_0(ppr_2);
const ppr_4 = add_string_0(ppr_3);
const ppr_5 = add_list_0(ppr_4);
const ppr_6 = add_record_0(ppr_5);
const ppr_7 = add_in_0(ppr_6);
const ppr_8 = add_logical_0(ppr_7);
const ppr_9 = add_comparison_0(ppr_8);
const ppr_10 = add_arithmitic_0(ppr_9);
const ppr_11 = add_async_0(ppr_10);
const ppr_12 = add_funcs_0(ppr_11);
const ppr_13 = add_conditionals_0(ppr_12);
const ppr_14 = add_calls_0(ppr_13);
const ppr_15 = add_jsx_0(ppr_14);
return ppr_15;
};
const prepare_rets_0 = (...args_33) => {
prepare_rets_0: do {
const dlst_0 = args_33[0];
const hdm_0 = dlst_0[0];
const expr_0 = undefined === hdm_0 ? false : hdm_0;
const tail_2 = dlst_0.slice(1);
const ctx_1 = args_33[1];
/* istanbul ignore else */
if (expr_0 === false) {
return ctx_1;
}
/* istanbul ignore else */
if (null != expr_0) {
const itm_0 = expr_0[0];
/* istanbul ignore else */
if (null != itm_0) {
/* istanbul ignore else */
if (itm_0.f === `ac`) {
const next_ctx_0 = update_value_0(expr_0[0].args[0], {
res_ids: expr_0[1]
}, ctx_1);
args_33 = [tail_2, next_ctx_0];
continue prepare_rets_0;
}
}
}
args_33 = [tail_2, ctx_1];
continue prepare_rets_0;
} while (true);
};
const prepare_exports_0 = (...args_34) => {
prepare_exports_0: do {
const dlst_2 = args_34[0];
const hdm_1 = dlst_2[0];
const expr_1 = undefined === hdm_1 ? false : hdm_1;
const tail_9 = dlst_2.slice(1);
const ctx_2 = args_34[1];
const rec_id_0 = args_34[2];
/* istanbul ignore else */
if (expr_1 === false) {
return ctx_2;
}
/* istanbul ignore else */
if (null != expr_1) {
const itm_7 = expr_1[0];
/* istanbul ignore else */
if (null != itm_7) {
/* istanbul ignore else */
if (itm_7.f === `mod`) {
args_34 = [tail_9, ctx_2, expr_1[0].args[0]];
continue prepare_exports_0;
}
}
}
/* istanbul ignore else */
if (null != expr_1) {
const itm_2 = expr_1[0];
/* istanbul ignore else */
if (null != itm_2) {
/* istanbul ignore else */
if (itm_2.f === `rec_s`) {
const itm_4 = expr_1[1];
/* istanbul ignore else */
if (null != itm_4) {
const itm_5 = itm_4[0];
/* istanbul ignore else */
if (null != itm_5) {
/* istanbul ignore else */
if (itm_5.i === rec_id_0.i) {
const val_6 = expr_1[0].args;
const next_ctx_1 = update_value_0(val_6[2], {
inline: false
}, ctx_2);
args_34 = [tail_9, next_ctx_1, val_6[0]];
continue prepare_exports_0;
}
}
}
}
}
}
args_34 = [tail_9, ctx_2, rec_id_0];
continue prepare_exports_0;
} while (true);
};
const prepare_imports_0 = (...args_35) => {
prepare_imports_0: do {
const dlst_5 = args_35[0];
const hdm_2 = dlst_5[0];
const expr_2 = undefined === hdm_2 ? false : hdm_2;
const tail_23 = dlst_5.slice(1);
const ctx_3 = args_35[1];
/* istanbul ignore else */
if (expr_2 === false) {
return ctx_3;
}
/* istanbul ignore else */
if (null != expr_2) {
const itm_9 = expr_2[0];
/* istanbul ignore else */
if (null != itm_9) {
/* istanbul ignore else */
if (itm_9.f === `imp`) {
const next_ctx_2 = update_value_0(expr_2[0].args[0], {
refs: 1
}, ctx_3);
args_35 = [tail_23, next_ctx_2];
continue prepare_imports_0;
}
}
}
args_35 = [tail_23, ctx_3];
continue prepare_imports_0;
} while (true);
};
const prepare_inlinable_0 = (...args_36) => {
prepare_inlinable_0: do {
const dlst_7 = args_36[0];
const hdm_3 = dlst_7[0];
const expr_3 = undefined === hdm_3 ? false : hdm_3;
const tail_29 = dlst_7.slice(1);
const ctx_4 = args_36[1];
/* istanbul ignore else */
if (expr_3 === false) {
return ctx_4;
}
/* istanbul ignore else */
if (null != expr_3) {
const itm_22 = expr_3[0];
/* istanbul ignore else */
if (null != itm_22) {
/* istanbul ignore else */
if (itm_22.f === `af`) {
const next_ctx_7 = update_value_0(expr_3[1][0], {
inline: false
}, ctx_4);
args_36 = [tail_29, next_ctx_7];
continue prepare_inlinable_0;
}
}
}
/* istanbul ignore else */
if (null != expr_3) {
const itm_20 = expr_3[0];
/* istanbul ignore else */
if (null != itm_20) {
/* istanbul ignore else */
if (itm_20.f === `wt`) {
const next_ctx_6 = update_value_0(expr_3[1][0], {
inline: false
}, ctx_4);
args_36 = [tail_29, next_ctx_6];
continue prepare_inlinable_0;
}
}
}
/* istanbul ignore else */
if (null != expr_3) {
const itm_18 = expr_3[0];
/* istanbul ignore else */
if (null != itm_18) {
/* istanbul ignore else */
if (itm_18.f === `str`) {
const next_ctx_5 = update_value_0(expr_3[1][0], {
tp: `str`
}, ctx_4);
args_36 = [tail_29, next_ctx_5];
continue prepare_inlinable_0;
}
}
}
/* istanbul ignore else */
if (null != expr_3) {
const itm_15 = expr_3[0];
/* istanbul ignore else */
if (null != itm_15) {
/* istanbul ignore else */
if (itm_15.f === `jxe`) {
const elem_id_0 = expr_3[0].args[0];
const value_4 = get_value_0(elem_id_0, ctx_4);
let ret_8;
ret_8: {
/* istanbul ignore else */
if (null != value_4) {
/* istanbul ignore else */
if (value_4.tp === `str`) {
ret_8 = ctx_4;
/* istanbul ignore next */
break ret_8;
}
}
const result_30 = update_value_0(elem_id_0, {
inline: false
}, ctx_4);
ret_8 = result_30;
/* istanbul ignore next */
break ret_8;
}
const next_ctx_4 = ret_8;
args_36 = [tail_29, next_ctx_4];
continue prepare_inlinable_0;
}
}
}
/* istanbul ignore else */
if (null != expr_3) {
const itm_13 = expr_3[0];
/* istanbul ignore else */
if (null != itm_13) {
/* istanbul ignore else */
if (true === _in_(itm_13.f, [`int`, `float`, `bool`])) {
const next_ctx_3 = update_value_0(expr_3[1][0], {
inline: true
}, ctx_4);
args_36 = [tail_29, next_ctx_3];
continue prepare_inlinable_0;
}
}
}
/* istanbul ignore else */
if (null != expr_3) {
const itm_11 = expr_3[0];
/* istanbul ignore else */
if (null != itm_11) {
/* istanbul ignore else */
if (true === _in_(itm_11.f, [`fn`, `cn`])) {
args_36 = [[...expr_3[0].args[1], ...tail_29], ctx_4];
continue prepare_inlinable_0;
}
}
}
args_36 = [tail_29, ctx_4];
continue prepare_inlinable_0;
} while (true);
};
const transform_ir_0 = (input_exprs_0, options_0) => {
const exprs_4 = replace_idents_0(input_exprs_0);
const rev_expr_0 = reverse_0(exprs_4);
const ppr_16 = (prtl_0 => {
const pfn_17 = init_ctx_0(exprs_4, prtl_0);
return pfn_17;
})(options_0);
const ppr_17 = (prtl_1 => {
const pfn_19 = prepare_rets_0(rev_expr_0, prtl_1);
return pfn_19;
})(ppr_16);
const ppr_18 = (prtl_2 => {
const pfn_21 = prepare_imports_0(rev_expr_0, prtl_2);
return pfn_21;
})(ppr_17);
const ppr_19 = (prtl_3 => {
const pfn_23 = prepare_exports_0(rev_expr_0, prtl_3);
return pfn_23;
})(ppr_18);
const ppr_20 = (prtl_4 => {
const pfn_25 = prepare_inlinable_0(exprs_4, prtl_4);
return pfn_25;
})(ppr_19);
const ppr_21 = (prtl_5 => {
const pfn_27 = add_transformers_0(prtl_5);
return pfn_27;
})(ppr_20);
const result_46 = transfrom_module_0(exprs_4, ppr_21);
return result_46;
};
exports.add_transformers = add_transformers_0;
exports.prepare_rets = prepare_rets_0;
exports.prepare_exports = prepare_exports_0;
exports.prepare_imports = prepare_imports_0;
exports.prepare_inlinable = prepare_inlinable_0;
exports.transform_ir = transform_ir_0;