aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2026-03-03 15:57:36 -0500
committerGravatar Peter McGoron 2026-03-03 15:57:36 -0500
commit643a7f4ac33f762d299e69ecc27ead5834c13ba4 (patch)
tree764e4c68aec5c1b5a227c91b43f87dd0c262506f
parentpreparing for CHICKEN 6 (diff)
fix allocation of closures (from Felix)
-rw-r--r--lowlevel.scm12
1 files changed, 6 insertions, 6 deletions
diff --git a/lowlevel.scm b/lowlevel.scm
index 1032534..1e6544b 100644
--- a/lowlevel.scm
+++ b/lowlevel.scm
@@ -53,13 +53,13 @@
(scheme-object sig))
"
int old_size = C_header_size(proc);
-C_word closure[C_SIZEOF_CLOSURE(old_size + 1)];
+C_word *closure = C_alloc(C_SIZEOF_CLOSURE(old_size + 1));
int i;
closure[0] = C_CLOSURE_TYPE | (old_size + 1);
for (i = 0; i < old_size; i++)
- C_block_item(closure, i) = C_block_item(proc, i);
-C_block_item(closure, old_size) = sig;
+ closure[ i + 1 ] = C_block_item(proc, i);
+closure[ old_size + 1 ] = sig;
C_return(closure);"))
@@ -74,15 +74,15 @@ C_return(closure);"))
int size = C_header_size(proc);
C_word item;
int i;
-C_word closure[C_SIZEOF_CLOSURE(size)];
+C_word *closure = C_alloc(C_SIZEOF_CLOSURE(size));
closure[0] = C_CLOSURE_TYPE | size;
for (i = 0; i < size; i++) {
item = C_block_item(proc, i);
if (C_i_pairp(item) == C_SCHEME_TRUE && C_eqp(unique_symbol, C_u_i_car(item)) == C_SCHEME_TRUE) {
- C_block_item(closure, i) = sig;
+ closure[ i + 1 ] = sig;
} else {
- C_block_item(closure, i) = item;
+ closure[ i + 1 ] = item;
}
}