summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--numeric.c3
-rw-r--r--ruby.c5
3 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ade0b2992..73687c4458 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Tue May 24 23:42:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_pow): support Fixnum ** Float case directly
+ without coercing. [ruby-talk:142697] [ruby-talk:143054]
+
+Tue May 24 16:57:24 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (require_libraries): caused SEGV when continuation jumped
+ in to the required library code.
+
Tue May 24 11:56:25 2005 WATANABE Hirofumi <eban@ruby-lang.org>
* lib/getopts.rb: should warn only if verbose mode.
diff --git a/numeric.c b/numeric.c
index 65d9d5cb11..e5a03e1a82 100644
--- a/numeric.c
+++ b/numeric.c
@@ -2196,6 +2196,9 @@ fix_pow(x, y)
return rb_big_pow(rb_int2big(a), y);
}
return rb_float_new(pow((double)a, (double)b));
+ } else if (TYPE(y) == T_FLOAT) {
+ long a = FIX2LONG(x);
+ return rb_float_new(pow((double)a, RFLOAT(y)->value));
}
return rb_num_coerce_bin(x, y);
}
diff --git a/ruby.c b/ruby.c
index af265be65e..95144f2eed 100644
--- a/ruby.c
+++ b/ruby.c
@@ -350,8 +350,11 @@ require_libraries()
ruby_set_current_source();
req_list_last = 0;
while (list) {
+ int state;
+
ruby_current_node = 0;
- rb_require(list->name);
+ rb_protect((VALUE (*)(VALUE))rb_require, (VALUE)list->name, &state);
+ if (state) rb_jump_tag(state);
tmp = list->next;
free(list->name);
free(list);