~ chicken-core (chicken-5) 2fdd7dde9546b8bbe910931a332bba1e9d085008


commit 2fdd7dde9546b8bbe910931a332bba1e9d085008
Author:     Peter Bex <peter@more-magic.net>
AuthorDate: Sat Aug 22 18:17:54 2015 +0200
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Sat Aug 22 19:37:27 2015 +0200

    bugfixes in C_make_structure(_2)

diff --git a/runtime.c b/runtime.c
index 878672b0..331b6fbb 100644
--- a/runtime.c
+++ b/runtime.c
@@ -11351,26 +11351,13 @@ static void bignum_to_str_2(C_word c, C_word *av)
 
 void C_ccall C_make_structure(C_word c, C_word *av)
 {
-  C_word
-    /* closure = av[ 0 ] */
-    k = av[ 1 ],
-    type = av[ 2 ],
-    *p;
-  int i;
-
-  av += 2;
-
-  for(i = c - 3; i--; C_save(*(av++)));
-
-  C_save(type);
-  C_save(k);
-
-  if(!C_demand(c - 1)) 
-    C_reclaim((void *)make_structure_2, c);
+  if(!C_demand(c - 1)) {
+    C_temporary_stack = C_temporary_stack_bottom - (c - 1);
+    C_memcpy(C_temporary_stack, av + 1, (c - 1) * sizeof(C_word));
+    C_reclaim((void *)make_structure_2, c - 1);
+  }
 
-  p = C_temporary_stack;
-  C_temporary_stack = C_temporary_stack_bottom;
-  make_structure_2(0, p);
+  make_structure_2(c - 1, av + 1);
 }
 
 
@@ -11386,11 +11373,10 @@ void C_ccall make_structure_2(C_word c, C_word *av)
 
   *(s++) = C_STRUCTURE_TYPE | (size + 1);
   *(s++) = type;
-  s += size;
   av += 2;
 
   while(size--)
-    *(--s) = *(av++);
+    *(s++) = *(av++);
 
   C_kontinue(k, s0);
 }
Trap