diff options
author | Yukihiro Matsumoto <matz@ruby-lang.org> | 1995-02-01 19:48:24 +0900 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2019-08-17 22:09:31 +0900 |
commit | 897cf066952978ccbae1d57bbc14a03c7b98a1e1 (patch) | |
tree | bc83424954929dc9574e40a0aee874f45965a8ae /object.c | |
parent | 5d828b25d4ae30a000c054a724ac248dadbb97b3 (diff) |
version 0.65v0_65
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.65.tar.gz
Wed Feb 1 19:48:24 1995 Yukihiro Matsumoto (matz@ix-02)
* string.c(str_replace): 置き換える文字列の長さが等しい時メモリコ
ピーをしない.
* string.c(rindex): バグ修正.
Mon Jan 30 11:23:05 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y(value_expr): ifのチェックを追加.
* gc.c(gc_mark): free cellの扱いにバグ.
* parse.y: 文法の変更(よりシンプルに).例外を減らした.
Thu Jan 26 00:52:55 1995 Yukihiro Matsumoto (matz@dyna)
* parse.y: 引数として連想配列を置くことができるように.この場合,
連想配列リテラルが最終引数となる.
* parse.y: 配列参照の`[]'内が空でもよいことにした.
Tue Jan 24 14:45:15 1995 Yukihiro Matsumoto (matz@ix-02)
* class.c(rb_include_module): `-v'を指定した時にはincludeしたモジュー
ルとクラス定数が衝突していないかチェックする.
Mon Jan 23 10:42:09 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y(rb_class2name): メタクラスに関するbug fix.
* dict.c: Dict[..]で辞書の生成が出来るように.
* array.c: Array[..]で配列の生成が出来るように.
* parse.y: 辞書の表現として{a,b,..}という形式も許すように.
Fri Jan 20 10:28:38 1995 Yukihiro Matsumoto (matz@ix-02)
* re.c(Regexp.quote): 正規表現をエスケープするメソッド.
* 無駄なrb_intern()を減らした.
* parse.y: `!', `!=', `!~'を特殊演算子にする.よってこれらは再定義
できなくなった.
Wed Jan 18 13:20:41 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y: 文法の整理(unless,untilをなくした).
Tue Jan 17 11:11:27 1995 Yukihiro Matsumoto (matz@ix-02)
* eval.c: defでメソッド再定義時にはスーパークラスのメソッドの可視
性を継承する.最初の定義の時は今までと同じデフォルト(トップレベ
ルで関数的,クラス定義内で通常メソッド).
* object.c(Class::new): オブジェクトの生成時に関数的メ
ソッドinit_objectが必ず呼ばれるように変更.
* eval.c: 未定義のメソッドに対してunknownメソッドが呼ばれるように
なった.エラー表示が今までと同じになるようにenvを調節している.
Fri Jan 13 14:40:30 1995 Yukihiro Matsumoto (matz@ix-02)
* gc.c: gcを若干書き換えて整理した.が,あまり変化はなかったようだ.
* parse.y(yylex): symbolを\symから:symに変更した.
Thu Jan 12 01:39:28 1995 Yukihiro Matsumoto (matz@dyna)
* eval.c: 新規関数 rb_eval_string().
* gc.c: gc_mark()を一部非再帰化.
* variable.c(rb_ivar_{get,set}): インスタンス変数のアクセス周りで
チェックが足りなかった.
* variable.c: クラス定数とインスタンス変数でハッシュテーブルを共有
するようにした.
* ruby.h: iv_tblをRBasicからRObjectとRClassへ移動した.これにより,
ObjectとClass,Moduleしかインスタンス変数を持てなくなる.が,メモ
リ効率は若干向上する.
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 63 |
1 files changed, 30 insertions, 33 deletions
@@ -3,7 +3,7 @@ object.c - $Author: matz $ - $Date: 1995/01/10 10:42:44 $ + $Date: 1995/01/12 08:54:49 $ created at: Thu Jul 15 12:01:24 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto @@ -12,7 +12,6 @@ #include "ruby.h" #include "env.h" -#include "node.h" #include "st.h" #include <stdio.h> @@ -31,6 +30,7 @@ VALUE obj_responds_to(); VALUE obj_alloc(); static ID eq, match; +static ID init_object; static VALUE P_true(obj) @@ -76,26 +76,6 @@ Fkrn_id(obj) } static VALUE -Fkrn_noteq(obj, other) - VALUE obj, other; -{ - if (rb_equal(obj, other)) { - return FALSE; - } - return TRUE; -} - -static VALUE -Fkrn_nmatch(obj, other) - VALUE obj, other; -{ - if (rb_funcall(obj, match, 1, other)) { - return FALSE; - } - return TRUE; -} - -static VALUE Fkrn_class(obj) struct RBasic *obj; { @@ -145,7 +125,7 @@ obj_inspect(id, value, str) static VALUE Fobj_inspect(obj) - struct RBasic *obj; + struct RObject *obj; { VALUE str; char buf[256]; @@ -212,8 +192,8 @@ Fobj_clone(obj) Check_Type(obj, T_OBJECT); clone = obj_alloc(RBASIC(obj)->class); - if (RBASIC(obj)->iv_tbl) { - RBASIC(clone)->iv_tbl = st_copy(RBASIC(obj)->iv_tbl); + if (ROBJECT(obj)->iv_tbl) { + ROBJECT(clone)->iv_tbl = st_copy(ROBJECT(obj)->iv_tbl); } RBASIC(clone)->class = single_class_clone(RBASIC(obj)->class); @@ -221,6 +201,13 @@ Fobj_clone(obj) } static VALUE +Fobj_init_object(obj) + VALUE obj; +{ + return Qnil; +} + +static VALUE Fnil_to_s(obj) VALUE obj; { @@ -282,7 +269,10 @@ Fcls_new(argc, argv, class) VALUE *argv; VALUE class; { - return obj_alloc(class); + VALUE obj = obj_alloc(class); + + rb_funcall2(obj, init_object, argc, argv); + return obj; } static VALUE @@ -377,6 +367,13 @@ Fdo() return rb_yield(Qnil); } +Fforever() +{ + for (;;) { + rb_yield(Qnil); + } +} + VALUE TopSelf; VALUE TRUE = 1; @@ -424,16 +421,14 @@ Init_Object() * + All metaclasses are instances of the class `Class'. */ + rb_define_method(C_Kernel, "is_nil", P_false, 0); - rb_define_method(C_Kernel, "!", P_false, 0); rb_define_method(C_Kernel, "==", Fkrn_equal, 1); rb_define_alias(C_Kernel, "equal", "=="); rb_define_method(C_Kernel, "hash", Fkrn_id, 0); rb_define_method(C_Kernel, "id", Fkrn_id, 0); rb_define_method(C_Kernel, "class", Fkrn_class, 0); - rb_define_method(C_Kernel, "!=", Fkrn_noteq, 1); rb_define_alias(C_Kernel, "=~", "=="); - rb_define_method(C_Kernel, "!~", Fkrn_nmatch, 1); rb_define_method(C_Kernel, "to_a", Fkrn_to_a, 0); rb_define_method(C_Kernel, "to_s", Fkrn_to_s, 0); @@ -443,8 +438,11 @@ Init_Object() rb_define_alias(C_Kernel, "format", "sprintf"); rb_define_private_method(C_Kernel, "do", Fdo, 0); + rb_define_private_method(C_Kernel, "forever", Fforever, 0); - rb_define_method(C_Object, "_inspect", Fobj_inspect, 0); + rb_define_private_method(C_Object, "init_object", Fobj_init_object, -1); + + rb_define_method(C_Object, "clone", Fobj_clone, 0); rb_define_method(C_Object, "responds_to", obj_responds_to, 1); rb_define_method(C_Object, "is_member_of", obj_is_member_of, 1); @@ -465,7 +463,6 @@ Init_Object() rb_define_method(C_Nil, "class", Fnil_class, 0); rb_define_method(C_Nil, "is_nil", P_true, 0); - rb_define_method(C_Nil, "!", P_true, 0); /* default addition */ rb_define_method(C_Nil, "+", Fnil_plus, 1); @@ -475,7 +472,6 @@ Init_Object() rb_define_method(C_Data, "class", Fdata_class, 0); eq = rb_intern("=="); - match = rb_intern("=~"); Qself = TopSelf = obj_alloc(C_Object); rb_define_single_method(TopSelf, "to_s", Fmain_to_s, 0); @@ -484,5 +480,6 @@ Init_Object() rb_define_single_method(TRUE, "to_s", Ftrue_to_s, 0); rb_define_const(C_Kernel, "%TRUE", TRUE); rb_define_const(C_Kernel, "%FALSE", FALSE); -} + init_object = rb_intern("init_object"); +} |