@fink/loxia
Version:
A fink to JavaScript compiler.
129 lines (110 loc) • 3.65 kB
JavaScript
const types_0 = require("@babel/types");
const binaryExpression_0 = types_0.binaryExpression;
const identifier_0 = types_0.identifier;
const {
dec_ref: dec_ref_0
} = require("../../ir/context.js");
const {
get_refs: get_refs_0
} = require("../../ir/context.js");
const {
add: add_0
} = require("../context.js");
const {
get_js: get_js_0
} = require("../context.js");
const {
set_js2: set_js2_0
} = require("../context.js");
const transform_if_val_0 = (expr_0, ctx_0) => {
const val_0 = expr_0[0].args;
const val_1 = get_js_0(val_0[0], ctx_0);
const true_js_0 = get_js_0(val_0[1], ctx_0);
const false_js_0 = get_js_0(val_0[2], ctx_0);
const arg_8 = identifier_0(`undefined`);
const arg_6 = binaryExpression_0(`===`, arg_8, val_1);
const js_0 = types_0.conditionalExpression(arg_6, false_js_0, true_js_0);
const result_5 = set_js2_0(expr_0, js_0, ctx_0);
return result_5;
};
const transform_is_val_0 = (expr_1, ctx_1) => {
const val_3 = get_js_0(expr_1[0].args[0], ctx_1);
const arg_19 = identifier_0(`undefined`);
const js_1 = binaryExpression_0(`!==`, arg_19, val_3);
const result_9 = set_js2_0(expr_1, js_1, ctx_1);
return result_9;
};
const transform_is_rec_0 = (expr_2, ctx_2) => {
const val_5 = get_js_0(expr_2[0].args[0], ctx_2);
const arg_28 = identifier_0(`null`);
const js_2 = binaryExpression_0(`!=`, arg_28, val_5);
const result_13 = set_js2_0(expr_2, js_2, ctx_2);
return result_13;
};
const transform_is_lst_0 = (expr_3, ctx_3) => {
const val_7 = get_js_0(expr_3[0].args[0], ctx_3);
const arg_37 = identifier_0(`null`);
const js_3 = binaryExpression_0(`!=`, arg_37, val_7);
const result_17 = set_js2_0(expr_3, js_3, ctx_3);
return result_17;
};
const transform_if_0 = (expr_4, ctx_4) => {
const drec_5 = expr_4[0];
const val_8 = drec_5.args;
const else_id_0 = val_8[2];
const cond_c_0 = get_js_0(val_8[0], ctx_4);
const true_c_0 = get_js_0(val_8[1], ctx_4);
const sprd_0 = types_0.ifStatement(cond_c_0, true_c_0);
const if_true_js_0 = { ...sprd_0,
leadingComments: [{
type: `CommentBlock`,
value: ` istanbul ignore else `
}],
loc: drec_5.loc
};
const value_0 = get_refs_0(else_id_0, ctx_4);
/* istanbul ignore else */
if (true === (value_0 === 1)) {
const else_js_0 = get_js_0(else_id_0, ctx_4);
let ret_5;
ret_5: {
/* istanbul ignore else */
if (null != else_js_0) {
/* istanbul ignore else */
if (else_js_0.type === `BlockStatement`) {
ret_5 = else_js_0.body;
/* istanbul ignore next */
break ret_5;
}
}
}
const else_exprs_0 = ret_5;
return [[if_true_js_0, ...else_exprs_0], ctx_4];
}
/* istanbul ignore else */
if (true === value_0 > 1) {
const next_ctx_0 = dec_ref_0(else_id_0, ctx_4);
return [[if_true_js_0], next_ctx_0];
}
/* istanbul ignore next */
return;
};
const add_conditionals_0 = ctx_5 => {
const pfn_0 = add_0(`ifv`, transform_if_val_0);
const ppr_0 = pfn_0(ctx_5);
const pfn_1 = add_0(`isv`, transform_is_val_0);
const ppr_1 = pfn_1(ppr_0);
const pfn_2 = add_0(`is_r`, transform_is_rec_0);
const ppr_2 = pfn_2(ppr_1);
const pfn_3 = add_0(`is_l`, transform_is_lst_0);
const ppr_3 = pfn_3(ppr_2);
const pfn_4 = add_0(`cif`, transform_if_0);
const ppr_4 = pfn_4(ppr_3);
return ppr_4;
};
exports.transform_if_val = transform_if_val_0;
exports.transform_is_val = transform_is_val_0;
exports.transform_is_rec = transform_is_rec_0;
exports.transform_is_lst = transform_is_lst_0;
exports.transform_if = transform_if_0;
exports.add_conditionals = add_conditionals_0;