summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-02-21 18:56:56 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:31 +0900
commit2f106ab85c4f4e171374aee261f5a12bdd923c41 (patch)
tree6810f0a05ad8df30a269eb522eea5f77186b90c6 /eval.c
parentc080fb6d10bbcb697b6ba16e640de8db3f1973d0 (diff)
version 0.67v0_67
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.66-0.67.diff.gz Tue Feb 21 18:56:56 1995 Yukihiro Matsumoto (matz@ix-02) * io.c(STDIN, STDOUT, STDERR): 定数として定義.今までの$stdinなど は将来なくなるかも知れない. * io.c(select): bug fix. * version 0.67 Mon Feb 20 16:10:14 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y(yylex): 定数を`%識別子'から,第1文字が大文字の識別子に変 更.それにともないクラスは定数となった. * eval.c: クラス定義内のselfがクラス定義外部のthe_classだった. * variable.c(rb_name_class): クラス名をインスタンス変数に格納する. Thu Feb 16 15:36:17 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: BLOCKをbraceで表現する文法に変更したものを作ってみる. MLに提示してみるが反応がない. * object.c(do,forever): なくした. Wed Feb 15 13:20:49 1995 Yukihiro Matsumoto (matz@ix-02) * re.c(new): 第2引数が与えられて,かつnilでないときだけ設定するよ うに(以前はnilの時にも設定を行なっていた). * parse.y(parse_regexp): 正規表現リテラルで大文字小文字を無視する かどうか指定できるように. Tue Feb 14 00:55:33 1995 Yukihiro Matsumoto (matz@dyna) * parse.y: (compexpr) -> (expr). Fri Feb 10 16:30:00 1995 Yukihiro Matsumoto (matz@ix-02) * ruby.c(load_file): scriptを読み込む時だけ"#!"の解析を行うように. * ruby.c(readin): ファイル読み込み時に先頭に"#!"があり,rubyに引数 が与えられていれば,その引数も有効になる. * parse.y(yylex): コメント行の終りが`\'であった時,次の行に継続し ているとみなすようにした.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/eval.c b/eval.c
index fa61e47250..0287e9f52c 100644
--- a/eval.c
+++ b/eval.c
@@ -115,9 +115,7 @@ rb_alias(class, name, def)
}
if (st_lookup(class->m_tbl, name, &old)) {
- if (verbose) {
- Warning("redefine %s", rb_id2name(name));
- }
+ Warning("redefine %s", rb_id2name(name));
rb_clear_cache(old->nd_body);
}
@@ -1017,11 +1015,7 @@ rb_eval(node)
Bug("unexpected local variable");
return the_scope->local_vars[node->nd_cnt];
- case NODE_GVAR:
- return rb_gvar_get(node->nd_entry);
- case NODE_IVAR:
- return rb_ivar_get(node->nd_vid);
- case NODE_MVAR:
+ case NODE_LVAR2:
if (the_scope->flags & SCOPE_MALLOCED) {
ID id = node->nd_vid, *tbl = the_scope->local_tbl;
int i, len = tbl[0];
@@ -1034,7 +1028,13 @@ rb_eval(node)
return the_scope->local_vars[i];
}
}
- return rb_mvar_get(node->nd_vid);
+ Warning("local var %s not initialized", rb_id2name(node->nd_vid));
+ return Qnil;
+
+ case NODE_GVAR:
+ return rb_gvar_get(node->nd_entry);
+ case NODE_IVAR:
+ return rb_ivar_get(node->nd_vid);
case NODE_CVAR:
{
@@ -1189,56 +1189,55 @@ rb_eval(node)
else {
super = C_Object;
}
- if (class = rb_id2class(node->nd_cname)) {
- if (verbose) {
- Warning("redefine class %s", rb_id2name(node->nd_cname));
- }
+ if (verbose && rb_id2class(node->nd_cname)) {
+ Warning("redefine class %s", rb_id2name(node->nd_cname));
}
- PUSH_SELF((VALUE)the_class);
+ class = rb_define_class_id(node->nd_cname, super);
+ rb_const_set(the_class, node->nd_cname, class);
PUSH_CLASS();
- the_class = (struct RClass*)
- rb_define_class_id(node->nd_cname, super);
+ the_class = (struct RClass*)class;
+ PUSH_SELF((VALUE)the_class);
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
rb_eval(node->nd_body);
}
POP_TAG();
- POP_CLASS();
POP_SELF();
+ POP_CLASS();
if (state) JUMP_TAG(state);
+ return class;
}
- return Qnil;
case NODE_MODULE:
{
VALUE module;
- if (module = rb_id2class(node->nd_cname)) {
- if (verbose) {
- Warning("redefine module %s", rb_id2name(node->nd_cname));
- }
+ if (verbose && rb_id2class(node->nd_cname)) {
+ Warning("redefine module %s", rb_id2name(node->nd_cname));
}
- PUSH_SELF((VALUE)the_class);
+ module = rb_define_module_id(node->nd_cname);
+ rb_const_set(the_class, node->nd_cname, module);
PUSH_CLASS();
- the_class = (struct RClass*)rb_define_module_id(node->nd_cname);
+ the_class = (struct RClass*)module;
+ PUSH_SELF((VALUE)the_class);
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
rb_eval(node->nd_body);
}
POP_TAG();
- POP_CLASS();
POP_SELF();
+ POP_CLASS();
if (state) JUMP_TAG(state);
+ return module;
}
- return Qnil;
case NODE_INC:
{
struct RClass *module;
- module = (struct RClass*)rb_id2class(node->nd_modl);
+ module = (struct RClass*)rb_const_get(node->nd_modl);
if (module == Qnil) {
Fail("undefined module %s", rb_id2name(node->nd_modl));
}