summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-02-01 19:48:24 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:31 +0900
commit897cf066952978ccbae1d57bbc14a03c7b98a1e1 (patch)
treebc83424954929dc9574e40a0aee874f45965a8ae /object.c
parent5d828b25d4ae30a000c054a724ac248dadbb97b3 (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.c63
1 files changed, 30 insertions, 33 deletions
diff --git a/object.c b/object.c
index e71043f..a35e683 100644
--- a/object.c
+++ b/object.c
@@ -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");
+}