diff --git a/ChangeLog b/ChangeLog index 6823caa550..7b72e6a381 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Mar 13 17:51:09 2001 Yukihiro Matsumoto + + * eval.c (ev_const_defined): add new parameter self for special + const fallback. + + * eval.c (ev_const_get): ditto. + Tue Mar 13 16:39:45 2001 WATANABE Hirofumi * dir.c (rb_glob_helper): fix drive letter handling on DOSISH. diff --git a/eval.c b/eval.c index cb892cd1d1..1a31db425d 100644 --- a/eval.c +++ b/eval.c @@ -1422,16 +1422,17 @@ superclass(self, node) #define ruby_cbase (RNODE(ruby_frame->cbase)->nd_clss) static VALUE -ev_const_defined(cref, id) +ev_const_defined(cref, id, self) NODE *cref; ID id; + VALUE self; { NODE *cbase = cref; while (cbase && cbase->nd_clss != rb_cObject) { struct RClass *klass = RCLASS(cbase->nd_clss); - if (NIL_P(klass)) return rb_const_defined(rb_cObject, id); + if (NIL_P(klass)) return rb_const_defined(CLASS_OF(self), id); if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, 0)) { return Qtrue; } @@ -1441,9 +1442,10 @@ ev_const_defined(cref, id) } static VALUE -ev_const_get(cref, id) +ev_const_get(cref, id, self) NODE *cref; ID id; + VALUE self; { NODE *cbase = cref; VALUE result; @@ -1451,7 +1453,7 @@ ev_const_get(cref, id) while (cbase && cbase->nd_clss != rb_cObject) { struct RClass *klass = RCLASS(cbase->nd_clss); - if (NIL_P(klass)) return rb_const_get(rb_cObject, id); + if (NIL_P(klass)) return rb_const_get(CLASS_OF(self), id); if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) { return result; } @@ -1460,27 +1462,6 @@ ev_const_get(cref, id) return rb_const_get(cref->nd_clss, id); } -static VALUE -ev_const_set(cref, id, val) - NODE *cref; - ID id; - VALUE val; -{ - NODE *cbase = cref; - - while (cbase && cbase->nd_clss != rb_cObject) { - struct RClass *klass = RCLASS(cbase->nd_clss); - - if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, 0)) { - st_insert(klass->iv_tbl, id, val); - return val; - } - cbase = cbase->nd_next; - } - rb_const_assign(cbase->nd_clss, id, val); - return val; -} - static VALUE rb_mod_nesting() { @@ -1826,7 +1807,7 @@ is_defined(self, node, buf) break; case NODE_CONST: - if (ev_const_defined(RNODE(ruby_frame->cbase), node->nd_vid)) { + if (ev_const_defined(RNODE(ruby_frame->cbase), node->nd_vid, self)) { return "constant"; } break; @@ -2738,7 +2719,7 @@ rb_eval(self, n) break; case NODE_CONST: - result = ev_const_get(RNODE(ruby_frame->cbase), node->nd_vid); + result = ev_const_get(RNODE(ruby_frame->cbase), node->nd_vid, self); break; case NODE_CVAR: /* normal method */ diff --git a/io.c b/io.c index 9beb17f342..4e7df04301 100644 --- a/io.c +++ b/io.c @@ -3183,8 +3183,6 @@ argf_seek_m(argc, argv, self) VALUE *argv; VALUE self; { - VALUE args[2]; - if (!next_argv()) { rb_raise(rb_eArgError, "no stream to seek"); } diff --git a/parse.y b/parse.y index 6c92f35351..1e7ad8c6b2 100644 --- a/parse.y +++ b/parse.y @@ -4522,7 +4522,7 @@ cond0(node, logop) if (type == NODE_DOT2) nd_set_type(node,NODE_FLIP2); else if (type == NODE_DOT3) nd_set_type(node, NODE_FLIP3); node->nd_cnt = local_append(0); - warn_unless_e_option("range literal in condition"); + warning_unless_e_option("range literal in condition"); break; case NODE_LIT: