summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-01-10 00:58:20 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:31 +0900
commit5d828b25d4ae30a000c054a724ac248dadbb97b3 (patch)
tree080fc6e3b41b9c59cf5def77ae619a82e7e252db /class.c
parentbd0c733b77b561f4d12daccebf06a7c71917000b (diff)
version 0.64v0_64
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.64.tar.gz Tue Jan 10 00:58:20 1995 Yukihiro Matsumoto (matz@dyna) * eval.c: レシーバと引数は常にiterではない. * cons.c(aref,aset): negative offset対応. Mon Jan 9 14:40:39 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: foo{..}の形式において,fooをローカル変数やクラス名では なく,引数なしの関数型メソッド呼び出しとみなすようにした. * list.c -> cons.c: 名称変更(クラス名も). * list.c: a::b::c::nilをリスト(a b c)とみなすlisp形式から,a::b::c をリスト(a b c)とみなすruby形式に変更.[], []=, eachもそれに会わ せた仕様とする. * list.c: consペアとしての機能を強調.仕様変更. Sat Jan 7 01:26:26 1995 Yukihiro Matsumoto (matz@dyna) * eval.c: 自己代入の不具合修正. * eval.c(masign): 多重代入が配列もリストもとれるようにした. * list.c: assocを2要素の配列からList(CONSペア)に変更した. Fri Jan 6 13:42:12 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: a[b]+=cやa.b+=cなどの自己代入形式で,aやbを2度評価しな くなった. * eval.c: iterator設定のバグフィックス. * list.c: Listクラスを新設. Thu Jan 5 13:55:00 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: SCOPEのメモリリークをなくした. * eval.c: built-inメソッドへの引数の引き渡し方を変更して,配列の生 成数を減らした. * re.c: match-dataを毎回生成することをやめた.`$~'をアクセスした時 にon-demandで生成する. * string.c etc: 不必要なmemmoveをmemcpyに置換. * parse.y: =~, !~は副作用があるのでコンパイル時に展開できない. Tue Jan 3 02:04:36 1995 Yukihiro Matsumoto (matz@dyna) * eval.c: rest引数のbug fix. * eval.c,gc.c: scopeをオブジェクトにした. * eval.c: envとscopeの扱いを変更した. Wed Dec 28 09:46:57 1994 Yukihiro Matsumoto (matz@ix-02) * parse.y: evalでローカル変数が追加された場合に対応した. * parse.y: 演算子を含むaliasのbug fix. Tue Dec 27 16:45:20 1994 Yukihiro Matsumoto (matz@ix-02) * parse.y: def A Bをalias A Bに変更. * eval.c: alias関係のbug修正.nodeをオブジェクト化した時にenbugし たようだ. * signal.c: システムコールの再定義を止めた. * io.c(select): write/exceptのフラグ設定にバグ. * Makefile.in: static link用オプションをMake変数として独立させた.
Diffstat (limited to 'class.c')
-rw-r--r--class.c45
1 files changed, 18 insertions, 27 deletions
diff --git a/class.c b/class.c
index fa18600..ba056a6 100644
--- a/class.c
+++ b/class.c
@@ -3,7 +3,7 @@
class.c -
$Author: matz $
- $Date: 1994/12/16 00:59:42 $
+ $Date: 1995/01/10 10:42:21 $
created at: Tue Aug 10 15:05:44 JST 1993
Copyright (C) 1994 Yukihiro Matsumoto
@@ -285,7 +285,7 @@ rb_define_attr(class, name, pub)
ID attr, attreq, attriv;
attr = rb_intern(name);
- buf = (char*)alloca(strlen(name) + 2);
+ buf = ALLOCA_N(char,strlen(name)+2);
sprintf(buf, "%s=", name);
attreq = rb_intern(buf);
sprintf(buf, "@%s", name);
@@ -311,41 +311,32 @@ rb_define_single_attr(obj, name, pub)
#include <ctype.h>
int
-rb_scan_args(args, fmt, va_alist)
- VALUE args;
+rb_scan_args(argc, argv, fmt, va_alist)
+ int argc;
+ VALUE *argv;
char *fmt;
va_dcl
{
- int n, i, len;
+ int n, i;
char *p = fmt;
VALUE *var;
va_list vargs;
- if (NIL_P(args)) {
- len = 0;
- args = ary_new();
- }
- else {
- Check_Type(args, T_ARRAY);
- len = RARRAY(args)->len;
- }
-
va_start(vargs);
if (*p == '*') {
var = va_arg(vargs, VALUE*);
- *var = args;
- return len;
+ *var = ary_new4(argc, argv);
+ return argc;
}
if (isdigit(*p)) {
n = *p - '0';
- if (n > len)
- Fail("Wrong number of arguments for %s",
- rb_id2name(the_env->last_func));
+ if (n > argc)
+ Fail("Wrong number of arguments (%d for %d)", argc, n);
for (i=0; i<n; i++) {
var = va_arg(vargs, VALUE*);
- *var = ary_entry(args, i);
+ *var = argv[i];
}
p++;
}
@@ -357,8 +348,8 @@ rb_scan_args(args, fmt, va_alist)
n = i + *p - '0';
for (; i<n; i++) {
var = va_arg(vargs, VALUE*);
- if (len > i) {
- *var = ary_entry(args, i);
+ if (argc > i) {
+ *var = argv[i];
}
else {
*var = Qnil;
@@ -369,16 +360,16 @@ rb_scan_args(args, fmt, va_alist)
if(*p == '*') {
var = va_arg(vargs, VALUE*);
- if (len > i) {
- *var = ary_new4(RARRAY(args)->len-i, RARRAY(args)->ptr+i);
+ if (argc > i) {
+ *var = ary_new4(argc-i, argv+i);
}
else {
*var = ary_new();
}
}
else if (*p == '\0') {
- if (len > i) {
- Fail("Wrong # of arguments(%d for %d)", len, i);
+ if (argc > i) {
+ Fail("Wrong # of arguments(%d for %d)", argc, i);
}
}
else {
@@ -386,7 +377,7 @@ rb_scan_args(args, fmt, va_alist)
}
va_end(vargs);
- return len;
+ return argc;
error:
Fail("bad scan arg format: %s", fmt);