@fink/loxia
Version:
A fink to JavaScript compiler.
172 lines (145 loc) • 4.77 kB
JavaScript
const types_0 = require("@babel/types");
const assignmentExpression_0 = types_0.assignmentExpression;
const expressionStatement_0 = types_0.expressionStatement;
const variableDeclaration_0 = types_0.variableDeclaration;
const variableDeclarator_0 = types_0.variableDeclarator;
const {
ˆnull: null_0
} = require("@fink/js-interop/nullish.js");
const {
map: map_0
} = require("@fink/std-lib/iter.js");
const {
add: add_0
} = require("../context.js");
const {
get_js: get_js_0
} = require("../context.js");
const {
get_js_literal: get_js_literal_0
} = require("../context.js");
const {
set_js2: set_js2_0
} = require("../context.js");
const {
with_loc: with_loc_0
} = require("../context.js");
const {
get_value: get_value_0
} = require("../../ir/context.js");
const {
ident: ident_0
} = require("../identifier/init.js");
const as_call_args_0 = args_1 => {
/* istanbul ignore else */
if (null != args_1) {
/* istanbul ignore else */
if (args_1.type === `ArrayExpression`) {
const ppr_0 = (prtl_0 => {
return prtl_0.elements;
})(args_1);
const pfn_2 = map_0(arg_1 => {
/* istanbul ignore else */
if (arg_1 === null_0) {
const result_4 = types_0.identifier(`undefined`);
return result_4;
}
return arg_1;
});
const ppr_1 = pfn_2(ppr_0);
const ppr_2 = (prtl_1 => {
return [...prtl_1];
})(ppr_1);
return ppr_2;
}
}
/* istanbul ignore next */
return;
};
const transform_apply_fn_0 = (expr_0, ctx_0) => {
const val_2 = expr_0[0].args;
const callee_2 = get_js_0(val_2[0], ctx_0);
const arg_5 = get_js_0(val_2[1], ctx_0);
const args_12 = as_call_args_0(arg_5);
const js_0 = types_0.callExpression(callee_2, args_12);
const result_9 = set_js2_0(expr_0, js_0, ctx_0);
return result_9;
};
const transform_continue_with_fn_0 = (expr_1, ctx_1) => {
const val_3 = expr_1[0].args;
const drec_3 = get_value_0(val_3[0], ctx_1);
const new_args_0 = get_js_0(val_3[1], ctx_1);
const arg_21 = ident_0(drec_3.args_id);
const arg_19 = assignmentExpression_0(`=`, arg_21, new_args_0);
const item_1 = expressionStatement_0(arg_19);
const arg_17 = ident_0(drec_3.label_id);
const item_0 = types_0.continueStatement(arg_17);
return [[item_1, item_0], ctx_1];
};
const transform_apply_cont_0 = (expr_2, ctx_2) => {
const cont_0 = get_js_0(expr_2[0].args[0], ctx_2);
const ret_ident_0 = cont_0.label;
const item_8 = variableDeclarator_0(ret_ident_0);
const item_7 = variableDeclaration_0(`let`, [item_8]);
const arg_28 = ident_0(expr_2[1][0]);
const item_5 = variableDeclarator_0(arg_28, ret_ident_0);
const item_4 = variableDeclaration_0(`const`, [item_5]);
return [[item_7, cont_0, item_4], ctx_2];
};
const transform_continue_with_cont_0 = (expr_3, ctx_3) => {
const val_5 = expr_3[0].args;
const ret_id_0 = val_5[0];
const hdm_0 = val_5[1];
const res_id_1 = undefined === hdm_0 ? false : hdm_0;
const ret_9 = get_js_literal_0(ret_id_0, ctx_3);
/* istanbul ignore else */
if (res_id_1 === false) {
/* istanbul ignore else */
if (null != ret_9) {
/* istanbul ignore else */
if (ret_9.type === `ReturnStatement`) {
return [[ret_9], ctx_3];
}
}
return [[], ctx_3];
}
const res_0 = get_js_0(res_id_1, ctx_3);
/* istanbul ignore else */
if (null != ret_9) {
/* istanbul ignore else */
if (ret_9.type === `ReturnStatement`) {
const arg_49 = types_0.returnStatement(res_0);
const js_3 = with_loc_0(res_0, arg_49);
return [[js_3], ctx_3];
}
}
const arg_44 = assignmentExpression_0(`=`, ret_9, res_0);
const arg_43 = expressionStatement_0(arg_44);
const item_13 = with_loc_0(res_0, arg_43);
const arg_40 = ident_0(ret_id_0);
const sprd_0 = types_0.breakStatement(arg_40);
const item_11 = with_loc_0(res_0, { ...sprd_0,
leadingComments: [{
type: `CommentBlock`,
value: ` istanbul ignore next `
}]
});
return [[item_13, item_11], ctx_3];
};
const add_calls_0 = ctx_4 => {
const pfn_5 = add_0(`ac`, transform_apply_cont_0);
const ppr_3 = pfn_5(ctx_4);
const pfn_6 = add_0(`cc`, transform_continue_with_cont_0);
const ppr_4 = pfn_6(ppr_3);
const pfn_7 = add_0(`af`, transform_apply_fn_0);
const ppr_5 = pfn_7(ppr_4);
const pfn_8 = add_0(`cf`, transform_continue_with_fn_0);
const ppr_6 = pfn_8(ppr_5);
return ppr_6;
};
exports.as_call_args = as_call_args_0;
exports.transform_apply_fn = transform_apply_fn_0;
exports.transform_continue_with_fn = transform_continue_with_fn_0;
exports.transform_apply_cont = transform_apply_cont_0;
exports.transform_continue_with_cont = transform_continue_with_cont_0;
exports.add_calls = add_calls_0;