UNPKG

@fink/loxia

Version:

A fink to JavaScript compiler.

123 lines (104 loc) 3.06 kB
const { _in_ } = require("@fink/js-interop/runtime.js"); const { reverse: reverse_0 } = require("@fink/std-lib/iter.js"); const { is_unused: is_unused_0 } = require("../ir/context.js"); const { dec_refs: dec_refs_0 } = require("../ir/context.js"); const get_ref_args_0 = dlst_0 => { const drec_0 = dlst_0[0]; const op_0 = drec_0.f; const args_1 = drec_0.args; /* istanbul ignore else */ if (true === _in_(op_0, [`int`, `float`, `str`])) { return []; } /* istanbul ignore else */ if (true === _in_(op_0, [`tpl_i`, `tpl_s`])) { return [args_1[0]]; } return args_1; }; const remove_unused_0 = (...args_2) => { remove_unused_0: do { const dlst_2 = args_2[0]; const hdm_0 = dlst_2[0]; const expr_0 = undefined === hdm_0 ? false : hdm_0; const tail_4 = dlst_2.slice(1); const ctx_0 = args_2[1]; const out_0 = args_2[2]; /* istanbul ignore else */ if (expr_0 === false) { return [out_0, ctx_0]; } /* istanbul ignore else */ if (null != expr_0) { const itm_4 = expr_0[0]; /* istanbul ignore else */ if (null != itm_4) { /* istanbul ignore else */ if (true === _in_(itm_4.f, [`mod`, `imp`, `af`, `ac`, `cc`, `cif`, `cf`])) { args_2 = [tail_4, ctx_0, [expr_0, ...out_0]]; continue remove_unused_0; } } } /* istanbul ignore else */ if (null != expr_0) { const itm_2 = expr_0[1]; /* istanbul ignore else */ if (null != itm_2) { const val_6 = is_unused_0(itm_2[0], ctx_0); /* istanbul ignore else */ if (true === val_6) { const args_4 = get_ref_args_0(expr_0); const next_ctx_1 = dec_refs_0(args_4, ctx_0); args_2 = [tail_4, next_ctx_1, out_0]; continue remove_unused_0; } } } /* istanbul ignore else */ if (null != expr_0) { const itm_0 = expr_0[0]; /* istanbul ignore else */ if (null != itm_0) { /* istanbul ignore else */ if (true === _in_(itm_0.f, [`fn`, `cn`])) { const drec_1 = expr_0[0]; const key_7 = `f`; const key_8 = `args`; const val_3 = drec_1.args; const { f: _key_7, args: _key_8, ...rest_0 } = drec_1; const rbody_0 = reverse_0(val_3[1]); const dlst_4 = remove_unused_0(rbody_0, ctx_0, []); args_2 = [tail_4, dlst_4[1], [[{ f: drec_1.f, args: [val_3[0], dlst_4[0]], ...rest_0 }, expr_0[1]], ...out_0]]; continue remove_unused_0; } } } args_2 = [tail_4, ctx_0, [expr_0, ...out_0]]; continue remove_unused_0; } while (true); }; const optimize_unused_0 = (exprs_1, ctx_1) => { const rexprs_0 = reverse_0(exprs_1); const result_18 = remove_unused_0(rexprs_0, ctx_1, []); return result_18; }; exports.get_ref_args = get_ref_args_0; exports.remove_unused = remove_unused_0; exports.optimize_unused = optimize_unused_0;