Skip to content

Commit

Permalink
* variable.c (rb_cvar_set): define new class variable if it's not
Browse files Browse the repository at this point in the history
  defined yet.

* eval.c (rb_eval_string_wrap): should hide the toplevel local
  variable bindings by PUSH_SCOPE().


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
matz committed Feb 19, 2002
1 parent e263207 commit c08ebb3
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 316 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
@@ -1,3 +1,11 @@
Tue Feb 19 13:38:10 2002 Yukihiro Matsumoto <matz@ruby-lang.org>

* variable.c (rb_cvar_set): define new class variable if it's not
defined yet.

* eval.c (rb_eval_string_wrap): should hide the toplevel local
variable bindings by PUSH_SCOPE().

Tue Feb 19 13:16:08 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>

* io.c (rb_io_ungetc): don't fail pushed EOF back.
Expand Down
2 changes: 2 additions & 0 deletions eval.c
Expand Up @@ -1270,10 +1270,12 @@ rb_eval_string_wrap(str, state)
ruby_frame->last_class = 0;
ruby_frame->self = self;
ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_wrapper,0,0);
PUSH_SCOPE();

val = rb_eval_string_protect(str, &status);
ruby_top_self = self;

POP_SCOPE();
POP_FRAME();
POP_CLASS();
ruby_wrapper = wrapper;
Expand Down
297 changes: 0 additions & 297 deletions sample/rename.rb

This file was deleted.

36 changes: 17 additions & 19 deletions variable.c
Expand Up @@ -1357,11 +1357,12 @@ rb_define_global_const(name, val)
rb_define_const(rb_cObject, name, val);
}

void
rb_cvar_set(klass, id, val)
static void
cvar_set(klass, id, val, warn)
VALUE klass;
ID id;
VALUE val;
int warn;
{
VALUE tmp;

Expand All @@ -1371,37 +1372,34 @@ rb_cvar_set(klass, id, val)
if (OBJ_FROZEN(tmp)) rb_error_frozen("class/module");
if (!OBJ_TAINTED(tmp) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't modify class variable");
if (warn && ruby_verbose && klass != tmp) {
rb_warning("already initialized class variable %s", rb_id2name(id));
}
st_insert(RCLASS(tmp)->iv_tbl,id,val);
return;
}
tmp = RCLASS(tmp)->super;
}

rb_raise(rb_eNameError,"uninitialized class variable %s in %s",
rb_id2name(id), rb_class2name(klass));
mod_av_set(klass, id, val, Qfalse);
}

void
rb_cvar_declare(klass, id, val)
rb_cvar_set(klass, id, val)
VALUE klass;
ID id;
VALUE val;
{
VALUE tmp;

tmp = klass;
while (tmp) {
if (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,0)) {
if (OBJ_FROZEN(tmp)) rb_error_frozen("class/module");
if (!OBJ_TAINTED(tmp) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't modify class variable");
st_insert(RCLASS(tmp)->iv_tbl,id,val);
return;
}
tmp = RCLASS(tmp)->super;
}
cvar_set(klass, id, val, Qfalse);
}

mod_av_set(klass, id, val, Qfalse);
void
rb_cvar_declare(klass, id, val)
VALUE klass;
ID id;
VALUE val;
{
cvar_set(klass, id, val, Qtrue);
}

VALUE
Expand Down

0 comments on commit c08ebb3

Please sign in to comment.