From 897cf066952978ccbae1d57bbc14a03c7b98a1e1 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Wed, 1 Feb 1995 19:48:24 +0900 Subject: version 0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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しかインスタンス変数を持てなくなる.が,メモ リ効率は若干向上する. --- array.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index 5a8f040723..28d755b73f 100644 --- a/array.c +++ b/array.c @@ -77,32 +77,33 @@ ary_new4(n, elts) return (VALUE)ary; } -#if 0 -VALUE -assoc_new(elm1, elm2) - VALUE elm1, elm2; +static VALUE +Sary_new(class) + VALUE class; { - struct RArray *ary; + NEWOBJ(ary, struct RArray); + OBJSETUP(ary, class, T_ARRAY); - ary = (struct RArray*)ary_new2(2); - ary->ptr[0] = elm1; - ary->ptr[1] = elm2; - ary->len = 2; + ary->len = 0; + ary->capa = ARY_DEFAULT_SIZE; + ary->ptr = ALLOC_N(VALUE, ARY_DEFAULT_SIZE); return (VALUE)ary; } -#endif static VALUE -Sary_new(class) +Sary_create(argc, argv, class) + int argc; + VALUE *argv; VALUE class; { NEWOBJ(ary, struct RArray); OBJSETUP(ary, class, T_ARRAY); - ary->len = 0; - ary->capa = ARY_DEFAULT_SIZE; - ary->ptr = ALLOC_N(VALUE, ARY_DEFAULT_SIZE); + ary->len = argc; + ary->capa = argc; + ary->ptr = ALLOC_N(VALUE, argc); + MEMCPY(ary->ptr, argv, VALUE, argc); return (VALUE)ary; } @@ -648,7 +649,10 @@ static int sort_2(a, b) VALUE *a, *b; { - VALUE retval = rb_funcall(*a, cmp, 1, *b); + VALUE retval; + + if (!cmp) cmp = rb_intern("<=>"); + retval = rb_funcall(*a, cmp, 1, *b); return NUM2INT(retval); } @@ -936,6 +940,7 @@ Init_Array() rb_include_module(C_Array, M_Enumerable); rb_define_single_method(C_Array, "new", Sary_new, 0); + rb_define_single_method(C_Array, "[]", Sary_create, -1); rb_define_method(C_Array, "to_s", Fary_to_s, 0); rb_define_method(C_Array, "_inspect", Fary_inspect, 0); rb_define_method(C_Array, "to_a", Fary_to_a, 0); @@ -976,6 +981,4 @@ Init_Array() rb_define_method(C_Array, "-", Fary_diff, 1); rb_define_method(C_Array, "&", Fary_and, 1); rb_define_method(C_Array, "|", Fary_or, 1); - - cmp = rb_intern("<=>"); } -- cgit v1.2.3