summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-12-25 04:35:44 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-12-25 04:35:44 +0000
commite3ae94452e6b84bd7f3c40166713f38a0585d834 (patch)
tree43142e9f6788e01e34588c46353a6a36d7e8bbd3 /gc.c
parent17a5fa1b4344199cef86c2cea4f1ba35f021593d (diff)
1.2 stable
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gc.c b/gc.c
index bf5124e66d..4665aea768 100644
--- a/gc.c
+++ b/gc.c
@@ -30,8 +30,10 @@ void io_fptr_finalize _((struct OpenFile*));
#endif
#ifdef C_ALLOCA
+#ifndef alloca
void *alloca();
#endif
+#endif
static void run_final();
@@ -411,9 +413,6 @@ gc_mark(ptr)
case NODE_DREGX_ONCE:
case NODE_FBODY:
case NODE_CALL:
-#ifdef C_ALLOCA
- case NODE_ALLOCA:
-#endif
gc_mark(obj->as.node.u1.node);
/* fall through */
case NODE_SUPER: /* 3 */
@@ -469,6 +468,13 @@ gc_mark(ptr)
case NODE_NIL:
case NODE_POSTEXE:
break;
+#ifdef C_ALLOCA
+ case NODE_ALLOCA:
+ mark_locations_array((VALUE*)obj->as.node.u1.value,
+ obj->as.node.u3.cnt);
+ obj = RANY(obj->as.node.u2.node);
+ goto Top;
+#endif
default:
if (looks_pointerp(obj->as.node.u1.node)) {