summaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-02-27 08:04:32 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-02-27 08:04:32 +0000
commitac17da0f60d9bd0168128a2af6729ee210c36687 (patch)
treeda88b4389e0df8385407695139d7a4d228381cec /gc.c
parent59bd3fda628636815964d9d39f45b941c1a56ade (diff)
downloadruby-ac17da0f60d9bd0168128a2af6729ee210c36687.tar.gz
ruby-ac17da0f60d9bd0168128a2af6729ee210c36687.tar.xz
ruby-ac17da0f60d9bd0168128a2af6729ee210c36687.zip
* string.c (str_new): need no MEMZERO().
* numeric.c (fix_gt): use rb_num_coerce_cmp() instead of rb_num_coerce_bin. * numeric.c (fix_ge, fix_lt, fix_le): ditto. * numeric.c (flo_gt, flo_ge, flo_lt, flo_le): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@3536 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/gc.c b/gc.c
index 4c1210570..74ea83eac 100644
--- a/gc.c
+++ b/gc.c
@@ -562,7 +562,7 @@ rb_mark_tbl(tbl)
}
static int
-mark_hashentry(key, value)
+mark_keyvalue(key, value)
VALUE key;
VALUE value;
{
@@ -576,7 +576,7 @@ rb_mark_hash(tbl)
st_table *tbl;
{
if (!tbl) return;
- st_foreach(tbl, mark_hashentry, 0);
+ st_foreach(tbl, mark_keyvalue, 0);
}
void
@@ -1246,6 +1246,18 @@ rb_gc_start()
return Qnil;
}
+#if !defined(__human68k__)
+static int
+stack_growup_p(addr)
+ VALUE *addr;
+{
+ SET_STACK_END;
+
+ if (STACK_END > addr) return Qtrue;
+ return Qfalse;
+}
+#endif
+
void
Init_stack(addr)
VALUE *addr;
@@ -1255,6 +1267,17 @@ Init_stack(addr)
rb_gc_stack_start = _SEND;
#else
if (!addr) addr = (VALUE *)&addr;
+ if (rb_gc_stack_start) {
+ if (stack_growup_p(addr)) {
+ if (rb_gc_stack_start > addr)
+ rb_gc_stack_start = addr;
+ }
+ else {
+ if (rb_gc_stack_start < addr)
+ rb_gc_stack_start = addr;
+ }
+ return;
+ }
rb_gc_stack_start = addr;
#endif
#ifdef HAVE_GETRLIMIT