@fink/loxia
Version:
A fink to JavaScript compiler.
192 lines (163 loc) • 4.93 kB
JavaScript
const {
add: add_0
} = require("../context.js");
const {
any: any_0
} = require("../context.js");
const {
transform: transform_0
} = require("../transform.js");
const {
unique_or_id: unique_or_id_0
} = require("../context.js");
const {
ir_fn: ir_fn_0
} = require("../context.js");
const {
get_refs: get_refs_0
} = require("../context.js");
const {
transform_dl: transform_dl_0
} = require("../assignment/init.js");
const {
bind_x: bind_x_0
} = require("../identifier/init.js");
const cc_0 = (ret_id_0, res_id_0, name_or_id_0, drec_0, ctx_0) => {
const result_0 = ir_fn_0(`cc`, [ret_id_0, res_id_0], name_or_id_0, {
loc: drec_0.loc
}, ctx_0);
return result_0;
};
const fnc_0 = (args_id_0, res_id_1, body_0, name_or_id_1, drec_1, ctx_1) => {
const loc_1 = drec_1.loc;
const dlst_0 = unique_or_id_0(`ret`, {
loc: loc_1
}, ctx_1);
const ret_id_1 = dlst_0[0];
const dlst_1 = cc_0(ret_id_1, res_id_1, undefined, {
loc: loc_1
}, dlst_0[1]);
const result_3 = ir_fn_0(`fn`, [[args_id_0, ret_id_1], [...body_0, ...dlst_1[0]]], name_or_id_1, {
loc: loc_1
}, dlst_1[2]);
return result_3;
};
const zfnc_0 = (args_id_1, self_id_0, res_id_2, body_1, name_or_id_2, drec_2, ctx_2) => {
const loc_2 = drec_2.loc;
const dlst_2 = unique_or_id_0(`ret`, {
loc: loc_2
}, ctx_2);
const ret_id_2 = dlst_2[0];
const dlst_3 = cc_0(ret_id_2, res_id_2, undefined, {
loc: loc_2
}, dlst_2[1]);
const result_6 = ir_fn_0(`fn`, [[args_id_1, ret_id_2, self_id_0], [...body_1, ...dlst_3[0]]], name_or_id_2, {
loc: loc_2
}, dlst_3[2]);
return result_6;
};
const transform_exprs_0 = (...args_3) => {
transform_exprs_0: do {
const dlst_4 = args_3[0];
const hdm_0 = dlst_4[0];
const expr_0 = undefined === hdm_0 ? false : hdm_0;
const tail_29 = dlst_4.slice(1);
const ctx_3 = args_3[1];
const out_0 = args_3[2];
/* istanbul ignore else */
if (expr_0 === false) {
return [out_0, args_3[3], ctx_3];
}
/* istanbul ignore else */
if (null != expr_0) {
/* istanbul ignore else */
if (expr_0.value === `undefined`) {
const dlst_6 = transform_0(expr_0, `result`, ctx_3);
args_3 = [tail_29, dlst_6[2], [...out_0, ...dlst_6[0]], dlst_6[1]];
continue transform_exprs_0;
}
}
const dlst_5 = transform_0(expr_0, `result`, ctx_3);
args_3 = [tail_29, dlst_5[2], [...out_0, ...dlst_5[0]], dlst_5[1]];
continue transform_exprs_0;
} while (true);
};
const transform_args_0 = (drec_3, ctx_4) => {
const dlst_7 = unique_or_id_0(`args`, {
loc: drec_3.loc
}, ctx_4);
const args_id_2 = dlst_7[0];
const dlst_8 = transform_dl_0(drec_3.args, args_id_2, dlst_7[1]);
return [dlst_8[0], args_id_2, dlst_8[2]];
};
const transform_func_0 = (expr_1, res_id_3, drec_4) => {
const key_27 = `scopes`;
const scopes_0 = drec_4.scopes;
const key_28 = `self_name`;
const hdm_1 = drec_4.self_name;
const self_name_0 = undefined === hdm_1 ? false : hdm_1;
const {
scopes: _key_27,
self_name: _key_28,
...ctx_5
} = drec_4;
const func_ctx_0 = { ...ctx_5,
scopes: [{}, ...scopes_0]
};
let ret_8;
ret_8: {
/* istanbul ignore else */
if (self_name_0 === false) {
ret_8 = [false, func_ctx_0];
/* istanbul ignore next */
break ret_8;
}
const dlst_10 = unique_or_id_0(`${res_id_3.i}`, expr_1, func_ctx_0);
const self_id_1 = dlst_10[0];
const item_18 = bind_x_0({
value: self_name_0
}, self_id_1, dlst_10[1]);
ret_8 = [self_id_1, item_18];
/* istanbul ignore next */
break ret_8;
}
const dlst_9 = ret_8;
const self_id_2 = dlst_9[0];
const dlst_11 = transform_args_0(expr_1, dlst_9[1]);
const args_id_3 = dlst_11[1];
const dlst_12 = transform_exprs_0(expr_1.exprs, dlst_11[2], []);
const fn_res_id_0 = dlst_12[1];
const fn_ctx_0 = dlst_12[2];
const body_2 = [...dlst_11[0], ...dlst_12[0]];
let ret_9;
ret_9: {
const right_2 = get_refs_0(self_id_2, fn_ctx_0);
/* istanbul ignore else */
if (true === (self_id_2 !== false && 0 < right_2)) {
const result_26 = zfnc_0(args_id_3, self_id_2, fn_res_id_0, body_2, res_id_3, expr_1, fn_ctx_0);
ret_9 = result_26;
/* istanbul ignore next */
break ret_9;
}
const result_25 = fnc_0(args_id_3, fn_res_id_0, body_2, res_id_3, expr_1, fn_ctx_0);
ret_9 = result_25;
/* istanbul ignore next */
break ret_9;
}
const dlst_13 = ret_9;
return [dlst_13[0], { ...dlst_13[2],
scopes: scopes_0
}];
};
const add_func_0 = ctx_6 => {
const pfn_0 = add_0(any_0, `fn`, transform_func_0);
const ppr_0 = pfn_0(ctx_6);
return ppr_0;
};
exports.cc = cc_0;
exports.fnc = fnc_0;
exports.zfnc = zfnc_0;
exports.transform_exprs = transform_exprs_0;
exports.transform_args = transform_args_0;
exports.transform_func = transform_func_0;
exports.add_func = add_func_0;