summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--ToDo1
-rw-r--r--array.c3
-rw-r--r--eval.c6
-rw-r--r--ext/socket/socket.c5
-rw-r--r--gc.c1
6 files changed, 20 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a9ea8c0a0..ad4b4e4d35 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Sat Jan 19 02:31:45 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): need not to clar method cache for NODE_CLASS,
+ NODE_SCLASS.
+
+ * gc.c (obj_free): need not to clear method cache on class/module
+ finalization.
+
+Fri Jan 18 23:38:03 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_fetch): index out of range raises exception
+ unless optional second argument is specified.
+
Fri Jan 18 17:32:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* io.c (rb_io_s_new): block check moved from initialize to this
diff --git a/ToDo b/ToDo
index d76822cd99..41f0edf02e 100644
--- a/ToDo
+++ b/ToDo
@@ -34,6 +34,7 @@ Language Spec.
* "in" modifier, to annotate, or to encourage assertion.
* selector namespace - something like generic-flet in CLOS, to help RubyBehevior
* private instance variable (as in Python?) @_foo in class Foo => @_Foo_foo
+* warn/error "bare word" method, like "foo", you should type "foo()"
Hacking Interpreter
diff --git a/array.c b/array.c
index e13ad258a0..e1e1f9245b 100644
--- a/array.c
+++ b/array.c
@@ -550,7 +550,8 @@ rb_ary_fetch(argc, argv, ary)
idx += RARRAY(ary)->len;
}
if (idx < 0 || RARRAY(ary)->len <= idx) {
- return ifnone;
+ if (argc == 2) return ifnone;
+ rb_raise(rb_eIndexError, "index %d out of array", idx);
}
return RARRAY(ary)->ptr[idx];
}
diff --git a/eval.c b/eval.c
index ee6ed1ac4c..c2470cf408 100644
--- a/eval.c
+++ b/eval.c
@@ -190,7 +190,7 @@ static struct cache_entry cache[CACHE_SIZE];
void
rb_clear_cache()
{
- struct cache_entry *ent, *end;
+ struct cache_entry *ent, *end;
ent = cache; end = ent + CACHE_SIZE;
while (ent < end) {
@@ -3239,7 +3239,6 @@ rb_eval(self, n)
if (rb_safe_level() >= 4) {
rb_raise(rb_eSecurityError, "extending class prohibited");
}
- rb_clear_cache();
}
else {
override_class:
@@ -3306,9 +3305,6 @@ rb_eval(self, n)
}
if (rb_safe_level() >= 4 && !OBJ_TAINTED(klass))
rb_raise(rb_eSecurityError, "Insecure: can't extend object");
- if (FL_TEST(CLASS_OF(klass), FL_SINGLETON)) {
- rb_clear_cache();
- }
klass = rb_singleton_class(klass);
if (ruby_wrapper) {
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 069f47dcd1..82f52472c4 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1362,7 +1362,7 @@ static VALUE
unix_svr_init(sock, path)
VALUE sock, path;
{
- return open_unix(sock, path, 1);
+ return init_unixsock(sock, path, 1);
}
static VALUE
@@ -1557,7 +1557,8 @@ sock_s_socketpair(klass, domain, type, protocol)
rb_sys_fail("socketpair(2)");
}
- return rb_assoc_new(sock_new(klass, sp[0]), sock_new(klass, sp[1]));
+ return rb_assoc_new(init_sock(rb_obj_alloc(klass), sp[0]),
+ init_sock(rb_obj_alloc(klass), sp[1]));
#else
rb_notimplement();
#endif
diff --git a/gc.c b/gc.c
index fe274d0b74..f5602989e5 100644
--- a/gc.c
+++ b/gc.c
@@ -941,7 +941,6 @@ obj_free(obj)
break;
case T_MODULE:
case T_CLASS:
- rb_clear_cache();
st_free_table(RANY(obj)->as.klass.m_tbl);
if (RANY(obj)->as.object.iv_tbl) {
st_free_table(RANY(obj)->as.object.iv_tbl);