feat(runtime): avoid extra switch
This commit is contained in:
parent
4b44c5ce36
commit
abd0f89820
4 changed files with 214 additions and 169 deletions
|
|
@ -58,7 +58,7 @@ do emit $ sformat! "obj* apply_{n}(obj* f, {arg_decls}) {{\n",
|
|||
when (j ≥ n) $
|
||||
let fs := mk_fs_args (j - n) in
|
||||
let sep := if j = n then "" else ", " in
|
||||
emit $ sformat! " case {j}: {{ obj* r = FN{j}(f)({fs}{sep}{args}); free_heap_obj(f); return r; }\n"
|
||||
emit $ sformat! " case {j}: {{ obj* r = FN{j}(f)({fs}{sep}{args}); free_closure_obj(f); return r; }\n"
|
||||
},
|
||||
emit " }\n",
|
||||
emit " }\n",
|
||||
|
|
@ -162,7 +162,7 @@ static obj* fix_args(obj* f, unsigned n, obj*const* as) {
|
|||
for (unsigned i = 0; i < fixed; i++, source++, target++) {
|
||||
*target = *source;
|
||||
}
|
||||
free_heap_obj(f);
|
||||
free_closure_obj(f);
|
||||
}
|
||||
for (unsigned i = 0; i < n; i++, as++, target++) {
|
||||
*target = *as;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ static obj* fix_args(obj* f, unsigned n, obj*const* as) {
|
|||
for (unsigned i = 0; i < fixed; i++, source++, target++) {
|
||||
*target = *source;
|
||||
}
|
||||
free_heap_obj(f);
|
||||
free_closure_obj(f);
|
||||
}
|
||||
for (unsigned i = 0; i < n; i++, as++, target++) {
|
||||
*target = *as;
|
||||
|
|
@ -103,22 +103,22 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 1) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 1: { obj* r = FN1(f)(a1); free_heap_obj(f); return r; }
|
||||
case 2: { obj* r = FN2(f)(fx(0), a1); free_heap_obj(f); return r; }
|
||||
case 3: { obj* r = FN3(f)(fx(0), fx(1), a1); free_heap_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(fx(0), fx(1), fx(2), a1); free_heap_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), fx(1), fx(2), fx(3), a1); free_heap_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), a1); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), fx(13), a1); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), fx(13), fx(14), a1); free_heap_obj(f); return r; }
|
||||
case 1: { obj* r = FN1(f)(a1); free_closure_obj(f); return r; }
|
||||
case 2: { obj* r = FN2(f)(fx(0), a1); free_closure_obj(f); return r; }
|
||||
case 3: { obj* r = FN3(f)(fx(0), fx(1), a1); free_closure_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(fx(0), fx(1), fx(2), a1); free_closure_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), fx(1), fx(2), fx(3), a1); free_closure_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1); free_closure_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), a1); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), fx(13), a1); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), fx(13), fx(14), a1); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -161,21 +161,21 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 2) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 2: { obj* r = FN2(f)(a1, a2); free_heap_obj(f); return r; }
|
||||
case 3: { obj* r = FN3(f)(fx(0), a1, a2); free_heap_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(fx(0), fx(1), a1, a2); free_heap_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), fx(1), fx(2), a1, a2); free_heap_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), fx(2), fx(3), a1, a2); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1, a2); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), a1, a2); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), fx(13), a1, a2); free_heap_obj(f); return r; }
|
||||
case 2: { obj* r = FN2(f)(a1, a2); free_closure_obj(f); return r; }
|
||||
case 3: { obj* r = FN3(f)(fx(0), a1, a2); free_closure_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(fx(0), fx(1), a1, a2); free_closure_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), fx(1), fx(2), a1, a2); free_closure_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), fx(2), fx(3), a1, a2); free_closure_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1, a2); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), a1, a2); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), fx(13), a1, a2); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -222,20 +222,20 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 3) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 3: { obj* r = FN3(f)(a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(fx(0), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), fx(1), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), fx(2), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), a1, a2, a3); free_heap_obj(f); return r; }
|
||||
case 3: { obj* r = FN3(f)(a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(fx(0), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), fx(1), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), fx(2), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), fx(12), a1, a2, a3); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -281,19 +281,19 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 4) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 4: { obj* r = FN4(f)(a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1, a2, a3, a4); free_heap_obj(f); return r; }
|
||||
case 4: { obj* r = FN4(f)(a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(fx(0), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), fx(1), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), fx(11), a1, a2, a3, a4); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -338,18 +338,18 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 5) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 5: { obj* r = FN5(f)(a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2, a3, a4, a5); free_heap_obj(f); return r; }
|
||||
case 5: { obj* r = FN5(f)(a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(fx(0), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), fx(1), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), fx(10), a1, a2, a3, a4, a5); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -393,17 +393,17 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 6) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 6: { obj* r = FN6(f)(a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3, a4, a5, a6); free_heap_obj(f); return r; }
|
||||
case 6: { obj* r = FN6(f)(a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(fx(0), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), fx(9), a1, a2, a3, a4, a5, a6); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -446,16 +446,16 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 7) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 7: { obj* r = FN7(f)(a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4, a5, a6, a7); free_heap_obj(f); return r; }
|
||||
case 7: { obj* r = FN7(f)(a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(fx(0), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), fx(8), a1, a2, a3, a4, a5, a6, a7); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -497,15 +497,15 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 8) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 8: { obj* r = FN8(f)(a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5, a6, a7, a8); free_heap_obj(f); return r; }
|
||||
case 8: { obj* r = FN8(f)(a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), fx(7), a1, a2, a3, a4, a5, a6, a7, a8); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -546,14 +546,14 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 9) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 9: { obj* r = FN9(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_heap_obj(f); return r; }
|
||||
case 9: { obj* r = FN9(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), fx(6), a1, a2, a3, a4, a5, a6, a7, a8, a9); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -593,13 +593,13 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 10) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 10: { obj* r = FN10(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_heap_obj(f); return r; }
|
||||
case 10: { obj* r = FN10(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), fx(5), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -638,12 +638,12 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 11) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 11: { obj* r = FN11(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_heap_obj(f); return r; }
|
||||
case 11: { obj* r = FN11(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_closure_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), fx(4), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -681,11 +681,11 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 12) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 12: { obj* r = FN12(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_heap_obj(f); return r; }
|
||||
case 12: { obj* r = FN12(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_closure_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), fx(3), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -722,10 +722,10 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 13) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 13: { obj* r = FN13(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_heap_obj(f); return r; }
|
||||
case 13: { obj* r = FN13(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_closure_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), fx(2), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -761,9 +761,9 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 14) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 14: { obj* r = FN14(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); free_heap_obj(f); return r; }
|
||||
case 14: { obj* r = FN14(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); free_closure_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), fx(1), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -798,8 +798,8 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 15) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 15: { obj* r = FN15(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); free_heap_obj(f); return r; }
|
||||
case 15: { obj* r = FN15(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); free_closure_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(fx(0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
@ -833,7 +833,7 @@ unsigned fixed = closure_num_fixed(f);
|
|||
if (arity == fixed + 16) {
|
||||
if (is_exclusive(f)) {
|
||||
switch (arity) {
|
||||
case 16: { obj* r = FN16(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); free_heap_obj(f); return r; }
|
||||
case 16: { obj* r = FN16(f)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); free_closure_obj(f); return r; }
|
||||
}
|
||||
}
|
||||
switch (arity) {
|
||||
|
|
|
|||
|
|
@ -124,6 +124,66 @@ static void dealloc_parray_data(object ** data) {
|
|||
free(mem);
|
||||
}
|
||||
|
||||
static inline void free_heap_obj_core(object * o, size_t sz) {
|
||||
#ifdef LEAN_FAKE_FREE
|
||||
// Set kinds to invalid values, which should trap any further accesses in debug mode.
|
||||
// Make sure object kind is recoverable for printing deleted objects
|
||||
if (o->m_mem_kind != 42) {
|
||||
o->m_kind = -o->m_kind;
|
||||
o->m_mem_kind = 42;
|
||||
}
|
||||
#else
|
||||
#ifdef LEAN_SMALL_ALLOCATOR
|
||||
dealloc(reinterpret_cast<char *>(o) - sizeof(rc_type), sz);
|
||||
#else
|
||||
free(reinterpret_cast<char *>(o) - sizeof(rc_type));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void free_heap_obj(object * o) {
|
||||
free_heap_obj_core(o, obj_byte_size(o) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_cnstr_obj(object * o) {
|
||||
free_heap_obj_core(o, cnstr_byte_size(o) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_closure_obj_core(object * o) {
|
||||
free_heap_obj_core(o, closure_byte_size(o) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
void free_closure_obj(object * o) {
|
||||
return free_closure_obj_core(o);
|
||||
}
|
||||
|
||||
static inline void free_array_obj(object * o) {
|
||||
free_heap_obj_core(o, array_byte_size(o) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_sarray_obj(object * o) {
|
||||
free_heap_obj_core(o, sarray_byte_size(o) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_string_obj(object * o) {
|
||||
free_heap_obj_core(o, string_byte_size(o) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
inline void free_mpz_obj(object * o) {
|
||||
free_heap_obj_core(o, sizeof(mpz_object) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_thunk_obj(object * o) {
|
||||
free_heap_obj_core(o, sizeof(thunk_object) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_task_obj(object * o) {
|
||||
free_heap_obj_core(o, sizeof(task_object) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static inline void free_parray_obj(object * o) {
|
||||
free_heap_obj_core(o, sizeof(parray_object) + sizeof(rc_type));
|
||||
}
|
||||
|
||||
static void del_core(object * o, object * todo) {
|
||||
lean_assert(is_heap_obj(o));
|
||||
|
|
@ -132,53 +192,53 @@ static void del_core(object * o, object * todo) {
|
|||
object ** it = cnstr_obj_cptr(o);
|
||||
object ** end = it + cnstr_num_objs(o);
|
||||
for (; it != end; ++it) dec(*it, todo);
|
||||
free_heap_obj(o);
|
||||
free_cnstr_obj(o);
|
||||
break;
|
||||
}
|
||||
case object_kind::Closure: {
|
||||
object ** it = closure_arg_cptr(o);
|
||||
object ** end = it + closure_num_fixed(o);
|
||||
for (; it != end; ++it) dec(*it, todo);
|
||||
free_heap_obj(o);
|
||||
free_closure_obj_core(o);
|
||||
break;
|
||||
}
|
||||
case object_kind::Array: {
|
||||
object ** it = array_cptr(o);
|
||||
object ** end = it + array_size(o);
|
||||
for (; it != end; ++it) dec(*it, todo);
|
||||
free_heap_obj(o);
|
||||
free_array_obj(o);
|
||||
break;
|
||||
}
|
||||
case object_kind::ScalarArray:
|
||||
free_heap_obj(o); break;
|
||||
free_sarray_obj(o); break;
|
||||
case object_kind::String:
|
||||
free_heap_obj(o); break;
|
||||
free_string_obj(o); break;
|
||||
case object_kind::MPZ:
|
||||
dealloc_mpz(o); break;
|
||||
case object_kind::Thunk:
|
||||
if (object * c = to_thunk(o)->m_closure) dec(c, todo);
|
||||
if (object * v = to_thunk(o)->m_value) dec(v, todo);
|
||||
free_heap_obj(o);
|
||||
free_thunk_obj(o);
|
||||
break;
|
||||
case object_kind::Task:
|
||||
deactivate_task(to_task(o));
|
||||
break;
|
||||
case object_kind::PArrayPop:
|
||||
dec_ref(to_parray(o)->m_next, todo);
|
||||
free_heap_obj(o);
|
||||
free_parray_obj(o);
|
||||
break;
|
||||
case object_kind::PArrayPush:
|
||||
case object_kind::PArraySet:
|
||||
dec(to_parray(o)->m_elem, todo);
|
||||
dec_ref(to_parray(o)->m_next, todo);
|
||||
free_heap_obj(o);
|
||||
free_parray_obj(o);
|
||||
break;
|
||||
case object_kind::PArrayRoot: {
|
||||
object ** it = to_parray(o)->m_data;
|
||||
object ** end = it + to_parray(o)->m_size;
|
||||
for (; it != end; ++it) dec(*it, todo);
|
||||
dealloc_parray_data(to_parray(o)->m_data);
|
||||
free_heap_obj(o);
|
||||
free_parray_obj(o);
|
||||
break;
|
||||
}
|
||||
case object_kind::External:
|
||||
|
|
@ -218,23 +278,6 @@ void * alloc_heap_object(size_t sz) {
|
|||
return static_cast<char *>(r) + sizeof(rc_type);
|
||||
}
|
||||
|
||||
void free_heap_obj(object * o) {
|
||||
#ifdef LEAN_FAKE_FREE
|
||||
// Set kinds to invalid values, which should trap any further accesses in debug mode.
|
||||
// Make sure object kind is recoverable for printing deleted objects
|
||||
if (o->m_mem_kind != 42) {
|
||||
o->m_kind = -o->m_kind;
|
||||
o->m_mem_kind = 42;
|
||||
}
|
||||
#else
|
||||
#ifdef LEAN_SMALL_ALLOCATOR
|
||||
dealloc(reinterpret_cast<char *>(o) - sizeof(rc_type), obj_byte_size(o) + sizeof(rc_type));
|
||||
#else
|
||||
free(reinterpret_cast<char *>(o) - sizeof(rc_type));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// =======================================
|
||||
// Scalar arrays
|
||||
|
||||
|
|
@ -519,7 +562,7 @@ LEAN_THREAD_PTR(task_object, g_current_task_object);
|
|||
|
||||
void dealloc_task(task_object * t) {
|
||||
if (t->m_imp) delete t->m_imp;
|
||||
free_heap_obj(t);
|
||||
free_task_obj(t);
|
||||
}
|
||||
|
||||
struct scoped_current_task_object : flet<task_object *> {
|
||||
|
|
@ -722,7 +765,7 @@ public:
|
|||
lean_assert(t->m_imp == nullptr);
|
||||
lock.unlock();
|
||||
dec(v);
|
||||
free_heap_obj(t);
|
||||
free_task_obj(t);
|
||||
return;
|
||||
} else {
|
||||
lean_assert(t->m_imp);
|
||||
|
|
@ -1273,7 +1316,7 @@ static object * string_ensure_capacity(object * o, size_t extra) {
|
|||
object * new_o = alloc_string(sz, cap + sz + extra, string_len(o));
|
||||
lean_assert(string_capacity(new_o) >= sz + extra);
|
||||
memcpy(w_string_cstr(new_o), string_cstr(o), sz);
|
||||
free_heap_obj(o);
|
||||
free_string_obj(o);
|
||||
return new_o;
|
||||
} else {
|
||||
return o;
|
||||
|
|
|
|||
|
|
@ -239,6 +239,8 @@ static_assert(sizeof(atomic<rc_type>) == sizeof(rc_type), "atomic<rc_type> and
|
|||
|
||||
void * alloc_heap_object(size_t sz);
|
||||
void free_heap_obj(object * o);
|
||||
void free_mpz_obj(object * o);
|
||||
void free_closure_obj(object * o);
|
||||
|
||||
inline atomic<rc_type> * mt_rc_addr(object * o) {
|
||||
return reinterpret_cast<atomic<rc_type> *>(reinterpret_cast<char *>(o) - sizeof(rc_type));
|
||||
|
|
@ -348,7 +350,7 @@ inline external_object * to_external(object * o) { lean_assert(is_external(o));
|
|||
|
||||
"Additionally, the resulting std::atomic<Integral> specialization has standard layout, a trivial default constructor,
|
||||
and a trivial destructor." */
|
||||
inline void dealloc_mpz(object * o) { to_mpz(o)->~mpz_object(); free_heap_obj(o); }
|
||||
inline void dealloc_mpz(object * o) { to_mpz(o)->~mpz_object(); free_mpz_obj(o); }
|
||||
inline void dealloc_external(object * o) { delete to_external(o); }
|
||||
inline void dealloc(object * o) {
|
||||
lean_assert(is_heap_obj(o));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue