mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
1.1d series
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1dev@298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1c193e5ffe
commit
5d71c8d89c
67 changed files with 7155 additions and 6731 deletions
72
ChangeLog
72
ChangeLog
|
@ -1,3 +1,21 @@
|
|||
Tue Sep 8 01:42:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* enum.c (Init_Enumerable): Enumerable#reverse removed.
|
||||
|
||||
* eval.c (call_trace_func): profiler support.
|
||||
|
||||
* eval.c (rb_call0): ditto.
|
||||
|
||||
Thu Sep 3 16:34:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* bignum.c (bigadd): proper sign combination.
|
||||
|
||||
* eval.c (dvar_asgn_push): modify calling block to create dvar,
|
||||
not insert it next to dummy dvar slot.
|
||||
|
||||
* eval.c (eval): save calling block in (thread local) global
|
||||
variable. no dummy dvar slot is generated by yield.
|
||||
|
||||
Thu Sep 3 14:08:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* version 1.1c4 released.
|
||||
|
@ -41,10 +59,25 @@ Fri Aug 28 12:25:33 1998 Hiroshi Igarashi <igarashi@ueda.info.waseda.ac.jp>
|
|||
|
||||
* ruby.c (ruby_require_modules): load modules in appearing order.
|
||||
|
||||
Fri Aug 28 01:57:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).
|
||||
|
||||
Thu Aug 27 12:54:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* version 1.1c3 released.
|
||||
|
||||
Wed Aug 26 14:40:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* eval.c (rb_eval): check whether ruby_class is properly set,
|
||||
before accessing it.
|
||||
|
||||
* eval.c (rb_obj_instance_eval): ruby_class should be Qnil for
|
||||
special objects like Fixnums.
|
||||
|
||||
* ext/tkutil/tkutil.c (Init_tkutil): removes calls to
|
||||
rb_yield_0(). used instance_eval() instead in the tk.rb.
|
||||
|
||||
Wed Aug 26 11:47:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* regex.c (re_match): pop non-greedy stack elements on success.
|
||||
|
@ -53,6 +86,10 @@ Wed Aug 26 09:25:35 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
|
|||
|
||||
* ruby.h: add #define environ for cygwin32.
|
||||
|
||||
Tue Aug 25 08:57:41 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* array.c (rb_ary_sort_bang): temporarily freeze sorting array.
|
||||
|
||||
Mon Aug 24 18:46:44 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
|
||||
|
||||
* dln.c (dln_find_1): path check was too strict.
|
||||
|
@ -61,6 +98,23 @@ Mon Aug 24 15:28:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
|
|||
|
||||
* parse.y (f_arglist): opt_nl added after f_args.
|
||||
|
||||
Fri Aug 21 01:06:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* ext/socket/socket.c: grand renaming on socket.c.
|
||||
|
||||
* ext/socket/socket.c (inet_aton): supply inet_aton for those
|
||||
systems that do not have it.
|
||||
|
||||
* ext/socket/socket.c (setipaddr): use inet_aton instead of
|
||||
inet_addr.
|
||||
|
||||
* ext/socket/socket.c (tcp_s_gethostbyname): new method: works
|
||||
like Socket.gethostbyname but returning array contains ip-addrs
|
||||
as octet decimal string format like "127.0.0.1".
|
||||
|
||||
* ext/socket/socket.c (mkhostent): return format changed to
|
||||
[host, aliases, type, ipaddr..] as documented.
|
||||
|
||||
Wed Aug 19 00:31:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* io.c (io_ctl): forgot to place TRAP_END at right position.
|
||||
|
@ -89,6 +143,24 @@ Fri Aug 7 17:44:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
|||
with snprintf to avoid buffer over-run. For systems which does
|
||||
dot provide snprintf, missing/snprintf.c added.
|
||||
|
||||
Wed Aug 5 00:47:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* re.c (rb_reg_search): recycle match object.
|
||||
|
||||
Mon Aug 3 09:17:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* string.c (rb_str_gsub_bang): do not allocate temporary string.
|
||||
|
||||
* string.c (rb_str_sub_bang): use inline replace.
|
||||
|
||||
Wed Jul 29 00:36:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* hash.c (hash_s_new): the default value can be specified.
|
||||
|
||||
* hash.c (hash_default): method to set the default value.
|
||||
|
||||
* hash.c (hash_aref): now returns the default value.
|
||||
|
||||
Tue Jul 28 13:03:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* array.c (ary_s_new): argument to specify initial value is added.
|
||||
|
|
|
@ -74,9 +74,9 @@ OBJS = array.o \
|
|||
all: miniruby$(binsuffix) rbconfig.rb
|
||||
@./miniruby$(binsuffix) -Xext extmk.rb @EXTSTATIC@
|
||||
|
||||
miniruby$(binsuffix): $(OBJS) $(MAINOBJ) dmyext.o
|
||||
miniruby$(binsuffix): $(LIBRUBY) $(MAINOBJ) dmyext.o
|
||||
@rm -f $@
|
||||
$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(OBJS) dmyext.o $(LIBS) -o $@
|
||||
$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) dmyext.o $(LIBRUBYARG) $(LIBS) -o $@
|
||||
|
||||
ruby$(binsuffix): $(LIBRUBY) $(MAINOBJ) $(EXTOBJS)
|
||||
@rm -f $@
|
||||
|
@ -213,7 +213,7 @@ random.o: random.c ruby.h config.h defines.h intern.h
|
|||
range.o: range.c ruby.h config.h defines.h intern.h
|
||||
re.o: re.c ruby.h config.h defines.h intern.h re.h regex.h
|
||||
regex.o: regex.c config.h regex.h util.h
|
||||
ruby.o: ruby.c ruby.h config.h defines.h intern.h dln.h
|
||||
ruby.o: ruby.c ruby.h config.h defines.h intern.h dln.h util.h
|
||||
signal.o: signal.c ruby.h config.h defines.h intern.h rubysig.h
|
||||
sprintf.o: sprintf.c ruby.h config.h defines.h intern.h
|
||||
st.o: st.c config.h st.h
|
||||
|
|
3
README
3
README
|
@ -15,7 +15,8 @@ Perl). It is simple, straight-forward, and extensible.
|
|||
+ Iterators and Closures
|
||||
+ Garbage Collection
|
||||
+ Dynamic Loading of Object files(on some architecture)
|
||||
+ Highly Portable(works on many UNIX machines)
|
||||
+ Highly Portable(works on many UNIX machines, and on DOS,
|
||||
Windows, Mac, BeOS etc.)
|
||||
|
||||
* How to get Ruby
|
||||
|
||||
|
|
60
README.EXT
60
README.EXT
|
@ -159,43 +159,43 @@ Ruby
|
|||
|
||||
String funtions
|
||||
|
||||
str_new(char *ptr, int len)
|
||||
rb_str_new(char *ptr, int len)
|
||||
|
||||
Creates a new Ruby string.
|
||||
|
||||
str_new2(char *ptr)
|
||||
rb_str_new2(char *ptr)
|
||||
|
||||
Creates a new Ruby string from C string. This is equivalent to
|
||||
str_new(ptr, strlen(ptr)).
|
||||
rb_str_new(ptr, strlen(ptr)).
|
||||
|
||||
str_cat(VALUE str, char *ptr, int len)
|
||||
rb_str_cat(VALUE str, char *ptr, int len)
|
||||
|
||||
Appends len bytes data from ptr to the Ruby string.
|
||||
|
||||
Array functions
|
||||
|
||||
ary_new()
|
||||
rb_ary_new()
|
||||
|
||||
Creates an array with no element.
|
||||
|
||||
ary_new2(int len)
|
||||
rb_ary_new2(int len)
|
||||
|
||||
Creates an array with no element, with allocating internal buffer
|
||||
for len elements.
|
||||
|
||||
ary_new3(int n, ...)
|
||||
rb_ary_new3(int n, ...)
|
||||
|
||||
Creates an n-elements array from arguments.
|
||||
|
||||
ary_new4(int n, VALUE *elts)
|
||||
rb_ary_new4(int n, VALUE *elts)
|
||||
|
||||
Creates an n-elements array from C array.
|
||||
|
||||
ary_push(VALUE ary, VALUE val)
|
||||
ary_pop(VALUE ary)
|
||||
ary_shift(VALUE ary)
|
||||
ary_unshift(VALUE ary, VALUE val)
|
||||
ary_entry(VALUE ary, int idx)
|
||||
rb_ary_push(VALUE ary, VALUE val)
|
||||
rb_ary_pop(VALUE ary)
|
||||
rb_ary_shift(VALUE ary)
|
||||
rb_ary_unshift(VALUE ary, VALUE val)
|
||||
rb_ary_entry(VALUE ary, int idx)
|
||||
|
||||
Array operations. The first argument to each functions must be an
|
||||
array. They may dump core if other types given.
|
||||
|
@ -376,10 +376,10 @@ C
|
|||
|
||||
Following Ruby constants can be referred from C.
|
||||
|
||||
TRUE
|
||||
FALSE
|
||||
Qtrue
|
||||
Qfalse
|
||||
|
||||
Boolean values. FALSE is false in the C also (i.e. 0).
|
||||
Boolean values. Qfalse is false in the C also (i.e. 0).
|
||||
|
||||
Qnil
|
||||
|
||||
|
@ -526,9 +526,9 @@ Ruby
|
|||
Init_dbm()
|
||||
{
|
||||
/* DBMクラスを定義する */
|
||||
cDBM = rb_define_class("DBM", cObject);
|
||||
cDBM = rb_define_class("DBM", rb_cObject);
|
||||
/* DBMはEnumerateモジュールをインクルードする */
|
||||
rb_include_module(cDBM, mEnumerable);
|
||||
rb_include_module(cDBM, rb_mEnumerable);
|
||||
|
||||
/* DBMクラスのクラスメソッドopen(): 引数はCの配列で受ける */
|
||||
rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
|
||||
|
@ -704,9 +704,9 @@ Ruby
|
|||
してくれます.extconf.rbを書き換えるなどしてMakefileの再生成
|
||||
が必要な時はまたRubyディレクトリでmakeしてください.
|
||||
|
||||
(9) debug
|
||||
(9) rb_debug
|
||||
|
||||
You may need to debug the module. The modules can be linked
|
||||
You may need to rb_debug the module. The modules can be linked
|
||||
statically by adding directory name in the ext/Setup file,
|
||||
so that you can inspect the module by the debugger.
|
||||
|
||||
|
@ -792,13 +792,13 @@ Ruby
|
|||
|
||||
const: nil object
|
||||
|
||||
TRUE
|
||||
Qtrue
|
||||
|
||||
const: TRUE object(default true value)
|
||||
const: Qtrue object(default true value)
|
||||
|
||||
FALSE
|
||||
Qfalse
|
||||
|
||||
const: FALSE object
|
||||
const: Qfalse object
|
||||
|
||||
** Cデータのカプセル化
|
||||
|
||||
|
@ -988,21 +988,21 @@ val
|
|||
|
||||
** 例外・エラー
|
||||
|
||||
void Warning(char *fmt, ...)
|
||||
void rb_warning(char *fmt, ...)
|
||||
|
||||
verbose時に標準エラー出力に警告情報を表示する.引数はprintf()と同じ.
|
||||
rb_verbose時に標準エラー出力に警告情報を表示する.引数はprintf()と同じ.
|
||||
|
||||
void Fail(char *fmt, ...)
|
||||
void rb_raise(rb_eRuntimeError, char *fmt, ...)
|
||||
|
||||
例外を発生させる.引数はprintf()と同じ.
|
||||
|
||||
void Fatal(char *fmt, ...)
|
||||
void rb_fatal(char *fmt, ...)
|
||||
|
||||
致命的例外を発生させる.通常の例外処理は行なわれず, インター
|
||||
プリタが終了する(ただしensureで指定されたコードは終了前に実
|
||||
行される).
|
||||
|
||||
void Bug(char *fmt, ...)
|
||||
void rb_bug(char *fmt, ...)
|
||||
|
||||
インタープリタなどプログラムのバグでしか発生するはずのない状
|
||||
況の時呼ぶ.インタープリタはコアダンプし直ちに終了する.例外
|
||||
|
@ -1034,7 +1034,7 @@ extconf.rb
|
|||
have_library(lib, func)
|
||||
|
||||
関数funcを定義しているライブラリlibの存在をチェックする.ラ
|
||||
イブラリが存在する時,TRUEを返す.
|
||||
イブラリが存在する時,Qtrueを返す.
|
||||
|
||||
have_func(func)
|
||||
|
||||
|
|
|
@ -171,43 +171,43 @@ Ruby
|
|||
|
||||
文字列に対する関数
|
||||
|
||||
str_new(char *ptr, int len)
|
||||
rb_str_new(char *ptr, int len)
|
||||
|
||||
新しいRubyの文字列を生成する.
|
||||
|
||||
str_new2(char *ptr)
|
||||
rb_str_new2(char *ptr)
|
||||
|
||||
Cの文字列からRubyの文字列を生成する.この関数の機能は
|
||||
str_new(ptr, strlen(ptr))と同等である.
|
||||
rb_str_new(ptr, strlen(ptr))と同等である.
|
||||
|
||||
str_cat(VALUE str, char *ptr, int len)
|
||||
rb_str_cat(VALUE str, char *ptr, int len)
|
||||
|
||||
Rubyの文字列strにlenバイトの文字列ptrを追加する.
|
||||
|
||||
配列に対する関数
|
||||
|
||||
ary_new()
|
||||
rb_ary_new()
|
||||
|
||||
要素が0の配列を生成する.
|
||||
|
||||
ary_new2(int len)
|
||||
rb_ary_new2(int len)
|
||||
|
||||
要素が0の配列を生成する.len要素分の領域をあらかじめ割り
|
||||
当てておく.
|
||||
|
||||
ary_new3(int n, ...)
|
||||
rb_ary_new3(int n, ...)
|
||||
|
||||
引数で指定したn要素を含む配列を生成する.
|
||||
|
||||
ary_new4(int n, VALUE *elts)
|
||||
rb_ary_new4(int n, VALUE *elts)
|
||||
|
||||
配列で与えたn要素の配列を生成する.
|
||||
|
||||
ary_push(VALUE ary, VALUE val)
|
||||
ary_pop(VALUE ary)
|
||||
ary_shift(VALUE ary)
|
||||
ary_unshift(VALUE ary, VALUE val)
|
||||
ary_entry(VALUE ary, int idx)
|
||||
rb_ary_push(VALUE ary, VALUE val)
|
||||
rb_ary_pop(VALUE ary)
|
||||
rb_ary_shift(VALUE ary)
|
||||
rb_ary_unshift(VALUE ary, VALUE val)
|
||||
rb_ary_entry(VALUE ary, int idx)
|
||||
|
||||
Arrayの同名のメソッドと同じ働きをする関数.第1引数は必ず
|
||||
配列でなければならない.
|
||||
|
@ -403,10 +403,10 @@ C
|
|||
|
||||
以下のRubyの定数はCのレベルから参照できる.
|
||||
|
||||
TRUE
|
||||
FALSE
|
||||
Qtrue
|
||||
Qfalse
|
||||
|
||||
真偽値.FALSEはC言語でも偽とみなされる(つまり0).
|
||||
真偽値.QfalseはC言語でも偽とみなされる(つまり0).
|
||||
|
||||
Qnil
|
||||
|
||||
|
@ -557,9 +557,9 @@ Ruby
|
|||
Init_dbm()
|
||||
{
|
||||
/* DBMクラスを定義する */
|
||||
cDBM = rb_define_class("DBM", cObject);
|
||||
cDBM = rb_define_class("DBM", rb_cObject);
|
||||
/* DBMはEnumerateモジュールをインクルードする */
|
||||
rb_include_module(cDBM, mEnumerable);
|
||||
rb_include_module(cDBM, rb_mEnumerable);
|
||||
|
||||
/* DBMクラスのクラスメソッドopen(): 引数はCの配列で受ける */
|
||||
rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
|
||||
|
@ -855,11 +855,11 @@ Ruby
|
|||
|
||||
定数: nilオブジェクト
|
||||
|
||||
TRUE
|
||||
Qtrue
|
||||
|
||||
定数: trueオブジェクト(真のデフォルト値)
|
||||
|
||||
FALSE
|
||||
Qfalse
|
||||
|
||||
定数: falseオブジェクト
|
||||
|
||||
|
@ -897,9 +897,9 @@ data
|
|||
NUM2INT(value)
|
||||
INT2NUM(i)
|
||||
NUM2DBL(value)
|
||||
float_new(f)
|
||||
rb_float_new(f)
|
||||
STR2CSTR(value)
|
||||
str_new2(s)
|
||||
rb_str_new2(s)
|
||||
|
||||
** クラス/モジュール定義
|
||||
|
||||
|
@ -1071,25 +1071,25 @@ val
|
|||
|
||||
** 例外・エラー
|
||||
|
||||
void Warning(char *fmt, ...)
|
||||
void rb_warning(char *fmt, ...)
|
||||
|
||||
verbose時に標準エラー出力に警告情報を表示する.引数はprintf()と同じ.
|
||||
rb_verbose時に標準エラー出力に警告情報を表示する.引数はprintf()と同じ.
|
||||
|
||||
void Fail(char *fmt, ...)
|
||||
void rb_raise(rb_eRuntimeError, char *fmt, ...)
|
||||
|
||||
RuntimeError例外を発生させる.引数はprintf()と同じ.
|
||||
|
||||
void Raise(VALUE exception, char *fmt, ...)
|
||||
void rb_raise(VALUE exception, char *fmt, ...)
|
||||
|
||||
exceptionで指定した例外を発生させる.fmt以下の引数はprintf()と同じ.
|
||||
|
||||
void Fatal(char *fmt, ...)
|
||||
void rb_fatal(char *fmt, ...)
|
||||
|
||||
致命的例外を発生させる.通常の例外処理は行なわれず, インター
|
||||
プリタが終了する(ただしensureで指定されたコードは終了前に実
|
||||
行される).
|
||||
|
||||
void Bug(char *fmt, ...)
|
||||
void rb_bug(char *fmt, ...)
|
||||
|
||||
インタープリタなどプログラムのバグでしか発生するはずのない状
|
||||
況の時呼ぶ.インタープリタはコアダンプし直ちに終了する.例外
|
||||
|
@ -1121,7 +1121,7 @@ extconf.rb
|
|||
have_library(lib, func)
|
||||
|
||||
関数funcを定義しているライブラリlibの存在をチェックする.ラ
|
||||
イブラリが存在する時,TRUEを返す.
|
||||
イブラリが存在する時,Qtrueを返す.
|
||||
|
||||
have_func(func)
|
||||
|
||||
|
|
32
README.jp
32
README.jp
|
@ -20,7 +20,8 @@ Ruby
|
|||
+ イテレータとクロージャ
|
||||
+ ガーベージコレクタ
|
||||
+ ダイナミックローディング (アーキテクチャによる)
|
||||
+ 移植性が高い.多くのUNIX上で動く
|
||||
+ 移植性が高い.多くのUNIX上で動くだけでなく,DOSやWindows,
|
||||
Mac,BeOSなどの上でも動く
|
||||
|
||||
|
||||
* 入手法
|
||||
|
@ -41,14 +42,14 @@ Ruby
|
|||
です.
|
||||
|
||||
|
||||
* メイリングリスト
|
||||
* メーリングリスト
|
||||
|
||||
Rubyに関わる話題のためのメイリングリストを開設しました.ア
|
||||
Rubyに関わる話題のためのメーリングリストを開設しました.ア
|
||||
ドレスは
|
||||
|
||||
ruby-list@netlab.co.jp
|
||||
|
||||
です.このアドレスにメイルを送れば,自動的に登録されます.
|
||||
です.このアドレスにメールを送れば,自動的に登録されます.
|
||||
|
||||
|
||||
* コンパイル・インストール
|
||||
|
@ -122,34 +123,37 @@ Licence)
|
|||
由に変更できます.
|
||||
|
||||
(a) ネットニューズにポストしたり,作者に変更を送付する
|
||||
などの方法で,変更を公開する
|
||||
などの方法で,変更を公開する.
|
||||
|
||||
(b) 変更したRubyを自分の所属する組織内部だけで使う
|
||||
(b) 変更したRubyを自分の所属する組織内部だけで使う.
|
||||
|
||||
(c) 変更点を明示したうえ,ソフトウェアの名前を変更する.
|
||||
そのソフトウェアを配布する時にはもとのRubyも同時に
|
||||
配布する
|
||||
そのソフトウェアを配布する時には変更前のRubyも同時
|
||||
に配布する.または変更前のRubyのソースの入手法を明
|
||||
示する.
|
||||
|
||||
(d) その他の変更条件を作者と合意する
|
||||
(d) その他の変更条件を作者と合意する.
|
||||
|
||||
3. 以下の条件のいずれかを満たす時にRubyをオブジェクトコー
|
||||
ドや実行形式でも配布できます.
|
||||
|
||||
(a) バイナリを受け取った人がソースを入手できるようにソー
|
||||
スの入手法を明示する
|
||||
(a) バイナリを受け取った人がソースを入手できるように,
|
||||
ソースの入手法を明示する.
|
||||
|
||||
(b) 機械可読なソースコードを添付する
|
||||
(b) 機械可読なソースコードを添付する.
|
||||
|
||||
(c) 変更を行ったバイナリは名前を変更したうえ,ソースの
|
||||
入手法を明示する
|
||||
入手法を明示する.
|
||||
|
||||
(d) その他の配布条件を作者と合意する
|
||||
(d) その他の配布条件を作者と合意する.
|
||||
|
||||
4. 他のプログラムへの引用はいかなる目的であれ自由です.た
|
||||
だし,Rubyに含まれる他の作者によるコードは,それぞれの
|
||||
作者の意向による制限が加えられます.具体的にはgc.c(一部),
|
||||
util.c(一部),st.[ch],regex.[ch], fnmatch.[ch], glob.c
|
||||
および./missingディレクトリ下のファイル群が該当します.
|
||||
それぞれの配布条件などに付いては各ファイルを参照してく
|
||||
ださい.
|
||||
|
||||
5. Rubyへの入力となるスクリプトおよび,Rubyからの出力の権
|
||||
利はRubyの作者ではなく,それぞれの入出力を生成した人に
|
||||
|
|
1
ToDo
1
ToDo
|
@ -1,4 +1,3 @@
|
|||
* remove Enumerable#reverse at 1.2
|
||||
* non-blocking open/write for thread
|
||||
* package or access control for global variables
|
||||
* format
|
||||
|
|
336
bignum.c
336
bignum.c
|
@ -12,7 +12,7 @@
|
|||
#include <math.h>
|
||||
#include <ctype.h>
|
||||
|
||||
VALUE cBignum;
|
||||
VALUE rb_cBignum;
|
||||
typedef unsigned short USHORT;
|
||||
|
||||
#define BDIGITS(x) RBIGNUM(x)->digits
|
||||
|
@ -38,10 +38,10 @@ bignew_1(klass, len, sign)
|
|||
return (VALUE)big;
|
||||
}
|
||||
|
||||
#define bignew(len,sign) bignew_1(cBignum,len,sign)
|
||||
#define bignew(len,sign) bignew_1(rb_cBignum,len,sign)
|
||||
|
||||
VALUE
|
||||
big_clone(x)
|
||||
rb_big_clone(x)
|
||||
VALUE x;
|
||||
{
|
||||
VALUE z = bignew_1(CLASS_OF(x), RBIGNUM(x)->len, RBIGNUM(x)->sign);
|
||||
|
@ -51,7 +51,7 @@ big_clone(x)
|
|||
}
|
||||
|
||||
void
|
||||
big_2comp(x) /* get 2's complement */
|
||||
rb_big_2comp(x) /* get 2's complement */
|
||||
VALUE x;
|
||||
{
|
||||
unsigned int i = RBIGNUM(x)->len;
|
||||
|
@ -101,14 +101,14 @@ bignorm(x)
|
|||
}
|
||||
|
||||
VALUE
|
||||
big_norm(x)
|
||||
rb_big_norm(x)
|
||||
VALUE x;
|
||||
{
|
||||
return bignorm(RBIGNUM(x));
|
||||
return bignorm(x);
|
||||
}
|
||||
|
||||
VALUE
|
||||
uint2big(n)
|
||||
rb_uint2big(n)
|
||||
unsigned long n;
|
||||
{
|
||||
unsigned int i = 0;
|
||||
|
@ -130,7 +130,7 @@ uint2big(n)
|
|||
}
|
||||
|
||||
VALUE
|
||||
int2big(n)
|
||||
rb_int2big(n)
|
||||
long n;
|
||||
{
|
||||
long neg = 0;
|
||||
|
@ -140,7 +140,7 @@ int2big(n)
|
|||
n = -n;
|
||||
neg = 1;
|
||||
}
|
||||
big = uint2big(n);
|
||||
big = rb_uint2big(n);
|
||||
if (neg) {
|
||||
RBIGNUM(big)->sign = 0;
|
||||
}
|
||||
|
@ -148,23 +148,23 @@ int2big(n)
|
|||
}
|
||||
|
||||
VALUE
|
||||
uint2inum(n)
|
||||
rb_uint2inum(n)
|
||||
unsigned long n;
|
||||
{
|
||||
if (POSFIXABLE(n)) return INT2FIX(n);
|
||||
return uint2big(n);
|
||||
return rb_uint2big(n);
|
||||
}
|
||||
|
||||
VALUE
|
||||
int2inum(n)
|
||||
rb_int2inum(n)
|
||||
long n;
|
||||
{
|
||||
if (FIXABLE(n)) return INT2FIX(n);
|
||||
return int2big(n);
|
||||
return rb_int2big(n);
|
||||
}
|
||||
|
||||
VALUE
|
||||
str2inum(str, base)
|
||||
rb_str2inum(str, base)
|
||||
char *str;
|
||||
int base;
|
||||
{
|
||||
|
@ -222,7 +222,7 @@ str2inum(str, base)
|
|||
}
|
||||
}
|
||||
else {
|
||||
VALUE big = uint2big(val);
|
||||
VALUE big = rb_uint2big(val);
|
||||
RBIGNUM(big)->sign = sign;
|
||||
return big;
|
||||
}
|
||||
|
@ -271,7 +271,7 @@ str2inum(str, base)
|
|||
|
||||
static char hexmap[] = "0123456789abcdef";
|
||||
VALUE
|
||||
big2str(x, base)
|
||||
rb_big2str(x, base)
|
||||
VALUE x;
|
||||
int base;
|
||||
{
|
||||
|
@ -282,10 +282,10 @@ big2str(x, base)
|
|||
char *s, c;
|
||||
|
||||
if (FIXNUM_P(x)) {
|
||||
return fix2str(x, base);
|
||||
return rb_fix2str(x, base);
|
||||
}
|
||||
i = RBIGNUM(x)->len;
|
||||
if (i == 0) return str_new2("0");
|
||||
if (i == 0) return rb_str_new2("0");
|
||||
if (base == 10) {
|
||||
j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i*241L)/800+2;
|
||||
hbase = 10000;
|
||||
|
@ -305,12 +305,12 @@ big2str(x, base)
|
|||
else {
|
||||
j = 0;
|
||||
hbase = 0;
|
||||
Fail("bignum cannot treat base %d", base);
|
||||
rb_raise(rb_eArgError, "bignum cannot treat base %d", base);
|
||||
}
|
||||
|
||||
t = big_clone(x);
|
||||
t = rb_big_clone(x);
|
||||
ds = BDIGITS(t);
|
||||
ss = str_new(0, j);
|
||||
ss = rb_str_new(0, j);
|
||||
s = RSTRING(ss)->ptr;
|
||||
|
||||
s[0] = RBIGNUM(x)->sign ? '+' : '-';
|
||||
|
@ -340,14 +340,14 @@ big2str(x, base)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_to_s(x)
|
||||
rb_big_to_s(x)
|
||||
VALUE x;
|
||||
{
|
||||
return big2str(x, 10);
|
||||
return rb_big2str(x, 10);
|
||||
}
|
||||
|
||||
unsigned long
|
||||
big2ulong(x)
|
||||
rb_big2ulong(x)
|
||||
VALUE x;
|
||||
{
|
||||
unsigned long num;
|
||||
|
@ -355,7 +355,7 @@ big2ulong(x)
|
|||
USHORT *ds;
|
||||
|
||||
if (len > sizeof(long)/sizeof(USHORT))
|
||||
ArgError("bignum too big to convert into `uint'");
|
||||
rb_raise(rb_eArgError, "bignum too big to convert into `uint'");
|
||||
ds = BDIGITS(x);
|
||||
num = 0;
|
||||
while (len--) {
|
||||
|
@ -366,27 +366,27 @@ big2ulong(x)
|
|||
}
|
||||
|
||||
long
|
||||
big2long(x)
|
||||
rb_big2long(x)
|
||||
VALUE x;
|
||||
{
|
||||
unsigned long num = big2ulong(x);
|
||||
unsigned long num = rb_big2ulong(x);
|
||||
|
||||
if ((long)num < 0) {
|
||||
ArgError("bignum too big to convert into `int'");
|
||||
rb_raise(rb_eArgError, "bignum too big to convert into `int'");
|
||||
}
|
||||
if (!RBIGNUM(x)->sign) return -num;
|
||||
return num;
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_to_i(x)
|
||||
static VALUE
|
||||
rb_big_to_i(x)
|
||||
VALUE x;
|
||||
{
|
||||
return bignorm(x);
|
||||
}
|
||||
|
||||
VALUE
|
||||
dbl2big(d)
|
||||
rb_dbl2big(d)
|
||||
double d;
|
||||
{
|
||||
unsigned int i = 0;
|
||||
|
@ -412,7 +412,7 @@ dbl2big(d)
|
|||
}
|
||||
|
||||
double
|
||||
big2dbl(x)
|
||||
rb_big2dbl(x)
|
||||
VALUE x;
|
||||
{
|
||||
double d = 0.0;
|
||||
|
@ -426,29 +426,29 @@ big2dbl(x)
|
|||
return d;
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_to_f(x)
|
||||
static VALUE
|
||||
rb_big_to_f(x)
|
||||
VALUE x;
|
||||
{
|
||||
return float_new(big2dbl(x));
|
||||
return rb_float_new(rb_big2dbl(x));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_cmp(x, y)
|
||||
rb_big_cmp(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
int xlen = RBIGNUM(x)->len;
|
||||
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
break;
|
||||
|
||||
case T_BIGNUM:
|
||||
break;
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
|
||||
if (RBIGNUM(x)->sign > RBIGNUM(y)->sign) return INT2FIX(1);
|
||||
|
@ -466,18 +466,18 @@ big_cmp(x, y)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_eq(x, y)
|
||||
rb_big_eq(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
if (big_cmp(x, y) == INT2FIX(0)) return TRUE;
|
||||
return FALSE;
|
||||
if (rb_big_cmp(x, y) == INT2FIX(0)) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_uminus(x)
|
||||
rb_big_uminus(x)
|
||||
VALUE x;
|
||||
{
|
||||
VALUE z = big_clone(x);
|
||||
VALUE z = rb_big_clone(x);
|
||||
|
||||
RBIGNUM(z)->sign = !RBIGNUM(x)->sign;
|
||||
|
||||
|
@ -485,16 +485,16 @@ big_uminus(x)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_neg(x)
|
||||
rb_big_neg(x)
|
||||
VALUE x;
|
||||
{
|
||||
VALUE z = big_clone(x);
|
||||
VALUE z = rb_big_clone(x);
|
||||
unsigned int i = RBIGNUM(x)->len;
|
||||
USHORT *ds = BDIGITS(z);
|
||||
|
||||
if (!RBIGNUM(x)->sign) big_2comp(z);
|
||||
if (!RBIGNUM(x)->sign) rb_big_2comp(z);
|
||||
while (i--) ds[i] = ~ds[i];
|
||||
if (RBIGNUM(x)->sign) big_2comp(z);
|
||||
if (RBIGNUM(x)->sign) rb_big_2comp(z);
|
||||
RBIGNUM(z)->sign = !RBIGNUM(z)->sign;
|
||||
|
||||
return bignorm(z);
|
||||
|
@ -557,22 +557,11 @@ bigadd(x, y, sign)
|
|||
long num;
|
||||
unsigned int i, len;
|
||||
|
||||
if (RBIGNUM(x)->sign == (RBIGNUM(y)->sign ^ sign)) {
|
||||
if (RBIGNUM(y)->sign == sign) return bigsub(y, x);
|
||||
sign = (sign == RBIGNUM(y)->sign);
|
||||
if (RBIGNUM(x)->sign != sign) {
|
||||
if (sign) return bigsub(y, x);
|
||||
return bigsub(x, y);
|
||||
}
|
||||
else if (sign == 0) {
|
||||
/* x - y */
|
||||
if ((RBIGNUM(x)->sign == 0) && (RBIGNUM(y)->sign == 1)) {
|
||||
/* x is negative and y is positive. */
|
||||
/* return -(abs(x) + y) */
|
||||
VALUE ret;
|
||||
RBIGNUM(x)->sign = 1; /* x = abs(x) */
|
||||
ret = bigadd(x, y, 1); /* ret = x + y (recursive call) */
|
||||
RBIGNUM(ret)->sign = 0; /* ret = -ret */
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
|
||||
len = RBIGNUM(x)->len + 1;
|
||||
|
@ -581,7 +570,7 @@ bigadd(x, y, sign)
|
|||
else {
|
||||
len = RBIGNUM(y)->len + 1;
|
||||
}
|
||||
z = bignew(len, sign==RBIGNUM(y)->sign);
|
||||
z = bignew(len, sign);
|
||||
|
||||
len = RBIGNUM(x)->len;
|
||||
for (i = 0, num = 0; i < len; i++) {
|
||||
|
@ -605,45 +594,45 @@ bigadd(x, y, sign)
|
|||
}
|
||||
|
||||
VALUE
|
||||
big_plus(x, y)
|
||||
rb_big_plus(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
/* fall through */
|
||||
case T_BIGNUM:
|
||||
return bigadd(x, y, 1);
|
||||
|
||||
case T_FLOAT:
|
||||
return float_new(big2dbl(x) + RFLOAT(y)->value);
|
||||
return rb_float_new(rb_big2dbl(x) + RFLOAT(y)->value);
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_minus(x, y)
|
||||
rb_big_minus(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
/* fall through */
|
||||
case T_BIGNUM:
|
||||
return bigadd(x, y, 0);
|
||||
|
||||
case T_FLOAT:
|
||||
return float_new(big2dbl(x) - RFLOAT(y)->value);
|
||||
return rb_float_new(rb_big2dbl(x) - RFLOAT(y)->value);
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_mul(x, y)
|
||||
rb_big_mul(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
unsigned int i = 0, j;
|
||||
|
@ -651,20 +640,20 @@ big_mul(x, y)
|
|||
VALUE z;
|
||||
USHORT *zds;
|
||||
|
||||
if (FIXNUM_P(x)) x = int2big(FIX2LONG(x));
|
||||
if (FIXNUM_P(x)) x = rb_int2big(FIX2LONG(x));
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
break;
|
||||
|
||||
case T_BIGNUM:
|
||||
break;
|
||||
|
||||
case T_FLOAT:
|
||||
return float_new(big2dbl(x) * RFLOAT(y)->value);
|
||||
return rb_float_new(rb_big2dbl(x) * RFLOAT(y)->value);
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
|
||||
j = RBIGNUM(x)->len + RBIGNUM(y)->len + 1;
|
||||
|
@ -703,7 +692,7 @@ bigdivmod(x, y, div, mod, modulo)
|
|||
USHORT dd, q;
|
||||
|
||||
yds = BDIGITS(y);
|
||||
if (ny == 0 && yds[0] == 0) num_zerodiv();
|
||||
if (ny == 0 && yds[0] == 0) rb_num_zerodiv();
|
||||
if (nx < ny || nx == ny && BDIGITS(x)[nx - 1] < BDIGITS(y)[ny - 1]) {
|
||||
if (div) *div = INT2FIX(0);
|
||||
if (mod) *mod = bignorm(x);
|
||||
|
@ -712,7 +701,7 @@ bigdivmod(x, y, div, mod, modulo)
|
|||
xds = BDIGITS(x);
|
||||
if (ny == 1) {
|
||||
dd = yds[0];
|
||||
z = big_clone(x);
|
||||
z = rb_big_clone(x);
|
||||
zds = BDIGITS(z);
|
||||
t2 = 0; i = nx;
|
||||
while (i--) {
|
||||
|
@ -732,7 +721,7 @@ bigdivmod(x, y, div, mod, modulo)
|
|||
if (nx==ny) zds[nx+1] = 0;
|
||||
while (!yds[ny-1]) ny--;
|
||||
if ((dd = BIGRAD/(int)(yds[ny-1]+1)) != 1) {
|
||||
yy = big_clone(y);
|
||||
yy = rb_big_clone(y);
|
||||
tds = BDIGITS(yy);
|
||||
j = 0;
|
||||
num = 0;
|
||||
|
@ -786,7 +775,7 @@ bigdivmod(x, y, div, mod, modulo)
|
|||
zds[j] = q;
|
||||
} while (--j >= ny);
|
||||
if (div) { /* move quotient down in z */
|
||||
*div = big_clone(z);
|
||||
*div = rb_big_clone(z);
|
||||
zds = BDIGITS(*div);
|
||||
j = (nx==ny ? nx+2 : nx+1) - ny;
|
||||
for (i = 0;i < j;i++) zds[i] = zds[i+ny];
|
||||
|
@ -794,7 +783,7 @@ bigdivmod(x, y, div, mod, modulo)
|
|||
*div = bignorm(*div);
|
||||
}
|
||||
if (mod) { /* just normalize remainder */
|
||||
*mod = big_clone(z);
|
||||
*mod = rb_big_clone(z);
|
||||
if (dd) {
|
||||
zds = BDIGITS(*mod);
|
||||
t2 = 0; i = ny;
|
||||
|
@ -820,24 +809,24 @@ bigdivmod(x, y, div, mod, modulo)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_div(x, y)
|
||||
rb_big_div(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
VALUE z;
|
||||
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
break;
|
||||
|
||||
case T_BIGNUM:
|
||||
break;
|
||||
|
||||
case T_FLOAT:
|
||||
return float_new(big2dbl(x) / RFLOAT(y)->value);
|
||||
return rb_float_new(rb_big2dbl(x) / RFLOAT(y)->value);
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
bigdivmod(x, y, &z, 0, 0);
|
||||
|
||||
|
@ -846,7 +835,7 @@ big_div(x, y)
|
|||
|
||||
|
||||
static VALUE
|
||||
big_modulo(x, y, modulo)
|
||||
rb_big_modulo(x, y, modulo)
|
||||
VALUE x, y;
|
||||
int modulo;
|
||||
{
|
||||
|
@ -854,18 +843,18 @@ big_modulo(x, y, modulo)
|
|||
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
break;
|
||||
|
||||
case T_BIGNUM:
|
||||
break;
|
||||
|
||||
case T_FLOAT:
|
||||
y = dbl2big(RFLOAT(y)->value);
|
||||
y = rb_dbl2big(RFLOAT(y)->value);
|
||||
break;
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
bigdivmod(x, y, 0, &z, modulo);
|
||||
|
||||
|
@ -873,47 +862,47 @@ big_modulo(x, y, modulo)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_mod(x, y)
|
||||
rb_big_mod(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
return big_modulo(x, y, 1);
|
||||
return rb_big_modulo(x, y, 1);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_remainder(x, y)
|
||||
rb_big_remainder(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
return big_modulo(x, y, 0);
|
||||
return rb_big_modulo(x, y, 0);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_divmod(x, y)
|
||||
rb_big_divmod(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
VALUE div, mod;
|
||||
|
||||
switch (TYPE(y)) {
|
||||
case T_FIXNUM:
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
break;
|
||||
|
||||
case T_FLOAT:
|
||||
y = dbl2big(RFLOAT(y)->value);
|
||||
y = rb_dbl2big(RFLOAT(y)->value);
|
||||
break;
|
||||
|
||||
case T_BIGNUM:
|
||||
break;
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
bigdivmod(x, y, &div, &mod, 1);
|
||||
|
||||
return assoc_new(div, mod);;
|
||||
return rb_assoc_new(div, mod);;
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_pow(x, y)
|
||||
rb_big_pow(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
double d;
|
||||
|
@ -926,8 +915,8 @@ big_pow(x, y)
|
|||
break;
|
||||
|
||||
case T_BIGNUM:
|
||||
Warn("in a**b, b may be too big");
|
||||
d = big2dbl(y);
|
||||
rb_warn("in a**b, b may be too big");
|
||||
d = rb_big2dbl(y);
|
||||
break;
|
||||
|
||||
case T_FIXNUM:
|
||||
|
@ -941,9 +930,9 @@ big_pow(x, y)
|
|||
if (yy == 0) break;
|
||||
while (yy % 2 == 0) {
|
||||
yy = yy / 2;
|
||||
x = big_mul(x, x);
|
||||
x = rb_big_mul(x, x);
|
||||
}
|
||||
z = big_mul(z, x);
|
||||
z = rb_big_mul(z, x);
|
||||
}
|
||||
return z;
|
||||
}
|
||||
|
@ -951,13 +940,13 @@ big_pow(x, y)
|
|||
break;
|
||||
|
||||
default:
|
||||
return num_coerce_bin(x, y);
|
||||
return rb_num_coerce_bin(x, y);
|
||||
}
|
||||
return float_new(pow(big2dbl(x), d));
|
||||
return rb_float_new(pow(rb_big2dbl(x), d));
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_and(x, y)
|
||||
rb_big_and(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
VALUE z;
|
||||
|
@ -966,19 +955,19 @@ big_and(x, y)
|
|||
char sign;
|
||||
|
||||
if (FIXNUM_P(y)) {
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
}
|
||||
else {
|
||||
Check_Type(y, T_BIGNUM);
|
||||
}
|
||||
|
||||
if (!RBIGNUM(y)->sign) {
|
||||
y = big_clone(y);
|
||||
big_2comp(y);
|
||||
y = rb_big_clone(y);
|
||||
rb_big_2comp(y);
|
||||
}
|
||||
if (!RBIGNUM(x)->sign) {
|
||||
x = big_clone(x);
|
||||
big_2comp(x);
|
||||
x = rb_big_clone(x);
|
||||
rb_big_2comp(x);
|
||||
}
|
||||
if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
|
||||
l1 = RBIGNUM(y)->len;
|
||||
|
@ -1003,12 +992,12 @@ big_and(x, y)
|
|||
for (; i<l2; i++) {
|
||||
zds[i] = sign?0:ds2[i];
|
||||
}
|
||||
if (!RBIGNUM(z)->sign) big_2comp(z);
|
||||
if (!RBIGNUM(z)->sign) rb_big_2comp(z);
|
||||
return bignorm(z);
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_or(x, y)
|
||||
rb_big_or(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
VALUE z;
|
||||
|
@ -1017,19 +1006,19 @@ big_or(x, y)
|
|||
char sign;
|
||||
|
||||
if (FIXNUM_P(y)) {
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
}
|
||||
else {
|
||||
Check_Type(y, T_BIGNUM);
|
||||
}
|
||||
|
||||
if (!RBIGNUM(y)->sign) {
|
||||
y = big_clone(y);
|
||||
big_2comp(y);
|
||||
y = rb_big_clone(y);
|
||||
rb_big_2comp(y);
|
||||
}
|
||||
if (!RBIGNUM(x)->sign) {
|
||||
x = big_clone(x);
|
||||
big_2comp(x);
|
||||
x = rb_big_clone(x);
|
||||
rb_big_2comp(x);
|
||||
}
|
||||
if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
|
||||
l1 = RBIGNUM(y)->len;
|
||||
|
@ -1054,13 +1043,13 @@ big_or(x, y)
|
|||
for (; i<l2; i++) {
|
||||
zds[i] = sign?ds2[i]:(BIGRAD-1);
|
||||
}
|
||||
if (!RBIGNUM(z)->sign) big_2comp(z);
|
||||
if (!RBIGNUM(z)->sign) rb_big_2comp(z);
|
||||
|
||||
return bignorm(z);
|
||||
}
|
||||
|
||||
VALUE
|
||||
big_xor(x, y)
|
||||
rb_big_xor(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
VALUE z;
|
||||
|
@ -1069,19 +1058,19 @@ big_xor(x, y)
|
|||
char sign;
|
||||
|
||||
if (FIXNUM_P(y)) {
|
||||
y = int2big(FIX2LONG(y));
|
||||
y = rb_int2big(FIX2LONG(y));
|
||||
}
|
||||
else {
|
||||
Check_Type(y, T_BIGNUM);
|
||||
}
|
||||
|
||||
if (!RBIGNUM(y)->sign) {
|
||||
y = big_clone(y);
|
||||
big_2comp(y);
|
||||
y = rb_big_clone(y);
|
||||
rb_big_2comp(y);
|
||||
}
|
||||
if (!RBIGNUM(x)->sign) {
|
||||
x = big_clone(x);
|
||||
big_2comp(x);
|
||||
x = rb_big_clone(x);
|
||||
rb_big_2comp(x);
|
||||
}
|
||||
if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
|
||||
l1 = RBIGNUM(y)->len;
|
||||
|
@ -1108,15 +1097,15 @@ big_xor(x, y)
|
|||
for (; i<l2; i++) {
|
||||
zds[i] = sign?ds2[i]:~ds2[i];
|
||||
}
|
||||
if (!RBIGNUM(z)->sign) big_2comp(z);
|
||||
if (!RBIGNUM(z)->sign) rb_big_2comp(z);
|
||||
|
||||
return bignorm(z);
|
||||
}
|
||||
|
||||
static VALUE big_rshift _((VALUE,VALUE));
|
||||
static VALUE rb_big_rshift _((VALUE,VALUE));
|
||||
|
||||
VALUE
|
||||
big_lshift(x, y)
|
||||
rb_big_lshift(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
USHORT *xds, *zds;
|
||||
|
@ -1127,7 +1116,7 @@ big_lshift(x, y)
|
|||
unsigned long num = 0;
|
||||
unsigned int len, i;
|
||||
|
||||
if (shift < 0) return big_rshift(x, INT2FIX(-shift));
|
||||
if (shift < 0) return rb_big_rshift(x, INT2FIX(-shift));
|
||||
xds = BDIGITS(x);
|
||||
len = RBIGNUM(x)->len;
|
||||
z = bignew(len+s1+1, RBIGNUM(x)->sign);
|
||||
|
@ -1145,7 +1134,7 @@ big_lshift(x, y)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_rshift(x, y)
|
||||
rb_big_rshift(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
USHORT *xds, *zds;
|
||||
|
@ -1157,7 +1146,7 @@ big_rshift(x, y)
|
|||
unsigned int i = RBIGNUM(x)->len;
|
||||
unsigned int j;
|
||||
|
||||
if (shift < 0) return big_lshift(x, INT2FIX(-shift));
|
||||
if (shift < 0) return rb_big_lshift(x, INT2FIX(-shift));
|
||||
if (s1 > RBIGNUM(x)->len) {
|
||||
if (RBIGNUM(x)->sign)
|
||||
return INT2FIX(0);
|
||||
|
@ -1177,7 +1166,7 @@ big_rshift(x, y)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_aref(x, y)
|
||||
rb_big_aref(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
USHORT *xds;
|
||||
|
@ -1190,8 +1179,8 @@ big_aref(x, y)
|
|||
|
||||
if (!RBIGNUM(x)->sign) {
|
||||
if (s1 >= RBIGNUM(x)->len) return INT2FIX(1);
|
||||
x = big_clone(x);
|
||||
big_2comp(x);
|
||||
x = rb_big_clone(x);
|
||||
rb_big_2comp(x);
|
||||
}
|
||||
else {
|
||||
if (s1 >= RBIGNUM(x)->len) return INT2FIX(0);
|
||||
|
@ -1203,7 +1192,7 @@ big_aref(x, y)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_hash(x)
|
||||
rb_big_hash(x)
|
||||
VALUE x;
|
||||
{
|
||||
int i, len, key;
|
||||
|
@ -1217,24 +1206,25 @@ big_hash(x)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
big_coerce(x, y)
|
||||
rb_big_coerce(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
if (FIXNUM_P(y)) {
|
||||
return assoc_new(int2big(FIX2LONG(y)), x);
|
||||
return rb_assoc_new(rb_int2big(FIX2LONG(y)), x);
|
||||
}
|
||||
else {
|
||||
TypeError("can't coerce %s to Bignum", rb_class2name(CLASS_OF(y)));
|
||||
rb_raise(rb_eTypeError, "can't coerce %s to Bignum",
|
||||
rb_class2name(CLASS_OF(y)));
|
||||
}
|
||||
/* not reached */
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_abs(x)
|
||||
rb_big_abs(x)
|
||||
VALUE x;
|
||||
{
|
||||
if (!RBIGNUM(x)->sign) {
|
||||
x = big_clone(x);
|
||||
x = rb_big_clone(x);
|
||||
RBIGNUM(x)->sign = 1;
|
||||
}
|
||||
return x;
|
||||
|
@ -1245,7 +1235,7 @@ big_abs(x)
|
|||
*/
|
||||
|
||||
VALUE
|
||||
big_rand(max)
|
||||
rb_big_rand(max)
|
||||
VALUE max;
|
||||
{
|
||||
struct RBignum *v;
|
||||
|
@ -1261,56 +1251,56 @@ big_rand(max)
|
|||
#endif
|
||||
}
|
||||
|
||||
return big_mod(v, max);
|
||||
return rb_big_mod((VALUE)v, max);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_size(big)
|
||||
rb_big_size(big)
|
||||
VALUE big;
|
||||
{
|
||||
return INT2FIX(RBIGNUM(big)->len*sizeof(USHORT));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
big_zero_p(big)
|
||||
rb_big_zero_p(big)
|
||||
VALUE big;
|
||||
{
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
void
|
||||
Init_Bignum()
|
||||
{
|
||||
cBignum = rb_define_class("Bignum", cInteger);
|
||||
rb_cBignum = rb_define_class("Bignum", rb_cInteger);
|
||||
|
||||
rb_undef_method(CLASS_OF(cBignum), "new");
|
||||
rb_undef_method(CLASS_OF(rb_cBignum), "new");
|
||||
|
||||
rb_define_method(cBignum, "to_s", big_to_s, 0);
|
||||
rb_define_method(cBignum, "coerce", big_coerce, 1);
|
||||
rb_define_method(cBignum, "-@", big_uminus, 0);
|
||||
rb_define_method(cBignum, "+", big_plus, 1);
|
||||
rb_define_method(cBignum, "-", big_minus, 1);
|
||||
rb_define_method(cBignum, "*", big_mul, 1);
|
||||
rb_define_method(cBignum, "/", big_div, 1);
|
||||
rb_define_method(cBignum, "%", big_mod, 1);
|
||||
rb_define_method(cBignum, "divmod", big_divmod, 1);
|
||||
rb_define_method(cBignum, "remainder", big_remainder, 1);
|
||||
rb_define_method(cBignum, "**", big_pow, 1);
|
||||
rb_define_method(cBignum, "&", big_and, 1);
|
||||
rb_define_method(cBignum, "|", big_or, 1);
|
||||
rb_define_method(cBignum, "^", big_xor, 1);
|
||||
rb_define_method(cBignum, "~", big_neg, 0);
|
||||
rb_define_method(cBignum, "<<", big_lshift, 1);
|
||||
rb_define_method(cBignum, ">>", big_rshift, 1);
|
||||
rb_define_method(cBignum, "[]", big_aref, 1);
|
||||
rb_define_method(rb_cBignum, "to_s", rb_big_to_s, 0);
|
||||
rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1);
|
||||
rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0);
|
||||
rb_define_method(rb_cBignum, "+", rb_big_plus, 1);
|
||||
rb_define_method(rb_cBignum, "-", rb_big_minus, 1);
|
||||
rb_define_method(rb_cBignum, "*", rb_big_mul, 1);
|
||||
rb_define_method(rb_cBignum, "/", rb_big_div, 1);
|
||||
rb_define_method(rb_cBignum, "%", rb_big_mod, 1);
|
||||
rb_define_method(rb_cBignum, "divmod", rb_big_divmod, 1);
|
||||
rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);
|
||||
rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
|
||||
rb_define_method(rb_cBignum, "&", rb_big_and, 1);
|
||||
rb_define_method(rb_cBignum, "|", rb_big_or, 1);
|
||||
rb_define_method(rb_cBignum, "^", rb_big_xor, 1);
|
||||
rb_define_method(rb_cBignum, "~", rb_big_neg, 0);
|
||||
rb_define_method(rb_cBignum, "<<", rb_big_lshift, 1);
|
||||
rb_define_method(rb_cBignum, ">>", rb_big_rshift, 1);
|
||||
rb_define_method(rb_cBignum, "[]", rb_big_aref, 1);
|
||||
|
||||
rb_define_method(cBignum, "<=>", big_cmp, 1);
|
||||
rb_define_method(cBignum, "==", big_eq, 1);
|
||||
rb_define_method(cBignum, "eql?", big_eq, 1);
|
||||
rb_define_method(cBignum, "hash", big_hash, 0);
|
||||
rb_define_method(cBignum, "to_i", big_to_i, 0);
|
||||
rb_define_method(cBignum, "to_f", big_to_f, 0);
|
||||
rb_define_method(cBignum, "abs", big_abs, 0);
|
||||
rb_define_method(cBignum, "size", big_size, 0);
|
||||
rb_define_method(cBignum, "zero?", big_zero_p, 0);
|
||||
rb_define_method(rb_cBignum, "<=>", rb_big_cmp, 1);
|
||||
rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
|
||||
rb_define_method(rb_cBignum, "eql?", rb_big_eq, 1);
|
||||
rb_define_method(rb_cBignum, "hash", rb_big_hash, 0);
|
||||
rb_define_method(rb_cBignum, "to_i", rb_big_to_i, 0);
|
||||
rb_define_method(rb_cBignum, "to_f", rb_big_to_f, 0);
|
||||
rb_define_method(rb_cBignum, "abs", rb_big_abs, 0);
|
||||
rb_define_method(rb_cBignum, "size", rb_big_size, 0);
|
||||
rb_define_method(rb_cBignum, "zero?", rb_big_zero_p, 0);
|
||||
}
|
||||
|
|
126
class.c
126
class.c
|
@ -22,25 +22,25 @@
|
|||
extern st_table *rb_class_tbl;
|
||||
|
||||
VALUE
|
||||
class_new(super)
|
||||
rb_class_new(super)
|
||||
VALUE super;
|
||||
{
|
||||
NEWOBJ(klass, struct RClass);
|
||||
OBJSETUP(klass, cClass, T_CLASS);
|
||||
OBJSETUP(klass, rb_cClass, T_CLASS);
|
||||
|
||||
klass->super = super;
|
||||
klass->iv_tbl = 0;
|
||||
klass->m_tbl = 0; /* safe GC */
|
||||
klass->m_tbl = new_idhash();
|
||||
klass->m_tbl = st_init_numtable();
|
||||
|
||||
return (VALUE)klass;
|
||||
}
|
||||
|
||||
VALUE
|
||||
singleton_class_new(super)
|
||||
rb_singleton_class_new(super)
|
||||
VALUE super;
|
||||
{
|
||||
VALUE klass = class_new(super);
|
||||
VALUE klass = rb_class_new(super);
|
||||
|
||||
FL_SET(klass, FL_SINGLETON);
|
||||
return klass;
|
||||
|
@ -57,7 +57,7 @@ clone_method(mid, body, tbl)
|
|||
}
|
||||
|
||||
VALUE
|
||||
singleton_class_clone(klass)
|
||||
rb_singleton_class_clone(klass)
|
||||
VALUE klass;
|
||||
{
|
||||
if (!FL_TEST(klass, FL_SINGLETON))
|
||||
|
@ -70,7 +70,7 @@ singleton_class_clone(klass)
|
|||
clone->super = RCLASS(klass)->super;
|
||||
clone->iv_tbl = 0;
|
||||
clone->m_tbl = 0;
|
||||
clone->m_tbl = new_idhash();
|
||||
clone->m_tbl = st_init_numtable();
|
||||
st_foreach(RCLASS(klass)->m_tbl, clone_method, clone->m_tbl);
|
||||
FL_SET(clone, FL_SINGLETON);
|
||||
return (VALUE)clone;
|
||||
|
@ -78,7 +78,7 @@ singleton_class_clone(klass)
|
|||
}
|
||||
|
||||
void
|
||||
singleton_class_attached(klass, obj)
|
||||
rb_singleton_class_attached(klass, obj)
|
||||
VALUE klass, obj;
|
||||
{
|
||||
if (FL_TEST(klass, FL_SINGLETON))
|
||||
|
@ -92,12 +92,12 @@ rb_define_class_id(id, super)
|
|||
{
|
||||
VALUE klass;
|
||||
|
||||
if (!super) super = cObject;
|
||||
klass = class_new(super);
|
||||
if (!super) super = rb_cObject;
|
||||
klass = rb_class_new(super);
|
||||
rb_name_class(klass, id);
|
||||
/* make metaclass */
|
||||
RBASIC(klass)->klass = singleton_class_new(RBASIC(super)->klass);
|
||||
singleton_class_attached(RBASIC(klass)->klass, klass);
|
||||
RBASIC(klass)->klass = rb_singleton_class_new(RBASIC(super)->klass);
|
||||
rb_singleton_class_attached(RBASIC(klass)->klass, klass);
|
||||
rb_funcall(super, rb_intern("inherited"), 1, klass);
|
||||
|
||||
return klass;
|
||||
|
@ -136,15 +136,15 @@ rb_define_class_under(outer, name, super)
|
|||
}
|
||||
|
||||
VALUE
|
||||
module_new()
|
||||
rb_module_new()
|
||||
{
|
||||
NEWOBJ(mdl, struct RClass);
|
||||
OBJSETUP(mdl, cModule, T_MODULE);
|
||||
OBJSETUP(mdl, rb_cModule, T_MODULE);
|
||||
|
||||
mdl->super = 0;
|
||||
mdl->iv_tbl = 0;
|
||||
mdl->m_tbl = 0;
|
||||
mdl->m_tbl = new_idhash();
|
||||
mdl->m_tbl = st_init_numtable();
|
||||
|
||||
return (VALUE)mdl;
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ rb_define_module_id(id)
|
|||
ID id;
|
||||
{
|
||||
extern st_table *rb_class_tbl;
|
||||
VALUE mdl = module_new();
|
||||
VALUE mdl = rb_module_new();
|
||||
|
||||
rb_name_class(mdl, id);
|
||||
|
||||
|
@ -192,11 +192,11 @@ rb_define_module_under(outer, name)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
include_class_new(module, super)
|
||||
include_rb_class_new(module, super)
|
||||
VALUE module, super;
|
||||
{
|
||||
NEWOBJ(klass, struct RClass);
|
||||
OBJSETUP(klass, cClass, T_ICLASS);
|
||||
OBJSETUP(klass, rb_cClass, T_ICLASS);
|
||||
|
||||
klass->m_tbl = RCLASS(module)->m_tbl;
|
||||
klass->iv_tbl = RCLASS(module)->iv_tbl;
|
||||
|
@ -241,7 +241,7 @@ rb_include_module(klass, module)
|
|||
}
|
||||
}
|
||||
RCLASS(klass)->super =
|
||||
include_class_new(module, RCLASS(klass)->super);
|
||||
include_rb_class_new(module, RCLASS(klass)->super);
|
||||
klass = RCLASS(klass)->super;
|
||||
module = RCLASS(module)->super;
|
||||
}
|
||||
|
@ -249,35 +249,35 @@ rb_include_module(klass, module)
|
|||
}
|
||||
|
||||
VALUE
|
||||
mod_included_modules(mod)
|
||||
rb_mod_included_modules(mod)
|
||||
VALUE mod;
|
||||
{
|
||||
VALUE ary = ary_new();
|
||||
VALUE ary = rb_ary_new();
|
||||
VALUE p;
|
||||
|
||||
for (p = RCLASS(mod)->super; p; p = RCLASS(p)->super) {
|
||||
if (BUILTIN_TYPE(p) == T_ICLASS) {
|
||||
ary_push(ary, RBASIC(p)->klass);
|
||||
rb_ary_push(ary, RBASIC(p)->klass);
|
||||
}
|
||||
}
|
||||
return ary;
|
||||
}
|
||||
|
||||
VALUE
|
||||
mod_ancestors(mod)
|
||||
rb_mod_ancestors(mod)
|
||||
VALUE mod;
|
||||
{
|
||||
VALUE ary = ary_new();
|
||||
VALUE ary = rb_ary_new();
|
||||
VALUE p;
|
||||
|
||||
for (p = mod; p; p = RCLASS(p)->super) {
|
||||
if (FL_TEST(p, FL_SINGLETON))
|
||||
continue;
|
||||
if (BUILTIN_TYPE(p) == T_ICLASS) {
|
||||
ary_push(ary, RBASIC(p)->klass);
|
||||
rb_ary_push(ary, RBASIC(p)->klass);
|
||||
}
|
||||
else {
|
||||
ary_push(ary, p);
|
||||
rb_ary_push(ary, p);
|
||||
}
|
||||
}
|
||||
return ary;
|
||||
|
@ -290,18 +290,18 @@ ins_methods_i(key, body, ary)
|
|||
VALUE ary;
|
||||
{
|
||||
if ((body->nd_noex&(NOEX_PRIVATE|NOEX_PROTECTED)) == 0) {
|
||||
VALUE name = str_new2(rb_id2name(key));
|
||||
VALUE name = rb_str_new2(rb_id2name(key));
|
||||
|
||||
if (!ary_includes(ary, name)) {
|
||||
if (!rb_ary_includes(ary, name)) {
|
||||
if (!body->nd_body) {
|
||||
ary_push(ary, Qnil);
|
||||
rb_ary_push(ary, Qnil);
|
||||
}
|
||||
ary_push(ary, name);
|
||||
rb_ary_push(ary, name);
|
||||
}
|
||||
}
|
||||
else if (body->nd_body && nd_type(body->nd_body) == NODE_ZSUPER) {
|
||||
ary_push(ary, Qnil);
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, Qnil);
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
@ -313,19 +313,19 @@ ins_methods_prot_i(key, body, ary)
|
|||
VALUE ary;
|
||||
{
|
||||
if (!body->nd_body) {
|
||||
ary_push(ary, Qnil);
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, Qnil);
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
}
|
||||
else if (body->nd_noex & NOEX_PROTECTED) {
|
||||
VALUE name = str_new2(rb_id2name(key));
|
||||
VALUE name = rb_str_new2(rb_id2name(key));
|
||||
|
||||
if (!ary_includes(ary, name)) {
|
||||
ary_push(ary, name);
|
||||
if (!rb_ary_includes(ary, name)) {
|
||||
rb_ary_push(ary, name);
|
||||
}
|
||||
}
|
||||
else if (nd_type(body->nd_body) == NODE_ZSUPER) {
|
||||
ary_push(ary, Qnil);
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, Qnil);
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
@ -337,19 +337,19 @@ ins_methods_priv_i(key, body, ary)
|
|||
VALUE ary;
|
||||
{
|
||||
if (!body->nd_body) {
|
||||
ary_push(ary, Qnil);
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, Qnil);
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
}
|
||||
else if (body->nd_noex & NOEX_PRIVATE) {
|
||||
VALUE name = str_new2(rb_id2name(key));
|
||||
VALUE name = rb_str_new2(rb_id2name(key));
|
||||
|
||||
if (!ary_includes(ary, name)) {
|
||||
ary_push(ary, name);
|
||||
if (!rb_ary_includes(ary, name)) {
|
||||
rb_ary_push(ary, name);
|
||||
}
|
||||
}
|
||||
else if (nd_type(body->nd_body) == NODE_ZSUPER) {
|
||||
ary_push(ary, Qnil);
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, Qnil);
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
@ -364,7 +364,7 @@ method_list(mod, option, func)
|
|||
VALUE klass;
|
||||
VALUE *p, *q, *pend;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
for (klass = mod; klass; klass = RCLASS(klass)->super) {
|
||||
st_foreach(RCLASS(klass)->m_tbl, func, ary);
|
||||
if (!option) break;
|
||||
|
@ -382,7 +382,7 @@ method_list(mod, option, func)
|
|||
}
|
||||
|
||||
VALUE
|
||||
class_instance_methods(argc, argv, mod)
|
||||
rb_class_instance_methods(argc, argv, mod)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE mod;
|
||||
|
@ -394,7 +394,7 @@ class_instance_methods(argc, argv, mod)
|
|||
}
|
||||
|
||||
VALUE
|
||||
class_protected_instance_methods(argc, argv, mod)
|
||||
rb_class_protected_instance_methods(argc, argv, mod)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE mod;
|
||||
|
@ -406,7 +406,7 @@ class_protected_instance_methods(argc, argv, mod)
|
|||
}
|
||||
|
||||
VALUE
|
||||
class_private_instance_methods(argc, argv, mod)
|
||||
rb_class_private_instance_methods(argc, argv, mod)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE mod;
|
||||
|
@ -418,14 +418,14 @@ class_private_instance_methods(argc, argv, mod)
|
|||
}
|
||||
|
||||
VALUE
|
||||
obj_singleton_methods(obj)
|
||||
rb_obj_singleton_methods(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
VALUE ary;
|
||||
VALUE klass;
|
||||
VALUE *p, *q, *pend;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
klass = CLASS_OF(obj);
|
||||
while (klass && FL_TEST(klass, FL_SINGLETON)) {
|
||||
st_foreach(RCLASS(klass)->m_tbl, ins_methods_i, ary);
|
||||
|
@ -503,13 +503,13 @@ rb_singleton_class(obj)
|
|||
VALUE obj;
|
||||
{
|
||||
if (rb_special_const_p(obj)) {
|
||||
TypeError("cannot define singleton");
|
||||
rb_raise(rb_eTypeError, "cannot define singleton");
|
||||
}
|
||||
if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON)) {
|
||||
return RBASIC(obj)->klass;
|
||||
}
|
||||
RBASIC(obj)->klass = singleton_class_new(RBASIC(obj)->klass);
|
||||
singleton_class_attached(RBASIC(obj)->klass, obj);
|
||||
RBASIC(obj)->klass = rb_singleton_class_new(RBASIC(obj)->klass);
|
||||
rb_singleton_class_attached(RBASIC(obj)->klass, obj);
|
||||
return RBASIC(obj)->klass;
|
||||
}
|
||||
|
||||
|
@ -540,7 +540,7 @@ rb_define_global_function(name, func, argc)
|
|||
VALUE (*func)();
|
||||
int argc;
|
||||
{
|
||||
rb_define_private_method(mKernel, name, func, argc);
|
||||
rb_define_private_method(rb_mKernel, name, func, argc);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -557,7 +557,7 @@ rb_define_attr(klass, name, read, write)
|
|||
char *name;
|
||||
int read, write;
|
||||
{
|
||||
rb_attr(klass, rb_intern(name), read, write, FALSE);
|
||||
rb_attr(klass, rb_intern(name), read, write, Qfalse);
|
||||
}
|
||||
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
|
@ -588,14 +588,14 @@ rb_scan_args(argc, argv, fmt, va_alist)
|
|||
|
||||
if (*p == '*') {
|
||||
var = va_arg(vargs, VALUE*);
|
||||
*var = ary_new4(argc, argv);
|
||||
*var = rb_ary_new4(argc, argv);
|
||||
return argc;
|
||||
}
|
||||
|
||||
if (ISDIGIT(*p)) {
|
||||
n = *p - '0';
|
||||
if (n > argc)
|
||||
ArgError("Wrong # of arguments (%d for %d)", argc, n);
|
||||
rb_raise(rb_eArgError, "Wrong # of arguments (%d for %d)", argc, n);
|
||||
for (i=0; i<n; i++) {
|
||||
var = va_arg(vargs, VALUE*);
|
||||
*var = argv[i];
|
||||
|
@ -623,15 +623,15 @@ rb_scan_args(argc, argv, fmt, va_alist)
|
|||
if(*p == '*') {
|
||||
var = va_arg(vargs, VALUE*);
|
||||
if (argc > i) {
|
||||
*var = ary_new4(argc-i, argv+i);
|
||||
*var = rb_ary_new4(argc-i, argv+i);
|
||||
}
|
||||
else {
|
||||
*var = ary_new();
|
||||
*var = rb_ary_new();
|
||||
}
|
||||
}
|
||||
else if (*p == '\0') {
|
||||
if (argc > i) {
|
||||
ArgError("Wrong # of arguments(%d for %d)", argc, i);
|
||||
rb_raise(rb_eArgError, "Wrong # of arguments(%d for %d)", argc, i);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -642,6 +642,6 @@ rb_scan_args(argc, argv, fmt, va_alist)
|
|||
return argc;
|
||||
|
||||
error:
|
||||
Fatal("bad scan arg format: %s", fmt);
|
||||
rb_fatal("bad scan arg format: %s", fmt);
|
||||
return 0;
|
||||
}
|
||||
|
|
42
compar.c
42
compar.c
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include "ruby.h"
|
||||
|
||||
VALUE mComparable;
|
||||
VALUE rb_mComparable;
|
||||
|
||||
static ID cmp;
|
||||
|
||||
|
@ -23,8 +23,8 @@ cmp_eq(x, y)
|
|||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t == 0) return TRUE;
|
||||
return FALSE;
|
||||
if (t == 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -34,8 +34,8 @@ cmp_gt(x, y)
|
|||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t > 0) return TRUE;
|
||||
return FALSE;
|
||||
if (t > 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -45,8 +45,8 @@ cmp_ge(x, y)
|
|||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t >= 0) return TRUE;
|
||||
return FALSE;
|
||||
if (t >= 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -56,8 +56,8 @@ cmp_lt(x, y)
|
|||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t < 0) return TRUE;
|
||||
return FALSE;
|
||||
if (t < 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -67,8 +67,8 @@ cmp_le(x, y)
|
|||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t <= 0) return TRUE;
|
||||
return FALSE;
|
||||
if (t <= 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -77,24 +77,24 @@ cmp_between(x, min, max)
|
|||
{
|
||||
VALUE c = rb_funcall(x, cmp, 1, min);
|
||||
long t = NUM2LONG(c);
|
||||
if (t < 0) return FALSE;
|
||||
if (t < 0) return Qfalse;
|
||||
|
||||
c = rb_funcall(x, cmp, 1, max);
|
||||
t = NUM2LONG(c);
|
||||
if (t > 0) return FALSE;
|
||||
return TRUE;
|
||||
if (t > 0) return Qfalse;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
void
|
||||
Init_Comparable()
|
||||
{
|
||||
mComparable = rb_define_module("Comparable");
|
||||
rb_define_method(mComparable, "==", cmp_eq, 1);
|
||||
rb_define_method(mComparable, ">", cmp_gt, 1);
|
||||
rb_define_method(mComparable, ">=", cmp_ge, 1);
|
||||
rb_define_method(mComparable, "<", cmp_lt, 1);
|
||||
rb_define_method(mComparable, "<=", cmp_le, 1);
|
||||
rb_define_method(mComparable, "between?", cmp_between, 2);
|
||||
rb_mComparable = rb_define_module("Comparable");
|
||||
rb_define_method(rb_mComparable, "==", cmp_eq, 1);
|
||||
rb_define_method(rb_mComparable, ">", cmp_gt, 1);
|
||||
rb_define_method(rb_mComparable, ">=", cmp_ge, 1);
|
||||
rb_define_method(rb_mComparable, "<", cmp_lt, 1);
|
||||
rb_define_method(rb_mComparable, "<=", cmp_le, 1);
|
||||
rb_define_method(rb_mComparable, "between?", cmp_between, 2);
|
||||
|
||||
cmp = rb_intern("<=>");
|
||||
}
|
||||
|
|
69
dir.c
69
dir.c
|
@ -57,7 +57,7 @@ char *getenv();
|
|||
# include <sys/errno.h>
|
||||
#endif
|
||||
|
||||
static VALUE cDir;
|
||||
VALUE rb_cDir;
|
||||
|
||||
static void
|
||||
free_dir(dir)
|
||||
|
@ -80,7 +80,7 @@ dir_s_open(dir_class, dirname)
|
|||
dirp = opendir(RSTRING(dirname)->ptr);
|
||||
if (dirp == NULL) {
|
||||
if (errno == EMFILE || errno == ENFILE) {
|
||||
gc_gc();
|
||||
rb_gc();
|
||||
dirp = opendir(RSTRING(dirname)->ptr);
|
||||
}
|
||||
if (dirp == NULL) {
|
||||
|
@ -90,7 +90,7 @@ dir_s_open(dir_class, dirname)
|
|||
|
||||
obj = Data_Wrap_Struct(dir_class, 0, free_dir, dirp);
|
||||
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
return rb_ensure(rb_yield, obj, dir_close, obj);
|
||||
}
|
||||
|
||||
|
@ -100,7 +100,7 @@ dir_s_open(dir_class, dirname)
|
|||
static void
|
||||
dir_closed()
|
||||
{
|
||||
Fail("closed directory");
|
||||
rb_raise(rb_eIOError, "closed directory");
|
||||
}
|
||||
|
||||
#define GetDIR(obj, dirp) {\
|
||||
|
@ -119,7 +119,7 @@ dir_read(dir)
|
|||
errno = 0;
|
||||
dp = readdir(dirp);
|
||||
if (dp)
|
||||
return str_taint(str_new(dp->d_name, NAMLEN(dp)));
|
||||
return rb_str_taint(rb_str_new(dp->d_name, NAMLEN(dp)));
|
||||
else if (errno == 0) { /* end of stream */
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ dir_each(dir)
|
|||
|
||||
GetDIR(dir, dirp);
|
||||
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
|
||||
file = str_taint(str_new(dp->d_name, NAMLEN(dp)));
|
||||
file = rb_str_taint(rb_str_new(dp->d_name, NAMLEN(dp)));
|
||||
rb_yield(file);
|
||||
}
|
||||
return dir;
|
||||
|
@ -154,7 +154,7 @@ dir_tell(dir)
|
|||
#if !defined(__CYGWIN32__) && !defined(__BEOS__)
|
||||
GetDIR(dir, dirp);
|
||||
pos = telldir(dirp);
|
||||
return int2inum(pos);
|
||||
return rb_int2inum(pos);
|
||||
#else
|
||||
rb_notimplement();
|
||||
#endif
|
||||
|
@ -240,7 +240,7 @@ dir_s_getwd(dir)
|
|||
if (getwd(path) == 0) rb_sys_fail(path);
|
||||
#endif
|
||||
|
||||
return str_taint(str_new2(path));
|
||||
return rb_str_taint(rb_str_new2(path));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -298,7 +298,7 @@ dir_s_rmdir(obj, dir)
|
|||
if (rmdir(RSTRING(dir)->ptr) < 0)
|
||||
rb_sys_fail(RSTRING(dir)->ptr);
|
||||
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
#define isdelim(c) ((c)==' '||(c)=='\t'||(c)=='\n'||(c)=='\0')
|
||||
|
@ -317,7 +317,7 @@ push_globs(ary, s)
|
|||
if (fnames == (char**)-1) rb_sys_fail(s);
|
||||
ff = fnames;
|
||||
while (*ff) {
|
||||
ary_push(ary, str_taint(str_new2(*ff)));
|
||||
rb_ary_push(ary, rb_str_taint(rb_str_new2(*ff)));
|
||||
free(*ff);
|
||||
ff++;
|
||||
}
|
||||
|
@ -384,9 +384,10 @@ dir_s_glob(dir, str)
|
|||
|
||||
Check_SafeStr(str);
|
||||
if (RSTRING(str)->len > MAXPATHLEN) {
|
||||
ArgError("pathname too long (%d bytes)", RSTRING(str)->len);
|
||||
rb_raise(rb_eArgError, "pathname too long (%d bytes)",
|
||||
RSTRING(str)->len);
|
||||
}
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
|
||||
p = RSTRING(str)->ptr;
|
||||
pend = p + RSTRING(str)->len;
|
||||
|
@ -422,37 +423,37 @@ dir_foreach(io, dirname)
|
|||
{
|
||||
VALUE dir;
|
||||
|
||||
dir = rb_funcall(cDir, rb_intern("open"), 1, dirname);
|
||||
dir = rb_funcall(rb_cDir, rb_intern("open"), 1, dirname);
|
||||
return rb_ensure(dir_each, dir, dir_close, dir);
|
||||
}
|
||||
|
||||
void
|
||||
Init_Dir()
|
||||
{
|
||||
cDir = rb_define_class("Dir", cObject);
|
||||
rb_cDir = rb_define_class("Dir", rb_cObject);
|
||||
|
||||
rb_include_module(cDir, mEnumerable);
|
||||
rb_include_module(rb_cDir, rb_mEnumerable);
|
||||
|
||||
rb_define_singleton_method(cDir, "new", dir_s_open, 1);
|
||||
rb_define_singleton_method(cDir, "open", dir_s_open, 1);
|
||||
rb_define_singleton_method(cDir, "foreach", dir_foreach, 1);
|
||||
rb_define_singleton_method(rb_cDir, "new", dir_s_open, 1);
|
||||
rb_define_singleton_method(rb_cDir, "open", dir_s_open, 1);
|
||||
rb_define_singleton_method(rb_cDir, "foreach", dir_foreach, 1);
|
||||
|
||||
rb_define_method(cDir,"read", dir_read, 0);
|
||||
rb_define_method(cDir,"each", dir_each, 0);
|
||||
rb_define_method(cDir,"rewind", dir_rewind, 0);
|
||||
rb_define_method(cDir,"tell", dir_tell, 0);
|
||||
rb_define_method(cDir,"seek", dir_seek, 1);
|
||||
rb_define_method(cDir,"close", dir_close, 0);
|
||||
rb_define_method(rb_cDir,"read", dir_read, 0);
|
||||
rb_define_method(rb_cDir,"each", dir_each, 0);
|
||||
rb_define_method(rb_cDir,"rewind", dir_rewind, 0);
|
||||
rb_define_method(rb_cDir,"tell", dir_tell, 0);
|
||||
rb_define_method(rb_cDir,"seek", dir_seek, 1);
|
||||
rb_define_method(rb_cDir,"close", dir_close, 0);
|
||||
|
||||
rb_define_singleton_method(cDir,"chdir", dir_s_chdir, -1);
|
||||
rb_define_singleton_method(cDir,"getwd", dir_s_getwd, 0);
|
||||
rb_define_singleton_method(cDir,"pwd", dir_s_getwd, 0);
|
||||
rb_define_singleton_method(cDir,"chroot", dir_s_chroot, 1);
|
||||
rb_define_singleton_method(cDir,"mkdir", dir_s_mkdir, -1);
|
||||
rb_define_singleton_method(cDir,"rmdir", dir_s_rmdir, 1);
|
||||
rb_define_singleton_method(cDir,"delete", dir_s_rmdir, 1);
|
||||
rb_define_singleton_method(cDir,"unlink", dir_s_rmdir, 1);
|
||||
rb_define_singleton_method(rb_cDir,"chdir", dir_s_chdir, -1);
|
||||
rb_define_singleton_method(rb_cDir,"getwd", dir_s_getwd, 0);
|
||||
rb_define_singleton_method(rb_cDir,"pwd", dir_s_getwd, 0);
|
||||
rb_define_singleton_method(rb_cDir,"chroot", dir_s_chroot, 1);
|
||||
rb_define_singleton_method(rb_cDir,"mkdir", dir_s_mkdir, -1);
|
||||
rb_define_singleton_method(rb_cDir,"rmdir", dir_s_rmdir, 1);
|
||||
rb_define_singleton_method(rb_cDir,"delete", dir_s_rmdir, 1);
|
||||
rb_define_singleton_method(rb_cDir,"unlink", dir_s_rmdir, 1);
|
||||
|
||||
rb_define_singleton_method(cDir,"glob", dir_s_glob, 1);
|
||||
rb_define_singleton_method(cDir,"[]", dir_s_glob, 1);
|
||||
rb_define_singleton_method(rb_cDir,"glob", dir_s_glob, 1);
|
||||
rb_define_singleton_method(rb_cDir,"[]", dir_s_glob, 1);
|
||||
}
|
||||
|
|
43
dln.c
43
dln.c
|
@ -423,7 +423,7 @@ load_text_data(fd, hdrp, bss, disp)
|
|||
}
|
||||
|
||||
static int
|
||||
undef_print(key, value)
|
||||
underb_f_print(key, value)
|
||||
char *key, *value;
|
||||
{
|
||||
fprintf(stderr, " %s\n", key);
|
||||
|
@ -434,7 +434,7 @@ static void
|
|||
dln_print_undef()
|
||||
{
|
||||
fprintf(stderr, " Undefined symbols:\n");
|
||||
st_foreach(undef_tbl, undef_print, NULL);
|
||||
st_foreach(undef_tbl, underb_f_print, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -830,7 +830,7 @@ load_1(fd, disp, need_init)
|
|||
for (sym = syms; sym<end; sym++) {
|
||||
char *name = sym->n_un.n_name;
|
||||
if (name[0] == '_' && sym->n_value >= block) {
|
||||
if (strcmp(name+1, "libs_to_be_linked") == 0) {
|
||||
if (strcmp(name+1, "dln_libs_to_be_linked") == 0) {
|
||||
libs_to_be_linked = (char**)sym->n_value;
|
||||
}
|
||||
else if (strcmp(name+1, buf) == 0) {
|
||||
|
@ -885,11 +885,11 @@ search_undef(key, value, lib_tbl)
|
|||
}
|
||||
|
||||
struct symdef {
|
||||
int str_index;
|
||||
int rb_str_index;
|
||||
int lib_offset;
|
||||
};
|
||||
|
||||
char *dln_library_path = DLN_DEFAULT_LIB_PATH;
|
||||
char *dln_librrb_ary_path = DLN_DEFAULT_LIB_PATH;
|
||||
|
||||
static int
|
||||
load_lib(lib)
|
||||
|
@ -920,10 +920,10 @@ load_lib(lib)
|
|||
|
||||
/* library search path: */
|
||||
/* look for environment variable DLN_LIBRARY_PATH first. */
|
||||
/* then variable dln_library_path. */
|
||||
/* then variable dln_librrb_ary_path. */
|
||||
/* if path is still NULL, use "." for path. */
|
||||
path = getenv("DLN_LIBRARY_PATH");
|
||||
if (path == NULL) path = dln_library_path;
|
||||
if (path == NULL) path = dln_librrb_ary_path;
|
||||
|
||||
file = dln_find_file(lib, path);
|
||||
fd = open(file, O_RDONLY);
|
||||
|
@ -952,7 +952,7 @@ load_lib(lib)
|
|||
base = (struct symdef*)(data + 1);
|
||||
name_base = (char*)(base + nsym) + sizeof(int);
|
||||
while (nsym > 0) {
|
||||
char *name = name_base + base->str_index;
|
||||
char *name = name_base + base->rb_str_index;
|
||||
|
||||
st_insert(lib_tbl, name, base->lib_offset + sizeof(ahdr));
|
||||
nsym--;
|
||||
|
@ -1186,7 +1186,7 @@ aix_loaderror(char *pathname)
|
|||
ERRBUF_APPEND("\n");
|
||||
}
|
||||
errbuf[strlen(errbuf)-1] = '\0'; /* trim off last newline */
|
||||
LoadError(errbuf);
|
||||
rb_loaderror(errbuf);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
@ -1281,14 +1281,14 @@ dln_load(file)
|
|||
lib = shl_load(file, flags, 0);
|
||||
if (lib == NULL) {
|
||||
extern int errno;
|
||||
LoadError("%s - %s", strerror(errno), file);
|
||||
rb_loaderror("%s - %s", strerror(errno), file);
|
||||
}
|
||||
shl_findsym(&lib, buf, TYPE_PROCEDURE, (void*)&init_fct);
|
||||
if (init_fct == NULL) {
|
||||
shl_findsym(&lib, buf, TYPE_UNDEFINED, (void*)&init_fct);
|
||||
if (init_fct == NULL) {
|
||||
errno = ENOSYM;
|
||||
LoadError("%s - %s", strerror(ENOSYM), file);
|
||||
rb_loaderror("%s - %s", strerror(ENOSYM), file);
|
||||
}
|
||||
}
|
||||
(*init_fct)();
|
||||
|
@ -1331,12 +1331,12 @@ dln_load(file)
|
|||
|
||||
/* Load object file, if return value ==0 , load failed*/
|
||||
if(rld_load(NULL, NULL, object_files, NULL) == 0) {
|
||||
LoadError("Failed to load %.200s", file);
|
||||
rb_loaderror("Failed to load %.200s", file);
|
||||
}
|
||||
|
||||
/* lookup the initial function */
|
||||
if(rld_lookup(NULL, buf, &init_address) == 0) {
|
||||
LoadError("Failed to lookup Init function %.200s",file);
|
||||
rb_loaderror("Failed to lookup Init function %.200s", file);
|
||||
}
|
||||
|
||||
/* Cannot call *init_address directory, so copy this value to
|
||||
|
@ -1363,7 +1363,7 @@ dln_load(file)
|
|||
LoadError("Failed to load %.200s", file);
|
||||
}
|
||||
|
||||
NSLinkModule(obj_file, file, TRUE);
|
||||
NSLinkModule(obj_file, file, Qtrue);
|
||||
|
||||
|
||||
/* lookup the initial function */
|
||||
|
@ -1394,7 +1394,7 @@ dln_load(file)
|
|||
/* load extention module */
|
||||
img_id = load_add_on(file);
|
||||
if (img_id <= 0) {
|
||||
LoadError("Failed to load %.200s", file);
|
||||
rb_loaderror("Failed to load %.200s", file);
|
||||
}
|
||||
|
||||
/* find symbol for module initialize function. */
|
||||
|
@ -1416,12 +1416,12 @@ dln_load(file)
|
|||
|
||||
if ((B_BAD_IMAGE_ID == err_stat) || (B_BAD_INDEX == err_stat)) {
|
||||
unload_add_on(img_id);
|
||||
LoadError("Failed to lookup Init function %.200s", file);
|
||||
rb_loaderror("Failed to lookup Init function %.200s", file);
|
||||
}
|
||||
else if (B_NO_ERROR != err_stat) {
|
||||
char errmsg[] = "Internal of BeOS version. %.200s (symbol_name = %s)";
|
||||
unload_add_on(img_id);
|
||||
LoadError(errmsg, strerror(err_stat), buf);
|
||||
rb_loaderror(errmsg, strerror(err_stat), buf);
|
||||
}
|
||||
|
||||
/* call module initialize function. */
|
||||
|
@ -1444,7 +1444,6 @@ dln_load(file)
|
|||
CFragSymbolClass class;
|
||||
void (*init_fct)();
|
||||
char fullpath[MAXPATHLEN];
|
||||
extern LoadError();
|
||||
|
||||
strcpy(fullpath, file);
|
||||
|
||||
|
@ -1453,7 +1452,7 @@ dln_load(file)
|
|||
(void)FSMakeFSSpec(0, 0, fullpath, &libspec);
|
||||
err = ResolveAliasFile(&libspec, 1, &isfolder, &didsomething);
|
||||
if ( err ) {
|
||||
LoadError("Unresolved Alias - %s", file);
|
||||
rb_loaderror("Unresolved Alias - %s", file);
|
||||
}
|
||||
|
||||
/* Load the fragment (or return the connID if it is already loaded */
|
||||
|
@ -1463,14 +1462,14 @@ dln_load(file)
|
|||
errMessage);
|
||||
if ( err ) {
|
||||
p2cstr(errMessage);
|
||||
LoadError("%s - %s",errMessage , file);
|
||||
rb_loaderror("%s - %s",errMessage , file);
|
||||
}
|
||||
|
||||
/* Locate the address of the correct init function */
|
||||
c2pstr(buf);
|
||||
err = FindSymbol(connID, buf, &symAddr, &class);
|
||||
if ( err ) {
|
||||
LoadError("Unresolved symbols - %s" , file);
|
||||
rb_loaderror("Unresolved symbols - %s" , file);
|
||||
}
|
||||
|
||||
init_fct = (void (*)())symAddr;
|
||||
|
@ -1487,7 +1486,7 @@ dln_load(file)
|
|||
#endif
|
||||
#if !defined(_AIX) && !defined(NeXT)
|
||||
failed:
|
||||
LoadError("%s - %s", dln_strerror(), file);
|
||||
rb_loaderror("%s - %s", dln_strerror(), file);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
102
enum.c
102
enum.c
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include "ruby.h"
|
||||
|
||||
VALUE mEnumerable;
|
||||
VALUE rb_mEnumerable;
|
||||
static ID id_each, id_eqq, id_cmp;
|
||||
|
||||
VALUE
|
||||
|
@ -27,7 +27,7 @@ grep_i(i, arg)
|
|||
VALUE i, *arg;
|
||||
{
|
||||
if (RTEST(rb_funcall(arg[0], id_eqq, 1, i))) {
|
||||
ary_push(arg[1], i);
|
||||
rb_ary_push(arg[1], i);
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -46,14 +46,14 @@ static VALUE
|
|||
enum_grep(obj, pat)
|
||||
VALUE obj, pat;
|
||||
{
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
rb_iterate(rb_each, obj, grep_iter_i, pat);
|
||||
return obj;
|
||||
}
|
||||
else {
|
||||
VALUE tmp, arg[2];
|
||||
|
||||
arg[0] = pat; arg[1] = tmp = ary_new();
|
||||
arg[0] = pat; arg[1] = tmp = rb_ary_new();
|
||||
rb_iterate(rb_each, obj, grep_i, (VALUE)arg);
|
||||
|
||||
return tmp;
|
||||
|
@ -71,7 +71,7 @@ find_i(i, arg)
|
|||
struct find_arg *arg;
|
||||
{
|
||||
if (RTEST(rb_yield(i))) {
|
||||
arg->found = TRUE;
|
||||
arg->found = Qtrue;
|
||||
arg->val = i;
|
||||
rb_iter_break();
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ enum_find(argc, argv, obj)
|
|||
VALUE if_none;
|
||||
|
||||
rb_scan_args(argc, argv, "01", &if_none);
|
||||
arg.found = FALSE;
|
||||
arg.found = Qfalse;
|
||||
rb_iterate(rb_each, obj, find_i, (VALUE)&arg);
|
||||
if (arg.found) {
|
||||
return arg.val;
|
||||
|
@ -104,7 +104,7 @@ find_all_i(i, tmp)
|
|||
VALUE i, tmp;
|
||||
{
|
||||
if (RTEST(rb_yield(i))) {
|
||||
ary_push(tmp, i);
|
||||
rb_ary_push(tmp, i);
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ enum_find_all(obj)
|
|||
{
|
||||
VALUE tmp;
|
||||
|
||||
tmp = ary_new();
|
||||
tmp = rb_ary_new();
|
||||
rb_iterate(rb_each, obj, find_all_i, tmp);
|
||||
|
||||
return tmp;
|
||||
|
@ -125,7 +125,7 @@ static VALUE
|
|||
collect_i(i, tmp)
|
||||
VALUE i, tmp;
|
||||
{
|
||||
ary_push(tmp, rb_yield(i));
|
||||
rb_ary_push(tmp, rb_yield(i));
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -135,37 +135,17 @@ enum_collect(obj)
|
|||
{
|
||||
VALUE tmp;
|
||||
|
||||
tmp = ary_new();
|
||||
tmp = rb_ary_new();
|
||||
rb_iterate(rb_each, obj, collect_i, tmp);
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reverse_i(i, tmp)
|
||||
VALUE i, tmp;
|
||||
{
|
||||
ary_unshift(tmp, i);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
enum_reverse(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
VALUE tmp;
|
||||
|
||||
tmp = ary_new();
|
||||
rb_iterate(rb_each, obj, reverse_i, tmp);
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
enum_all(i, ary)
|
||||
VALUE i, ary;
|
||||
{
|
||||
ary_push(ary, i);
|
||||
rb_ary_push(ary, i);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -175,7 +155,7 @@ enum_to_a(obj)
|
|||
{
|
||||
VALUE ary;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
rb_iterate(rb_each, obj, enum_all, ary);
|
||||
|
||||
return ary;
|
||||
|
@ -185,7 +165,7 @@ static VALUE
|
|||
enum_sort(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
return ary_sort(enum_to_a(obj));
|
||||
return rb_ary_sort(enum_to_a(obj));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -213,7 +193,7 @@ min_ii(i, min)
|
|||
if (NIL_P(*min))
|
||||
*min = i;
|
||||
else {
|
||||
cmp = rb_yield(assoc_new(i, *min));
|
||||
cmp = rb_yield(rb_assoc_new(i, *min));
|
||||
if (FIX2LONG(cmp) < 0)
|
||||
*min = i;
|
||||
}
|
||||
|
@ -226,7 +206,7 @@ enum_min(obj)
|
|||
{
|
||||
VALUE min = Qnil;
|
||||
|
||||
rb_iterate(rb_each, obj, iterator_p()?min_ii:min_i, (VALUE)&min);
|
||||
rb_iterate(rb_each, obj, rb_iterator_p()?min_ii:min_i, (VALUE)&min);
|
||||
return min;
|
||||
}
|
||||
|
||||
|
@ -255,7 +235,7 @@ max_ii(i, max)
|
|||
if (NIL_P(*max))
|
||||
*max = i;
|
||||
else {
|
||||
cmp = rb_yield(assoc_new(i, *max));
|
||||
cmp = rb_yield(rb_assoc_new(i, *max));
|
||||
if (FIX2LONG(cmp) > 0)
|
||||
*max = i;
|
||||
}
|
||||
|
@ -268,7 +248,7 @@ enum_max(obj)
|
|||
{
|
||||
VALUE max = Qnil;
|
||||
|
||||
rb_iterate(rb_each, obj, iterator_p()?max_ii:max_i, (VALUE)&max);
|
||||
rb_iterate(rb_each, obj, rb_iterator_p()?max_ii:max_i, (VALUE)&max);
|
||||
return max;
|
||||
}
|
||||
|
||||
|
@ -328,8 +308,8 @@ enum_member(obj, val)
|
|||
iv.i = 0;
|
||||
iv.v = val;
|
||||
rb_iterate(rb_each, obj, member_i, (VALUE)&iv);
|
||||
if (iv.i) return TRUE;
|
||||
return FALSE;
|
||||
if (iv.i) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -341,7 +321,7 @@ length_i(i, length)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
VALUE
|
||||
static VALUE
|
||||
enum_length(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
|
@ -351,17 +331,24 @@ enum_length(obj)
|
|||
return INT2FIX(length);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_enum_length(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
return enum_length(obj);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
each_with_index_i(val, indexp)
|
||||
VALUE val;
|
||||
int *indexp;
|
||||
{
|
||||
rb_yield(assoc_new(val, INT2FIX(*indexp)));
|
||||
rb_yield(rb_assoc_new(val, INT2FIX(*indexp)));
|
||||
(*indexp)++;
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
VALUE
|
||||
static VALUE
|
||||
enum_each_with_index(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
|
@ -374,24 +361,23 @@ enum_each_with_index(obj)
|
|||
void
|
||||
Init_Enumerable()
|
||||
{
|
||||
mEnumerable = rb_define_module("Enumerable");
|
||||
rb_mEnumerable = rb_define_module("Enumerable");
|
||||
|
||||
rb_define_method(mEnumerable,"to_a", enum_to_a, 0);
|
||||
rb_define_method(rb_mEnumerable,"to_a", enum_to_a, 0);
|
||||
|
||||
rb_define_method(mEnumerable,"sort", enum_sort, 0);
|
||||
rb_define_method(mEnumerable,"grep", enum_grep, 1);
|
||||
rb_define_method(mEnumerable,"find", enum_find, -1);
|
||||
rb_define_method(mEnumerable,"find_all", enum_find_all, 0);
|
||||
rb_define_method(mEnumerable,"collect", enum_collect, 0);
|
||||
rb_define_method(mEnumerable,"reverse", enum_reverse, 0);
|
||||
rb_define_method(mEnumerable,"min", enum_min, 0);
|
||||
rb_define_method(mEnumerable,"max", enum_max, 0);
|
||||
rb_define_method(mEnumerable,"index", enum_index, 1);
|
||||
rb_define_method(mEnumerable,"member?", enum_member, 1);
|
||||
rb_define_method(mEnumerable,"include?", enum_member, 1);
|
||||
rb_define_method(mEnumerable,"length", enum_length, 0);
|
||||
rb_define_method(mEnumerable,"size", enum_length, 0);
|
||||
rb_define_method(mEnumerable,"each_with_index", enum_each_with_index, 0);
|
||||
rb_define_method(rb_mEnumerable,"sort", enum_sort, 0);
|
||||
rb_define_method(rb_mEnumerable,"grep", enum_grep, 1);
|
||||
rb_define_method(rb_mEnumerable,"find", enum_find, -1);
|
||||
rb_define_method(rb_mEnumerable,"find_all", enum_find_all, 0);
|
||||
rb_define_method(rb_mEnumerable,"collect", enum_collect, 0);
|
||||
rb_define_method(rb_mEnumerable,"min", enum_min, 0);
|
||||
rb_define_method(rb_mEnumerable,"max", enum_max, 0);
|
||||
rb_define_method(rb_mEnumerable,"index", enum_index, 1);
|
||||
rb_define_method(rb_mEnumerable,"member?", enum_member, 1);
|
||||
rb_define_method(rb_mEnumerable,"include?", enum_member, 1);
|
||||
rb_define_method(rb_mEnumerable,"length", enum_length, 0);
|
||||
rb_define_method(rb_mEnumerable,"size", enum_length, 0);
|
||||
rb_define_method(rb_mEnumerable,"each_with_index", enum_each_with_index, 0);
|
||||
|
||||
id_eqq = rb_intern("===");
|
||||
id_each = rb_intern("each");
|
||||
|
|
10
env.h
10
env.h
|
@ -22,16 +22,16 @@ extern struct FRAME {
|
|||
char *file;
|
||||
int line;
|
||||
int iter;
|
||||
} *the_frame;
|
||||
} *ruby_frame;
|
||||
|
||||
void gc_mark_frame _((struct FRAME *));
|
||||
void rb_gc_mark_frame _((struct FRAME *));
|
||||
|
||||
extern struct SCOPE {
|
||||
struct RBasic super;
|
||||
ID *local_tbl;
|
||||
VALUE *local_vars;
|
||||
int flag;
|
||||
} *the_scope;
|
||||
} *ruby_scope;
|
||||
|
||||
#define SCOPE_ALLOCA 0
|
||||
#define SCOPE_MALLOC 1
|
||||
|
@ -39,7 +39,7 @@ extern struct SCOPE {
|
|||
|
||||
extern int rb_in_eval;
|
||||
|
||||
extern VALUE the_class;
|
||||
extern VALUE ruby_class;
|
||||
|
||||
struct RVarmap {
|
||||
struct RBasic super;
|
||||
|
@ -47,6 +47,6 @@ struct RVarmap {
|
|||
VALUE val;
|
||||
struct RVarmap *next;
|
||||
};
|
||||
extern struct RVarmap *the_dyna_vars;
|
||||
extern struct RVarmap *ruby_dyna_vars;
|
||||
|
||||
#endif /* ENV_H */
|
||||
|
|
303
error.c
303
error.c
|
@ -26,10 +26,7 @@
|
|||
int sys_nerr = 256;
|
||||
#endif
|
||||
|
||||
extern char *sourcefile;
|
||||
extern int sourceline;
|
||||
|
||||
int nerrs;
|
||||
int ruby_nerrs;
|
||||
|
||||
static void
|
||||
err_snprintf(buf, len, fmt, args)
|
||||
|
@ -37,11 +34,11 @@ err_snprintf(buf, len, fmt, args)
|
|||
int len;
|
||||
va_list args;
|
||||
{
|
||||
if (!sourcefile) {
|
||||
if (!ruby_sourcefile) {
|
||||
vsnprintf(buf, len, fmt, args);
|
||||
}
|
||||
else {
|
||||
int n = snprintf(buf, len, "%s:%d: ", sourcefile, sourceline);
|
||||
int n = snprintf(buf, len, "%s:%d: ", ruby_sourcefile, ruby_sourceline);
|
||||
if (len > n) {
|
||||
vsnprintf((char*)buf+n, len-n, fmt, args);
|
||||
}
|
||||
|
@ -62,9 +59,9 @@ err_print(fmt, args)
|
|||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Error(char *fmt, ...)
|
||||
rb_compile_error(char *fmt, ...)
|
||||
#else
|
||||
Error(fmt, va_alist)
|
||||
rb_compile_error(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -74,14 +71,14 @@ Error(fmt, va_alist)
|
|||
va_init_list(args, fmt);
|
||||
err_print(fmt, args);
|
||||
va_end(args);
|
||||
nerrs++;
|
||||
ruby_nerrs++;
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Error_Append(char *fmt, ...)
|
||||
rb_compile_error_append(char *fmt, ...)
|
||||
#else
|
||||
Error_Append(fmt, va_alist)
|
||||
rb_compile_error_append(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -97,9 +94,9 @@ Error_Append(fmt, va_alist)
|
|||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Warn(char *fmt, ...)
|
||||
rb_warn(char *fmt, ...)
|
||||
#else
|
||||
Warn(fmt, va_alist)
|
||||
rb_warn(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -114,12 +111,12 @@ Warn(fmt, va_alist)
|
|||
va_end(args);
|
||||
}
|
||||
|
||||
/* Warning() reports only in verbose mode */
|
||||
/* rb_warning() reports only in verbose mode */
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Warning(char *fmt, ...)
|
||||
rb_warning(char *fmt, ...)
|
||||
#else
|
||||
Warning(fmt, va_alist)
|
||||
rb_warning(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -127,7 +124,7 @@ Warning(fmt, va_alist)
|
|||
char buf[BUFSIZ];
|
||||
va_list args;
|
||||
|
||||
if (!RTEST(verbose)) return;
|
||||
if (!RTEST(rb_verbose)) return;
|
||||
|
||||
snprintf(buf, BUFSIZ, "warning: %s", fmt);
|
||||
|
||||
|
@ -138,9 +135,9 @@ Warning(fmt, va_alist)
|
|||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Bug(char *fmt, ...)
|
||||
rb_bug(char *fmt, ...)
|
||||
#else
|
||||
Bug(fmt, va_alist)
|
||||
rb_bug(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -205,68 +202,68 @@ rb_check_type(x, t)
|
|||
etype = "Fixnum";
|
||||
}
|
||||
else if (rb_special_const_p(x)) {
|
||||
etype = RSTRING(obj_as_string(x))->ptr;
|
||||
etype = RSTRING(rb_obj_as_string(x))->ptr;
|
||||
}
|
||||
else {
|
||||
etype = rb_class2name(CLASS_OF(x));
|
||||
}
|
||||
TypeError("wrong argument type %s (expected %s)",
|
||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
|
||||
etype, type->name);
|
||||
}
|
||||
type++;
|
||||
}
|
||||
Bug("unknown type 0x%x", t);
|
||||
rb_bug("unknown type 0x%x", t);
|
||||
}
|
||||
}
|
||||
|
||||
/* exception classes */
|
||||
#include <errno.h>
|
||||
|
||||
VALUE eException;
|
||||
VALUE eSystemExit, eInterrupt, eFatal;
|
||||
VALUE eStandardError;
|
||||
VALUE eRuntimeError;
|
||||
VALUE eSyntaxError;
|
||||
VALUE eTypeError;
|
||||
VALUE eArgError;
|
||||
VALUE eNameError;
|
||||
VALUE eIndexError;
|
||||
VALUE eLoadError;
|
||||
VALUE eSecurityError;
|
||||
VALUE eNotImpError;
|
||||
VALUE rb_eException;
|
||||
VALUE rb_eSystemExit, rb_eInterrupt, rb_eFatal;
|
||||
VALUE rb_eStandardError;
|
||||
VALUE rb_eRuntimeError;
|
||||
VALUE rb_eSyntaxError;
|
||||
VALUE rb_eTypeError;
|
||||
VALUE rb_eArgError;
|
||||
VALUE rb_eNameError;
|
||||
VALUE rb_eIndexError;
|
||||
VALUE rb_eLoadError;
|
||||
VALUE rb_eSecurityError;
|
||||
VALUE rb_eNotImpError;
|
||||
|
||||
VALUE eSystemCallError;
|
||||
VALUE mErrno;
|
||||
VALUE rb_eSystemCallError;
|
||||
VALUE rb_mErrno;
|
||||
|
||||
VALUE
|
||||
exc_new(etype, ptr, len)
|
||||
rb_exc_new(etype, ptr, len)
|
||||
VALUE etype;
|
||||
char *ptr;
|
||||
unsigned len;
|
||||
{
|
||||
VALUE exc = obj_alloc(etype);
|
||||
VALUE exc = rb_obj_alloc(etype);
|
||||
|
||||
rb_iv_set(exc, "mesg", str_new(ptr, len));
|
||||
rb_iv_set(exc, "mesg", rb_str_new(ptr, len));
|
||||
return exc;
|
||||
}
|
||||
|
||||
VALUE
|
||||
exc_new2(etype, s)
|
||||
rb_exc_new2(etype, s)
|
||||
VALUE etype;
|
||||
char *s;
|
||||
{
|
||||
return exc_new(etype, s, strlen(s));
|
||||
return rb_exc_new(etype, s, strlen(s));
|
||||
}
|
||||
|
||||
VALUE
|
||||
exc_new3(etype, str)
|
||||
rb_exc_new3(etype, str)
|
||||
VALUE etype, str;
|
||||
{
|
||||
char *s;
|
||||
int len;
|
||||
|
||||
s = str2cstr(str, &len);
|
||||
return exc_new(etype, s, len);
|
||||
return rb_exc_new(etype, s, len);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -278,7 +275,7 @@ exc_initialize(argc, argv, exc)
|
|||
VALUE mesg;
|
||||
|
||||
if (rb_scan_args(argc, argv, "01", &mesg) == 0) {
|
||||
mesg = str_new(0, 0);
|
||||
mesg = rb_str_new(0, 0);
|
||||
}
|
||||
else {
|
||||
STR2CSTR(mesg); /* ensure mesg can be converted to String */
|
||||
|
@ -289,7 +286,7 @@ exc_initialize(argc, argv, exc)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
exc_new_method(argc, argv, self)
|
||||
exc_new(argc, argv, self)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE self;
|
||||
|
@ -301,8 +298,8 @@ exc_new_method(argc, argv, self)
|
|||
while (FL_TEST(etype, FL_SINGLETON)) {
|
||||
etype = RCLASS(etype)->super;
|
||||
}
|
||||
exc = obj_alloc(etype);
|
||||
obj_call_init(exc);
|
||||
exc = rb_obj_alloc(etype);
|
||||
rb_obj_call_init(exc);
|
||||
|
||||
return exc;
|
||||
}
|
||||
|
@ -321,17 +318,17 @@ exc_inspect(exc)
|
|||
VALUE str, klass;
|
||||
|
||||
klass = CLASS_OF(exc);
|
||||
exc = obj_as_string(exc);
|
||||
exc = rb_obj_as_string(exc);
|
||||
if (RSTRING(exc)->len == 0) {
|
||||
return str_dup(rb_class_path(klass));
|
||||
return rb_str_dup(rb_class_path(klass));
|
||||
}
|
||||
|
||||
str = str_new2("#<");
|
||||
str = rb_str_new2("#<");
|
||||
klass = rb_class_path(klass);
|
||||
str_concat(str, klass);
|
||||
str_cat(str, ":", 1);
|
||||
str_concat(str, exc);
|
||||
str_cat(str, ">", 1);
|
||||
rb_str_concat(str, klass);
|
||||
rb_str_cat(str, ":", 1);
|
||||
rb_str_concat(str, exc);
|
||||
rb_str_cat(str, ">", 1);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
@ -353,13 +350,13 @@ check_backtrace(bt)
|
|||
if (!NIL_P(bt)) {
|
||||
int t = TYPE(bt);
|
||||
|
||||
if (t == T_STRING) return ary_new3(1, bt);
|
||||
if (t == T_STRING) return rb_ary_new3(1, bt);
|
||||
if (t != T_ARRAY) {
|
||||
TypeError(err);
|
||||
rb_raise(rb_eTypeError, err);
|
||||
}
|
||||
for (i=0;i<RARRAY(bt)->len;i++) {
|
||||
if (TYPE(RARRAY(bt)->ptr[i]) != T_STRING) {
|
||||
TypeError(err);
|
||||
rb_raise(rb_eTypeError, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -379,34 +376,35 @@ exception(argc, argv)
|
|||
VALUE *argv;
|
||||
{
|
||||
VALUE v = Qnil;
|
||||
VALUE etype = eStandardError;
|
||||
VALUE etype = rb_eStandardError;
|
||||
int i;
|
||||
ID id;
|
||||
|
||||
if (argc == 0) {
|
||||
ArgError("wrong # of arguments");
|
||||
rb_raise(rb_eArgError, "wrong # of arguments");
|
||||
}
|
||||
Warn("Exception() is now obsolete");
|
||||
rb_warn("Exception() is now obsolete");
|
||||
if (TYPE(argv[argc-1]) == T_CLASS) {
|
||||
etype = argv[argc-1];
|
||||
argc--;
|
||||
if (!rb_funcall(etype, '<', 1, eException)) {
|
||||
TypeError("exception should be subclass of Exception");
|
||||
if (!rb_funcall(etype, '<', 1, rb_eException)) {
|
||||
rb_raise(rb_eTypeError, "exception should be subclass of Exception");
|
||||
}
|
||||
}
|
||||
for (i=0; i<argc; i++) { /* argument check */
|
||||
id = rb_to_id(argv[i]);
|
||||
if (!rb_id2name(id)) {
|
||||
ArgError("argument needs to be symbol or string");
|
||||
rb_raise(rb_eArgError, "argument needs to be symbol or string");
|
||||
}
|
||||
if (!rb_is_const_id(id)) {
|
||||
ArgError("identifier `%s' needs to be constant", rb_id2name(id));
|
||||
rb_raise(rb_eArgError, "identifier `%s' needs to be constant",
|
||||
rb_id2name(id));
|
||||
}
|
||||
}
|
||||
for (i=0; i<argc; i++) {
|
||||
v = rb_define_class_under(the_class,
|
||||
v = rb_define_class_under(ruby_class,
|
||||
rb_id2name(rb_to_id(argv[i])),
|
||||
eStandardError);
|
||||
rb_eStandardError);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
@ -479,7 +477,7 @@ set_syserr(i, name)
|
|||
VALUE *list;
|
||||
int ix, offset;
|
||||
#endif
|
||||
VALUE error = rb_define_class_under(mErrno, name, eSystemCallError);
|
||||
VALUE error = rb_define_class_under(rb_mErrno, name, rb_eSystemCallError);
|
||||
rb_define_const(error, "Errno", INT2FIX(i));
|
||||
#ifdef __BEOS__
|
||||
i -= B_GENERAL_ERROR_BASE;
|
||||
|
@ -534,144 +532,87 @@ static void init_syserr _((void));
|
|||
void
|
||||
Init_Exception()
|
||||
{
|
||||
eException = rb_define_class("Exception", cObject);
|
||||
rb_define_method(eException, "new", exc_new_method, -1);
|
||||
rb_define_method(eException, "initialize", exc_initialize, -1);
|
||||
rb_define_method(eException, "to_s", exc_to_s, 0);
|
||||
rb_define_method(eException, "to_str", exc_to_s, 0);
|
||||
rb_define_method(eException, "message", exc_to_s, 0);
|
||||
rb_define_method(eException, "inspect", exc_inspect, 0);
|
||||
rb_define_method(eException, "backtrace", exc_backtrace, 0);
|
||||
rb_define_method(eException, "set_backtrace", exc_set_backtrace, 1);
|
||||
rb_eException = rb_define_class("Exception", rb_cObject);
|
||||
rb_define_method(rb_eException, "new", exc_new, -1);
|
||||
rb_define_method(rb_eException, "initialize", exc_initialize, -1);
|
||||
rb_define_method(rb_eException, "to_s", exc_to_s, 0);
|
||||
rb_define_method(rb_eException, "to_str", exc_to_s, 0);
|
||||
rb_define_method(rb_eException, "message", exc_to_s, 0);
|
||||
rb_define_method(rb_eException, "inspect", exc_inspect, 0);
|
||||
rb_define_method(rb_eException, "backtrace", exc_backtrace, 0);
|
||||
rb_define_method(rb_eException, "set_backtrace", exc_set_backtrace, 1);
|
||||
|
||||
eSystemExit = rb_define_class("SystemExit", eException);
|
||||
eFatal = rb_define_class("fatal", eException);
|
||||
eInterrupt = rb_define_class("Interrupt", eException);
|
||||
rb_eSystemExit = rb_define_class("SystemExit", rb_eException);
|
||||
rb_eFatal = rb_define_class("fatal", rb_eException);
|
||||
rb_eInterrupt = rb_define_class("Interrupt", rb_eException);
|
||||
|
||||
eStandardError = rb_define_class("StandardError", eException);
|
||||
eSyntaxError = rb_define_class("SyntaxError", eStandardError);
|
||||
eTypeError = rb_define_class("TypeError", eStandardError);
|
||||
eArgError = rb_define_class("ArgumentError", eStandardError);
|
||||
eNameError = rb_define_class("NameError", eStandardError);
|
||||
eIndexError = rb_define_class("IndexError", eStandardError);
|
||||
eLoadError = rb_define_class("LoadError", eStandardError);
|
||||
rb_eStandardError = rb_define_class("StandardError", rb_eException);
|
||||
rb_eSyntaxError = rb_define_class("SyntaxError", rb_eStandardError);
|
||||
rb_eTypeError = rb_define_class("TypeError", rb_eStandardError);
|
||||
rb_eArgError = rb_define_class("ArgumentError", rb_eStandardError);
|
||||
rb_eNameError = rb_define_class("NameError", rb_eStandardError);
|
||||
rb_eIndexError = rb_define_class("IndexError", rb_eStandardError);
|
||||
rb_eLoadError = rb_define_class("LoadError", rb_eStandardError);
|
||||
|
||||
eRuntimeError = rb_define_class("RuntimeError", eStandardError);
|
||||
eSecurityError = rb_define_class("SecurityError", eStandardError);
|
||||
eNotImpError = rb_define_class("NotImplementError", eException);
|
||||
rb_eRuntimeError = rb_define_class("RuntimeError", rb_eStandardError);
|
||||
rb_eSecurityError = rb_define_class("SecurityError", rb_eStandardError);
|
||||
rb_eNotImpError = rb_define_class("NotImplementError", rb_eException);
|
||||
|
||||
init_syserr();
|
||||
|
||||
rb_define_global_function("Exception", exception, -1);
|
||||
}
|
||||
|
||||
#define RAISE_ERROR(klass,fmt) {\
|
||||
va_list args;\
|
||||
char buf[BUFSIZ];\
|
||||
va_init_list(args,fmt);\
|
||||
vsnprintf(buf, BUFSIZ, fmt, args);\
|
||||
va_end(args);\
|
||||
rb_raise(exc_new2(klass, buf));\
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Raise(VALUE exc, char *fmt, ...)
|
||||
rb_raise(VALUE exc, char *fmt, ...)
|
||||
#else
|
||||
Raise(exc, fmt, va_alist)
|
||||
rb_raise(exc, fmt, va_alist)
|
||||
VALUE exc;
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(exc, fmt);
|
||||
va_list args;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
va_init_list(args,fmt);
|
||||
vsnprintf(buf, BUFSIZ, fmt, args);
|
||||
va_end(args);
|
||||
rb_exc_raise(rb_exc_new2(exc, buf));
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
TypeError(char *fmt, ...)
|
||||
rb_loaderror(char *fmt, ...)
|
||||
#else
|
||||
TypeError(fmt, va_alist)
|
||||
rb_loaderror(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(eTypeError, fmt);
|
||||
}
|
||||
va_list args;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
ArgError(char *fmt, ...)
|
||||
#else
|
||||
ArgError(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(eArgError, fmt);
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
NameError(char *fmt, ...)
|
||||
#else
|
||||
NameError(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(eNameError, fmt);
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
IndexError(char *fmt, ...)
|
||||
#else
|
||||
IndexError(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(eIndexError, fmt);
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Fail(char *fmt, ...)
|
||||
#else
|
||||
Fail(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(eRuntimeError, fmt);
|
||||
va_init_list(args, fmt);
|
||||
vsnprintf(buf, BUFSIZ, fmt, args);
|
||||
va_end(args);
|
||||
rb_exc_raise(rb_exc_new2(rb_eLoadError, buf));
|
||||
}
|
||||
|
||||
void
|
||||
rb_notimplement()
|
||||
{
|
||||
Raise(eNotImpError,
|
||||
rb_raise(rb_eNotImpError,
|
||||
"The %s() function is unimplemented on this machine",
|
||||
rb_id2name(the_frame->last_func));
|
||||
rb_id2name(ruby_frame->last_func));
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
LoadError(char *fmt, ...)
|
||||
rb_fatal(char *fmt, ...)
|
||||
#else
|
||||
LoadError(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
RAISE_ERROR(eLoadError, fmt);
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
Fatal(char *fmt, ...)
|
||||
#else
|
||||
Fatal(fmt, va_alist)
|
||||
rb_fatal(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -684,7 +625,7 @@ Fatal(fmt, va_alist)
|
|||
va_end(args);
|
||||
|
||||
rb_in_eval = 0;
|
||||
rb_fatal(exc_new2(eFatal, buf));
|
||||
rb_exc_fatal(rb_exc_new2(rb_eFatal, buf));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -702,7 +643,7 @@ rb_sys_fail(mesg)
|
|||
|
||||
err = strerror(errno);
|
||||
if (mesg) {
|
||||
buf = ALLOCA_N(char, strlen(err)+strlen(mesg)+1);
|
||||
buf = ALLOCA_N(char, strlen(err)+strlen(mesg)+4);
|
||||
sprintf(buf, "%s - %s", err, mesg);
|
||||
}
|
||||
else {
|
||||
|
@ -740,10 +681,10 @@ rb_sys_fail(mesg)
|
|||
else {
|
||||
ee = syserr_list[n];
|
||||
}
|
||||
ee = exc_new2(ee, buf);
|
||||
ee = rb_exc_new2(ee, buf);
|
||||
#endif
|
||||
rb_iv_set(ee, "errno", INT2FIX(n));
|
||||
rb_raise(ee);
|
||||
rb_exc_raise(ee);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -752,10 +693,10 @@ init_syserr()
|
|||
#ifdef __BEOS__
|
||||
int i, ix, offset;
|
||||
#endif
|
||||
eSystemCallError = rb_define_class("SystemCallError", eStandardError);
|
||||
rb_define_method(eSystemCallError, "errno", syserr_errno, 0);
|
||||
rb_eSystemCallError = rb_define_class("SystemCallError", rb_eStandardError);
|
||||
rb_define_method(rb_eSystemCallError, "errno", syserr_errno, 0);
|
||||
|
||||
mErrno = rb_define_module("Errno");
|
||||
rb_mErrno = rb_define_module("Errno");
|
||||
#ifdef __BEOS__
|
||||
for (i = 0; syserr_index[i].n != 0; i++) {
|
||||
ix = syserr_index[i].ix;
|
||||
|
@ -1140,18 +1081,18 @@ static void
|
|||
err_append(s)
|
||||
char *s;
|
||||
{
|
||||
extern VALUE errinfo;
|
||||
extern VALUE rb_errinfo;
|
||||
|
||||
if (rb_in_eval) {
|
||||
if (NIL_P(errinfo)) {
|
||||
errinfo = exc_new2(eSyntaxError, s);
|
||||
if (NIL_P(rb_errinfo)) {
|
||||
rb_errinfo = rb_exc_new2(rb_eSyntaxError, s);
|
||||
}
|
||||
else {
|
||||
VALUE str = str_to_str(errinfo);
|
||||
VALUE str = rb_str_to_str(rb_errinfo);
|
||||
|
||||
str_cat(str, "\n", 1);
|
||||
str_cat(str, s, strlen(s));
|
||||
errinfo = exc_new3(eSyntaxError, str);
|
||||
rb_str_cat(str, "\n", 1);
|
||||
rb_str_cat(str, s, strlen(s));
|
||||
rb_errinfo = rb_exc_new3(rb_eSyntaxError, str);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -41,7 +41,7 @@ struct windata {
|
|||
static void
|
||||
no_window()
|
||||
{
|
||||
Fail("already closed window");
|
||||
rb_raise(rb_eRuntimeError, "already closed window");
|
||||
}
|
||||
|
||||
#define GetWINDOW(obj, winp) {\
|
||||
|
@ -69,7 +69,7 @@ prep_window(class, window)
|
|||
struct windata *winp;
|
||||
|
||||
if (window == NULL) {
|
||||
Fail("failed to create window");
|
||||
rb_raise(rb_eRuntimeError, "failed to create window");
|
||||
}
|
||||
|
||||
obj = Data_Make_Struct(class, struct windata, 0, free_window, winp);
|
||||
|
@ -86,7 +86,7 @@ curses_init_screen()
|
|||
{
|
||||
initscr();
|
||||
if (stdscr == 0) {
|
||||
Fail("cannot initialize curses");
|
||||
rb_raise(rb_eRuntimeError, "cannot initialize curses");
|
||||
}
|
||||
clear();
|
||||
rb_stdscr = prep_window(cWindow, stdscr);
|
||||
|
@ -129,9 +129,9 @@ curses_closed()
|
|||
{
|
||||
#ifdef HAVE_ISENDWIN
|
||||
if (isendwin()) {
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
#else
|
||||
rb_notimplement();
|
||||
#endif
|
||||
|
@ -354,7 +354,7 @@ curses_getstr(obj)
|
|||
{
|
||||
char rtn[1024]; /* This should be big enough.. I hope */
|
||||
getstr(rtn);
|
||||
return str_taint(str_new2(rtn));
|
||||
return rb_str_taint(rb_str_new2(rtn));
|
||||
}
|
||||
|
||||
/* def delch */
|
||||
|
@ -404,7 +404,7 @@ window_s_new(class, lines, cols, top, left)
|
|||
window = newwin(NUM2INT(lines), NUM2INT(cols), NUM2INT(top), NUM2INT(left));
|
||||
wclear(window);
|
||||
w = prep_window(class, window);
|
||||
obj_call_init(w);
|
||||
rb_obj_call_init(w);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
@ -723,7 +723,7 @@ window_getstr(obj)
|
|||
|
||||
GetWINDOW(obj, winp);
|
||||
wgetstr(winp->window, rtn);
|
||||
return str_taint(str_new2(rtn));
|
||||
return rb_str_taint(rb_str_new2(rtn));
|
||||
}
|
||||
|
||||
/* def delch */
|
||||
|
@ -789,7 +789,7 @@ Init_curses()
|
|||
rb_define_module_function(mCurses, "lines", curses_lines, 0);
|
||||
rb_define_module_function(mCurses, "cols", curses_cols, 0);
|
||||
|
||||
cWindow = rb_define_class_under(mCurses, "Window", cObject);
|
||||
cWindow = rb_define_class_under(mCurses, "Window", rb_cObject);
|
||||
rb_define_singleton_method(cWindow, "new", window_s_new, 4);
|
||||
rb_define_method(cWindow, "subwin", window_subwin, 4);
|
||||
rb_define_method(cWindow, "close", window_close, 0);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
VALUE cDBM;
|
||||
|
||||
extern VALUE mEnumerable;
|
||||
extern VALUE rb_mEnumerable;
|
||||
|
||||
struct dbmdata {
|
||||
int di_size;
|
||||
|
@ -31,7 +31,7 @@ struct dbmdata {
|
|||
static void
|
||||
closed_dbm()
|
||||
{
|
||||
Fail("closed DBM file");
|
||||
rb_raise(rb_eRuntimeError, "closed DBM file");
|
||||
}
|
||||
|
||||
#define GetDBM(obj, dbmp) {\
|
||||
|
@ -86,7 +86,7 @@ fdbm_s_open(argc, argv, class)
|
|||
obj = Data_Make_Struct(class,struct dbmdata,0,free_dbm,dbmp);
|
||||
dbmp->di_dbm = dbm;
|
||||
dbmp->di_size = -1;
|
||||
obj_call_init(obj);
|
||||
rb_obj_call_init(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
@ -123,7 +123,7 @@ fdbm_fetch(obj, keystr)
|
|||
if (value.dptr == 0) {
|
||||
return Qnil;
|
||||
}
|
||||
return str_taint(str_new(value.dptr, value.dsize));
|
||||
return rb_str_taint(rb_str_new(value.dptr, value.dsize));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -135,9 +135,9 @@ fdbm_indexes(argc, argv, obj)
|
|||
VALUE new;
|
||||
int i;
|
||||
|
||||
new = ary_new2(argc);
|
||||
new = rb_ary_new2(argc);
|
||||
for (i=0; i<argc; i++) {
|
||||
ary_push(new, fdbm_fetch(obj, argv[i]));
|
||||
rb_ary_push(new, fdbm_fetch(obj, argv[i]));
|
||||
}
|
||||
|
||||
return new;
|
||||
|
@ -161,13 +161,13 @@ fdbm_delete(obj, keystr)
|
|||
|
||||
value = dbm_fetch(dbm, key);
|
||||
if (value.dptr == 0) {
|
||||
if (iterator_p()) rb_yield(keystr);
|
||||
if (rb_iterator_p()) rb_yield(keystr);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
if (dbm_delete(dbm, key)) {
|
||||
dbmp->di_size = -1;
|
||||
Fail("dbm_delete failed");
|
||||
rb_raise(rb_eRuntimeError, "dbm_delete failed");
|
||||
}
|
||||
else if (dbmp->di_size >= 0) {
|
||||
dbmp->di_size--;
|
||||
|
@ -193,9 +193,9 @@ fdbm_shift(obj)
|
|||
val = dbm_fetch(dbm, key);
|
||||
dbm_delete(dbm, key);
|
||||
|
||||
keystr = str_taint(str_new(key.dptr, key.dsize));
|
||||
valstr = str_taint(str_new(val.dptr, val.dsize));
|
||||
return assoc_new(keystr, valstr);
|
||||
keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize));
|
||||
valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize));
|
||||
return rb_assoc_new(keystr, valstr);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -212,11 +212,11 @@ fdbm_delete_if(obj)
|
|||
dbm = dbmp->di_dbm;
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
val = dbm_fetch(dbm, key);
|
||||
keystr = str_taint(str_new(key.dptr, key.dsize));
|
||||
valstr = str_taint(str_new(val.dptr, val.dsize));
|
||||
if (RTEST(rb_yield(assoc_new(keystr, valstr)))) {
|
||||
keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize));
|
||||
valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize));
|
||||
if (RTEST(rb_yield(rb_assoc_new(keystr, valstr)))) {
|
||||
if (dbm_delete(dbm, key)) {
|
||||
Fail("dbm_delete failed");
|
||||
rb_raise(rb_eRuntimeError, "dbm_delete failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ fdbm_clear(obj)
|
|||
dbmp->di_size = -1;
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
if (dbm_delete(dbm, key)) {
|
||||
Fail("dbm_delete failed");
|
||||
rb_raise(rb_eRuntimeError, "dbm_delete failed");
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
|
@ -251,15 +251,15 @@ fdbm_invert(obj)
|
|||
struct dbmdata *dbmp;
|
||||
DBM *dbm;
|
||||
VALUE keystr, valstr;
|
||||
VALUE hash = hash_new();
|
||||
VALUE hash = rb_hash_new();
|
||||
|
||||
GetDBM(obj, dbmp);
|
||||
dbm = dbmp->di_dbm;
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
val = dbm_fetch(dbm, key);
|
||||
keystr = str_taint(str_new(key.dptr, key.dsize));
|
||||
valstr = str_taint(str_new(val.dptr, val.dsize));
|
||||
hash_aset(hash, valstr, keystr);
|
||||
keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize));
|
||||
valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize));
|
||||
rb_hash_aset(hash, valstr, keystr);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ update_i(pair, dbm)
|
|||
{
|
||||
Check_Type(pair, T_ARRAY);
|
||||
if (RARRAY(pair)->len < 2) {
|
||||
ArgError("pair must be [key, value]");
|
||||
rb_raise(rb_eArgError, "pair must be [key, value]");
|
||||
}
|
||||
fdbm_store(dbm, RARRAY(pair)->ptr[0], RARRAY(pair)->ptr[1]);
|
||||
return Qnil;
|
||||
|
@ -316,14 +316,14 @@ fdbm_store(obj, keystr, valstr)
|
|||
}
|
||||
|
||||
rb_secure(4);
|
||||
keystr = obj_as_string(keystr);
|
||||
keystr = rb_obj_as_string(keystr);
|
||||
|
||||
key.dptr = RSTRING(keystr)->ptr;
|
||||
key.dsize = RSTRING(keystr)->len;
|
||||
|
||||
if (NIL_P(valstr)) return fdbm_delete(obj, keystr);
|
||||
|
||||
valstr = obj_as_string(valstr);
|
||||
valstr = rb_obj_as_string(valstr);
|
||||
val.dptr = RSTRING(valstr)->ptr;
|
||||
val.dsize = RSTRING(valstr)->len;
|
||||
|
||||
|
@ -335,7 +335,7 @@ fdbm_store(obj, keystr, valstr)
|
|||
dbm_clearerr(dbm);
|
||||
#endif
|
||||
if (errno == EPERM) rb_sys_fail(0);
|
||||
Fail("dbm_store failed");
|
||||
rb_raise(rb_eRuntimeError, "dbm_store failed");
|
||||
}
|
||||
|
||||
return valstr;
|
||||
|
@ -382,8 +382,8 @@ fdbm_empty_p(obj)
|
|||
else {
|
||||
i = dbmp->di_size;
|
||||
}
|
||||
if (i == 0) return TRUE;
|
||||
return FALSE;
|
||||
if (i == 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -398,7 +398,7 @@ fdbm_each_value(obj)
|
|||
dbm = dbmp->di_dbm;
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
val = dbm_fetch(dbm, key);
|
||||
rb_yield(str_taint(str_new(val.dptr, val.dsize)));
|
||||
rb_yield(rb_str_taint(rb_str_new(val.dptr, val.dsize)));
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
@ -414,7 +414,7 @@ fdbm_each_key(obj)
|
|||
GetDBM(obj, dbmp);
|
||||
dbm = dbmp->di_dbm;
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
rb_yield(str_taint(str_new(key.dptr, key.dsize)));
|
||||
rb_yield(rb_str_taint(rb_str_new(key.dptr, key.dsize)));
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
@ -433,9 +433,9 @@ fdbm_each_pair(obj)
|
|||
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
val = dbm_fetch(dbm, key);
|
||||
keystr = str_taint(str_new(key.dptr, key.dsize));
|
||||
valstr = str_taint(str_new(val.dptr, val.dsize));
|
||||
rb_yield(assoc_new(keystr, valstr));
|
||||
keystr = rb_str_taint(rb_str_new(key.dptr, key.dsize));
|
||||
valstr = rb_str_taint(rb_str_new(val.dptr, val.dsize));
|
||||
rb_yield(rb_assoc_new(keystr, valstr));
|
||||
}
|
||||
|
||||
return obj;
|
||||
|
@ -453,9 +453,9 @@ fdbm_keys(obj)
|
|||
GetDBM(obj, dbmp);
|
||||
dbm = dbmp->di_dbm;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
ary_push(ary, str_taint(str_new(key.dptr, key.dsize)));
|
||||
rb_ary_push(ary, rb_str_taint(rb_str_new(key.dptr, key.dsize)));
|
||||
}
|
||||
|
||||
return ary;
|
||||
|
@ -473,10 +473,10 @@ fdbm_values(obj)
|
|||
GetDBM(obj, dbmp);
|
||||
dbm = dbmp->di_dbm;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
val = dbm_fetch(dbm, key);
|
||||
ary_push(ary, str_taint(str_new(val.dptr, val.dsize)));
|
||||
rb_ary_push(ary, rb_str_taint(rb_str_new(val.dptr, val.dsize)));
|
||||
}
|
||||
|
||||
return ary;
|
||||
|
@ -497,8 +497,8 @@ fdbm_has_key(obj, keystr)
|
|||
GetDBM(obj, dbmp);
|
||||
dbm = dbmp->di_dbm;
|
||||
val = dbm_fetch(dbm, key);
|
||||
if (val.dptr) return TRUE;
|
||||
return FALSE;
|
||||
if (val.dptr) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -519,9 +519,9 @@ fdbm_has_value(obj, valstr)
|
|||
val = dbm_fetch(dbm, key);
|
||||
if (val.dsize == RSTRING(valstr)->len &&
|
||||
memcmp(val.dptr, RSTRING(valstr)->ptr, val.dsize) == 0)
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -536,11 +536,11 @@ fdbm_to_a(obj)
|
|||
GetDBM(obj, dbmp);
|
||||
dbm = dbmp->di_dbm;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {
|
||||
val = dbm_fetch(dbm, key);
|
||||
ary_push(ary, assoc_new(str_taint(str_new(key.dptr, key.dsize)),
|
||||
str_taint(str_new(val.dptr, val.dsize))));
|
||||
rb_ary_push(ary, rb_assoc_new(rb_str_taint(rb_str_new(key.dptr, key.dsize)),
|
||||
rb_str_taint(rb_str_new(val.dptr, val.dsize))));
|
||||
}
|
||||
|
||||
return ary;
|
||||
|
@ -548,8 +548,8 @@ fdbm_to_a(obj)
|
|||
|
||||
Init_dbm()
|
||||
{
|
||||
cDBM = rb_define_class("DBM", cObject);
|
||||
rb_include_module(cDBM, mEnumerable);
|
||||
cDBM = rb_define_class("DBM", rb_cObject);
|
||||
rb_include_module(cDBM, rb_mEnumerable);
|
||||
|
||||
rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
|
||||
rb_define_singleton_method(cDBM, "new", fdbm_s_open, -1);
|
||||
|
|
|
@ -37,7 +37,7 @@ etc_getlogin(obj)
|
|||
#endif
|
||||
|
||||
if (login)
|
||||
return str_new2(login);
|
||||
return rb_str_new2(login);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -47,16 +47,16 @@ setup_passwd(pwd)
|
|||
struct passwd *pwd;
|
||||
{
|
||||
if (pwd == 0) rb_sys_fail("/etc/passwd");
|
||||
return struct_new(sPasswd,
|
||||
str_new2(pwd->pw_name),
|
||||
str_new2(pwd->pw_passwd),
|
||||
return rb_struct_new(sPasswd,
|
||||
rb_str_new2(pwd->pw_name),
|
||||
rb_str_new2(pwd->pw_passwd),
|
||||
INT2FIX(pwd->pw_uid),
|
||||
INT2FIX(pwd->pw_gid),
|
||||
#ifdef PW_GECOS
|
||||
str_new2(pwd->pw_gecos),
|
||||
rb_str_new2(pwd->pw_gecos),
|
||||
#endif
|
||||
str_new2(pwd->pw_dir),
|
||||
str_new2(pwd->pw_shell),
|
||||
rb_str_new2(pwd->pw_dir),
|
||||
rb_str_new2(pwd->pw_shell),
|
||||
#ifdef PW_CHANGE
|
||||
INT2FIX(pwd->pw_change),
|
||||
#endif
|
||||
|
@ -67,10 +67,10 @@ setup_passwd(pwd)
|
|||
INT2FIX(pwd->pw_age),
|
||||
#endif
|
||||
#ifdef PW_CLASS
|
||||
str_new2(pwd->pw_class),
|
||||
rb_str_new2(pwd->pw_class),
|
||||
#endif
|
||||
#ifdef PW_COMMENT
|
||||
str_new2(pwd->pw_comment),
|
||||
rb_str_new2(pwd->pw_comment),
|
||||
#endif
|
||||
#ifdef PW_EXPIRE
|
||||
INT2FIX(pwd->pw_expire),
|
||||
|
@ -98,7 +98,7 @@ etc_getpwuid(argc, argv, obj)
|
|||
uid = getuid();
|
||||
}
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd == 0) Fail("can't find user for %d", uid);
|
||||
if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", uid);
|
||||
return setup_passwd(pwd);
|
||||
#else
|
||||
return Qnil;
|
||||
|
@ -114,7 +114,7 @@ etc_getpwnam(obj, nam)
|
|||
|
||||
Check_Type(nam, T_STRING);
|
||||
pwd = getpwnam(RSTRING(nam)->ptr);
|
||||
if (pwd == 0) Fail("can't find user for %s", RSTRING(nam)->ptr);
|
||||
if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s", RSTRING(nam)->ptr);
|
||||
return setup_passwd(pwd);
|
||||
#else
|
||||
return Qnil;
|
||||
|
@ -128,7 +128,7 @@ etc_passwd(obj)
|
|||
#if defined(HAVE_GETPWENT)
|
||||
struct passwd *pw;
|
||||
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
setpwent();
|
||||
while (pw = getpwent()) {
|
||||
rb_yield(setup_passwd(pw));
|
||||
|
@ -137,7 +137,7 @@ etc_passwd(obj)
|
|||
return obj;
|
||||
}
|
||||
pw = getpwent();
|
||||
if (pw == 0) Fail("can't fetch next -- /etc/passwd");
|
||||
if (pw == 0) rb_raise(rb_eRuntimeError, "can't fetch next -- /etc/passwd");
|
||||
return setup_passwd(pw);
|
||||
#else
|
||||
return Qnil;
|
||||
|
@ -152,15 +152,15 @@ setup_group(grp)
|
|||
VALUE mem;
|
||||
char **tbl;
|
||||
|
||||
mem = ary_new();
|
||||
mem = rb_ary_new();
|
||||
tbl = grp->gr_mem;
|
||||
while (*tbl) {
|
||||
ary_push(mem, str_new2(*tbl));
|
||||
rb_ary_push(mem, rb_str_new2(*tbl));
|
||||
tbl++;
|
||||
}
|
||||
return struct_new(sGroup,
|
||||
str_new2(grp->gr_name),
|
||||
str_new2(grp->gr_passwd),
|
||||
return rb_struct_new(sGroup,
|
||||
rb_str_new2(grp->gr_name),
|
||||
rb_str_new2(grp->gr_passwd),
|
||||
INT2FIX(grp->gr_gid),
|
||||
mem);
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ etc_getgrgid(obj, id)
|
|||
|
||||
gid = NUM2INT(id);
|
||||
grp = getgrgid(gid);
|
||||
if (grp == 0) Fail("can't find group for %d", gid);
|
||||
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid);
|
||||
return setup_group(grp);
|
||||
#else
|
||||
return Qnil;
|
||||
|
@ -192,7 +192,7 @@ etc_getgrnam(obj, nam)
|
|||
|
||||
Check_Type(nam, T_STRING);
|
||||
grp = getgrnam(RSTRING(nam)->ptr);
|
||||
if (grp == 0) Fail("can't find group for %s", RSTRING(nam)->ptr);
|
||||
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %s", RSTRING(nam)->ptr);
|
||||
return setup_group(grp);
|
||||
#else
|
||||
return Qnil;
|
||||
|
@ -206,7 +206,7 @@ etc_group(obj)
|
|||
#ifdef HAVE_GETGRENT
|
||||
struct group *grp;
|
||||
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
setgrent();
|
||||
while (grp = getgrent()) {
|
||||
rb_yield(setup_group(grp));
|
||||
|
@ -237,7 +237,7 @@ Init_etc()
|
|||
rb_define_module_function(mEtc, "getgrnam", etc_getgrnam, 1);
|
||||
rb_define_module_function(mEtc, "group", etc_group, 0);
|
||||
|
||||
sPasswd = struct_define("Passwd",
|
||||
sPasswd = rb_struct_define("Passwd",
|
||||
"name", "passwd", "uid", "gid",
|
||||
"gecos", "dir", "shell",
|
||||
#ifdef PW_CHANGE
|
||||
|
@ -262,7 +262,7 @@ Init_etc()
|
|||
rb_global_variable(&sPasswd);
|
||||
|
||||
#ifdef HAVE_GETGRENT
|
||||
sGroup = struct_define("Group", "name", "passwd", "gid", "mem", 0);
|
||||
sGroup = rb_struct_define("Group", "name", "passwd", "gid", "mem", 0);
|
||||
rb_global_variable(&sGroup);
|
||||
#endif
|
||||
}
|
||||
|
|
745
ext/gtk/gtk.c
745
ext/gtk/gtk.c
File diff suppressed because it is too large
Load diff
|
@ -1833,7 +1833,7 @@ kconv_kconv(argc, argv)
|
|||
if (in_code == _NOCONV) return (VALUE)src;
|
||||
}
|
||||
|
||||
dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, out_code, in_code);
|
||||
|
||||
return dst;
|
||||
|
@ -1847,7 +1847,7 @@ kconv_tojis(obj, src)
|
|||
|
||||
Check_Type(src, T_STRING);
|
||||
|
||||
dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, _JIS, _AUTO);
|
||||
|
||||
return dst;
|
||||
|
@ -1861,7 +1861,7 @@ kconv_toeuc(obj, src)
|
|||
|
||||
Check_Type(src, T_STRING);
|
||||
|
||||
dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, _EUC, _AUTO);
|
||||
|
||||
return (VALUE)dst;
|
||||
|
@ -1875,7 +1875,7 @@ kconv_tosjis(obj, src)
|
|||
|
||||
Check_Type(src, T_STRING);
|
||||
|
||||
dst = str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
dst = rb_str_new(0, RSTRING(src)->len*3+10); /* large enough? */
|
||||
RSTRING(dst)->len = do_kconv(RSTRING(src)->ptr, RSTRING(dst)->ptr, RSTRING(dst)->len, _SJIS, _AUTO);
|
||||
|
||||
return dst;
|
||||
|
|
|
@ -42,7 +42,7 @@ md5_digest(obj)
|
|||
ctx = *md5;
|
||||
MD5Final(digest, &ctx);
|
||||
|
||||
return str_new(digest, 16);
|
||||
return rb_str_new(digest, 16);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -77,14 +77,14 @@ md5_new(argc, argv, class)
|
|||
if (!NIL_P(arg)) {
|
||||
md5_update(obj, arg);
|
||||
}
|
||||
obj_call_init(obj);
|
||||
rb_obj_call_init(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
Init_md5()
|
||||
{
|
||||
cMD5 = rb_define_class("MD5", cObject);
|
||||
cMD5 = rb_define_class("MD5", rb_cObject);
|
||||
|
||||
rb_define_singleton_method(cMD5, "new", md5_new, -1);
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ else
|
|||
end
|
||||
have_header("sys/un.h")
|
||||
if have_func(test_func)
|
||||
have_func("inet_aton")
|
||||
have_func("hsterror")
|
||||
unless have_func("gethostname")
|
||||
have_func("uname")
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,10 +16,10 @@
|
|||
# include <Quickdraw.h>
|
||||
#endif
|
||||
|
||||
/* for debug */
|
||||
/* for rb_debug */
|
||||
|
||||
#define DUMP1(ARG1) if (debug) { fprintf(stderr, "tcltklib: %s\n", ARG1);}
|
||||
#define DUMP2(ARG1, ARG2) if (debug) { fprintf(stderr, "tcltklib: ");\
|
||||
#define DUMP1(ARG1) if (rb_debug) { fprintf(stderr, "tcltklib: %s\n", ARG1);}
|
||||
#define DUMP2(ARG1, ARG2) if (rb_debug) { fprintf(stderr, "tcltklib: ");\
|
||||
fprintf(stderr, ARG1, ARG2); fprintf(stderr, "\n"); }
|
||||
/*
|
||||
#define DUMP1(ARG1)
|
||||
|
@ -56,7 +56,7 @@ void _timer_for_tcl (ClientData clientData)
|
|||
timer->flag = 0;
|
||||
CHECK_INTS;
|
||||
#ifdef THREAD
|
||||
if (!thread_critical) thread_schedule();
|
||||
if (!rb_thread_critical) rb_thread_schedule();
|
||||
#endif
|
||||
|
||||
timer->token = Tk_CreateTimerHandler(200, _timer_for_tcl,
|
||||
|
@ -121,7 +121,7 @@ ip_ruby(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
|
|||
|
||||
/* ruby command has 1 arg. */
|
||||
if (argc != 2) {
|
||||
ArgError("wrong # of arguments (%d for 1)", argc);
|
||||
rb_raise(rb_eArgError, "wrong # of arguments (%d for 1)", argc);
|
||||
}
|
||||
|
||||
/* get C string from Tcl object */
|
||||
|
@ -133,10 +133,10 @@ ip_ruby(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
|
|||
|
||||
/* evaluate the argument string by ruby */
|
||||
DUMP2("rb_eval_string(%s)", arg);
|
||||
old_trapflg = trap_immediate;
|
||||
trap_immediate = 0;
|
||||
old_trapflg = rb_trap_immediate;
|
||||
rb_trap_immediate = 0;
|
||||
res = rb_rescue(rb_eval_string, (VALUE)arg, ip_eval_rescue, (VALUE)&failed);
|
||||
trap_immediate = old_trapflg;
|
||||
rb_trap_immediate = old_trapflg;
|
||||
|
||||
Tcl_ResetResult(interp);
|
||||
if (failed) {
|
||||
|
@ -192,11 +192,11 @@ ip_new(VALUE self)
|
|||
/* from Tcl_AppInit() */
|
||||
DUMP1("Tcl_Init");
|
||||
if (Tcl_Init(ptr->ip) == TCL_ERROR) {
|
||||
Fail("Tcl_Init");
|
||||
rb_raise(rb_eRuntimeError, "Tcl_Init");
|
||||
}
|
||||
DUMP1("Tk_Init");
|
||||
if (Tk_Init(ptr->ip) == TCL_ERROR) {
|
||||
Fail("Tk_Init");
|
||||
rb_raise(rb_eRuntimeError, "Tk_Init");
|
||||
}
|
||||
DUMP1("Tcl_StaticPackage(\"Tk\")");
|
||||
Tcl_StaticPackage(ptr->ip, "Tk", Tk_Init,
|
||||
|
@ -234,12 +234,12 @@ ip_eval(VALUE self, VALUE str)
|
|||
DUMP2("Tcl_Eval(%s)", buf);
|
||||
ptr->return_value = Tcl_Eval(ptr->ip, buf);
|
||||
if (ptr->return_value == TCL_ERROR) {
|
||||
Fail(ptr->ip->result);
|
||||
rb_raise(rb_eRuntimeError, ptr->ip->result);
|
||||
}
|
||||
DUMP2("(TCL_Eval result) %d", ptr->return_value);
|
||||
|
||||
/* pass back the result (as string) */
|
||||
return(str_new2(ptr->ip->result));
|
||||
return(rb_str_new2(ptr->ip->result));
|
||||
}
|
||||
|
||||
|
||||
|
@ -271,7 +271,7 @@ ip_toUTF8(VALUE self, VALUE str, VALUE encodename)
|
|||
Tcl_FreeEncoding(encoding);
|
||||
Tcl_DStringFree(&dstr);
|
||||
|
||||
return str_new2(buff2);
|
||||
return rb_str_new2(buff2);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -303,7 +303,7 @@ ip_fromUTF8(VALUE self, VALUE str, VALUE encodename)
|
|||
Tcl_FreeEncoding(encoding);
|
||||
Tcl_DStringFree(&dstr);
|
||||
|
||||
return str_new2(buff2);
|
||||
return rb_str_new2(buff2);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -330,7 +330,7 @@ ip_invoke(int argc, VALUE *argv, VALUE obj)
|
|||
|
||||
/* map from the command name to a C procedure */
|
||||
if (!Tcl_GetCommandInfo(ptr->ip, cmd, &info)) {
|
||||
NameError("invalid command name `%s'", cmd);
|
||||
rb_raise(rb_eNameError, "invalid command name `%s'", cmd);
|
||||
}
|
||||
#if TCL_MAJOR_VERSION >= 8
|
||||
object = info.isNativeObjectProc;
|
||||
|
@ -379,11 +379,11 @@ ip_invoke(int argc, VALUE *argv, VALUE obj)
|
|||
}
|
||||
|
||||
if (ptr->return_value == TCL_ERROR) {
|
||||
Fail(ptr->ip->result);
|
||||
rb_raise(rb_eRuntimeError, ptr->ip->result);
|
||||
}
|
||||
|
||||
/* pass back the result (as string) */
|
||||
return(str_new2(ptr->ip->result));
|
||||
return(rb_str_new2(ptr->ip->result));
|
||||
}
|
||||
|
||||
/* get return code from Tcl_Eval() */
|
||||
|
@ -413,10 +413,10 @@ void Init_tcltklib()
|
|||
extern VALUE rb_argv0; /* the argv[0] */
|
||||
|
||||
VALUE lib = rb_define_module("TclTkLib");
|
||||
VALUE ip = rb_define_class("TclTkIp", cObject);
|
||||
VALUE ip = rb_define_class("TclTkIp", rb_cObject);
|
||||
|
||||
eTkCallbackBreak = rb_define_class("TkCallbackBreak", eStandardError);
|
||||
eTkCallbackContinue = rb_define_class("TkCallbackContinue",eStandardError);
|
||||
eTkCallbackBreak = rb_define_class("TkCallbackBreak", rb_eStandardError);
|
||||
eTkCallbackContinue = rb_define_class("TkCallbackContinue",rb_eStandardError);
|
||||
|
||||
rb_define_module_function(lib, "mainloop", lib_mainloop, 0);
|
||||
|
||||
|
|
|
@ -22,24 +22,8 @@ tk_eval_cmd(argc, argv)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
tk_s_new(argc, argv, class)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE class;
|
||||
{
|
||||
VALUE obj = obj_alloc(class);
|
||||
|
||||
rb_funcall2(obj, rb_intern("initialize"), argc, argv);
|
||||
if (iterator_p()) rb_yield_0(obj, obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
Init_tkutil()
|
||||
{
|
||||
VALUE mTK = rb_define_module("TkUtil");
|
||||
VALUE cTK = rb_define_class("TkKernel", cObject);
|
||||
|
||||
rb_define_singleton_method(mTK, "eval_cmd", tk_eval_cmd, -1);
|
||||
|
||||
rb_define_singleton_method(cTK, "new", tk_s_new, -1);
|
||||
}
|
||||
|
|
204
gc.c
204
gc.c
|
@ -20,7 +20,7 @@
|
|||
#include <setjmp.h>
|
||||
|
||||
void re_free_registers _((struct re_registers*));
|
||||
void io_fptr_finalize _((struct OpenFile*));
|
||||
void rb_io_fptr_finalize _((struct OpenFile*));
|
||||
|
||||
#ifndef setjmp
|
||||
#ifdef HAVE__SETJMP
|
||||
|
@ -54,19 +54,19 @@ xmalloc(size)
|
|||
void *mem;
|
||||
|
||||
if (size < 0) {
|
||||
ArgError("negative allocation size (or too big)");
|
||||
rb_raise(rb_eArgError, "negative allocation size (or too big)");
|
||||
}
|
||||
if (size == 0) size = 1;
|
||||
malloc_memories += size;
|
||||
if (malloc_memories > GC_MALLOC_LIMIT && alloc_objects > GC_NEWOBJ_LIMIT) {
|
||||
gc_gc();
|
||||
rb_gc();
|
||||
}
|
||||
mem = malloc(size);
|
||||
if (!mem) {
|
||||
gc_gc();
|
||||
rb_gc();
|
||||
mem = malloc(size);
|
||||
if (!mem)
|
||||
Fatal("failed to allocate memory");
|
||||
rb_fatal("failed to allocate memory");
|
||||
}
|
||||
|
||||
return mem;
|
||||
|
@ -92,16 +92,16 @@ xrealloc(ptr, size)
|
|||
void *mem;
|
||||
|
||||
if (size < 0) {
|
||||
ArgError("negative re-allocation size");
|
||||
rb_raise(rb_eArgError, "negative re-allocation size");
|
||||
}
|
||||
if (!ptr) return xmalloc(size);
|
||||
malloc_memories += size;
|
||||
mem = realloc(ptr, size);
|
||||
if (!mem) {
|
||||
gc_gc();
|
||||
rb_gc();
|
||||
mem = realloc(ptr, size);
|
||||
if (!mem)
|
||||
Fatal("failed to allocate memory(realloc)");
|
||||
rb_fatal("failed to allocate memory(realloc)");
|
||||
}
|
||||
|
||||
return mem;
|
||||
|
@ -140,25 +140,25 @@ Cambridge, MA 02138
|
|||
extern int rb_in_compile;
|
||||
static int dont_gc;
|
||||
|
||||
VALUE
|
||||
gc_s_enable()
|
||||
static VALUE
|
||||
gc_enable()
|
||||
{
|
||||
int old = dont_gc;
|
||||
|
||||
dont_gc = FALSE;
|
||||
dont_gc = Qfalse;
|
||||
return old;
|
||||
}
|
||||
|
||||
VALUE
|
||||
gc_s_disable()
|
||||
static VALUE
|
||||
gc_disable()
|
||||
{
|
||||
int old = dont_gc;
|
||||
|
||||
dont_gc = TRUE;
|
||||
dont_gc = Qtrue;
|
||||
return old;
|
||||
}
|
||||
|
||||
VALUE mGC;
|
||||
VALUE rb_mGC;
|
||||
|
||||
static struct gc_list {
|
||||
VALUE *varptr;
|
||||
|
@ -225,11 +225,11 @@ add_heap()
|
|||
heaps = (heaps_used>0)?
|
||||
(RVALUE**)realloc(heaps, heaps_length*sizeof(RVALUE)):
|
||||
(RVALUE**)malloc(heaps_length*sizeof(RVALUE));
|
||||
if (heaps == 0) Fatal("can't alloc memory");
|
||||
if (heaps == 0) rb_fatal("can't alloc memory");
|
||||
}
|
||||
|
||||
p = heaps[heaps_used++] = (RVALUE*)malloc(sizeof(RVALUE)*HEAP_SLOTS);
|
||||
if (p == 0) Fatal("can't alloc memory");
|
||||
if (p == 0) rb_fatal("add_heap: can't alloc memory");
|
||||
pend = p + HEAP_SLOTS;
|
||||
if (lomem == 0 || lomem > p) lomem = p;
|
||||
if (himem < pend) himem = pend;
|
||||
|
@ -255,14 +255,14 @@ rb_newobj()
|
|||
alloc_objects++;
|
||||
return obj;
|
||||
}
|
||||
if (dont_gc || prohibit_interrupt) add_heap();
|
||||
else gc_gc();
|
||||
if (dont_gc || rb_prohibit_interrupt) add_heap();
|
||||
else rb_gc();
|
||||
|
||||
goto retry;
|
||||
}
|
||||
|
||||
VALUE
|
||||
data_object_alloc(klass, datap, dmark, dfree)
|
||||
rb_data_object_alloc(klass, datap, dmark, dfree)
|
||||
VALUE klass;
|
||||
void *datap;
|
||||
void (*dfree)();
|
||||
|
@ -278,7 +278,7 @@ data_object_alloc(klass, datap, dmark, dfree)
|
|||
}
|
||||
|
||||
extern st_table *rb_class_tbl;
|
||||
VALUE *gc_stack_start;
|
||||
VALUE *rb_gc_stack_start;
|
||||
|
||||
static int
|
||||
looks_pointerp(ptr)
|
||||
|
@ -288,16 +288,16 @@ looks_pointerp(ptr)
|
|||
register RVALUE *heap_org;
|
||||
register long i;
|
||||
|
||||
if (p < lomem || p > himem) return FALSE;
|
||||
if (p < lomem || p > himem) return Qfalse;
|
||||
|
||||
/* check if p looks like a pointer */
|
||||
for (i=0; i < heaps_used; i++) {
|
||||
heap_org = heaps[i];
|
||||
if (heap_org <= p && p < heap_org + HEAP_SLOTS
|
||||
&& ((((char*)p)-((char*)heap_org))%sizeof(RVALUE)) == 0)
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -307,14 +307,14 @@ mark_locations_array(x, n)
|
|||
{
|
||||
while (n--) {
|
||||
if (looks_pointerp(*x)) {
|
||||
gc_mark(*x);
|
||||
rb_gc_mark(*x);
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gc_mark_locations(start, end)
|
||||
rb_gc_mark_locations(start, end)
|
||||
VALUE *start, *end;
|
||||
{
|
||||
VALUE *tmp;
|
||||
|
@ -334,7 +334,7 @@ mark_entry(key, value)
|
|||
ID key;
|
||||
VALUE value;
|
||||
{
|
||||
gc_mark(value);
|
||||
rb_gc_mark(value);
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
|
@ -351,8 +351,8 @@ mark_hashentry(key, value)
|
|||
ID key;
|
||||
VALUE value;
|
||||
{
|
||||
gc_mark(key);
|
||||
gc_mark(value);
|
||||
rb_gc_mark(key);
|
||||
rb_gc_mark(value);
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
|
@ -365,16 +365,16 @@ mark_hash(tbl)
|
|||
}
|
||||
|
||||
void
|
||||
gc_mark_maybe(obj)
|
||||
rb_gc_mark_maybe(obj)
|
||||
void *obj;
|
||||
{
|
||||
if (looks_pointerp(obj)) {
|
||||
gc_mark(obj);
|
||||
rb_gc_mark(obj);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gc_mark(ptr)
|
||||
rb_gc_mark(ptr)
|
||||
void *ptr;
|
||||
{
|
||||
register RVALUE *obj = RANY(ptr);
|
||||
|
@ -390,7 +390,7 @@ gc_mark(ptr)
|
|||
switch (obj->as.basic.flags & T_MASK) {
|
||||
case T_NIL:
|
||||
case T_FIXNUM:
|
||||
Bug("gc_mark() called for broken object");
|
||||
rb_bug("rb_gc_mark() called for broken object");
|
||||
break;
|
||||
|
||||
case T_NODE:
|
||||
|
@ -399,7 +399,7 @@ gc_mark(ptr)
|
|||
case NODE_FOR:
|
||||
case NODE_ITER:
|
||||
case NODE_CREF:
|
||||
gc_mark(obj->as.node.u2.node);
|
||||
rb_gc_mark(obj->as.node.u2.node);
|
||||
/* fall through */
|
||||
case NODE_BLOCK: /* 1,3 */
|
||||
case NODE_ARRAY:
|
||||
|
@ -413,7 +413,7 @@ gc_mark(ptr)
|
|||
#ifdef C_ALLOCA
|
||||
case NODE_ALLOCA:
|
||||
#endif
|
||||
gc_mark(obj->as.node.u1.node);
|
||||
rb_gc_mark(obj->as.node.u1.node);
|
||||
/* fall through */
|
||||
case NODE_SUPER: /* 3 */
|
||||
case NODE_FCALL:
|
||||
|
@ -425,7 +425,7 @@ gc_mark(ptr)
|
|||
case NODE_UNTIL:
|
||||
case NODE_MATCH2:
|
||||
case NODE_MATCH3:
|
||||
gc_mark(obj->as.node.u1.node);
|
||||
rb_gc_mark(obj->as.node.u1.node);
|
||||
/* fall through */
|
||||
case NODE_METHOD: /* 2 */
|
||||
case NODE_NOT:
|
||||
|
@ -447,7 +447,7 @@ gc_mark(ptr)
|
|||
goto Top;
|
||||
|
||||
case NODE_SCOPE: /* 2,3 */
|
||||
gc_mark(obj->as.node.u3.node);
|
||||
rb_gc_mark(obj->as.node.u3.node);
|
||||
obj = RANY(obj->as.node.u2.node);
|
||||
goto Top;
|
||||
|
||||
|
@ -471,10 +471,10 @@ gc_mark(ptr)
|
|||
|
||||
default:
|
||||
if (looks_pointerp(obj->as.node.u1.node)) {
|
||||
gc_mark(obj->as.node.u1.node);
|
||||
rb_gc_mark(obj->as.node.u1.node);
|
||||
}
|
||||
if (looks_pointerp(obj->as.node.u2.node)) {
|
||||
gc_mark(obj->as.node.u2.node);
|
||||
rb_gc_mark(obj->as.node.u2.node);
|
||||
}
|
||||
if (looks_pointerp(obj->as.node.u3.node)) {
|
||||
obj = RANY(obj->as.node.u3.node);
|
||||
|
@ -484,17 +484,17 @@ gc_mark(ptr)
|
|||
return; /* no need to mark class. */
|
||||
}
|
||||
|
||||
gc_mark(obj->as.basic.klass);
|
||||
rb_gc_mark(obj->as.basic.klass);
|
||||
switch (obj->as.basic.flags & T_MASK) {
|
||||
case T_ICLASS:
|
||||
gc_mark(obj->as.klass.super);
|
||||
rb_gc_mark(obj->as.klass.super);
|
||||
mark_tbl(obj->as.klass.iv_tbl);
|
||||
mark_tbl(obj->as.klass.m_tbl);
|
||||
break;
|
||||
|
||||
case T_CLASS:
|
||||
case T_MODULE:
|
||||
gc_mark(obj->as.klass.super);
|
||||
rb_gc_mark(obj->as.klass.super);
|
||||
mark_tbl(obj->as.klass.m_tbl);
|
||||
mark_tbl(obj->as.klass.iv_tbl);
|
||||
break;
|
||||
|
@ -505,12 +505,13 @@ gc_mark(ptr)
|
|||
VALUE *ptr = obj->as.array.ptr;
|
||||
|
||||
for (i=0; i < len; i++)
|
||||
gc_mark(*ptr++);
|
||||
rb_gc_mark(*ptr++);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_HASH:
|
||||
mark_hash(obj->as.hash.tbl);
|
||||
rb_gc_mark(obj->as.hash.ifnone);
|
||||
break;
|
||||
|
||||
case T_STRING:
|
||||
|
@ -542,7 +543,7 @@ gc_mark(ptr)
|
|||
break;
|
||||
|
||||
case T_VARMAP:
|
||||
gc_mark(obj->as.varmap.val);
|
||||
rb_gc_mark(obj->as.varmap.val);
|
||||
obj = RANY(obj->as.varmap.next);
|
||||
goto Top;
|
||||
break;
|
||||
|
@ -553,7 +554,7 @@ gc_mark(ptr)
|
|||
VALUE *vars = &obj->as.scope.local_vars[-1];
|
||||
|
||||
while (n--) {
|
||||
gc_mark_maybe(*vars);
|
||||
rb_gc_mark(*vars);
|
||||
vars++;
|
||||
}
|
||||
}
|
||||
|
@ -565,12 +566,12 @@ gc_mark(ptr)
|
|||
VALUE *ptr = obj->as.rstruct.ptr;
|
||||
|
||||
for (i=0; i < len; i++)
|
||||
gc_mark(*ptr++);
|
||||
rb_gc_mark(*ptr++);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
Bug("gc_mark(): unknown data type 0x%x(0x%x) %s",
|
||||
rb_bug("rb_gc_mark(): unknown data type 0x%x(0x%x) %s",
|
||||
obj->as.basic.flags & T_MASK, obj,
|
||||
looks_pointerp(obj)?"corrupted object":"non object");
|
||||
}
|
||||
|
@ -588,11 +589,12 @@ gc_sweep()
|
|||
int i;
|
||||
|
||||
if (rb_in_compile) {
|
||||
/* sould not reclaim nodes during compilation */
|
||||
for (i = 0; i < heaps_used; i++) {
|
||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
||||
while (p < pend) {
|
||||
if (!(p->as.basic.flags&FL_MARK) && BUILTIN_TYPE(p) == T_NODE)
|
||||
gc_mark(p);
|
||||
rb_gc_mark(p);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
@ -628,7 +630,7 @@ gc_sweep()
|
|||
}
|
||||
|
||||
void
|
||||
gc_force_recycle(p)
|
||||
rb_gc_force_recycle(p)
|
||||
VALUE p;
|
||||
{
|
||||
RANY(p)->as.free.flag = 0;
|
||||
|
@ -647,11 +649,11 @@ obj_free(obj)
|
|||
case T_FIXNUM:
|
||||
case T_TRUE:
|
||||
case T_FALSE:
|
||||
Bug("obj_free() called for broken object");
|
||||
rb_bug("obj_free() called for broken object");
|
||||
break;
|
||||
}
|
||||
|
||||
if (need_call_final) {
|
||||
if (need_call_final && FL_TEST(obj, FL_FINALIZE)) {
|
||||
run_final(obj);
|
||||
}
|
||||
switch (RANY(obj)->as.basic.flags & T_MASK) {
|
||||
|
@ -705,7 +707,7 @@ obj_free(obj)
|
|||
break;
|
||||
case T_FILE:
|
||||
if (RANY(obj)->as.file.fptr) {
|
||||
io_fptr_finalize(RANY(obj)->as.file.fptr);
|
||||
rb_io_fptr_finalize(RANY(obj)->as.file.fptr);
|
||||
free(RANY(obj)->as.file.fptr);
|
||||
}
|
||||
break;
|
||||
|
@ -742,22 +744,23 @@ obj_free(obj)
|
|||
break;
|
||||
|
||||
default:
|
||||
Bug("gc_sweep(): unknown data type %d", RANY(obj)->as.basic.flags & T_MASK);
|
||||
rb_bug("gc_sweep(): unknown data type %d",
|
||||
RANY(obj)->as.basic.flags & T_MASK);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gc_mark_frame(frame)
|
||||
rb_gc_mark_frame(frame)
|
||||
struct FRAME *frame;
|
||||
{
|
||||
int n = frame->argc;
|
||||
VALUE *tbl = frame->argv;
|
||||
|
||||
while (n--) {
|
||||
gc_mark_maybe(*tbl);
|
||||
rb_gc_mark_maybe(*tbl);
|
||||
tbl++;
|
||||
}
|
||||
gc_mark(frame->cbase);
|
||||
rb_gc_mark(frame->cbase);
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
@ -796,7 +799,7 @@ int rb_setjmp (rb_jmp_buf);
|
|||
#endif /* __GNUC__ */
|
||||
|
||||
void
|
||||
gc_gc()
|
||||
rb_gc()
|
||||
{
|
||||
struct gc_list *list;
|
||||
struct FRAME *frame;
|
||||
|
@ -812,52 +815,52 @@ gc_gc()
|
|||
#endif
|
||||
|
||||
/* mark frame stack */
|
||||
for (frame = the_frame; frame; frame = frame->prev) {
|
||||
gc_mark_frame(frame);
|
||||
for (frame = ruby_frame; frame; frame = frame->prev) {
|
||||
rb_gc_mark_frame(frame);
|
||||
}
|
||||
gc_mark(the_scope);
|
||||
gc_mark(the_dyna_vars);
|
||||
rb_gc_mark(ruby_scope);
|
||||
rb_gc_mark(ruby_dyna_vars);
|
||||
|
||||
FLUSH_REGISTER_WINDOWS;
|
||||
/* This assumes that all registers are saved into the jmp_buf */
|
||||
setjmp(save_regs_gc_mark);
|
||||
mark_locations_array((VALUE*)&save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *));
|
||||
gc_mark_locations(gc_stack_start, (VALUE*)&stack_end);
|
||||
rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)&stack_end);
|
||||
#if defined(THINK_C) || defined(__human68k__)
|
||||
#ifndef __human68k__
|
||||
mark_locations_array((VALUE*)((char*)save_regs_gc_mark+2),
|
||||
sizeof(save_regs_gc_mark) / sizeof(VALUE *));
|
||||
#endif
|
||||
gc_mark_locations((VALUE*)((char*)gc_stack_start + 2),
|
||||
rb_gc_mark_locations((VALUE*)((char*)rb_gc_stack_start + 2),
|
||||
(VALUE*)((char*)&stack_end + 2));
|
||||
#endif
|
||||
|
||||
#ifdef THREAD
|
||||
gc_mark_threads();
|
||||
rb_gc_mark_threads();
|
||||
#endif
|
||||
|
||||
/* mark protected global variables */
|
||||
for (list = Global_List; list; list = list->next) {
|
||||
gc_mark(*list->varptr);
|
||||
rb_gc_mark(*list->varptr);
|
||||
}
|
||||
|
||||
gc_mark_global_tbl();
|
||||
rb_gc_mark_global_tbl();
|
||||
mark_tbl(rb_class_tbl);
|
||||
gc_mark_trap_list();
|
||||
rb_gc_mark_trap_list();
|
||||
|
||||
gc_sweep();
|
||||
dont_gc--;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
gc_method()
|
||||
gc_start()
|
||||
{
|
||||
gc_gc();
|
||||
rb_gc();
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
void
|
||||
init_stack()
|
||||
Init_stack()
|
||||
{
|
||||
#ifdef __human68k__
|
||||
extern void *_SEND;
|
||||
|
@ -865,14 +868,14 @@ init_stack()
|
|||
#else
|
||||
VALUE start;
|
||||
|
||||
gc_stack_start = &start;
|
||||
rb_gc_stack_start = &start;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
init_heap()
|
||||
Init_heap()
|
||||
{
|
||||
init_stack();
|
||||
Init_stack();
|
||||
add_heap();
|
||||
}
|
||||
|
||||
|
@ -929,7 +932,7 @@ os_obj_of(of)
|
|||
case T_CLASS:
|
||||
if (FL_TEST(p, FL_SINGLETON)) continue;
|
||||
default:
|
||||
if (obj_is_kind_of((VALUE)p, of)) {
|
||||
if (rb_obj_is_kind_of((VALUE)p, of)) {
|
||||
rb_yield((VALUE)p);
|
||||
n++;
|
||||
}
|
||||
|
@ -962,11 +965,11 @@ static VALUE
|
|||
add_final(os, proc)
|
||||
VALUE os, proc;
|
||||
{
|
||||
if (!obj_is_kind_of(proc, cProc)) {
|
||||
ArgError("wrong type argument %s (Proc required)",
|
||||
if (!rb_obj_is_kind_of(proc, rb_cProc)) {
|
||||
rb_raise(rb_eArgError, "wrong type argument %s (Proc required)",
|
||||
rb_class2name(CLASS_OF(proc)));
|
||||
}
|
||||
ary_push(finalizers, proc);
|
||||
rb_ary_push(finalizers, proc);
|
||||
return proc;
|
||||
}
|
||||
|
||||
|
@ -974,7 +977,7 @@ static VALUE
|
|||
rm_final(os, proc)
|
||||
VALUE os, proc;
|
||||
{
|
||||
ary_delete(finalizers, proc);
|
||||
rb_ary_delete(finalizers, proc);
|
||||
return proc;
|
||||
}
|
||||
|
||||
|
@ -999,16 +1002,14 @@ run_final(obj)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (!FL_TEST(obj, FL_FINALIZE)) return;
|
||||
|
||||
obj = INT2NUM((long)obj); /* make obj into id */
|
||||
for (i=0; i<RARRAY(finalizers)->len; i++) {
|
||||
rb_eval_cmd(RARRAY(finalizers)->ptr[i], ary_new3(1,obj));
|
||||
rb_eval_cmd(RARRAY(finalizers)->ptr[i], rb_ary_new3(1,obj));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gc_call_finalizer_at_exit()
|
||||
rb_gc_call_finalizer_at_exit()
|
||||
{
|
||||
RVALUE *p, *pend;
|
||||
int i;
|
||||
|
@ -1017,6 +1018,7 @@ gc_call_finalizer_at_exit()
|
|||
for (i = 0; i < heaps_used; i++) {
|
||||
p = heaps[i]; pend = p + HEAP_SLOTS;
|
||||
while (p < pend) {
|
||||
if (FL_TEST(p, FL_FINALIZE))
|
||||
run_final((VALUE)p);
|
||||
p++;
|
||||
}
|
||||
|
@ -1041,15 +1043,15 @@ id2ref(obj, id)
|
|||
unsigned long ptr = NUM2UINT(id);
|
||||
|
||||
if (FIXNUM_P(ptr)) return (VALUE)ptr;
|
||||
if (ptr == TRUE) return TRUE;
|
||||
if (ptr == FALSE) return FALSE;
|
||||
if (ptr == Qtrue) return Qtrue;
|
||||
if (ptr == Qfalse) return Qfalse;
|
||||
if (ptr == Qnil) return Qnil;
|
||||
|
||||
if (!looks_pointerp(ptr)) {
|
||||
IndexError("0x%x is not the id value", ptr);
|
||||
rb_raise(rb_eIndexError, "0x%x is not the id value", ptr);
|
||||
}
|
||||
if (RANY(ptr)->as.free.flag == 0) {
|
||||
IndexError("0x%x is recycled object", ptr);
|
||||
rb_raise(rb_eIndexError, "0x%x is recycled object", ptr);
|
||||
}
|
||||
return (VALUE)ptr;
|
||||
}
|
||||
|
@ -1057,23 +1059,23 @@ id2ref(obj, id)
|
|||
void
|
||||
Init_GC()
|
||||
{
|
||||
VALUE mObSpace;
|
||||
VALUE rb_mObSpace;
|
||||
|
||||
mGC = rb_define_module("GC");
|
||||
rb_define_singleton_method(mGC, "start", gc_method, 0);
|
||||
rb_define_singleton_method(mGC, "enable", gc_s_enable, 0);
|
||||
rb_define_singleton_method(mGC, "disable", gc_s_disable, 0);
|
||||
rb_define_method(mGC, "garbage_collect", gc_method, 0);
|
||||
rb_mGC = rb_define_module("GC");
|
||||
rb_define_singleton_method(rb_mGC, "start", gc_start, 0);
|
||||
rb_define_singleton_method(rb_mGC, "enable", gc_enable, 0);
|
||||
rb_define_singleton_method(rb_mGC, "disable", gc_disable, 0);
|
||||
rb_define_method(rb_mGC, "garbage_collect", gc_start, 0);
|
||||
|
||||
mObSpace = rb_define_module("ObjectSpace");
|
||||
rb_define_module_function(mObSpace, "each_object", os_each_obj, -1);
|
||||
rb_define_module_function(mObSpace, "garbage_collect", gc_method, 0);
|
||||
rb_define_module_function(mObSpace, "add_finalizer", add_final, 1);
|
||||
rb_define_module_function(mObSpace, "remove_finalizer", rm_final, 1);
|
||||
rb_define_module_function(mObSpace, "finalizers", finals, 0);
|
||||
rb_define_module_function(mObSpace, "call_finalizer", call_final, 1);
|
||||
rb_define_module_function(mObSpace, "_id2ref", id2ref, 1);
|
||||
rb_mObSpace = rb_define_module("ObjectSpace");
|
||||
rb_define_module_function(rb_mObSpace, "each_object", os_each_obj, -1);
|
||||
rb_define_module_function(rb_mObSpace, "garbage_collect", gc_start, 0);
|
||||
rb_define_module_function(rb_mObSpace, "add_finalizer", add_final, 1);
|
||||
rb_define_module_function(rb_mObSpace, "remove_finalizer", rm_final, 1);
|
||||
rb_define_module_function(rb_mObSpace, "finalizers", finals, 0);
|
||||
rb_define_module_function(rb_mObSpace, "call_finalizer", call_final, 1);
|
||||
rb_define_module_function(rb_mObSpace, "_id2ref", id2ref, 1);
|
||||
|
||||
rb_global_variable(&finalizers);
|
||||
finalizers = ary_new();
|
||||
finalizers = rb_ary_new();
|
||||
}
|
||||
|
|
416
intern.h
416
intern.h
|
@ -3,74 +3,72 @@
|
|||
*/
|
||||
|
||||
/* array.c */
|
||||
void memclear _((register VALUE*, register int));
|
||||
VALUE assoc_new _((VALUE, VALUE));
|
||||
VALUE ary_new _((void));
|
||||
VALUE ary_new2 _((int));
|
||||
VALUE ary_new3 __((int,...));
|
||||
VALUE ary_new4 _((int, VALUE *));
|
||||
VALUE ary_freeze _((VALUE));
|
||||
VALUE ary_aref _((int, VALUE*, VALUE));
|
||||
void ary_store _((VALUE, int, VALUE));
|
||||
VALUE ary_push _((VALUE, VALUE));
|
||||
VALUE ary_pop _((VALUE));
|
||||
VALUE ary_shift _((VALUE));
|
||||
VALUE ary_unshift _((VALUE, VALUE));
|
||||
VALUE ary_entry _((VALUE, int));
|
||||
VALUE ary_each _((VALUE));
|
||||
VALUE ary_join _((VALUE, VALUE));
|
||||
VALUE ary_to_s _((VALUE));
|
||||
VALUE ary_print_on _((VALUE, VALUE));
|
||||
VALUE ary_reverse _((VALUE));
|
||||
VALUE ary_sort_bang _((VALUE));
|
||||
VALUE ary_sort _((VALUE));
|
||||
VALUE ary_delete _((VALUE, VALUE));
|
||||
VALUE ary_delete_at _((VALUE, VALUE));
|
||||
VALUE ary_plus _((VALUE, VALUE));
|
||||
VALUE ary_concat _((VALUE, VALUE));
|
||||
VALUE ary_assoc _((VALUE, VALUE));
|
||||
VALUE ary_rassoc _((VALUE, VALUE));
|
||||
VALUE ary_includes _((VALUE, VALUE));
|
||||
void rb_mem_clear _((register VALUE*, register int));
|
||||
VALUE rb_assoc_new _((VALUE, VALUE));
|
||||
VALUE rb_ary_new _((void));
|
||||
VALUE rb_ary_new2 _((int));
|
||||
VALUE rb_ary_new3 __((int,...));
|
||||
VALUE rb_ary_new4 _((int, VALUE *));
|
||||
VALUE rb_ary_freeze _((VALUE));
|
||||
VALUE rb_ary_aref _((int, VALUE*, VALUE));
|
||||
void rb_ary_store _((VALUE, int, VALUE));
|
||||
VALUE rb_ary_to_s _((VALUE));
|
||||
VALUE rb_ary_push _((VALUE, VALUE));
|
||||
VALUE rb_ary_pop _((VALUE));
|
||||
VALUE rb_ary_shift _((VALUE));
|
||||
VALUE rb_ary_unshift _((VALUE, VALUE));
|
||||
VALUE rb_ary_entry _((VALUE, int));
|
||||
VALUE rb_ary_each _((VALUE));
|
||||
VALUE rb_ary_join _((VALUE, VALUE));
|
||||
VALUE rb_ary_print_on _((VALUE, VALUE));
|
||||
VALUE rb_ary_reverse _((VALUE));
|
||||
VALUE rb_ary_sort _((VALUE));
|
||||
VALUE rb_ary_sort_bang _((VALUE));
|
||||
VALUE rb_ary_delete _((VALUE, VALUE));
|
||||
VALUE rb_ary_delete_at _((VALUE, VALUE));
|
||||
VALUE rb_ary_plus _((VALUE, VALUE));
|
||||
VALUE rb_ary_concat _((VALUE, VALUE));
|
||||
VALUE rb_ary_assoc _((VALUE, VALUE));
|
||||
VALUE rb_ary_rassoc _((VALUE, VALUE));
|
||||
VALUE rb_ary_includes _((VALUE, VALUE));
|
||||
/* bignum.c */
|
||||
VALUE big_clone _((VALUE));
|
||||
void big_2comp _((VALUE));
|
||||
VALUE big_norm _((VALUE));
|
||||
VALUE uint2big _((unsigned long));
|
||||
VALUE int2big _((long));
|
||||
VALUE uint2inum _((unsigned long));
|
||||
VALUE int2inum _((long));
|
||||
VALUE str2inum _((char*, int));
|
||||
VALUE big2str _((VALUE, int));
|
||||
long big2long _((VALUE));
|
||||
#define big2int(x) big2long(x)
|
||||
unsigned long big2ulong _((VALUE));
|
||||
#define big2uint(x) big2ulong(x)
|
||||
VALUE big_to_i _((VALUE));
|
||||
VALUE dbl2big _((double));
|
||||
double big2dbl _((VALUE));
|
||||
VALUE big_to_f _((VALUE));
|
||||
VALUE big_plus _((VALUE, VALUE));
|
||||
VALUE big_minus _((VALUE, VALUE));
|
||||
VALUE big_mul _((VALUE, VALUE));
|
||||
VALUE big_pow _((VALUE, VALUE));
|
||||
VALUE big_and _((VALUE, VALUE));
|
||||
VALUE big_or _((VALUE, VALUE));
|
||||
VALUE big_xor _((VALUE, VALUE));
|
||||
VALUE big_lshift _((VALUE, VALUE));
|
||||
VALUE big_rand _((VALUE));
|
||||
VALUE rb_big_clone _((VALUE));
|
||||
void rb_big_2comp _((VALUE));
|
||||
VALUE rb_big_norm _((VALUE));
|
||||
VALUE rb_uint2big _((unsigned long));
|
||||
VALUE rb_int2big _((long));
|
||||
VALUE rb_uint2inum _((unsigned long));
|
||||
VALUE rb_int2inum _((long));
|
||||
VALUE rb_str2inum _((char*, int));
|
||||
VALUE rb_big2str _((VALUE, int));
|
||||
long rb_big2long _((VALUE));
|
||||
#define rb_big2int(x) rb_big2long(x)
|
||||
unsigned long rb_big2ulong _((VALUE));
|
||||
#define rb_big2uint(x) rb_big2ulong(x)
|
||||
VALUE rb_dbl2big _((double));
|
||||
double rb_big2dbl _((VALUE));
|
||||
VALUE rb_big_plus _((VALUE, VALUE));
|
||||
VALUE rb_big_minus _((VALUE, VALUE));
|
||||
VALUE rb_big_mul _((VALUE, VALUE));
|
||||
VALUE rb_big_pow _((VALUE, VALUE));
|
||||
VALUE rb_big_and _((VALUE, VALUE));
|
||||
VALUE rb_big_or _((VALUE, VALUE));
|
||||
VALUE rb_big_xor _((VALUE, VALUE));
|
||||
VALUE rb_big_lshift _((VALUE, VALUE));
|
||||
VALUE rb_big_rand _((VALUE));
|
||||
/* class.c */
|
||||
VALUE class_new _((VALUE));
|
||||
VALUE singleton_class_new _((VALUE));
|
||||
VALUE singleton_class_clone _((VALUE));
|
||||
void singleton_class_attached _((VALUE,VALUE));
|
||||
VALUE rb_class_new _((VALUE));
|
||||
VALUE rb_singleton_class_new _((VALUE));
|
||||
VALUE rb_singleton_class_clone _((VALUE));
|
||||
void rb_singleton_class_attached _((VALUE,VALUE));
|
||||
VALUE rb_define_class_id _((ID, VALUE));
|
||||
VALUE module_new _((void));
|
||||
VALUE rb_module_new _((void));
|
||||
VALUE rb_define_module_id _((ID));
|
||||
VALUE mod_included_modules _((VALUE));
|
||||
VALUE mod_ancestors _((VALUE));
|
||||
VALUE class_instance_methods _((int, VALUE*, VALUE));
|
||||
VALUE class_private_instance_methods _((int, VALUE*, VALUE));
|
||||
VALUE obj_singleton_methods _((VALUE));
|
||||
VALUE rb_mod_included_modules _((VALUE));
|
||||
VALUE rb_mod_ancestors _((VALUE));
|
||||
VALUE rb_class_instance_methods _((int, VALUE*, VALUE));
|
||||
VALUE rb_class_private_instance_methods _((int, VALUE*, VALUE));
|
||||
VALUE rb_obj_singleton_methods _((VALUE));
|
||||
void rb_define_method_id _((VALUE, ID, VALUE (*)(), int));
|
||||
void rb_undef_method _((VALUE, char*));
|
||||
void rb_define_protected_method _((VALUE, char*, VALUE (*)(), int));
|
||||
|
@ -79,17 +77,18 @@ void rb_define_singleton_method _((VALUE,char*,VALUE(*)(),int));
|
|||
void rb_define_private_method _((VALUE,char*,VALUE(*)(),int));
|
||||
VALUE rb_singleton_class _((VALUE));
|
||||
/* enum.c */
|
||||
VALUE enum_length _((VALUE));
|
||||
VALUE rb_enum_length _((VALUE));
|
||||
/* error.c */
|
||||
VALUE exc_new _((VALUE, char*, unsigned int));
|
||||
VALUE exc_new2 _((VALUE, char*));
|
||||
VALUE exc_new3 _((VALUE, VALUE));
|
||||
void TypeError __((char*, ...)) NORETURN;
|
||||
void ArgError __((char*, ...)) NORETURN;
|
||||
void NameError __((char*, ...)) NORETURN;
|
||||
void IndexError __((char*, ...)) NORETURN;
|
||||
void LoadError __((char*, ...)) NORETURN;
|
||||
extern int ruby_nerrs;
|
||||
VALUE rb_exc_new _((VALUE, char*, unsigned int));
|
||||
VALUE rb_exc_new2 _((VALUE, char*));
|
||||
VALUE rb_exc_new3 _((VALUE, VALUE));
|
||||
void rb_loaderror __((char*, ...)) NORETURN;
|
||||
void rb_compile_error __((char*, ...));
|
||||
void rb_compile_append __((char*, ...));
|
||||
/* eval.c */
|
||||
void rb_exc_raise _((VALUE)) NORETURN;
|
||||
void rb_exc_fatal _((VALUE)) NORETURN;
|
||||
void rb_remove_method _((VALUE, char*));
|
||||
void rb_disable_super _((VALUE, char*));
|
||||
void rb_enable_super _((VALUE, char*));
|
||||
|
@ -97,133 +96,129 @@ void rb_clear_cache _((void));
|
|||
void rb_alias _((VALUE, ID, ID));
|
||||
void rb_attr _((VALUE,ID,int,int,int));
|
||||
int rb_method_boundp _((VALUE, ID, int));
|
||||
VALUE dyna_var_defined _((ID));
|
||||
VALUE dyna_var_ref _((ID));
|
||||
VALUE dyna_var_asgn _((ID, VALUE));
|
||||
void ruby_init _((void));
|
||||
void ruby_options _((int, char**));
|
||||
void ruby_run _((void));
|
||||
VALUE rb_dvar_defined _((ID));
|
||||
VALUE rb_dvar_ref _((ID));
|
||||
void rb_dvar_asgn _((ID, VALUE));
|
||||
void rb_dvar_push _((ID, VALUE));
|
||||
VALUE rb_eval_cmd _((VALUE, VALUE));
|
||||
VALUE rb_trap_eval _((VALUE, int));
|
||||
int rb_respond_to _((VALUE, ID));
|
||||
void rb_raise _((VALUE));
|
||||
void rb_fatal _((VALUE));
|
||||
void rb_interrupt _((void));
|
||||
int iterator_p _((void));
|
||||
VALUE rb_yield_0 _((VALUE, volatile VALUE));
|
||||
VALUE rb_apply _((VALUE, ID, VALUE));
|
||||
VALUE rb_funcall2 _((VALUE, ID, int, VALUE*));
|
||||
void rb_backtrace _((void));
|
||||
ID rb_frame_last_func _((void));
|
||||
VALUE f_load _((VALUE, VALUE));
|
||||
VALUE rb_f_load _((VALUE, VALUE));
|
||||
void rb_provide _((char*));
|
||||
VALUE f_require _((VALUE, VALUE));
|
||||
void obj_call_init _((VALUE));
|
||||
VALUE class_new_instance _((int, VALUE*, VALUE));
|
||||
VALUE f_lambda _((void));
|
||||
VALUE rb_f_require _((VALUE, VALUE));
|
||||
void rb_obj_call_init _((VALUE));
|
||||
VALUE rb_class_new_instance _((int, VALUE*, VALUE));
|
||||
VALUE rb_f_lambda _((void));
|
||||
void rb_set_end_proc _((void (*)(),VALUE));
|
||||
void gc_mark_threads _((void));
|
||||
void thread_schedule _((void));
|
||||
void thread_wait_fd _((int));
|
||||
void thread_fd_writable _((int));
|
||||
int thread_alone _((void));
|
||||
void thread_sleep _((int));
|
||||
void thread_sleep_forever _((void));
|
||||
VALUE thread_create _((VALUE (*)(), void*));
|
||||
void thread_interrupt _((void));
|
||||
void thread_trap_eval _((VALUE, int));
|
||||
int thread_select();
|
||||
void thread_wait_for();
|
||||
void rb_gc_mark_threads _((void));
|
||||
void rb_thread_schedule _((void));
|
||||
void rb_thread_wait_fd _((int));
|
||||
void rb_thread_fd_writable _((int));
|
||||
int rb_thread_alone _((void));
|
||||
void rb_thread_sleep _((int));
|
||||
void rb_thread_sleep_forever _((void));
|
||||
VALUE rb_thread_create _((VALUE (*)(), void*));
|
||||
int rb_thread_scope_shared_p _((void));
|
||||
void rb_thread_interrupt _((void));
|
||||
void rb_thread_trap_eval _((VALUE, int));
|
||||
int rb_thread_select();
|
||||
void rb_thread_wait_for();
|
||||
/* file.c */
|
||||
VALUE file_open _((char*, char*));
|
||||
VALUE rb_file_open _((char*, char*));
|
||||
int eaccess _((char*, int));
|
||||
VALUE file_s_expand_path _((int, VALUE *));
|
||||
VALUE rb_file_s_expand_path _((int, VALUE *));
|
||||
/* gc.c */
|
||||
void rb_global_variable _((VALUE*));
|
||||
void gc_mark_locations _((VALUE*, VALUE*));
|
||||
void gc_mark_maybe();
|
||||
void gc_mark();
|
||||
void gc_force_recycle();
|
||||
void gc_gc _((void));
|
||||
void init_stack _((void));
|
||||
void init_heap _((void));
|
||||
void rb_gc_mark_locations _((VALUE*, VALUE*));
|
||||
void rb_gc_mark_maybe();
|
||||
void rb_gc_mark();
|
||||
void rb_gc_force_recycle();
|
||||
void rb_gc _((void));
|
||||
void rb_gc_call_finalizer_at_exit _((void));
|
||||
/* hash.c */
|
||||
VALUE hash_freeze _((VALUE));
|
||||
VALUE rb_hash_freeze _((VALUE));
|
||||
VALUE rb_hash _((VALUE));
|
||||
VALUE hash_new _((void));
|
||||
VALUE hash_aref _((VALUE, VALUE));
|
||||
VALUE hash_aset _((VALUE, VALUE, VALUE));
|
||||
int env_path_tainted _((void));
|
||||
VALUE rb_hash_new _((void));
|
||||
VALUE rb_hash_aref _((VALUE, VALUE));
|
||||
VALUE rb_hash_aset _((VALUE, VALUE, VALUE));
|
||||
int rb_env_path_tainted _((void));
|
||||
/* io.c */
|
||||
void eof_error _((void));
|
||||
VALUE io_write _((VALUE, VALUE));
|
||||
VALUE io_gets_method _((int, VALUE*, VALUE));
|
||||
VALUE io_gets _((VALUE));
|
||||
VALUE io_getc _((VALUE));
|
||||
VALUE io_ungetc _((VALUE, VALUE));
|
||||
VALUE io_close _((VALUE));
|
||||
VALUE io_binmode _((VALUE));
|
||||
int io_mode_flags _((char*));
|
||||
VALUE io_reopen _((VALUE, VALUE));
|
||||
VALUE f_gets _((void));
|
||||
extern VALUE rb_fs;
|
||||
extern VALUE rb_output_fs;
|
||||
extern VALUE rb_rs;
|
||||
extern VALUE rb_default_rs;
|
||||
extern VALUE rb_output_rs;
|
||||
VALUE rb_io_write _((VALUE, VALUE));
|
||||
VALUE rb_io_gets_method _((int, VALUE*, VALUE));
|
||||
VALUE rb_io_gets _((VALUE));
|
||||
VALUE rb_io_getc _((VALUE));
|
||||
VALUE rb_io_ungetc _((VALUE, VALUE));
|
||||
VALUE rb_io_close _((VALUE));
|
||||
VALUE rb_io_binmode _((VALUE));
|
||||
int rb_io_mode_flags _((char*));
|
||||
VALUE rb_io_reopen _((VALUE, VALUE));
|
||||
VALUE rb_f_gets _((void));
|
||||
void rb_str_setter _((VALUE, ID, VALUE*));
|
||||
/* numeric.c */
|
||||
void num_zerodiv _((void));
|
||||
VALUE num_coerce_bin _((VALUE, VALUE));
|
||||
VALUE float_new _((double));
|
||||
VALUE flo_pow _((VALUE, VALUE));
|
||||
VALUE num2fix _((VALUE));
|
||||
VALUE fix2str _((VALUE, int));
|
||||
VALUE fix_to_s _((VALUE));
|
||||
VALUE num_upto _((VALUE, VALUE));
|
||||
VALUE fix_upto _((VALUE, VALUE));
|
||||
void rb_num_zerodiv _((void));
|
||||
VALUE rb_num_coerce_bin _((VALUE, VALUE));
|
||||
VALUE rb_float_new _((double));
|
||||
VALUE rb_num2fix _((VALUE));
|
||||
VALUE rb_fix2str _((VALUE, int));
|
||||
VALUE rb_fix_upto _((VALUE, VALUE));
|
||||
/* object.c */
|
||||
VALUE rb_equal _((VALUE, VALUE));
|
||||
int rb_eql _((VALUE, VALUE));
|
||||
VALUE obj_equal _((VALUE, VALUE));
|
||||
VALUE any_to_s _((VALUE));
|
||||
VALUE rb_obj_equal _((VALUE, VALUE));
|
||||
VALUE rb_any_to_s _((VALUE));
|
||||
VALUE rb_inspect _((VALUE));
|
||||
VALUE obj_is_instance_of _((VALUE, VALUE));
|
||||
VALUE obj_is_kind_of _((VALUE, VALUE));
|
||||
VALUE obj_alloc _((VALUE));
|
||||
VALUE rb_obj_is_instance_of _((VALUE, VALUE));
|
||||
VALUE rb_obj_is_kind_of _((VALUE, VALUE));
|
||||
VALUE rb_obj_alloc _((VALUE));
|
||||
VALUE rb_convert_type _((VALUE,int,char*,char*));
|
||||
VALUE rb_Integer _((VALUE));
|
||||
VALUE rb_Float _((VALUE));
|
||||
VALUE rb_String _((VALUE));
|
||||
VALUE rb_Array _((VALUE));
|
||||
double num2dbl _((VALUE));
|
||||
double rb_num2dbl _((VALUE));
|
||||
/* parse.y */
|
||||
extern int ruby_sourceline;
|
||||
extern char *ruby_sourcefile;
|
||||
int yyparse _((void));
|
||||
void pushback _((int));
|
||||
ID id_attrset _((ID));
|
||||
void yyappend_print _((void));
|
||||
void yywhile_loop _((int, int));
|
||||
ID rb_id_attrset _((ID));
|
||||
void rb_parser_append_print _((void));
|
||||
void rb_parser_while_loop _((int, int));
|
||||
int rb_is_const_id _((ID));
|
||||
int rb_is_instance_id _((ID));
|
||||
void local_var_append _((ID));
|
||||
VALUE backref_get _((void));
|
||||
void backref_set _((VALUE));
|
||||
VALUE lastline_get _((void));
|
||||
void lastline_set _((VALUE));
|
||||
VALUE rb_backref_get _((void));
|
||||
void rb_backref_set _((VALUE));
|
||||
VALUE rb_lastline_get _((void));
|
||||
void rb_lastline_set _((VALUE));
|
||||
/* process.c */
|
||||
int rb_proc_exec _((char*));
|
||||
void rb_syswait _((int));
|
||||
/* range.c */
|
||||
VALUE range_new _((VALUE, VALUE));
|
||||
VALUE range_beg_end _((VALUE, int*, int*));
|
||||
VALUE rb_range_new _((VALUE, VALUE));
|
||||
VALUE rb_range_beg_end _((VALUE, int*, int*));
|
||||
/* re.c */
|
||||
VALUE reg_nth_defined _((int, VALUE));
|
||||
VALUE reg_nth_match _((int, VALUE));
|
||||
VALUE reg_last_match _((VALUE));
|
||||
VALUE reg_match_pre _((VALUE));
|
||||
VALUE reg_match_post _((VALUE));
|
||||
VALUE reg_match_last _((VALUE));
|
||||
VALUE reg_new _((char*, int, int));
|
||||
VALUE reg_match _((VALUE, VALUE));
|
||||
VALUE reg_match2 _((VALUE));
|
||||
int reg_options _((VALUE));
|
||||
VALUE rb_reg_nth_defined _((int, VALUE));
|
||||
VALUE rb_reg_nth_match _((int, VALUE));
|
||||
VALUE rb_reg_last_match _((VALUE));
|
||||
VALUE rb_reg_match_pre _((VALUE));
|
||||
VALUE rb_reg_match_post _((VALUE));
|
||||
VALUE rb_reg_match_last _((VALUE));
|
||||
VALUE rb_reg_new _((char*, int, int));
|
||||
VALUE rb_reg_match _((VALUE, VALUE));
|
||||
VALUE rb_reg_match2 _((VALUE));
|
||||
int rb_reg_options _((VALUE));
|
||||
char*rb_get_kcode _((void));
|
||||
void rb_set_kcode _((char*));
|
||||
int rb_ignorecase_p _((void));
|
||||
/* ruby.c */
|
||||
void rb_load_file _((char*));
|
||||
void ruby_script _((char*));
|
||||
|
@ -233,72 +228,75 @@ void ruby_process_options _((int, char**));
|
|||
void ruby_require_modules _((void));
|
||||
void ruby_load_script _((void));
|
||||
/* signal.c */
|
||||
VALUE f_kill _((int, VALUE*));
|
||||
void gc_mark_trap_list _((void));
|
||||
VALUE rb_f_kill _((int, VALUE*));
|
||||
void rb_gc_mark_trap_list _((void));
|
||||
#ifdef POSIX_SIGNAL
|
||||
#define posix_signal ruby_posix_signal
|
||||
void posix_signal _((int, void (*)()));
|
||||
#endif
|
||||
void rb_trap_exit _((void));
|
||||
void rb_trap_exec _((void));
|
||||
/* sprintf.c */
|
||||
VALUE f_sprintf _((int, VALUE*));
|
||||
VALUE rb_f_sprintf _((int, VALUE*));
|
||||
/* string.c */
|
||||
VALUE str_new _((char*, unsigned int));
|
||||
VALUE str_new2 _((char*));
|
||||
VALUE str_new3 _((VALUE));
|
||||
VALUE str_new4 _((VALUE));
|
||||
VALUE obj_as_string _((VALUE));
|
||||
VALUE str_to_str _((VALUE));
|
||||
VALUE str_dup _((VALUE));
|
||||
VALUE str_plus _((VALUE, VALUE));
|
||||
VALUE str_times _((VALUE, VALUE));
|
||||
VALUE str_substr _((VALUE, int, int));
|
||||
void str_modify _((VALUE));
|
||||
VALUE str_freeze _((VALUE));
|
||||
VALUE str_dup_frozen _((VALUE));
|
||||
VALUE str_taint _((VALUE));
|
||||
VALUE str_tainted _((VALUE));
|
||||
VALUE str_resize _((VALUE, int));
|
||||
VALUE str_cat _((VALUE, char*, unsigned int));
|
||||
VALUE str_concat _((VALUE, VALUE));
|
||||
int str_hash _((VALUE));
|
||||
int str_cmp _((VALUE, VALUE));
|
||||
VALUE str_upto _((VALUE, VALUE));
|
||||
VALUE str_inspect _((VALUE));
|
||||
VALUE str_split _((VALUE, char*));
|
||||
VALUE rb_str_new _((char*, unsigned int));
|
||||
VALUE rb_str_new2 _((char*));
|
||||
VALUE rb_str_new3 _((VALUE));
|
||||
VALUE rb_str_new4 _((VALUE));
|
||||
VALUE rb_obj_as_string _((VALUE));
|
||||
VALUE rb_str_to_str _((VALUE));
|
||||
VALUE rb_str_dup _((VALUE));
|
||||
VALUE rb_str_plus _((VALUE, VALUE));
|
||||
VALUE rb_str_times _((VALUE, VALUE));
|
||||
VALUE rb_str_substr _((VALUE, int, int));
|
||||
void rb_str_modify _((VALUE));
|
||||
VALUE rb_str_freeze _((VALUE));
|
||||
VALUE rb_str_dup_frozen _((VALUE));
|
||||
VALUE rb_str_taint _((VALUE));
|
||||
VALUE rb_str_tainted _((VALUE));
|
||||
VALUE rb_str_resize _((VALUE, int));
|
||||
VALUE rb_str_cat _((VALUE, char*, unsigned int));
|
||||
VALUE rb_str_concat _((VALUE, VALUE));
|
||||
int rb_str_hash _((VALUE));
|
||||
int rb_str_cmp _((VALUE, VALUE));
|
||||
VALUE rb_str_upto _((VALUE, VALUE));
|
||||
VALUE rb_str_inspect _((VALUE));
|
||||
VALUE rb_str_split _((VALUE, char*));
|
||||
/* struct.c */
|
||||
VALUE struct_new __((VALUE, ...));
|
||||
VALUE struct_define __((char*, ...));
|
||||
VALUE struct_alloc _((VALUE, VALUE));
|
||||
VALUE struct_aref _((VALUE, VALUE));
|
||||
VALUE struct_aset _((VALUE, VALUE, VALUE));
|
||||
VALUE struct_getmember _((VALUE, ID));
|
||||
VALUE rb_struct_new __((VALUE, ...));
|
||||
VALUE rb_struct_define __((char*, ...));
|
||||
VALUE rb_struct_alloc _((VALUE, VALUE));
|
||||
VALUE rb_struct_aref _((VALUE, VALUE));
|
||||
VALUE rb_struct_aset _((VALUE, VALUE, VALUE));
|
||||
VALUE rb_struct_getmember _((VALUE, ID));
|
||||
/* time.c */
|
||||
VALUE time_new _((int, int));
|
||||
/* util.c */
|
||||
void add_suffix _((VALUE, char*));
|
||||
unsigned long scan_oct _((char*, int, int*));
|
||||
unsigned long scan_hex _((char*, int, int*));
|
||||
VALUE rb_time_new _((int, int));
|
||||
/* variable.c */
|
||||
struct st_table *new_idhash _((void));
|
||||
VALUE mod_name _((VALUE));
|
||||
VALUE rb_mod_name _((VALUE));
|
||||
VALUE rb_class_path _((VALUE));
|
||||
void rb_set_class_path _((VALUE, VALUE, char*));
|
||||
VALUE rb_path2class _((char*));
|
||||
void rb_name_class _((VALUE, ID));
|
||||
void rb_autoload _((char*, char*));
|
||||
VALUE f_autoload _((VALUE, VALUE, VALUE));
|
||||
void gc_mark_global_tbl _((void));
|
||||
VALUE f_trace_var _((int, VALUE*));
|
||||
VALUE f_untrace_var _((int, VALUE*));
|
||||
VALUE rb_f_autoload _((VALUE, VALUE, VALUE));
|
||||
void rb_gc_mark_global_tbl _((void));
|
||||
VALUE rb_f_trace_var _((int, VALUE*));
|
||||
VALUE rb_f_untrace_var _((int, VALUE*));
|
||||
VALUE rb_gvar_set2 _((char*, VALUE));
|
||||
VALUE f_global_variables _((void));
|
||||
VALUE rb_f_global_variables _((void));
|
||||
void rb_alias_variable _((ID, ID));
|
||||
VALUE rb_ivar_get _((VALUE, ID));
|
||||
VALUE rb_ivar_set _((VALUE, ID, VALUE));
|
||||
VALUE rb_ivar_defined _((VALUE, ID));
|
||||
VALUE obj_instance_variables _((VALUE));
|
||||
VALUE mod_const_at _((VALUE, VALUE));
|
||||
VALUE mod_constants _((VALUE));
|
||||
VALUE mod_const_of _((VALUE, VALUE));
|
||||
VALUE rb_obj_instance_variables _((VALUE));
|
||||
VALUE rb_obj_remove_instance_variable _((VALUE, VALUE));
|
||||
VALUE rb_mod_const_at _((VALUE, VALUE));
|
||||
VALUE rb_mod_constants _((VALUE));
|
||||
VALUE rb_mod_const_of _((VALUE, VALUE));
|
||||
VALUE rb_mod_remove_const _((VALUE, VALUE));
|
||||
int rb_const_defined_at _((VALUE, ID));
|
||||
int rb_autoload_defined _((ID));
|
||||
int rb_const_defined _((VALUE, ID));
|
||||
/* version.c */
|
||||
void ruby_show_version _((void));
|
||||
void ruby_show_copyright _((void));
|
||||
|
|
|
@ -267,6 +267,6 @@ class DEBUGGER__
|
|||
CONTEXT = new
|
||||
end
|
||||
|
||||
set_trace_func proc{|event, file, line, id, binding|
|
||||
DEBUGGER__::CONTEXT.trace_func event, file, line, id, binding
|
||||
set_trace_func proc{|event, file, line, id, binding, klass|
|
||||
DEBUGGER__::CONTEXT.trace_func event, file, line, id, binding, klass
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ class << File
|
|||
to.binmode
|
||||
|
||||
begin
|
||||
while TRUE
|
||||
while true
|
||||
r = from.sysread(fsize)
|
||||
rsize = r.size
|
||||
w = 0
|
||||
|
@ -40,9 +40,9 @@ class << File
|
|||
end
|
||||
end
|
||||
rescue EOFError
|
||||
ret = TRUE
|
||||
ret = true
|
||||
rescue
|
||||
ret = FALSE
|
||||
ret = false
|
||||
ensure
|
||||
to.close
|
||||
from.close
|
||||
|
@ -50,7 +50,7 @@ class << File
|
|||
ret
|
||||
end
|
||||
|
||||
def copy from, to, verbose = FALSE
|
||||
def copy from, to, verbose = false
|
||||
$stderr.print from, " -> ", catname(from, to), "\n" if verbose
|
||||
syscopy from, to
|
||||
end
|
||||
|
@ -59,7 +59,7 @@ class << File
|
|||
|
||||
# move file
|
||||
|
||||
def move from, to, verbose = FALSE
|
||||
def move from, to, verbose = false
|
||||
to = catname(from, to)
|
||||
$stderr.print from, " -> ", to, "\n" if verbose
|
||||
|
||||
|
@ -76,10 +76,10 @@ class << File
|
|||
alias mv move
|
||||
|
||||
# compare two files
|
||||
# TRUE: identical
|
||||
# FALSE: not identical
|
||||
# true: identical
|
||||
# false: not identical
|
||||
|
||||
def compare from, to, verbose = FALSE
|
||||
def compare from, to, verbose = false
|
||||
$stderr.print from, " <=> ", to, "\n" if verbose
|
||||
fsize = size(from)
|
||||
fsize = 1024 if fsize < 512
|
||||
|
@ -90,7 +90,7 @@ class << File
|
|||
to = open(to, "r")
|
||||
to.binmode
|
||||
|
||||
ret = FALSE
|
||||
ret = false
|
||||
fr = tr = ''
|
||||
|
||||
begin
|
||||
|
@ -103,7 +103,7 @@ class << File
|
|||
end
|
||||
end
|
||||
rescue
|
||||
ret = FALSE
|
||||
ret = false
|
||||
ensure
|
||||
to.close
|
||||
from.close
|
||||
|
@ -116,7 +116,7 @@ class << File
|
|||
# unlink files safely
|
||||
|
||||
def safe_unlink(*files)
|
||||
verbose = if files[-1].is_a? String then FALSE else files.pop end
|
||||
verbose = if files[-1].is_a? String then false else files.pop end
|
||||
begin
|
||||
$stderr.print files.join(" "), "\n" if verbose
|
||||
chmod 0777, *files
|
||||
|
@ -129,7 +129,7 @@ class << File
|
|||
alias rm_f safe_unlink
|
||||
|
||||
def makedirs(*dirs)
|
||||
verbose = if dirs[-1].is_a? String then FALSE else dirs.pop end
|
||||
verbose = if dirs[-1].is_a? String then false else dirs.pop end
|
||||
# mode = if dirs[-1].is_a? Fixnum then dirs.pop else 0755 end
|
||||
mode = 0755
|
||||
for dir in dirs
|
||||
|
@ -146,12 +146,12 @@ class << File
|
|||
alias o_chmod chmod
|
||||
|
||||
def chmod(mode, *files)
|
||||
verbose = if files[-1].is_a? String then FALSE else files.pop end
|
||||
verbose = if files[-1].is_a? String then false else files.pop end
|
||||
$stderr.printf "chmod %04o %s\n", mode, files.join(" ") if verbose
|
||||
o_chmod mode, *files
|
||||
end
|
||||
|
||||
def install(from, to, mode, verbose)
|
||||
def install(from, to, mode = nil, verbose = false)
|
||||
to = catname(from, to)
|
||||
unless FileTest.exist? to and cmp from, to
|
||||
cp from, to, verbose
|
||||
|
|
|
@ -22,7 +22,7 @@ class Tempfile < SimpleDelegator
|
|||
File.unlink(path)
|
||||
end
|
||||
if File.exist?(path + '.lock')
|
||||
File.rmdir(path + '.lock')
|
||||
Dir.rmdir(path + '.lock')
|
||||
end
|
||||
print "done\n" if $DEBUG
|
||||
}
|
||||
|
@ -51,8 +51,8 @@ class Tempfile < SimpleDelegator
|
|||
@clean_files = Tempfile.callback(tmpname)
|
||||
ObjectSpace.define_finalizer(self, @clean_files)
|
||||
|
||||
@tmpname = tmpname
|
||||
@tmpfile = File.open(tmpname, 'w+')
|
||||
@tmpname = tmpname
|
||||
super(@tmpfile)
|
||||
Dir.rmdir(lock)
|
||||
ensure
|
||||
|
|
|
@ -1548,10 +1548,16 @@ module TkTreatFont
|
|||
end
|
||||
end
|
||||
|
||||
class TkObject<TkKernel
|
||||
class TkObject
|
||||
include Tk
|
||||
include TkTreatFont
|
||||
|
||||
def TkObject.new(*args, &block)
|
||||
obj = super
|
||||
obj.instance_eval(&block) if block
|
||||
obj
|
||||
end
|
||||
|
||||
def path
|
||||
return @path
|
||||
end
|
||||
|
|
123
marshal.c
123
marshal.c
|
@ -64,7 +64,7 @@ w_byte(c, arg)
|
|||
struct dump_arg *arg;
|
||||
{
|
||||
if (arg->fp) putc(c, arg->fp);
|
||||
else str_cat(arg->str, &c, 1);
|
||||
else rb_str_cat(arg->str, &c, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -78,7 +78,7 @@ w_bytes(s, n, arg)
|
|||
fwrite(s, 1, n, arg->fp);
|
||||
}
|
||||
else {
|
||||
str_cat(arg->str, s, n);
|
||||
rb_str_cat(arg->str, s, n);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -150,7 +150,7 @@ w_symbol(id, arg)
|
|||
else {
|
||||
w_byte(TYPE_SYMBOL, arg);
|
||||
w_bytes(sym, strlen(sym), arg);
|
||||
st_insert(arg->symbol, id, arg->symbol->num_entries);
|
||||
st_add_direct(arg->symbol, id, arg->symbol->num_entries);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -165,7 +165,7 @@ w_unique(s, arg)
|
|||
static void w_object _((VALUE,struct dump_arg*,int));
|
||||
|
||||
static int
|
||||
hash_each(key, value, arg)
|
||||
rb_hash_each(key, value, arg)
|
||||
VALUE key, value;
|
||||
struct dump_call_arg *arg;
|
||||
{
|
||||
|
@ -175,7 +175,7 @@ hash_each(key, value, arg)
|
|||
}
|
||||
|
||||
static int
|
||||
obj_each(id, value, arg)
|
||||
rb_obj_each(id, value, arg)
|
||||
ID id;
|
||||
VALUE value;
|
||||
struct dump_call_arg *arg;
|
||||
|
@ -205,15 +205,15 @@ w_object(obj, arg, limit)
|
|||
struct dump_call_arg c_arg;
|
||||
|
||||
if (limit == 0) {
|
||||
Fail("exceed depth limit");
|
||||
rb_raise(rb_eRuntimeError, "exceed depth limit");
|
||||
}
|
||||
if (obj == Qnil) {
|
||||
w_byte(TYPE_NIL, arg);
|
||||
}
|
||||
else if (obj == TRUE) {
|
||||
else if (obj == Qtrue) {
|
||||
w_byte(TYPE_TRUE, arg);
|
||||
}
|
||||
else if (obj == FALSE) {
|
||||
else if (obj == Qfalse) {
|
||||
w_byte(TYPE_FALSE, arg);
|
||||
}
|
||||
else if (FIXNUM_P(obj)) {
|
||||
|
@ -226,7 +226,7 @@ w_object(obj, arg, limit)
|
|||
w_long(FIX2LONG(obj), arg);
|
||||
}
|
||||
else {
|
||||
w_object(int2big(FIX2LONG(obj)), arg, limit);
|
||||
w_object(rb_int2big(FIX2LONG(obj)), arg, limit);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
@ -244,7 +244,7 @@ w_object(obj, arg, limit)
|
|||
return;
|
||||
}
|
||||
|
||||
st_insert(arg->data, obj, arg->data->num_entries);
|
||||
st_add_direct(arg->data, obj, arg->data->num_entries);
|
||||
if (rb_respond_to(obj, s_dump)) {
|
||||
VALUE v;
|
||||
|
||||
|
@ -252,7 +252,7 @@ w_object(obj, arg, limit)
|
|||
w_unique(rb_class2name(CLASS_OF(obj)), arg);
|
||||
v = rb_funcall(obj, s_dump, 1, limit);
|
||||
if (TYPE(v) != T_STRING) {
|
||||
TypeError("_dump_to must return String");
|
||||
rb_raise(rb_eTypeError, "_dump_to must return String");
|
||||
}
|
||||
w_bytes(RSTRING(v)->ptr, RSTRING(v)->len, arg);
|
||||
return;
|
||||
|
@ -290,20 +290,20 @@ w_object(obj, arg, limit)
|
|||
return;
|
||||
|
||||
case T_STRING:
|
||||
w_uclass(obj, cString, arg);
|
||||
w_uclass(obj, rb_cString, arg);
|
||||
w_byte(TYPE_STRING, arg);
|
||||
w_bytes(RSTRING(obj)->ptr, RSTRING(obj)->len, arg);
|
||||
return;
|
||||
|
||||
case T_REGEXP:
|
||||
w_uclass(obj, cRegexp, arg);
|
||||
w_uclass(obj, rb_cRegexp, arg);
|
||||
w_byte(TYPE_REGEXP, arg);
|
||||
w_bytes(RREGEXP(obj)->str, RREGEXP(obj)->len, arg);
|
||||
w_byte(reg_options(obj), arg);
|
||||
w_byte(rb_reg_options(obj), arg);
|
||||
return;
|
||||
|
||||
case T_ARRAY:
|
||||
w_uclass(obj, cArray, arg);
|
||||
w_uclass(obj, rb_cArray, arg);
|
||||
w_byte(TYPE_ARRAY, arg);
|
||||
{
|
||||
int len = RARRAY(obj)->len;
|
||||
|
@ -318,10 +318,10 @@ w_object(obj, arg, limit)
|
|||
break;
|
||||
|
||||
case T_HASH:
|
||||
w_uclass(obj, cHash, arg);
|
||||
w_uclass(obj, rb_cHash, arg);
|
||||
w_byte(TYPE_HASH, arg);
|
||||
w_long(RHASH(obj)->tbl->num_entries, arg);
|
||||
st_foreach(RHASH(obj)->tbl, hash_each, &c_arg);
|
||||
st_foreach(RHASH(obj)->tbl, rb_hash_each, &c_arg);
|
||||
break;
|
||||
|
||||
case T_STRUCT:
|
||||
|
@ -336,7 +336,7 @@ w_object(obj, arg, limit)
|
|||
w_long(len, arg);
|
||||
mem = rb_ivar_get(CLASS_OF(obj), rb_intern("__member__"));
|
||||
if (mem == Qnil) {
|
||||
Fatal("non-initialized struct");
|
||||
rb_raise(rb_eTypeError, "non-initialized struct");
|
||||
}
|
||||
for (i=0; i<len; i++) {
|
||||
w_symbol(FIX2LONG(RARRAY(mem)->ptr[i]), arg);
|
||||
|
@ -352,13 +352,13 @@ w_object(obj, arg, limit)
|
|||
char *path;
|
||||
|
||||
if (FL_TEST(klass, FL_SINGLETON)) {
|
||||
TypeError("singleton can't be dumped");
|
||||
rb_raise(rb_eTypeError, "singleton can't be dumped");
|
||||
}
|
||||
path = rb_class2name(klass);
|
||||
w_unique(path, arg);
|
||||
if (ROBJECT(obj)->iv_tbl) {
|
||||
w_long(ROBJECT(obj)->iv_tbl->num_entries, arg);
|
||||
st_foreach(ROBJECT(obj)->iv_tbl, obj_each, &c_arg);
|
||||
st_foreach(ROBJECT(obj)->iv_tbl, rb_obj_each, &c_arg);
|
||||
}
|
||||
else {
|
||||
w_long(0, arg);
|
||||
|
@ -367,7 +367,8 @@ w_object(obj, arg, limit)
|
|||
break;
|
||||
|
||||
default:
|
||||
TypeError("can't dump %s", rb_class2name(CLASS_OF(obj)));
|
||||
rb_raise(rb_eTypeError, "can't dump %s",
|
||||
rb_class2name(CLASS_OF(obj)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -411,21 +412,21 @@ marshal_dump(argc, argv)
|
|||
else port = a1;
|
||||
}
|
||||
if (port) {
|
||||
if (obj_is_kind_of(port, cIO)) {
|
||||
if (rb_obj_is_kind_of(port, rb_cIO)) {
|
||||
OpenFile *fptr;
|
||||
|
||||
io_binmode(port);
|
||||
rb_io_binmode(port);
|
||||
GetOpenFile(port, fptr);
|
||||
io_writable(fptr);
|
||||
rb_io_check_writable(fptr);
|
||||
arg.fp = (fptr->f2) ? fptr->f2 : fptr->f;
|
||||
}
|
||||
else {
|
||||
TypeError("instance of IO needed");
|
||||
rb_raise(rb_eTypeError, "instance of IO needed");
|
||||
}
|
||||
}
|
||||
else {
|
||||
arg.fp = 0;
|
||||
port = str_new(0, 0);
|
||||
port = rb_str_new(0, 0);
|
||||
arg.str = port;
|
||||
}
|
||||
|
||||
|
@ -479,7 +480,7 @@ static void
|
|||
long_toobig(size)
|
||||
int size;
|
||||
{
|
||||
TypeError("long too big for this architecture (size %d, given %d)",
|
||||
rb_raise(rb_eTypeError, "long too big for this architecture (size %d, given %d)",
|
||||
sizeof(long), size);
|
||||
}
|
||||
|
||||
|
@ -554,7 +555,7 @@ r_symbol(arg)
|
|||
if (st_lookup(arg->symbol, num, &id)) {
|
||||
return id;
|
||||
}
|
||||
TypeError("bad symbol");
|
||||
rb_raise(rb_eTypeError, "bad symbol");
|
||||
}
|
||||
r_bytes(buf, arg);
|
||||
id = rb_intern(buf);
|
||||
|
@ -578,7 +579,7 @@ r_string(arg)
|
|||
int len;
|
||||
|
||||
r_bytes2(buf, len, arg);
|
||||
return str_taint(str_new(buf, len));
|
||||
return rb_str_taint(rb_str_new(buf, len));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -602,14 +603,14 @@ r_object(arg)
|
|||
|
||||
switch (type) {
|
||||
case EOF:
|
||||
eof_error();
|
||||
rb_eof_error();
|
||||
return Qnil;
|
||||
|
||||
case TYPE_LINK:
|
||||
if (st_lookup(arg->data, r_long(arg), &v)) {
|
||||
return v;
|
||||
}
|
||||
ArgError("dump format error (unlinked)");
|
||||
rb_raise(rb_eArgError, "dump format error (unlinked)");
|
||||
break;
|
||||
|
||||
case TYPE_UCLASS:
|
||||
|
@ -617,7 +618,7 @@ r_object(arg)
|
|||
VALUE c = rb_path2class(r_unique(arg));
|
||||
v = r_object(arg);
|
||||
if (rb_special_const_p(v)) {
|
||||
ArgError("dump format error (user class)");
|
||||
rb_raise(rb_eArgError, "dump format error (user class)");
|
||||
}
|
||||
RBASIC(v)->klass = c;
|
||||
return v;
|
||||
|
@ -627,10 +628,10 @@ r_object(arg)
|
|||
return Qnil;
|
||||
|
||||
case TYPE_TRUE:
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
|
||||
case TYPE_FALSE:
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
|
||||
case TYPE_FIXNUM:
|
||||
{
|
||||
|
@ -646,7 +647,7 @@ r_object(arg)
|
|||
char *buf;
|
||||
|
||||
r_bytes(buf, arg);
|
||||
v = float_new(atof(buf));
|
||||
v = rb_float_new(atof(buf));
|
||||
return r_regist(v, arg);
|
||||
}
|
||||
|
||||
|
@ -656,14 +657,14 @@ r_object(arg)
|
|||
unsigned short *digits;
|
||||
|
||||
NEWOBJ(big, struct RBignum);
|
||||
OBJSETUP(big, cBignum, T_BIGNUM);
|
||||
OBJSETUP(big, rb_cBignum, T_BIGNUM);
|
||||
big->sign = (r_byte(arg) == '+');
|
||||
big->len = len = r_long(arg);
|
||||
big->digits = digits = ALLOC_N(unsigned short, len);
|
||||
while (len--) {
|
||||
*digits++ = r_short(arg);
|
||||
}
|
||||
big = RBIGNUM(big_norm((VALUE)big));
|
||||
big = RBIGNUM(rb_big_norm((VALUE)big));
|
||||
if (TYPE(big) == T_BIGNUM) {
|
||||
r_regist((VALUE)big, arg);
|
||||
}
|
||||
|
@ -681,16 +682,16 @@ r_object(arg)
|
|||
|
||||
r_bytes2(buf, len, arg);
|
||||
options = r_byte(arg);
|
||||
return r_regist(reg_new(buf, len, options), arg);
|
||||
return r_regist(rb_reg_new(buf, len, options), arg);
|
||||
}
|
||||
|
||||
case TYPE_ARRAY:
|
||||
{
|
||||
volatile int len = r_long(arg);
|
||||
v = ary_new2(len);
|
||||
v = rb_ary_new2(len);
|
||||
r_regist(v, arg);
|
||||
while (len--) {
|
||||
ary_push(v, r_object(arg));
|
||||
rb_ary_push(v, r_object(arg));
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
@ -699,12 +700,12 @@ r_object(arg)
|
|||
{
|
||||
int len = r_long(arg);
|
||||
|
||||
v = hash_new();
|
||||
v = rb_hash_new();
|
||||
r_regist(v, arg);
|
||||
while (len--) {
|
||||
VALUE key = r_object(arg);
|
||||
VALUE value = r_object(arg);
|
||||
hash_aset(v, key, value);
|
||||
rb_hash_aset(v, key, value);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
@ -719,26 +720,26 @@ r_object(arg)
|
|||
klass = rb_path2class(r_unique(arg));
|
||||
mem = rb_ivar_get(klass, rb_intern("__member__"));
|
||||
if (mem == Qnil) {
|
||||
Fatal("non-initialized struct");
|
||||
rb_raise(rb_eTypeError, "non-initialized struct");
|
||||
}
|
||||
len = r_long(arg);
|
||||
|
||||
values = ary_new2(len);
|
||||
values = rb_ary_new2(len);
|
||||
for (i=0; i<len; i++) {
|
||||
ary_push(values, Qnil);
|
||||
rb_ary_push(values, Qnil);
|
||||
}
|
||||
v = struct_alloc(klass, values);
|
||||
v = rb_struct_alloc(klass, values);
|
||||
r_regist(v, arg);
|
||||
for (i=0; i<len; i++) {
|
||||
slot = r_symbol(arg);
|
||||
|
||||
if (RARRAY(mem)->ptr[i] != INT2FIX(slot)) {
|
||||
TypeError("struct %s not compatible (:%s for :%s)",
|
||||
rb_raise(rb_eTypeError, "struct %s not compatible (:%s for :%s)",
|
||||
rb_class2name(klass),
|
||||
rb_id2name(slot),
|
||||
rb_id2name(FIX2INT(RARRAY(mem)->ptr[i])));
|
||||
}
|
||||
struct_aset(v, INT2FIX(i), r_object(arg));
|
||||
rb_struct_aset(v, INT2FIX(i), r_object(arg));
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
@ -753,7 +754,7 @@ r_object(arg)
|
|||
v = rb_funcall(klass, s_load, 1, r_string(arg));
|
||||
return r_regist(v, arg);
|
||||
}
|
||||
TypeError("class %s needs to have method `_load_from'",
|
||||
rb_raise(rb_eTypeError, "class %s needs to have method `_load_from'",
|
||||
rb_class2name(klass));
|
||||
}
|
||||
break;
|
||||
|
@ -765,7 +766,7 @@ r_object(arg)
|
|||
|
||||
klass = rb_path2class(r_unique(arg));
|
||||
len = r_long(arg);
|
||||
v = obj_alloc(klass);
|
||||
v = rb_obj_alloc(klass);
|
||||
r_regist(v, arg);
|
||||
if (len > 0) {
|
||||
while (len--) {
|
||||
|
@ -786,7 +787,7 @@ r_object(arg)
|
|||
}
|
||||
|
||||
default:
|
||||
ArgError("dump format error(0x%x)", type);
|
||||
rb_raise(rb_eArgError, "dump format error(0x%x)", type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -819,10 +820,10 @@ marshal_load(argc, argv)
|
|||
struct load_arg arg;
|
||||
|
||||
rb_scan_args(argc, argv, "11", &port, &proc);
|
||||
if (obj_is_kind_of(port, cIO)) {
|
||||
io_binmode(port);
|
||||
if (rb_obj_is_kind_of(port, rb_cIO)) {
|
||||
rb_io_binmode(port);
|
||||
GetOpenFile(port, fptr);
|
||||
io_readable(fptr);
|
||||
rb_io_check_readable(fptr);
|
||||
arg.fp = fptr->f;
|
||||
}
|
||||
else if (rb_respond_to(port, rb_intern("to_str"))) {
|
||||
|
@ -833,13 +834,13 @@ marshal_load(argc, argv)
|
|||
arg.end = arg.ptr + RSTRING(port)->len;
|
||||
}
|
||||
else {
|
||||
TypeError("instance of IO needed");
|
||||
rb_raise(rb_eTypeError, "instance of IO needed");
|
||||
}
|
||||
|
||||
major = r_byte(&arg);
|
||||
if (major == MARSHAL_MAJOR) {
|
||||
if (r_byte(&arg) != MARSHAL_MINOR) {
|
||||
Warn("Old marshal file format (can be read)");
|
||||
rb_warn("Old marshal file format (can be read)");
|
||||
}
|
||||
arg.symbol = st_init_numtable();
|
||||
arg.data = st_init_numtable();
|
||||
|
@ -848,7 +849,7 @@ marshal_load(argc, argv)
|
|||
v = rb_ensure(load, (VALUE)&arg, load_ensure, (VALUE)&arg);
|
||||
}
|
||||
else {
|
||||
TypeError("Old marshal file format (can't read)");
|
||||
rb_raise(rb_eTypeError, "Old marshal file format (can't read)");
|
||||
}
|
||||
|
||||
return v;
|
||||
|
@ -857,13 +858,13 @@ marshal_load(argc, argv)
|
|||
void
|
||||
Init_marshal()
|
||||
{
|
||||
VALUE mMarshal = rb_define_module("Marshal");
|
||||
VALUE rb_mMarshal = rb_define_module("Marshal");
|
||||
|
||||
s_dump = rb_intern("_dump_to");
|
||||
s_load = rb_intern("_load_from");
|
||||
rb_define_module_function(mMarshal, "dump", marshal_dump, -1);
|
||||
rb_define_module_function(mMarshal, "load", marshal_load, -1);
|
||||
rb_define_module_function(mMarshal, "restore", marshal_load, 1);
|
||||
rb_define_module_function(rb_mMarshal, "dump", marshal_dump, -1);
|
||||
rb_define_module_function(rb_mMarshal, "load", marshal_load, -1);
|
||||
rb_define_module_function(rb_mMarshal, "restore", marshal_load, 1);
|
||||
|
||||
rb_provide("marshal.o"); /* for backward compatibility */
|
||||
}
|
||||
|
|
54
math.c
54
math.c
|
@ -13,7 +13,7 @@
|
|||
#include "ruby.h"
|
||||
#include <math.h>
|
||||
|
||||
VALUE mMath;
|
||||
VALUE rb_mMath;
|
||||
|
||||
#define Need_Float(x) (x) = rb_Float(x)
|
||||
#define Need_Float2(x,y) {\
|
||||
|
@ -26,7 +26,7 @@ math_atan2(obj, x, y)
|
|||
VALUE obj, x, y;
|
||||
{
|
||||
Need_Float2(x, y);
|
||||
return float_new(atan2(RFLOAT(x)->value, RFLOAT(y)->value));
|
||||
return rb_float_new(atan2(RFLOAT(x)->value, RFLOAT(y)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -35,7 +35,7 @@ math_cos(obj, x)
|
|||
{
|
||||
Need_Float(x);
|
||||
|
||||
return float_new(cos(RFLOAT(x)->value));
|
||||
return rb_float_new(cos(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -44,7 +44,7 @@ math_sin(obj, x)
|
|||
{
|
||||
Need_Float(x);
|
||||
|
||||
return float_new(sin(RFLOAT(x)->value));
|
||||
return rb_float_new(sin(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -53,7 +53,7 @@ math_tan(obj, x)
|
|||
{
|
||||
Need_Float(x);
|
||||
|
||||
return float_new(tan(RFLOAT(x)->value));
|
||||
return rb_float_new(tan(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -61,7 +61,7 @@ math_exp(obj, x)
|
|||
VALUE obj, x;
|
||||
{
|
||||
Need_Float(x);
|
||||
return float_new(exp(RFLOAT(x)->value));
|
||||
return rb_float_new(exp(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -69,7 +69,7 @@ math_log(obj, x)
|
|||
VALUE obj, x;
|
||||
{
|
||||
Need_Float(x);
|
||||
return float_new(log(RFLOAT(x)->value));
|
||||
return rb_float_new(log(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -77,7 +77,7 @@ math_log10(obj, x)
|
|||
VALUE obj, x;
|
||||
{
|
||||
Need_Float(x);
|
||||
return float_new(log10(RFLOAT(x)->value));
|
||||
return rb_float_new(log10(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -86,8 +86,8 @@ math_sqrt(obj, x)
|
|||
{
|
||||
Need_Float(x);
|
||||
|
||||
if (RFLOAT(x)->value < 0.0) ArgError("square root for negative number");
|
||||
return float_new(sqrt(RFLOAT(x)->value));
|
||||
if (RFLOAT(x)->value < 0.0) rb_raise(rb_eArgError, "square root for negative number");
|
||||
return rb_float_new(sqrt(RFLOAT(x)->value));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -100,7 +100,7 @@ math_frexp(obj, x)
|
|||
Need_Float(x);
|
||||
d = frexp(RFLOAT(x)->value, &exp);
|
||||
|
||||
return assoc_new(float_new(d), INT2NUM(exp));
|
||||
return rb_assoc_new(rb_float_new(d), INT2NUM(exp));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -110,36 +110,36 @@ math_ldexp(obj, x, n)
|
|||
double d;
|
||||
|
||||
Need_Float(x);
|
||||
return float_new(d = ldexp(RFLOAT(x)->value, NUM2INT(n)));
|
||||
return rb_float_new(d = ldexp(RFLOAT(x)->value, NUM2INT(n)));
|
||||
}
|
||||
|
||||
void
|
||||
Init_Math()
|
||||
{
|
||||
mMath = rb_define_module("Math");
|
||||
rb_mMath = rb_define_module("Math");
|
||||
|
||||
#ifdef M_PI
|
||||
rb_define_const(mMath, "PI", float_new(M_PI));
|
||||
rb_define_const(rb_mMath, "PI", rb_float_new(M_PI));
|
||||
#else
|
||||
rb_define_const(mMath, "PI", float_new(atan(1.0)*4.0));
|
||||
rb_define_const(rb_mMath, "PI", rb_float_new(atan(1.0)*4.0));
|
||||
#endif
|
||||
|
||||
#ifdef M_E
|
||||
rb_define_const(mMath, "E", float_new(M_E));
|
||||
rb_define_const(rb_mMath, "E", rb_float_new(M_E));
|
||||
#else
|
||||
rb_define_const(mMath, "E", float_new(exp(1.0)));
|
||||
rb_define_const(rb_mMath, "E", rb_float_new(exp(1.0)));
|
||||
#endif
|
||||
|
||||
rb_define_module_function(mMath, "atan2", math_atan2, 2);
|
||||
rb_define_module_function(mMath, "cos", math_cos, 1);
|
||||
rb_define_module_function(mMath, "sin", math_sin, 1);
|
||||
rb_define_module_function(mMath, "tan", math_tan, 1);
|
||||
rb_define_module_function(rb_mMath, "atan2", math_atan2, 2);
|
||||
rb_define_module_function(rb_mMath, "cos", math_cos, 1);
|
||||
rb_define_module_function(rb_mMath, "sin", math_sin, 1);
|
||||
rb_define_module_function(rb_mMath, "tan", math_tan, 1);
|
||||
|
||||
rb_define_module_function(mMath, "exp", math_exp, 1);
|
||||
rb_define_module_function(mMath, "log", math_log, 1);
|
||||
rb_define_module_function(mMath, "log10", math_log10, 1);
|
||||
rb_define_module_function(mMath, "sqrt", math_sqrt, 1);
|
||||
rb_define_module_function(rb_mMath, "exp", math_exp, 1);
|
||||
rb_define_module_function(rb_mMath, "log", math_log, 1);
|
||||
rb_define_module_function(rb_mMath, "log10", math_log10, 1);
|
||||
rb_define_module_function(rb_mMath, "sqrt", math_sqrt, 1);
|
||||
|
||||
rb_define_module_function(mMath, "frexp", math_frexp, 1);
|
||||
rb_define_module_function(mMath, "ldexp", math_ldexp, 2);
|
||||
rb_define_module_function(rb_mMath, "frexp", math_frexp, 1);
|
||||
rb_define_module_function(rb_mMath, "ldexp", math_ldexp, 2);
|
||||
}
|
||||
|
|
183
node.h
183
node.h
|
@ -217,98 +217,98 @@ typedef struct RNode {
|
|||
#define nd_tlev u3.cnt
|
||||
#define nd_tval u2.value
|
||||
|
||||
#define NEW_METHOD(n,x) node_newnode(NODE_METHOD,x,n,0)
|
||||
#define NEW_FBODY(n,i,o) node_newnode(NODE_FBODY,n,i,o)
|
||||
#define NEW_DEFN(i,a,d,p) node_newnode(NODE_DEFN,p,i,NEW_RFUNC(a,d))
|
||||
#define NEW_DEFS(r,i,a,d) node_newnode(NODE_DEFS,r,i,NEW_RFUNC(a,d))
|
||||
#define NEW_CFUNC(f,c) node_newnode(NODE_CFUNC,f,c,0)
|
||||
#define NEW_METHOD(n,x) rb_node_newnode(NODE_METHOD,x,n,0)
|
||||
#define NEW_FBODY(n,i,o) rb_node_newnode(NODE_FBODY,n,i,o)
|
||||
#define NEW_DEFN(i,a,d,p) rb_node_newnode(NODE_DEFN,p,i,NEW_RFUNC(a,d))
|
||||
#define NEW_DEFS(r,i,a,d) rb_node_newnode(NODE_DEFS,r,i,NEW_RFUNC(a,d))
|
||||
#define NEW_CFUNC(f,c) rb_node_newnode(NODE_CFUNC,f,c,0)
|
||||
#define NEW_RFUNC(b1,b2) NEW_SCOPE(block_append(b1,b2))
|
||||
#define NEW_SCOPE(b) node_newnode(NODE_SCOPE,local_tbl(),(b),cur_cref)
|
||||
#define NEW_BLOCK(a) node_newnode(NODE_BLOCK,a,0,0)
|
||||
#define NEW_IF(c,t,e) node_newnode(NODE_IF,c,t,e)
|
||||
#define NEW_UNLESS(c,t,e) node_newnode(NODE_IF,c,e,t)
|
||||
#define NEW_CASE(h,b) node_newnode(NODE_CASE,h,b,0)
|
||||
#define NEW_WHEN(c,t,e) node_newnode(NODE_WHEN,c,t,e)
|
||||
#define NEW_OPT_N(b) node_newnode(NODE_OPT_N,0,b,0)
|
||||
#define NEW_WHILE(c,b,n) node_newnode(NODE_WHILE,c,b,n)
|
||||
#define NEW_UNTIL(c,b,n) node_newnode(NODE_UNTIL,c,b,n)
|
||||
#define NEW_FOR(v,i,b) node_newnode(NODE_FOR,v,b,i)
|
||||
#define NEW_ITER(v,i,b) node_newnode(NODE_ITER,v,b,i)
|
||||
#define NEW_BREAK() node_newnode(NODE_BREAK,0,0,0)
|
||||
#define NEW_NEXT() node_newnode(NODE_NEXT,0,0,0)
|
||||
#define NEW_REDO() node_newnode(NODE_REDO,0,0,0)
|
||||
#define NEW_RETRY() node_newnode(NODE_RETRY,0,0,0)
|
||||
#define NEW_BEGIN(b) node_newnode(NODE_BEGIN,0,b,0)
|
||||
#define NEW_RESCUE(b,res) node_newnode(NODE_RESCUE,b,res,0)
|
||||
#define NEW_RESBODY(a,ex,n) node_newnode(NODE_RESBODY,n,ex,a)
|
||||
#define NEW_ENSURE(b,en) node_newnode(NODE_ENSURE,b,0,en)
|
||||
#define NEW_RET(s) node_newnode(NODE_RETURN,s,0,0)
|
||||
#define NEW_YIELD(a) node_newnode(NODE_YIELD,a,0,0)
|
||||
#define NEW_SCOPE(b) rb_node_newnode(NODE_SCOPE,local_tbl(),(b),cur_cref)
|
||||
#define NEW_BLOCK(a) rb_node_newnode(NODE_BLOCK,a,0,0)
|
||||
#define NEW_IF(c,t,e) rb_node_newnode(NODE_IF,c,t,e)
|
||||
#define NEW_UNLESS(c,t,e) rb_node_newnode(NODE_IF,c,e,t)
|
||||
#define NEW_CASE(h,b) rb_node_newnode(NODE_CASE,h,b,0)
|
||||
#define NEW_WHEN(c,t,e) rb_node_newnode(NODE_WHEN,c,t,e)
|
||||
#define NEW_OPT_N(b) rb_node_newnode(NODE_OPT_N,0,b,0)
|
||||
#define NEW_WHILE(c,b,n) rb_node_newnode(NODE_WHILE,c,b,n)
|
||||
#define NEW_UNTIL(c,b,n) rb_node_newnode(NODE_UNTIL,c,b,n)
|
||||
#define NEW_FOR(v,i,b) rb_node_newnode(NODE_FOR,v,b,i)
|
||||
#define NEW_ITER(v,i,b) rb_node_newnode(NODE_ITER,v,b,i)
|
||||
#define NEW_BREAK() rb_node_newnode(NODE_BREAK,0,0,0)
|
||||
#define NEW_NEXT() rb_node_newnode(NODE_NEXT,0,0,0)
|
||||
#define NEW_REDO() rb_node_newnode(NODE_REDO,0,0,0)
|
||||
#define NEW_RETRY() rb_node_newnode(NODE_RETRY,0,0,0)
|
||||
#define NEW_BEGIN(b) rb_node_newnode(NODE_BEGIN,0,b,0)
|
||||
#define NEW_RESCUE(b,res) rb_node_newnode(NODE_RESCUE,b,res,0)
|
||||
#define NEW_RESBODY(a,ex,n) rb_node_newnode(NODE_RESBODY,n,ex,a)
|
||||
#define NEW_ENSURE(b,en) rb_node_newnode(NODE_ENSURE,b,0,en)
|
||||
#define NEW_RET(s) rb_node_newnode(NODE_RETURN,s,0,0)
|
||||
#define NEW_YIELD(a) rb_node_newnode(NODE_YIELD,a,0,0)
|
||||
#define NEW_LIST(a) NEW_ARRAY(a)
|
||||
#define NEW_ARRAY(a) node_newnode(NODE_ARRAY,a,1,0)
|
||||
#define NEW_ZARRAY() node_newnode(NODE_ZARRAY,0,0,0)
|
||||
#define NEW_HASH(a) node_newnode(NODE_HASH,a,0,0)
|
||||
#define NEW_NOT(a) node_newnode(NODE_NOT,0,a,0)
|
||||
#define NEW_MASGN(l,r) node_newnode(NODE_MASGN,l,0,r)
|
||||
#define NEW_GASGN(v,val) node_newnode(NODE_GASGN,v,val,rb_global_entry(v))
|
||||
#define NEW_LASGN(v,val) node_newnode(NODE_LASGN,v,val,local_cnt(v))
|
||||
#define NEW_DASGN(v,val) node_newnode(NODE_DASGN,v,val,0);
|
||||
#define NEW_DASGN_PUSH(v,val) node_newnode(NODE_DASGN_PUSH,v,val,0);
|
||||
#define NEW_IASGN(v,val) node_newnode(NODE_IASGN,v,val,0)
|
||||
#define NEW_CASGN(v,val) node_newnode(NODE_CASGN,v,val,0)
|
||||
#define NEW_OP_ASGN1(p,id,a) node_newnode(NODE_OP_ASGN1,p,id,a)
|
||||
#define NEW_OP_ASGN2(r,i,o,val) node_newnode(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o))
|
||||
#define NEW_OP_ASGN22(i,o) node_newnode(NODE_OP_ASGN2,i,o,id_attrset(i))
|
||||
#define NEW_OP_ASGN_OR(i,val) node_newnode(NODE_OP_ASGN_OR,i,val,0)
|
||||
#define NEW_OP_ASGN_AND(i,val) node_newnode(NODE_OP_ASGN_AND,i,val,0)
|
||||
#define NEW_GVAR(v) node_newnode(NODE_GVAR,v,0,rb_global_entry(v))
|
||||
#define NEW_LVAR(v) node_newnode(NODE_LVAR,v,0,local_cnt(v))
|
||||
#define NEW_DVAR(v) node_newnode(NODE_DVAR,v,0,0);
|
||||
#define NEW_IVAR(v) node_newnode(NODE_IVAR,v,0,0)
|
||||
#define NEW_CVAR(v) node_newnode(NODE_CVAR,v,0,0)
|
||||
#define NEW_NTH_REF(n) node_newnode(NODE_NTH_REF,0,n,local_cnt('~'))
|
||||
#define NEW_BACK_REF(n) node_newnode(NODE_BACK_REF,0,n,local_cnt('~'))
|
||||
#define NEW_MATCH(c) node_newnode(NODE_MATCH,c,0,0)
|
||||
#define NEW_MATCH2(n1,n2) node_newnode(NODE_MATCH2,n1,n2,0)
|
||||
#define NEW_MATCH3(r,n2) node_newnode(NODE_MATCH3,r,n2,0)
|
||||
#define NEW_LIT(l) node_newnode(NODE_LIT,l,0,0)
|
||||
#define NEW_STR(s) node_newnode(NODE_STR,s,0,0)
|
||||
#define NEW_DSTR(s) node_newnode(NODE_DSTR,s,0,0)
|
||||
#define NEW_XSTR(s) node_newnode(NODE_XSTR,s,0,0)
|
||||
#define NEW_DXSTR(s) node_newnode(NODE_DXSTR,s,0,0)
|
||||
#define NEW_EVSTR(s,l) node_newnode(NODE_EVSTR,str_new(s,l),0,0)
|
||||
#define NEW_CALL(r,m,a) node_newnode(NODE_CALL,r,m,a)
|
||||
#define NEW_FCALL(m,a) node_newnode(NODE_FCALL,0,m,a)
|
||||
#define NEW_VCALL(m) node_newnode(NODE_VCALL,0,m,0)
|
||||
#define NEW_SUPER(a) node_newnode(NODE_SUPER,0,0,a)
|
||||
#define NEW_ZSUPER() node_newnode(NODE_ZSUPER,0,0,0)
|
||||
#define NEW_ARGS(f,o,r) node_newnode(NODE_ARGS,o,r,f)
|
||||
#define NEW_BLOCK_ARG(v) node_newnode(NODE_BLOCK_ARG,v,0,local_cnt(v))
|
||||
#define NEW_BLOCK_PASS(b) node_newnode(NODE_BLOCK_PASS,0,b,0)
|
||||
#define NEW_ALIAS(n,o) node_newnode(NODE_ALIAS,0,n,o)
|
||||
#define NEW_VALIAS(n,o) node_newnode(NODE_VALIAS,0,n,o)
|
||||
#define NEW_UNDEF(i) node_newnode(NODE_UNDEF,0,i,0)
|
||||
#define NEW_CLASS(n,b,s) node_newnode(NODE_CLASS,n,NEW_CBODY(b),s)
|
||||
#define NEW_SCLASS(r,b) node_newnode(NODE_SCLASS,r,NEW_CBODY(b),0)
|
||||
#define NEW_MODULE(n,b) node_newnode(NODE_MODULE,n,NEW_CBODY(b),0)
|
||||
#define NEW_COLON2(c,i) node_newnode(NODE_COLON2,c,i,0)
|
||||
#define NEW_COLON3(i) node_newnode(NODE_COLON3,0,i,0)
|
||||
#define NEW_CREF0() (cur_cref=node_newnode(NODE_CREF,RNODE(the_frame->cbase)->nd_clss,0,0))
|
||||
#define NEW_CREF() (cur_cref=node_newnode(NODE_CREF,0,0,cur_cref))
|
||||
#define NEW_ARRAY(a) rb_node_newnode(NODE_ARRAY,a,1,0)
|
||||
#define NEW_ZARRAY() rb_node_newnode(NODE_ZARRAY,0,0,0)
|
||||
#define NEW_HASH(a) rb_node_newnode(NODE_HASH,a,0,0)
|
||||
#define NEW_NOT(a) rb_node_newnode(NODE_NOT,0,a,0)
|
||||
#define NEW_MASGN(l,r) rb_node_newnode(NODE_MASGN,l,0,r)
|
||||
#define NEW_GASGN(v,val) rb_node_newnode(NODE_GASGN,v,val,rb_global_entry(v))
|
||||
#define NEW_LASGN(v,val) rb_node_newnode(NODE_LASGN,v,val,local_cnt(v))
|
||||
#define NEW_DASGN(v,val) rb_node_newnode(NODE_DASGN,v,val,0);
|
||||
#define NEW_DASGN_PUSH(v,val) rb_node_newnode(NODE_DASGN_PUSH,v,val,0);
|
||||
#define NEW_IASGN(v,val) rb_node_newnode(NODE_IASGN,v,val,0)
|
||||
#define NEW_CASGN(v,val) rb_node_newnode(NODE_CASGN,v,val,0)
|
||||
#define NEW_OP_ASGN1(p,id,a) rb_node_newnode(NODE_OP_ASGN1,p,id,a)
|
||||
#define NEW_OP_ASGN2(r,i,o,val) rb_node_newnode(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o))
|
||||
#define NEW_OP_ASGN22(i,o) rb_node_newnode(NODE_OP_ASGN2,i,o,rb_id_attrset(i))
|
||||
#define NEW_OP_ASGN_OR(i,val) rb_node_newnode(NODE_OP_ASGN_OR,i,val,0)
|
||||
#define NEW_OP_ASGN_AND(i,val) rb_node_newnode(NODE_OP_ASGN_AND,i,val,0)
|
||||
#define NEW_GVAR(v) rb_node_newnode(NODE_GVAR,v,0,rb_global_entry(v))
|
||||
#define NEW_LVAR(v) rb_node_newnode(NODE_LVAR,v,0,local_cnt(v))
|
||||
#define NEW_DVAR(v) rb_node_newnode(NODE_DVAR,v,0,0);
|
||||
#define NEW_IVAR(v) rb_node_newnode(NODE_IVAR,v,0,0)
|
||||
#define NEW_CVAR(v) rb_node_newnode(NODE_CVAR,v,0,0)
|
||||
#define NEW_NTH_REF(n) rb_node_newnode(NODE_NTH_REF,0,n,local_cnt('~'))
|
||||
#define NEW_BACK_REF(n) rb_node_newnode(NODE_BACK_REF,0,n,local_cnt('~'))
|
||||
#define NEW_MATCH(c) rb_node_newnode(NODE_MATCH,c,0,0)
|
||||
#define NEW_MATCH2(n1,n2) rb_node_newnode(NODE_MATCH2,n1,n2,0)
|
||||
#define NEW_MATCH3(r,n2) rb_node_newnode(NODE_MATCH3,r,n2,0)
|
||||
#define NEW_LIT(l) rb_node_newnode(NODE_LIT,l,0,0)
|
||||
#define NEW_STR(s) rb_node_newnode(NODE_STR,s,0,0)
|
||||
#define NEW_DSTR(s) rb_node_newnode(NODE_DSTR,s,0,0)
|
||||
#define NEW_XSTR(s) rb_node_newnode(NODE_XSTR,s,0,0)
|
||||
#define NEW_DXSTR(s) rb_node_newnode(NODE_DXSTR,s,0,0)
|
||||
#define NEW_EVSTR(s,l) rb_node_newnode(NODE_EVSTR,rb_str_new(s,l),0,0)
|
||||
#define NEW_CALL(r,m,a) rb_node_newnode(NODE_CALL,r,m,a)
|
||||
#define NEW_FCALL(m,a) rb_node_newnode(NODE_FCALL,0,m,a)
|
||||
#define NEW_VCALL(m) rb_node_newnode(NODE_VCALL,0,m,0)
|
||||
#define NEW_SUPER(a) rb_node_newnode(NODE_SUPER,0,0,a)
|
||||
#define NEW_ZSUPER() rb_node_newnode(NODE_ZSUPER,0,0,0)
|
||||
#define NEW_ARGS(f,o,r) rb_node_newnode(NODE_ARGS,o,r,f)
|
||||
#define NEW_BLOCK_ARG(v) rb_node_newnode(NODE_BLOCK_ARG,v,0,local_cnt(v))
|
||||
#define NEW_BLOCK_PASS(b) rb_node_newnode(NODE_BLOCK_PASS,0,b,0)
|
||||
#define NEW_ALIAS(n,o) rb_node_newnode(NODE_ALIAS,0,n,o)
|
||||
#define NEW_VALIAS(n,o) rb_node_newnode(NODE_VALIAS,0,n,o)
|
||||
#define NEW_UNDEF(i) rb_node_newnode(NODE_UNDEF,0,i,0)
|
||||
#define NEW_CLASS(n,b,s) rb_node_newnode(NODE_CLASS,n,NEW_CBODY(b),s)
|
||||
#define NEW_SCLASS(r,b) rb_node_newnode(NODE_SCLASS,r,NEW_CBODY(b),0)
|
||||
#define NEW_MODULE(n,b) rb_node_newnode(NODE_MODULE,n,NEW_CBODY(b),0)
|
||||
#define NEW_COLON2(c,i) rb_node_newnode(NODE_COLON2,c,i,0)
|
||||
#define NEW_COLON3(i) rb_node_newnode(NODE_COLON3,0,i,0)
|
||||
#define NEW_CREF0() (cur_cref=rb_node_newnode(NODE_CREF,RNODE(ruby_frame->cbase)->nd_clss,0,0))
|
||||
#define NEW_CREF() (cur_cref=rb_node_newnode(NODE_CREF,0,0,cur_cref))
|
||||
#define NEW_CBODY(b) (cur_cref->nd_body=NEW_SCOPE(b),cur_cref)
|
||||
#define NEW_DOT2(b,e) node_newnode(NODE_DOT2,b,e,0)
|
||||
#define NEW_DOT3(b,e) node_newnode(NODE_DOT3,b,e,0)
|
||||
#define NEW_ATTRSET(a) node_newnode(NODE_ATTRSET,a,0,0)
|
||||
#define NEW_SELF() node_newnode(NODE_SELF,0,0,0)
|
||||
#define NEW_NIL() node_newnode(NODE_NIL,0,0,0)
|
||||
#define NEW_TRUE() node_newnode(NODE_TRUE,0,0,0)
|
||||
#define NEW_FALSE() node_newnode(NODE_FALSE,0,0,0)
|
||||
#define NEW_DEFINED(e) node_newnode(NODE_DEFINED,e,0,0)
|
||||
#define NEW_NEWLINE(n) node_newnode(NODE_NEWLINE,0,0,n)
|
||||
#define NEW_DOT2(b,e) rb_node_newnode(NODE_DOT2,b,e,0)
|
||||
#define NEW_DOT3(b,e) rb_node_newnode(NODE_DOT3,b,e,0)
|
||||
#define NEW_ATTRSET(a) rb_node_newnode(NODE_ATTRSET,a,0,0)
|
||||
#define NEW_SELF() rb_node_newnode(NODE_SELF,0,0,0)
|
||||
#define NEW_NIL() rb_node_newnode(NODE_NIL,0,0,0)
|
||||
#define NEW_TRUE() rb_node_newnode(NODE_TRUE,0,0,0)
|
||||
#define NEW_FALSE() rb_node_newnode(NODE_FALSE,0,0,0)
|
||||
#define NEW_DEFINED(e) rb_node_newnode(NODE_DEFINED,e,0,0)
|
||||
#define NEW_NEWLINE(n) rb_node_newnode(NODE_NEWLINE,0,0,n)
|
||||
#define NEW_PREEXE(b) NEW_SCOPE(b)
|
||||
#define NEW_POSTEXE() node_newnode(NODE_POSTEXE,0,0,0)
|
||||
#define NEW_POSTEXE() rb_node_newnode(NODE_POSTEXE,0,0,0)
|
||||
|
||||
NODE *node_newnode();
|
||||
NODE *rb_node_newnode();
|
||||
VALUE rb_method_booundp();
|
||||
|
||||
#define NOEX_PUBLIC 0
|
||||
|
@ -317,14 +317,11 @@ VALUE rb_method_booundp();
|
|||
#define NOEX_PRIVATE 2
|
||||
#define NOEX_PROTECTED 4
|
||||
|
||||
NODE *compile_string _((char *, char *, int));
|
||||
NODE *compile_file _((char *, VALUE, int));
|
||||
NODE *rb_compile_string _((char *, char *, int));
|
||||
NODE *rb_compile_file _((char *, VALUE, int));
|
||||
|
||||
void rb_add_method _((VALUE, ID, NODE *, int));
|
||||
NODE *node_newnode();
|
||||
|
||||
enum node_type nodetype _((NODE *));
|
||||
int nodeline _((NODE *));
|
||||
NODE *rb_node_newnode();
|
||||
|
||||
struct global_entry *rb_global_entry _((ID));
|
||||
VALUE rb_gvar_get _((struct global_entry *));
|
||||
|
|
144
pack.c
144
pack.c
|
@ -84,10 +84,10 @@ pack_add_ptr(str, add)
|
|||
{
|
||||
#define STR_NO_ORIG FL_USER3 /* copied from string.c */
|
||||
if (!RSTRING(str)->orig) {
|
||||
RSTRING(str)->orig = ary_new();
|
||||
RSTRING(str)->orig = rb_ary_new();
|
||||
FL_SET(str, STR_NO_ORIG);
|
||||
}
|
||||
ary_push(RSTRING(str)->orig, add);
|
||||
rb_ary_push(RSTRING(str)->orig, add);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -106,12 +106,12 @@ pack_pack(ary, fmt)
|
|||
|
||||
p = str2cstr(fmt, &plen);
|
||||
pend = p + plen;
|
||||
res = str_new(0, 0);
|
||||
res = rb_str_new(0, 0);
|
||||
|
||||
items = RARRAY(ary)->len;
|
||||
idx = 0;
|
||||
|
||||
#define NEXTFROM (items-- > 0 ? RARRAY(ary)->ptr[idx++] : (ArgError(toofew),0))
|
||||
#define NEXTFROM (items-- > 0 ? RARRAY(ary)->ptr[idx++] : (rb_raise(rb_eArgError, toofew),0))
|
||||
|
||||
while (p < pend) {
|
||||
type = *p++; /* get data type */
|
||||
|
@ -137,7 +137,7 @@ pack_pack(ary, fmt)
|
|||
plen = 0;
|
||||
}
|
||||
else {
|
||||
from = obj_as_string(from);
|
||||
from = rb_obj_as_string(from);
|
||||
ptr = RSTRING(from)->ptr;
|
||||
plen = RSTRING(from)->len;
|
||||
}
|
||||
|
@ -149,15 +149,15 @@ pack_pack(ary, fmt)
|
|||
case 'a':
|
||||
case 'A':
|
||||
if (plen >= len)
|
||||
str_cat(res, ptr, len);
|
||||
rb_str_cat(res, ptr, len);
|
||||
else {
|
||||
str_cat(res, ptr, plen);
|
||||
rb_str_cat(res, ptr, plen);
|
||||
len -= plen;
|
||||
while (len >= 10) {
|
||||
str_cat(res, (type == 'A')?spc10:nul10, 10);
|
||||
rb_str_cat(res, (type == 'A')?spc10:nul10, 10);
|
||||
len -= 10;
|
||||
}
|
||||
str_cat(res, (type == 'A')?spc10:nul10, len);
|
||||
rb_str_cat(res, (type == 'A')?spc10:nul10, len);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -173,7 +173,7 @@ pack_pack(ary, fmt)
|
|||
byte >>= 1;
|
||||
else {
|
||||
char c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
byte = 0;
|
||||
}
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ pack_pack(ary, fmt)
|
|||
char c;
|
||||
byte >>= 7 - (len & 7);
|
||||
c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -197,7 +197,7 @@ pack_pack(ary, fmt)
|
|||
byte <<= 1;
|
||||
else {
|
||||
char c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
byte = 0;
|
||||
}
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ pack_pack(ary, fmt)
|
|||
char c;
|
||||
byte <<= 7 - (len & 7);
|
||||
c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -225,14 +225,14 @@ pack_pack(ary, fmt)
|
|||
byte >>= 4;
|
||||
else {
|
||||
char c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
byte = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (len & 1) {
|
||||
char c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -252,14 +252,14 @@ pack_pack(ary, fmt)
|
|||
byte <<= 4;
|
||||
else {
|
||||
char c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
byte = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (len & 1) {
|
||||
char c = byte & 0xff;
|
||||
str_cat(res, &c, 1);
|
||||
rb_str_cat(res, &c, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -276,7 +276,7 @@ pack_pack(ary, fmt)
|
|||
else {
|
||||
c = NUM2INT(from);
|
||||
}
|
||||
str_cat(res, &c, sizeof(char));
|
||||
rb_str_cat(res, &c, sizeof(char));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -290,7 +290,7 @@ pack_pack(ary, fmt)
|
|||
else {
|
||||
s = NUM2INT(from);
|
||||
}
|
||||
str_cat(res, (char*)&s, sizeof(short));
|
||||
rb_str_cat(res, (char*)&s, sizeof(short));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -304,7 +304,7 @@ pack_pack(ary, fmt)
|
|||
else {
|
||||
i = NUM2UINT(from);
|
||||
}
|
||||
str_cat(res, (char*)&i, sizeof(int));
|
||||
rb_str_cat(res, (char*)&i, sizeof(int));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -318,7 +318,7 @@ pack_pack(ary, fmt)
|
|||
else {
|
||||
l = NUM2ULONG(from);
|
||||
}
|
||||
str_cat(res, (char*)&l, sizeof(long));
|
||||
rb_str_cat(res, (char*)&l, sizeof(long));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -332,7 +332,7 @@ pack_pack(ary, fmt)
|
|||
s = NUM2INT(from);
|
||||
}
|
||||
s = htons(s);
|
||||
str_cat(res, (char*)&s, sizeof(short));
|
||||
rb_str_cat(res, (char*)&s, sizeof(short));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -346,7 +346,7 @@ pack_pack(ary, fmt)
|
|||
l = NUM2ULONG(from);
|
||||
}
|
||||
l = htonl(l);
|
||||
str_cat(res, (char*)&l, sizeof(long));
|
||||
rb_str_cat(res, (char*)&l, sizeof(long));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -360,7 +360,7 @@ pack_pack(ary, fmt)
|
|||
s = NUM2INT(from);
|
||||
}
|
||||
s = htovs(s);
|
||||
str_cat(res, (char*)&s, sizeof(short));
|
||||
rb_str_cat(res, (char*)&s, sizeof(short));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -374,7 +374,7 @@ pack_pack(ary, fmt)
|
|||
l = NUM2ULONG(from);
|
||||
}
|
||||
l = htovl(l);
|
||||
str_cat(res, (char*)&l, sizeof(long));
|
||||
rb_str_cat(res, (char*)&l, sizeof(long));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -394,7 +394,7 @@ pack_pack(ary, fmt)
|
|||
f = (float)NUM2INT(from);
|
||||
break;
|
||||
}
|
||||
str_cat(res, (char*)&f, sizeof(float));
|
||||
rb_str_cat(res, (char*)&f, sizeof(float));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -414,23 +414,23 @@ pack_pack(ary, fmt)
|
|||
d = (double)NUM2INT(from);
|
||||
break;
|
||||
}
|
||||
str_cat(res, (char*)&d, sizeof(double));
|
||||
rb_str_cat(res, (char*)&d, sizeof(double));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
grow:
|
||||
while (len >= 10) {
|
||||
str_cat(res, nul10, 10);
|
||||
rb_str_cat(res, nul10, 10);
|
||||
len -= 10;
|
||||
}
|
||||
str_cat(res, nul10, len);
|
||||
rb_str_cat(res, nul10, len);
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
shrink:
|
||||
if (RSTRING(res)->len < len)
|
||||
ArgError("X outside of string");
|
||||
rb_raise(rb_eArgError, "X outside of string");
|
||||
RSTRING(res)->len -= len;
|
||||
RSTRING(res)->ptr[RSTRING(res)->len] = '\0';
|
||||
break;
|
||||
|
@ -443,12 +443,12 @@ pack_pack(ary, fmt)
|
|||
break;
|
||||
|
||||
case '%':
|
||||
ArgError("% may only be used in unpack");
|
||||
rb_raise(rb_eArgError, "% may only be used in unpack");
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
case 'm':
|
||||
from = obj_as_string(NEXTFROM);
|
||||
from = rb_obj_as_string(NEXTFROM);
|
||||
ptr = RSTRING(from)->ptr;
|
||||
plen = RSTRING(from)->len;
|
||||
|
||||
|
@ -481,7 +481,7 @@ pack_pack(ary, fmt)
|
|||
t = STR2CSTR(from);
|
||||
pack_add_ptr(res, from);
|
||||
}
|
||||
str_cat(res, (char*)&t, sizeof(char*));
|
||||
rb_str_cat(res, (char*)&t, sizeof(char*));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -512,7 +512,7 @@ encodes(str, s, len, type)
|
|||
|
||||
if (type == 'u') {
|
||||
*hunk = len + ' ';
|
||||
str_cat(str, hunk, 1);
|
||||
rb_str_cat(str, hunk, 1);
|
||||
padding = '`';
|
||||
}
|
||||
else {
|
||||
|
@ -523,7 +523,7 @@ encodes(str, s, len, type)
|
|||
hunk[1] = trans[077 & (((*s << 4) & 060) | ((s[1] >> 4) & 017))];
|
||||
hunk[2] = trans[077 & (((s[1] << 2) & 074) | ((s[2] >> 6) & 03))];
|
||||
hunk[3] = trans[077 & s[2]];
|
||||
str_cat(str, hunk, 4);
|
||||
rb_str_cat(str, hunk, 4);
|
||||
s += 3;
|
||||
len -= 3;
|
||||
}
|
||||
|
@ -536,7 +536,7 @@ encodes(str, s, len, type)
|
|||
pend[-2] = padding;
|
||||
pend[-1] = padding;
|
||||
}
|
||||
str_cat(str, "\n", 1);
|
||||
rb_str_cat(str, "\n", 1);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -555,7 +555,7 @@ pack_unpack(str, fmt)
|
|||
p = str2cstr(fmt, &len);
|
||||
pend = p + len;
|
||||
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
while (p < pend) {
|
||||
type = *p++;
|
||||
if (*p == '*') {
|
||||
|
@ -571,7 +571,7 @@ pack_unpack(str, fmt)
|
|||
|
||||
switch (type) {
|
||||
case '%':
|
||||
ArgError("% is not supported(yet)");
|
||||
rb_raise(rb_eArgError, "% is not supported(yet)");
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
|
@ -585,14 +585,14 @@ pack_unpack(str, fmt)
|
|||
t--;
|
||||
len--;
|
||||
}
|
||||
ary_push(ary, str_new(s, len));
|
||||
rb_ary_push(ary, rb_str_new(s, len));
|
||||
s += end;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
if (len > send - s) len = send - s;
|
||||
ary_push(ary, str_new(s, len));
|
||||
rb_ary_push(ary, rb_str_new(s, len));
|
||||
s += len;
|
||||
break;
|
||||
|
||||
|
@ -605,7 +605,7 @@ pack_unpack(str, fmt)
|
|||
if (p[-1] == '*' || len > (send - s) * 8)
|
||||
len = (send - s) * 8;
|
||||
bits = 0;
|
||||
ary_push(ary, bitstr = str_new(0, len));
|
||||
rb_ary_push(ary, bitstr = rb_str_new(0, len));
|
||||
t = RSTRING(bitstr)->ptr;
|
||||
for (i=0; i<len; i++) {
|
||||
if (i & 7) bits >>= 1;
|
||||
|
@ -624,7 +624,7 @@ pack_unpack(str, fmt)
|
|||
if (p[-1] == '*' || len > (send - s) * 8)
|
||||
len = (send - s) * 8;
|
||||
bits = 0;
|
||||
ary_push(ary, bitstr = str_new(0, len));
|
||||
rb_ary_push(ary, bitstr = rb_str_new(0, len));
|
||||
t = RSTRING(bitstr)->ptr;
|
||||
for (i=0; i<len; i++) {
|
||||
if (i & 7) bits <<= 1;
|
||||
|
@ -643,7 +643,7 @@ pack_unpack(str, fmt)
|
|||
if (p[-1] == '*' || len > (send - s) * 2)
|
||||
len = (send - s) * 2;
|
||||
bits = 0;
|
||||
ary_push(ary, bitstr = str_new(0, len));
|
||||
rb_ary_push(ary, bitstr = rb_str_new(0, len));
|
||||
t = RSTRING(bitstr)->ptr;
|
||||
for (i=0; i<len; i++) {
|
||||
if (i & 1)
|
||||
|
@ -664,7 +664,7 @@ pack_unpack(str, fmt)
|
|||
if (p[-1] == '*' || len > (send - s) * 2)
|
||||
len = (send - s) * 2;
|
||||
bits = 0;
|
||||
ary_push(ary, bitstr = str_new(0, len));
|
||||
rb_ary_push(ary, bitstr = rb_str_new(0, len));
|
||||
t = RSTRING(bitstr)->ptr;
|
||||
for (i=0; i<len; i++) {
|
||||
if (i & 1)
|
||||
|
@ -682,7 +682,7 @@ pack_unpack(str, fmt)
|
|||
while (len-- > 0) {
|
||||
int c = *s++;
|
||||
if (c > (char)127) c-=256;
|
||||
ary_push(ary, INT2FIX(c));
|
||||
rb_ary_push(ary, INT2FIX(c));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -691,7 +691,7 @@ pack_unpack(str, fmt)
|
|||
len = send - s;
|
||||
while (len-- > 0) {
|
||||
unsigned char c = *s++;
|
||||
ary_push(ary, INT2FIX(c));
|
||||
rb_ary_push(ary, INT2FIX(c));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -702,7 +702,7 @@ pack_unpack(str, fmt)
|
|||
short tmp;
|
||||
memcpy(&tmp, s, sizeof(short));
|
||||
s += sizeof(short);
|
||||
ary_push(ary, INT2FIX(tmp));
|
||||
rb_ary_push(ary, INT2FIX(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -713,7 +713,7 @@ pack_unpack(str, fmt)
|
|||
unsigned short tmp;
|
||||
memcpy(&tmp, s, sizeof(short));
|
||||
s += sizeof(short);
|
||||
ary_push(ary, INT2FIX(tmp));
|
||||
rb_ary_push(ary, INT2FIX(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -724,7 +724,7 @@ pack_unpack(str, fmt)
|
|||
int tmp;
|
||||
memcpy(&tmp, s, sizeof(int));
|
||||
s += sizeof(int);
|
||||
ary_push(ary, int2inum(tmp));
|
||||
rb_ary_push(ary, rb_int2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -735,7 +735,7 @@ pack_unpack(str, fmt)
|
|||
unsigned int tmp;
|
||||
memcpy(&tmp, s, sizeof(int));
|
||||
s += sizeof(int);
|
||||
ary_push(ary, uint2inum(tmp));
|
||||
rb_ary_push(ary, rb_uint2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -746,7 +746,7 @@ pack_unpack(str, fmt)
|
|||
long tmp;
|
||||
memcpy(&tmp, s, sizeof(long));
|
||||
s += sizeof(long);
|
||||
ary_push(ary, int2inum(tmp));
|
||||
rb_ary_push(ary, rb_int2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -757,7 +757,7 @@ pack_unpack(str, fmt)
|
|||
unsigned long tmp;
|
||||
memcpy(&tmp, s, sizeof(long));
|
||||
s += sizeof(long);
|
||||
ary_push(ary, uint2inum(tmp));
|
||||
rb_ary_push(ary, rb_uint2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -769,7 +769,7 @@ pack_unpack(str, fmt)
|
|||
memcpy(&tmp, s, sizeof(short));
|
||||
s += sizeof(short);
|
||||
tmp = ntohs(tmp);
|
||||
ary_push(ary, uint2inum(tmp));
|
||||
rb_ary_push(ary, rb_uint2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -781,7 +781,7 @@ pack_unpack(str, fmt)
|
|||
memcpy(&tmp, s, sizeof(long));
|
||||
s += sizeof(long);
|
||||
tmp = ntohl(tmp);
|
||||
ary_push(ary, uint2inum(tmp));
|
||||
rb_ary_push(ary, rb_uint2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -793,7 +793,7 @@ pack_unpack(str, fmt)
|
|||
memcpy(&tmp, s, sizeof(short));
|
||||
s += sizeof(short);
|
||||
tmp = vtohs(tmp);
|
||||
ary_push(ary, uint2inum(tmp));
|
||||
rb_ary_push(ary, rb_uint2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -805,7 +805,7 @@ pack_unpack(str, fmt)
|
|||
memcpy(&tmp, s, sizeof(long));
|
||||
s += sizeof(long);
|
||||
tmp = vtohl(tmp);
|
||||
ary_push(ary, uint2inum(tmp));
|
||||
rb_ary_push(ary, rb_uint2inum(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -817,7 +817,7 @@ pack_unpack(str, fmt)
|
|||
float tmp;
|
||||
memcpy(&tmp, s, sizeof(float));
|
||||
s += sizeof(float);
|
||||
ary_push(ary, float_new((double)tmp));
|
||||
rb_ary_push(ary, rb_float_new((double)tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -829,13 +829,13 @@ pack_unpack(str, fmt)
|
|||
double tmp;
|
||||
memcpy(&tmp, s, sizeof(double));
|
||||
s += sizeof(double);
|
||||
ary_push(ary, float_new(tmp));
|
||||
rb_ary_push(ary, rb_float_new(tmp));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
{
|
||||
VALUE str = str_new(0, (send - s)*3/4);
|
||||
VALUE str = rb_str_new(0, (send - s)*3/4);
|
||||
char *ptr = RSTRING(str)->ptr;
|
||||
int total = 0;
|
||||
|
||||
|
@ -883,13 +883,13 @@ pack_unpack(str, fmt)
|
|||
s += 2; /* possible checksum byte */
|
||||
}
|
||||
RSTRING(str)->len = total;
|
||||
ary_push(ary, str);
|
||||
rb_ary_push(ary, str);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
{
|
||||
VALUE str = str_new(0, (send - s)*3/4);
|
||||
VALUE str = rb_str_new(0, (send - s)*3/4);
|
||||
char *ptr = RSTRING(str)->ptr;
|
||||
int a,b,c,d;
|
||||
static int first = 1;
|
||||
|
@ -925,7 +925,7 @@ pack_unpack(str, fmt)
|
|||
*ptr++ = b << 4 | c >> 2;
|
||||
}
|
||||
RSTRING(str)->len = ptr - RSTRING(str)->ptr;
|
||||
ary_push(ary, str);
|
||||
rb_ary_push(ary, str);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -935,25 +935,25 @@ pack_unpack(str, fmt)
|
|||
|
||||
case 'X':
|
||||
if (len > s - RSTRING(str)->ptr)
|
||||
ArgError("X outside of string");
|
||||
rb_raise(rb_eArgError, "X outside of string");
|
||||
s -= len;
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
if (len > send - s)
|
||||
ArgError("x outside of string");
|
||||
rb_raise(rb_eArgError, "x outside of string");
|
||||
s += len;
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
if (sizeof(char *) <= send - s) {
|
||||
char *t;
|
||||
VALUE str = str_new(0, 0);
|
||||
VALUE str = rb_str_new(0, 0);
|
||||
memcpy(&t, s, sizeof(char *));
|
||||
s += sizeof(char *);
|
||||
if (t)
|
||||
str_cat(str, t, len);
|
||||
ary_push(ary, str);
|
||||
rb_str_cat(str, t, len);
|
||||
rb_ary_push(ary, str);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -965,12 +965,12 @@ pack_unpack(str, fmt)
|
|||
break;
|
||||
else {
|
||||
char *t;
|
||||
VALUE str = str_new(0, 0);
|
||||
VALUE str = rb_str_new(0, 0);
|
||||
memcpy(&t, s, sizeof(char *));
|
||||
s += sizeof(char *);
|
||||
if (t)
|
||||
str_cat(str, t, strlen(t));
|
||||
ary_push(ary, str);
|
||||
rb_str_cat(str, t, strlen(t));
|
||||
rb_ary_push(ary, str);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -986,6 +986,6 @@ pack_unpack(str, fmt)
|
|||
void
|
||||
Init_pack()
|
||||
{
|
||||
rb_define_method(cArray, "pack", pack_pack, 1);
|
||||
rb_define_method(cString, "unpack", pack_unpack, 1);
|
||||
rb_define_method(rb_cArray, "pack", pack_pack, 1);
|
||||
rb_define_method(rb_cString, "unpack", pack_unpack, 1);
|
||||
}
|
||||
|
|
172
process.c
172
process.c
|
@ -30,7 +30,7 @@ struct timeval {
|
|||
#endif /* NT */
|
||||
#include <ctype.h>
|
||||
|
||||
struct timeval time_timeval _((VALUE));
|
||||
struct timeval rb_time_timeval _((VALUE));
|
||||
|
||||
#ifdef HAVE_SYS_WAIT_H
|
||||
# include <sys/wait.h>
|
||||
|
@ -64,7 +64,7 @@ get_ppid()
|
|||
#endif
|
||||
}
|
||||
|
||||
VALUE last_status = Qnil;
|
||||
VALUE rb_last_status = Qnil;
|
||||
|
||||
#if !defined(HAVE_WAITPID) && !defined(HAVE_WAIT4)
|
||||
#define NO_WAITPID
|
||||
|
@ -81,7 +81,7 @@ rb_waitpid(pid, flags, st)
|
|||
#ifndef NO_WAITPID
|
||||
#if defined(THREAD)
|
||||
int oflags = flags;
|
||||
if (!thread_alone()) { /* there're other threads to run */
|
||||
if (!rb_thread_alone()) { /* there're other threads to run */
|
||||
flags |= WNOHANG;
|
||||
}
|
||||
#endif
|
||||
|
@ -95,7 +95,7 @@ rb_waitpid(pid, flags, st)
|
|||
if (result < 0) {
|
||||
if (errno == EINTR) {
|
||||
#ifdef THREAD
|
||||
thread_schedule();
|
||||
rb_thread_schedule();
|
||||
#endif
|
||||
goto retry;
|
||||
}
|
||||
|
@ -104,20 +104,20 @@ rb_waitpid(pid, flags, st)
|
|||
#ifdef THREAD
|
||||
if (result == 0) {
|
||||
if (oflags & WNOHANG) return 0;
|
||||
thread_schedule();
|
||||
if (thread_alone()) flags = oflags;
|
||||
rb_thread_schedule();
|
||||
if (rb_thread_alone()) flags = oflags;
|
||||
goto retry;
|
||||
}
|
||||
#endif
|
||||
#else /* NO_WAITPID */
|
||||
if (pid_tbl && st_lookup(pid_tbl, pid, st)) {
|
||||
last_status = INT2FIX(*st);
|
||||
rb_last_status = INT2FIX(*st);
|
||||
st_delete(pid_tbl, &pid, NULL);
|
||||
return pid;
|
||||
}
|
||||
|
||||
if (flags) {
|
||||
ArgError("Can't do waitpid with flags");
|
||||
rb_raise(rb_eArgError, "Can't do waitpid with flags");
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
|
@ -125,7 +125,7 @@ rb_waitpid(pid, flags, st)
|
|||
if (result < 0) {
|
||||
if (errno == EINTR) {
|
||||
#ifdef THREAD
|
||||
thread_schedule();
|
||||
rb_thread_schedule();
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
@ -138,11 +138,11 @@ rb_waitpid(pid, flags, st)
|
|||
pid_tbl = st_init_numtable();
|
||||
st_insert(pid_tbl, pid, st);
|
||||
#ifdef THREAD
|
||||
if (!thread_alone()) thread_schedule();
|
||||
if (!thread_alone()) rb_thread_schedule();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
last_status = INT2FIX(*st);
|
||||
rb_last_status = INT2FIX(*st);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -166,7 +166,7 @@ wait_each(key, value, data)
|
|||
#endif
|
||||
|
||||
static VALUE
|
||||
f_wait()
|
||||
rb_f_wait()
|
||||
{
|
||||
int pid, state;
|
||||
#ifdef NO_WAITPID
|
||||
|
@ -175,20 +175,20 @@ f_wait()
|
|||
data.status = -1;
|
||||
st_foreach(pid_tbl, wait_each, &data);
|
||||
if (data.status != -1) {
|
||||
last_status = data.status;
|
||||
rb_last_status = data.status;
|
||||
return INT2FIX(data.pid);
|
||||
}
|
||||
|
||||
while ((pid = wait(&state)) < 0) {
|
||||
if (errno == EINTR) {
|
||||
#ifdef THREAD
|
||||
thread_schedule();
|
||||
rb_thread_schedule();
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
rb_sys_fail(0);
|
||||
}
|
||||
last_status = INT2FIX(state);
|
||||
rb_last_status = INT2FIX(state);
|
||||
#else
|
||||
if ((pid = rb_waitpid(-1, 0, &state)) < 0)
|
||||
rb_sys_fail(0);
|
||||
|
@ -197,7 +197,7 @@ f_wait()
|
|||
}
|
||||
|
||||
static VALUE
|
||||
f_waitpid(obj, vpid, vflags)
|
||||
rb_f_waitpid(obj, vpid, vflags)
|
||||
VALUE obj, vpid, vflags;
|
||||
{
|
||||
int pid, flags, status;
|
||||
|
@ -247,8 +247,8 @@ security(str)
|
|||
{
|
||||
if (rb_safe_level() > 0) {
|
||||
#ifndef USE_CWGUSI
|
||||
if (env_path_tainted()) {
|
||||
Raise(eSecurityError, "Insecure PATH - %s", str);
|
||||
if (rb_env_path_tainted()) {
|
||||
rb_raise(rb_eSecurityError, "Insecure PATH - %s", str);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -496,7 +496,7 @@ proc_spawn(sv)
|
|||
#endif /* __human68k__ */
|
||||
|
||||
static VALUE
|
||||
f_exec(argc, argv)
|
||||
rb_f_exec(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -505,7 +505,7 @@ f_exec(argc, argv)
|
|||
|
||||
if (TYPE(argv[0]) == T_ARRAY) {
|
||||
if (RARRAY(argv[0])->len != 2) {
|
||||
ArgError("wrong first argument");
|
||||
rb_raise(rb_eArgError, "wrong first argument");
|
||||
}
|
||||
prog = RARRAY(argv[0])->ptr[0];
|
||||
argv[0] = RARRAY(argv[0])->ptr[1];
|
||||
|
@ -513,7 +513,7 @@ f_exec(argc, argv)
|
|||
|
||||
if (TYPE(argv[0]) == T_ARRAY) {
|
||||
if (RARRAY(argv[0])->len != 2) {
|
||||
ArgError("wrong first argument");
|
||||
rb_raise(rb_eArgError, "wrong first argument");
|
||||
}
|
||||
prog = RARRAY(argv[0])->ptr[0];
|
||||
argv[0] = RARRAY(argv[0])->ptr[1];
|
||||
|
@ -534,7 +534,7 @@ f_exec(argc, argv)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
f_fork(obj)
|
||||
rb_f_fork(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
#if !defined(__human68k__)
|
||||
|
@ -546,7 +546,7 @@ f_fork(obj)
|
|||
#ifdef linux
|
||||
after_exec();
|
||||
#endif
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
rb_yield(Qnil);
|
||||
_exit(0);
|
||||
}
|
||||
|
@ -565,7 +565,7 @@ f_fork(obj)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
f_exit_bang(obj, status)
|
||||
rb_f_exit_bang(obj, status)
|
||||
VALUE obj, status;
|
||||
{
|
||||
int code = -1;
|
||||
|
@ -614,7 +614,7 @@ rb_syswait(pid)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
f_system(argc, argv)
|
||||
rb_f_system(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -624,18 +624,18 @@ f_system(argc, argv)
|
|||
|
||||
if (TYPE(argv[0]) == T_ARRAY) {
|
||||
if (RARRAY(argv[0])->len != 2) {
|
||||
ArgError("wrong first argument");
|
||||
rb_raise(rb_eArgError, "wrong first argument");
|
||||
}
|
||||
argv[0] = RARRAY(argv[0])->ptr[0];
|
||||
}
|
||||
cmd = ary_join(ary_new4(argc, argv), str_new2(" "));
|
||||
cmd = rb_ary_join(ary_new4(argc, argv), rb_str_new2(" "));
|
||||
|
||||
Check_SafeStr(cmd);
|
||||
state = do_spawn(RSTRING(cmd)->ptr);
|
||||
last_status = INT2FIX(state);
|
||||
rb_last_status = INT2FIX(state);
|
||||
|
||||
if (state == 0) return TRUE;
|
||||
return FALSE;
|
||||
if (state == 0) return Qtrue;
|
||||
return Qfalse;
|
||||
#else
|
||||
#if defined(DJGPP)
|
||||
VALUE cmd;
|
||||
|
@ -643,18 +643,18 @@ f_system(argc, argv)
|
|||
|
||||
if (TYPE(argv[0]) == T_ARRAY) {
|
||||
if (RARRAY(argv[0])->len != 2) {
|
||||
ArgError("wrong first argument");
|
||||
rb_raise(rb_eArgError, "wrong first argument");
|
||||
}
|
||||
argv[0] = RARRAY(argv[0])->ptr[0];
|
||||
}
|
||||
cmd = ary_join(ary_new4(argc, argv), str_new2(" "));
|
||||
cmd = rb_ary_join(ary_new4(argc, argv), rb_str_new2(" "));
|
||||
|
||||
Check_SafeStr(cmd);
|
||||
state = system(RSTRING(cmd)->ptr);
|
||||
last_status = INT2FIX(state);
|
||||
rb_last_status = INT2FIX(state);
|
||||
|
||||
if (state == 0) return TRUE;
|
||||
return FALSE;
|
||||
if (state == 0) return Qtrue;
|
||||
return Qfalse;
|
||||
#else
|
||||
#if defined(__human68k__)
|
||||
VALUE prog = 0;
|
||||
|
@ -665,13 +665,13 @@ f_system(argc, argv)
|
|||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
if (argc == 0) {
|
||||
last_status = INT2FIX(0);
|
||||
rb_last_status = INT2FIX(0);
|
||||
return INT2FIX(0);
|
||||
}
|
||||
|
||||
if (TYPE(argv[0]) == T_ARRAY) {
|
||||
if (RARRAY(argv[0])->len != 2) {
|
||||
ArgError("wrong first argument");
|
||||
rb_raise(rb_eArgError, "wrong first argument");
|
||||
}
|
||||
prog = RARRAY(argv[0])->ptr[0];
|
||||
argv[0] = RARRAY(argv[0])->ptr[1];
|
||||
|
@ -683,8 +683,8 @@ f_system(argc, argv)
|
|||
else {
|
||||
state = proc_spawn_n(argc, argv, prog);
|
||||
}
|
||||
last_status = state == -1 ? INT2FIX(127) : INT2FIX(state);
|
||||
return state == 0 ? TRUE : FALSE ;
|
||||
rb_last_status = state == -1 ? INT2FIX(127) : INT2FIX(state);
|
||||
return state == 0 ? Qtrue : Qfalse ;
|
||||
#else
|
||||
volatile VALUE prog = 0;
|
||||
int pid;
|
||||
|
@ -693,13 +693,13 @@ f_system(argc, argv)
|
|||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
if (argc == 0) {
|
||||
last_status = INT2FIX(0);
|
||||
rb_last_status = INT2FIX(0);
|
||||
return INT2FIX(0);
|
||||
}
|
||||
|
||||
if (TYPE(argv[0]) == T_ARRAY) {
|
||||
if (RARRAY(argv[0])->len != 2) {
|
||||
ArgError("wrong first argument");
|
||||
rb_raise(rb_eArgError, "wrong first argument");
|
||||
}
|
||||
prog = RARRAY(argv[0])->ptr[0];
|
||||
argv[0] = RARRAY(argv[0])->ptr[1];
|
||||
|
@ -726,7 +726,7 @@ f_system(argc, argv)
|
|||
case -1:
|
||||
if (errno == EAGAIN) {
|
||||
#ifdef THREAD
|
||||
thread_sleep(1);
|
||||
rb_thread_sleep(1);
|
||||
#else
|
||||
sleep(1);
|
||||
#endif
|
||||
|
@ -739,15 +739,15 @@ f_system(argc, argv)
|
|||
rb_syswait(pid);
|
||||
}
|
||||
|
||||
if (last_status == INT2FIX(0)) return TRUE;
|
||||
return FALSE;
|
||||
if (rb_last_status == INT2FIX(0)) return Qtrue;
|
||||
return Qfalse;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static VALUE
|
||||
f_sleep(argc, argv)
|
||||
rb_f_sleep(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -756,10 +756,10 @@ f_sleep(argc, argv)
|
|||
beg = time(0);
|
||||
#ifdef THREAD
|
||||
if (argc == 0) {
|
||||
thread_sleep_forever();
|
||||
rb_thread_sleep_forever();
|
||||
}
|
||||
else if (argc == 1) {
|
||||
thread_wait_for(time_timeval(argv[0]));
|
||||
rb_thread_wait_for(rb_time_timeval(argv[0]));
|
||||
}
|
||||
#else
|
||||
if (argc == 0) {
|
||||
|
@ -771,7 +771,7 @@ f_sleep(argc, argv)
|
|||
struct timeval tv;
|
||||
int n;
|
||||
|
||||
tv = time_timeval(argv[0]);
|
||||
tv = rb_time_timeval(argv[0]);
|
||||
TRAP_BEG;
|
||||
n = select(0, 0, 0, 0, &tv);
|
||||
TRAP_END;
|
||||
|
@ -779,7 +779,7 @@ f_sleep(argc, argv)
|
|||
}
|
||||
#endif
|
||||
else {
|
||||
ArgError("wrong # of arguments");
|
||||
rb_raise(rb_eArgError, "wrong # of arguments");
|
||||
}
|
||||
|
||||
end = time(0) - beg;
|
||||
|
@ -1022,9 +1022,7 @@ proc_setegid(obj, egid)
|
|||
return egid;
|
||||
}
|
||||
|
||||
VALUE mProcess;
|
||||
|
||||
extern VALUE f_kill();
|
||||
VALUE rb_mProcess;
|
||||
|
||||
void
|
||||
Init_process()
|
||||
|
@ -1032,74 +1030,74 @@ Init_process()
|
|||
#ifndef USE_CWGUSI
|
||||
rb_define_virtual_variable("$$", get_pid, 0);
|
||||
#endif
|
||||
rb_define_readonly_variable("$?", &last_status);
|
||||
rb_define_readonly_variable("$?", &rb_last_status);
|
||||
#ifndef USE_CWGUSI
|
||||
rb_define_global_function("exec", f_exec, -1);
|
||||
rb_define_global_function("exec", rb_f_exec, -1);
|
||||
#endif
|
||||
#if !defined(NT) && !defined(USE_CWGUSI)
|
||||
rb_define_global_function("fork", f_fork, 0);
|
||||
rb_define_global_function("fork", rb_f_fork, 0);
|
||||
#endif
|
||||
rb_define_global_function("exit!", f_exit_bang, 1);
|
||||
rb_define_global_function("exit!", rb_f_exit_bang, 1);
|
||||
#ifndef USE_CWGUSI
|
||||
rb_define_global_function("system", f_system, -1);
|
||||
rb_define_global_function("system", rb_f_system, -1);
|
||||
#endif
|
||||
rb_define_global_function("sleep", f_sleep, -1);
|
||||
rb_define_global_function("sleep", rb_f_sleep, -1);
|
||||
|
||||
mProcess = rb_define_module("Process");
|
||||
rb_mProcess = rb_define_module("Process");
|
||||
|
||||
#if !defined(NT) && !defined(DJGPP)
|
||||
#ifdef WNOHANG
|
||||
rb_define_const(mProcess, "WNOHANG", INT2FIX(WNOHANG));
|
||||
rb_define_const(rb_mProcess, "WNOHANG", INT2FIX(WNOHANG));
|
||||
#else
|
||||
rb_define_const(mProcess, "WNOHANG", INT2FIX(0));
|
||||
rb_define_const(rb_mProcess, "WNOHANG", INT2FIX(0));
|
||||
#endif
|
||||
#ifdef WUNTRACED
|
||||
rb_define_const(mProcess, "WUNTRACED", INT2FIX(WUNTRACED));
|
||||
rb_define_const(rb_mProcess, "WUNTRACED", INT2FIX(WUNTRACED));
|
||||
#else
|
||||
rb_define_const(mProcess, "WUNTRACED", INT2FIX(0));
|
||||
rb_define_const(rb_mProcess, "WUNTRACED", INT2FIX(0));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(NT) && !defined(USE_CWGUSI)
|
||||
rb_define_singleton_method(mProcess, "fork", f_fork, 0);
|
||||
rb_define_singleton_method(rb_mProcess, "fork", rb_f_fork, 0);
|
||||
#endif
|
||||
rb_define_singleton_method(mProcess, "exit!", f_exit_bang, 1);
|
||||
rb_define_singleton_method(rb_mProcess, "exit!", rb_f_exit_bang, 1);
|
||||
#ifndef USE_CWGUSI
|
||||
rb_define_module_function(mProcess, "kill", f_kill, -1);
|
||||
rb_define_module_function(rb_mProcess, "kill", rb_f_kill, -1);
|
||||
#endif
|
||||
#ifndef NT
|
||||
rb_define_module_function(mProcess, "wait", f_wait, 0);
|
||||
rb_define_module_function(mProcess, "waitpid", f_waitpid, 2);
|
||||
rb_define_module_function(rb_mProcess, "wait", rb_f_wait, 0);
|
||||
rb_define_module_function(rb_mProcess, "waitpid", rb_f_waitpid, 2);
|
||||
|
||||
#ifndef USE_CWGUSI
|
||||
rb_define_module_function(mProcess, "pid", get_pid, 0);
|
||||
rb_define_module_function(mProcess, "ppid", get_ppid, 0);
|
||||
rb_define_module_function(rb_mProcess, "pid", get_pid, 0);
|
||||
rb_define_module_function(rb_mProcess, "ppid", get_ppid, 0);
|
||||
#endif /* ifndef USE_CWGUSI */
|
||||
#endif /* ifndef NT */
|
||||
|
||||
#if !defined(NT) && !defined(DJGPP) && !defined(__human68k__) && !defined(USE_CWGUSI)
|
||||
rb_define_module_function(mProcess, "getpgrp", proc_getpgrp, -1);
|
||||
rb_define_module_function(mProcess, "setpgrp", proc_setpgrp, -1);
|
||||
rb_define_module_function(mProcess, "setpgid", proc_setpgid, 2);
|
||||
rb_define_module_function(rb_mProcess, "getpgrp", proc_getpgrp, -1);
|
||||
rb_define_module_function(rb_mProcess, "setpgrp", proc_setpgrp, -1);
|
||||
rb_define_module_function(rb_mProcess, "setpgid", proc_setpgid, 2);
|
||||
|
||||
rb_define_module_function(mProcess, "setsid", proc_setsid, 0);
|
||||
rb_define_module_function(rb_mProcess, "setsid", proc_setsid, 0);
|
||||
|
||||
rb_define_module_function(mProcess, "getpriority", proc_getpriority, 2);
|
||||
rb_define_module_function(mProcess, "setpriority", proc_setpriority, 3);
|
||||
rb_define_module_function(rb_mProcess, "getpriority", proc_getpriority, 2);
|
||||
rb_define_module_function(rb_mProcess, "setpriority", proc_setpriority, 3);
|
||||
|
||||
#ifdef PRIO_PROCESS
|
||||
rb_define_const(mProcess, "PRIO_PROCESS", INT2FIX(PRIO_PROCESS));
|
||||
rb_define_const(mProcess, "PRIO_PGRP", INT2FIX(PRIO_PGRP));
|
||||
rb_define_const(mProcess, "PRIO_USER", INT2FIX(PRIO_USER));
|
||||
rb_define_const(rb_mProcess, "PRIO_PROCESS", INT2FIX(PRIO_PROCESS));
|
||||
rb_define_const(rb_mProcess, "PRIO_PGRP", INT2FIX(PRIO_PGRP));
|
||||
rb_define_const(rb_mProcess, "PRIO_USER", INT2FIX(PRIO_USER));
|
||||
#endif
|
||||
|
||||
rb_define_module_function(mProcess, "uid", proc_getuid, 0);
|
||||
rb_define_module_function(mProcess, "uid=", proc_setuid, 1);
|
||||
rb_define_module_function(mProcess, "gid", proc_getgid, 0);
|
||||
rb_define_module_function(mProcess, "gid=", proc_setgid, 1);
|
||||
rb_define_module_function(mProcess, "euid", proc_geteuid, 0);
|
||||
rb_define_module_function(mProcess, "euid=", proc_seteuid, 1);
|
||||
rb_define_module_function(mProcess, "egid", proc_getegid, 0);
|
||||
rb_define_module_function(mProcess, "egid=", proc_setegid, 1);
|
||||
rb_define_module_function(rb_mProcess, "uid", proc_getuid, 0);
|
||||
rb_define_module_function(rb_mProcess, "uid=", proc_setuid, 1);
|
||||
rb_define_module_function(rb_mProcess, "gid", proc_getgid, 0);
|
||||
rb_define_module_function(rb_mProcess, "gid=", proc_setgid, 1);
|
||||
rb_define_module_function(rb_mProcess, "euid", proc_geteuid, 0);
|
||||
rb_define_module_function(rb_mProcess, "euid=", proc_seteuid, 1);
|
||||
rb_define_module_function(rb_mProcess, "egid", proc_getegid, 0);
|
||||
rb_define_module_function(rb_mProcess, "egid=", proc_setegid, 1);
|
||||
#endif
|
||||
}
|
||||
|
|
18
random.c
18
random.c
|
@ -79,7 +79,7 @@ static char state[256];
|
|||
#endif
|
||||
|
||||
static VALUE
|
||||
f_srand(argc, argv, obj)
|
||||
rb_f_srand(argc, argv, obj)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE obj;
|
||||
|
@ -112,38 +112,38 @@ f_srand(argc, argv, obj)
|
|||
old = saved_seed;
|
||||
saved_seed = seed;
|
||||
|
||||
return int2inum(old);
|
||||
return rb_int2inum(old);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
f_rand(obj, vmax)
|
||||
rb_f_rand(obj, vmax)
|
||||
VALUE obj, vmax;
|
||||
{
|
||||
long val, max;
|
||||
|
||||
switch (TYPE(vmax)) {
|
||||
case T_BIGNUM:
|
||||
return big_rand(vmax);
|
||||
return rb_big_rand(vmax);
|
||||
|
||||
case T_FLOAT:
|
||||
if (RFLOAT(vmax)->value > LONG_MAX || RFLOAT(vmax)->value < LONG_MIN)
|
||||
return big_rand(dbl2big(RFLOAT(vmax)->value));
|
||||
return rb_big_rand(rb_dbl2big(RFLOAT(vmax)->value));
|
||||
break;
|
||||
}
|
||||
|
||||
max = NUM2LONG(vmax);
|
||||
if (max == 0) {
|
||||
return float_new(RANDOM_NUMBER);
|
||||
return rb_float_new(RANDOM_NUMBER);
|
||||
}
|
||||
val = max*RANDOM_NUMBER;
|
||||
|
||||
if (val < 0) val = -val;
|
||||
return int2inum(val);
|
||||
return rb_int2inum(val);
|
||||
}
|
||||
|
||||
void
|
||||
Init_Random()
|
||||
{
|
||||
rb_define_global_function("srand", f_srand, -1);
|
||||
rb_define_global_function("rand", f_rand, 1);
|
||||
rb_define_global_function("srand", rb_f_srand, -1);
|
||||
rb_define_global_function("rand", rb_f_rand, 1);
|
||||
}
|
||||
|
|
68
range.c
68
range.c
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include "ruby.h"
|
||||
|
||||
static VALUE cRange;
|
||||
VALUE rb_cRange;
|
||||
static ID id_upto, id_cmp;
|
||||
static ID id_beg, id_end;
|
||||
|
||||
|
@ -27,7 +27,7 @@ range_check(args)
|
|||
static VALUE
|
||||
range_failed()
|
||||
{
|
||||
ArgError("bad value for range");
|
||||
rb_raise(rb_eArgError, "bad value for range");
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -40,20 +40,20 @@ range_s_new(klass, first, last)
|
|||
args[0] = first; args[1] = last;
|
||||
rb_rescue(range_check, (VALUE)args, range_failed, 0);
|
||||
|
||||
obj = obj_alloc(klass);
|
||||
obj = rb_obj_alloc(klass);
|
||||
|
||||
rb_ivar_set(obj, id_beg, first);
|
||||
rb_ivar_set(obj, id_end, last);
|
||||
obj_call_init(obj);
|
||||
rb_obj_call_init(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
VALUE
|
||||
range_new(first, last)
|
||||
rb_range_new(first, last)
|
||||
VALUE first, last;
|
||||
{
|
||||
return range_s_new(cRange, first, last);
|
||||
return range_s_new(rb_cRange, first, last);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -67,16 +67,16 @@ range_eqq(rng, obj)
|
|||
|
||||
if (FIXNUM_P(first) && FIXNUM_P(obj) && FIXNUM_P(last)) {
|
||||
if (FIX2INT(first) <= FIX2INT(obj) && FIX2INT(obj) <= FIX2INT(last)) {
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
else {
|
||||
if (RTEST(rb_funcall(first, rb_intern("<="), 1, obj)) &&
|
||||
RTEST(rb_funcall(last, rb_intern(">="), 1, obj))) {
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ range_each(obj)
|
|||
e = rb_ivar_get(obj, id_end);
|
||||
|
||||
if (FIXNUM_P(b)) { /* fixnum is a special case(for performance) */
|
||||
num_upto(b, e);
|
||||
rb_fix_upto(b, e);
|
||||
}
|
||||
else {
|
||||
struct upto_data data;
|
||||
|
@ -137,17 +137,17 @@ range_last(obj)
|
|||
}
|
||||
|
||||
VALUE
|
||||
range_beg_end(range, begp, endp)
|
||||
rb_range_beg_end(range, begp, endp)
|
||||
VALUE range;
|
||||
int *begp, *endp;
|
||||
{
|
||||
VALUE first, last;
|
||||
|
||||
if (!obj_is_kind_of(range, cRange)) return FALSE;
|
||||
if (!rb_obj_is_kind_of(range, rb_cRange)) return Qfalse;
|
||||
|
||||
first = rb_ivar_get(range, id_beg); *begp = NUM2INT(first);
|
||||
last = rb_ivar_get(range, id_end); *endp = NUM2INT(last);
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -156,10 +156,10 @@ range_to_s(range)
|
|||
{
|
||||
VALUE str, str2;
|
||||
|
||||
str = obj_as_string(rb_ivar_get(range, id_beg));
|
||||
str2 = obj_as_string(rb_ivar_get(range, id_end));
|
||||
str_cat(str, "..", 2);
|
||||
str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len);
|
||||
str = rb_obj_as_string(rb_ivar_get(range, id_beg));
|
||||
str2 = rb_obj_as_string(rb_ivar_get(range, id_end));
|
||||
rb_str_cat(str, "..", 2);
|
||||
rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
@ -172,14 +172,12 @@ range_inspect(range)
|
|||
|
||||
str = rb_inspect(rb_ivar_get(range, id_beg));
|
||||
str2 = rb_inspect(rb_ivar_get(range, id_end));
|
||||
str_cat(str, "..", 2);
|
||||
str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len);
|
||||
rb_str_cat(str, "..", 2);
|
||||
rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
VALUE enum_length();
|
||||
|
||||
static VALUE
|
||||
range_length(rng)
|
||||
VALUE rng;
|
||||
|
@ -193,8 +191,8 @@ range_length(rng)
|
|||
if (RTEST(rb_funcall(first, '>', 1, last))) {
|
||||
return INT2FIX(0);
|
||||
}
|
||||
if (!obj_is_kind_of(first, cNumeric)) {
|
||||
return enum_length(rng);
|
||||
if (!rb_obj_is_kind_of(first, rb_cNumeric)) {
|
||||
return rb_enum_length(rng);
|
||||
}
|
||||
size = rb_funcall(last, '-', 1, first);
|
||||
size = rb_funcall(size, '+', 1, INT2FIX(1));
|
||||
|
@ -205,18 +203,18 @@ range_length(rng)
|
|||
void
|
||||
Init_Range()
|
||||
{
|
||||
cRange = rb_define_class("Range", cObject);
|
||||
rb_include_module(cRange, mEnumerable);
|
||||
rb_define_singleton_method(cRange, "new", range_s_new, 2);
|
||||
rb_define_method(cRange, "===", range_eqq, 1);
|
||||
rb_define_method(cRange, "each", range_each, 0);
|
||||
rb_define_method(cRange, "first", range_first, 0);
|
||||
rb_define_method(cRange, "last", range_last, 0);
|
||||
rb_define_method(cRange, "to_s", range_to_s, 0);
|
||||
rb_define_method(cRange, "inspect", range_inspect, 0);
|
||||
rb_cRange = rb_define_class("Range", rb_cObject);
|
||||
rb_include_module(rb_cRange, rb_mEnumerable);
|
||||
rb_define_singleton_method(rb_cRange, "new", range_s_new, 2);
|
||||
rb_define_method(rb_cRange, "===", range_eqq, 1);
|
||||
rb_define_method(rb_cRange, "each", range_each, 0);
|
||||
rb_define_method(rb_cRange, "first", range_first, 0);
|
||||
rb_define_method(rb_cRange, "last", range_last, 0);
|
||||
rb_define_method(rb_cRange, "to_s", range_to_s, 0);
|
||||
rb_define_method(rb_cRange, "inspect", range_inspect, 0);
|
||||
|
||||
rb_define_method(cRange, "length", range_length, 0);
|
||||
rb_define_method(cRange, "size", range_length, 0);
|
||||
rb_define_method(rb_cRange, "length", range_length, 0);
|
||||
rb_define_method(rb_cRange, "size", range_length, 0);
|
||||
|
||||
id_upto = rb_intern("upto");
|
||||
id_cmp = rb_intern("<=>");
|
||||
|
|
382
re.c
382
re.c
|
@ -13,7 +13,7 @@
|
|||
#include "ruby.h"
|
||||
#include "re.h"
|
||||
|
||||
static VALUE eRegxpError;
|
||||
static VALUE rb_eRegxpError;
|
||||
|
||||
#define BEG(no) regs->beg[no]
|
||||
#define END(no) regs->end[no]
|
||||
|
@ -72,7 +72,7 @@ static char casetable[] = {
|
|||
#define MIN(a,b) (((a)>(b))?(b):(a))
|
||||
|
||||
int
|
||||
str_cicmp(str1, str2)
|
||||
rb_str_cicmp(str1, str2)
|
||||
VALUE str1, str2;
|
||||
{
|
||||
int len, i;
|
||||
|
@ -134,13 +134,17 @@ kcode_none(reg)
|
|||
FL_SET(reg, KCODE_FIXED);
|
||||
}
|
||||
|
||||
static int curr_kcode;
|
||||
|
||||
static void
|
||||
kcode_set_option(reg)
|
||||
VALUE reg;
|
||||
{
|
||||
if (!FL_TEST(reg, KCODE_FIXED)) return;
|
||||
|
||||
switch ((RBASIC(reg)->flags & KCODE_MASK)) {
|
||||
curr_kcode = RBASIC(reg)->flags & KCODE_MASK;
|
||||
if (reg_kcode == curr_kcode) return;
|
||||
switch (curr_kcode) {
|
||||
case KCODE_NONE:
|
||||
re_mbcinit(MBCTYPE_ASCII);
|
||||
break;
|
||||
|
@ -153,9 +157,10 @@ kcode_set_option(reg)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
kcode_reset_option()
|
||||
{
|
||||
if (reg_kcode == curr_kcode) return;
|
||||
switch (reg_kcode) {
|
||||
case KCODE_NONE:
|
||||
re_mbcinit(MBCTYPE_ASCII);
|
||||
|
@ -172,7 +177,7 @@ kcode_reset_option()
|
|||
extern int rb_in_compile;
|
||||
|
||||
static void
|
||||
reg_expr_str(str, s, len)
|
||||
rb_reg_expr_str(str, s, len)
|
||||
VALUE str;
|
||||
char *s;
|
||||
int len;
|
||||
|
@ -189,18 +194,18 @@ reg_expr_str(str, s, len)
|
|||
p++;
|
||||
}
|
||||
if (!slash) {
|
||||
str_cat(str, s, len);
|
||||
rb_str_cat(str, s, len);
|
||||
}
|
||||
else {
|
||||
p = s;
|
||||
while (p<pend) {
|
||||
if (*p == '/') {
|
||||
char c = '\\';
|
||||
str_cat(str, &c, 1);
|
||||
str_cat(str, p, 1);
|
||||
rb_str_cat(str, &c, 1);
|
||||
rb_str_cat(str, p, 1);
|
||||
}
|
||||
else {
|
||||
str_cat(str, p, 1);
|
||||
rb_str_cat(str, p, 1);
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
@ -208,27 +213,27 @@ reg_expr_str(str, s, len)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
reg_desc(s, len, re)
|
||||
rb_reg_desc(s, len, re)
|
||||
char *s;
|
||||
int len;
|
||||
VALUE re;
|
||||
{
|
||||
VALUE str = str_new2("/");
|
||||
reg_expr_str(str, s, len);
|
||||
str_cat(str, "/", 1);
|
||||
VALUE str = rb_str_new2("/");
|
||||
rb_reg_expr_str(str, s, len);
|
||||
rb_str_cat(str, "/", 1);
|
||||
if (re) {
|
||||
if (FL_TEST(re,REG_IGNORECASE))
|
||||
str_cat(str, "i", 1);
|
||||
if (FL_TEST(re,KCODE_FIXED)) {
|
||||
if (FL_TEST(re, REG_IGNORECASE))
|
||||
rb_str_cat(str, "i", 1);
|
||||
if (FL_TEST(re, KCODE_FIXED)) {
|
||||
switch ((RBASIC(re)->flags & KCODE_MASK)) {
|
||||
case KCODE_NONE:
|
||||
str_cat(str, "n", 1);
|
||||
rb_str_cat(str, "n", 1);
|
||||
break;
|
||||
case KCODE_EUC:
|
||||
str_cat(str, "e", 1);
|
||||
rb_str_cat(str, "e", 1);
|
||||
break;
|
||||
case KCODE_SJIS:
|
||||
str_cat(str, "s", 1);
|
||||
rb_str_cat(str, "s", 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -237,47 +242,47 @@ reg_desc(s, len, re)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
reg_source(re)
|
||||
rb_reg_source(re)
|
||||
VALUE re;
|
||||
{
|
||||
VALUE str = str_new(0,0);
|
||||
reg_expr_str(str, RREGEXP(re)->str, RREGEXP(re)->len);
|
||||
VALUE str = rb_str_new(0,0);
|
||||
rb_reg_expr_str(str, RREGEXP(re)->str,RREGEXP(re)->len);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reg_inspect(re)
|
||||
rb_reg_inspect(re)
|
||||
VALUE re;
|
||||
{
|
||||
return reg_desc(RREGEXP(re)->str, RREGEXP(re)->len, re);
|
||||
return rb_reg_desc(RREGEXP(re)->str, RREGEXP(re)->len, re);
|
||||
}
|
||||
|
||||
static void
|
||||
reg_raise(s, len, err, re)
|
||||
rb_reg_raise(s, len, err, re)
|
||||
char *s;
|
||||
int len;
|
||||
char *err;
|
||||
VALUE re;
|
||||
{
|
||||
VALUE desc = reg_desc(s, len, re);
|
||||
VALUE desc = rb_reg_desc(s, len, re);
|
||||
|
||||
if (rb_in_compile)
|
||||
Error("%s: %s", err, RSTRING(desc)->ptr);
|
||||
rb_compile_error("%s: %s", err, RSTRING(desc)->ptr);
|
||||
else
|
||||
Raise(eRegxpError, "%s: %s", err, RSTRING(desc)->ptr);
|
||||
rb_raise(rb_eRegxpError, "%s: %s", err, RSTRING(desc)->ptr);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reg_casefold_p(re)
|
||||
rb_reg_casefold_p(re)
|
||||
VALUE re;
|
||||
{
|
||||
if (FL_TEST(re, REG_IGNORECASE)) return TRUE;
|
||||
return FALSE;
|
||||
if (FL_TEST(re, REG_IGNORECASE)) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reg_kcode_method(re)
|
||||
rb_reg_kcode_method(re)
|
||||
VALUE re;
|
||||
{
|
||||
char *kcode = "$KCODE";
|
||||
|
@ -295,7 +300,7 @@ reg_kcode_method(re)
|
|||
}
|
||||
}
|
||||
|
||||
return str_new2(kcode);
|
||||
return rb_str_new2(kcode);
|
||||
}
|
||||
|
||||
static Regexp*
|
||||
|
@ -322,21 +327,20 @@ make_regexp(s, len, flag)
|
|||
rp->options = flag;
|
||||
}
|
||||
err = re_compile_pattern(s, (size_t)len, rp);
|
||||
kcode_reset_option();
|
||||
if (err != NULL) {
|
||||
reg_raise(s, len, err, 0);
|
||||
rb_reg_raise(s, len, err, 0);
|
||||
}
|
||||
|
||||
return rp;
|
||||
}
|
||||
|
||||
static VALUE cMatch;
|
||||
static VALUE rb_cMatch;
|
||||
|
||||
static VALUE
|
||||
match_alloc()
|
||||
{
|
||||
NEWOBJ(match, struct RMatch);
|
||||
OBJSETUP(match, cMatch, T_MATCH);
|
||||
OBJSETUP(match, rb_cMatch, T_MATCH);
|
||||
|
||||
match->str = 0;
|
||||
match->regs = 0;
|
||||
|
@ -351,7 +355,7 @@ match_clone(orig)
|
|||
VALUE orig;
|
||||
{
|
||||
NEWOBJ(match, struct RMatch);
|
||||
OBJSETUP(match, cMatch, T_MATCH);
|
||||
OBJSETUP(match, rb_cMatch, T_MATCH);
|
||||
|
||||
match->str = RMATCH(orig)->str;
|
||||
match->regs = 0;
|
||||
|
@ -359,35 +363,33 @@ match_clone(orig)
|
|||
match->regs = ALLOC(struct re_registers);
|
||||
match->regs->allocated = 0;
|
||||
re_copy_registers(match->regs, RMATCH(orig)->regs);
|
||||
CLONESETUP(match, orig);
|
||||
|
||||
return (VALUE)match;
|
||||
}
|
||||
|
||||
VALUE ignorecase;
|
||||
static int ignorecase;
|
||||
static int may_need_recompile;
|
||||
static VALUE matchcache;
|
||||
|
||||
void
|
||||
reg_prepare_re(reg)
|
||||
static void
|
||||
rb_reg_prepare_re(reg)
|
||||
VALUE reg;
|
||||
{
|
||||
int casefold = RTEST(ignorecase);
|
||||
int need_recompile = 0;
|
||||
|
||||
/* case-flag set for the object */
|
||||
if (FL_TEST(reg, REG_IGNORECASE)) {
|
||||
casefold = TRUE;
|
||||
}
|
||||
else if ((casefold && !FL_TEST(reg, REG_CASESTATE)) ||
|
||||
(!casefold && FL_TEST(reg, REG_CASESTATE))) {
|
||||
RREGEXP(reg)->ptr->fastmap_accurate = 0;
|
||||
/* case-flag not set for the object */
|
||||
if (!FL_TEST(reg, REG_IGNORECASE)) {
|
||||
int state = FL_TEST(reg, REG_CASESTATE);
|
||||
|
||||
if ((ignorecase || state) && !(ignorecase && state)) {
|
||||
RBASIC(reg)->flags ^= REG_CASESTATE;
|
||||
need_recompile = 1;
|
||||
}
|
||||
|
||||
if (FL_TEST(reg, KCODE_FIXED)) {
|
||||
kcode_set_option(reg);
|
||||
}
|
||||
else if ((RBASIC(reg)->flags & KCODE_MASK) != reg_kcode) {
|
||||
|
||||
if (!FL_TEST(reg, KCODE_FIXED) &&
|
||||
(RBASIC(reg)->flags & KCODE_MASK) != reg_kcode) {
|
||||
need_recompile = 1;
|
||||
RBASIC(reg)->flags &= ~KCODE_MASK;
|
||||
RBASIC(reg)->flags |= reg_kcode;
|
||||
|
@ -396,28 +398,43 @@ reg_prepare_re(reg)
|
|||
if (need_recompile) {
|
||||
char *err;
|
||||
|
||||
if (FL_TEST(reg, KCODE_FIXED))
|
||||
kcode_set_option(reg);
|
||||
RREGEXP(reg)->ptr->fastmap_accurate = 0;
|
||||
err = re_compile_pattern(RREGEXP(reg)->str, RREGEXP(reg)->len, RREGEXP(reg)->ptr);
|
||||
if (err != NULL) {
|
||||
kcode_reset_option();
|
||||
reg_raise(RREGEXP(reg)->str, RREGEXP(reg)->len, err, reg);
|
||||
rb_reg_raise(RREGEXP(reg)->str, RREGEXP(reg)->len, err, reg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
reg_search(reg, str, start, reverse)
|
||||
rb_reg_search(reg, str, start, reverse)
|
||||
VALUE reg, str;
|
||||
int start, reverse;
|
||||
{
|
||||
int result;
|
||||
VALUE match = 0;
|
||||
VALUE match;
|
||||
struct re_registers *regs = 0;
|
||||
int range;
|
||||
|
||||
if (start > RSTRING(str)->len) return -1;
|
||||
|
||||
reg_prepare_re(reg);
|
||||
if (may_need_recompile)
|
||||
rb_reg_prepare_re(reg);
|
||||
|
||||
if (FL_TEST(reg, KCODE_FIXED))
|
||||
kcode_set_option(reg);
|
||||
else if (reg_kcode != curr_kcode)
|
||||
kcode_reset_option();
|
||||
|
||||
if (rb_thread_scope_shared_p()) {
|
||||
match = Qnil;
|
||||
}
|
||||
else {
|
||||
match = rb_backref_get();
|
||||
}
|
||||
if (NIL_P(match)) {
|
||||
if (matchcache) {
|
||||
match = matchcache;
|
||||
matchcache = 0;
|
||||
|
@ -425,49 +442,49 @@ reg_search(reg, str, start, reverse)
|
|||
else {
|
||||
match = match_alloc();
|
||||
}
|
||||
}
|
||||
regs = RMATCH(match)->regs;
|
||||
|
||||
if (reverse) {
|
||||
range = -start;
|
||||
}
|
||||
else {
|
||||
range = RSTRING(str)->len-start;
|
||||
range = RSTRING(str)->len - start;
|
||||
}
|
||||
result = re_search(RREGEXP(reg)->ptr,RSTRING(str)->ptr,RSTRING(str)->len,
|
||||
start, range, regs);
|
||||
kcode_reset_option();
|
||||
|
||||
if (result == -2) {
|
||||
reg_raise(RREGEXP(reg)->str, RREGEXP(reg)->len,
|
||||
rb_reg_raise(RREGEXP(reg)->str, RREGEXP(reg)->len,
|
||||
"Stack overfow in regexp matcher", reg);
|
||||
}
|
||||
if (result < 0) {
|
||||
matchcache = match;
|
||||
backref_set(Qnil);
|
||||
rb_backref_set(Qnil);
|
||||
}
|
||||
else if (match) {
|
||||
RMATCH(match)->str = str_new4(str);
|
||||
backref_set(match);
|
||||
else {
|
||||
RMATCH(match)->str = rb_str_new4(str);
|
||||
rb_backref_set(match);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_nth_defined(nth, match)
|
||||
rb_reg_nth_defined(nth, match)
|
||||
int nth;
|
||||
VALUE match;
|
||||
{
|
||||
if (NIL_P(match)) return Qnil;
|
||||
if (nth >= RMATCH(match)->regs->num_regs) {
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
if (RMATCH(match)->BEG(nth) == -1) return FALSE;
|
||||
return TRUE;
|
||||
if (RMATCH(match)->BEG(nth) == -1) return Qfalse;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_nth_match(nth, match)
|
||||
rb_reg_nth_match(nth, match)
|
||||
int nth;
|
||||
VALUE match;
|
||||
{
|
||||
|
@ -481,37 +498,37 @@ reg_nth_match(nth, match)
|
|||
if (start == -1) return Qnil;
|
||||
end = RMATCH(match)->END(nth);
|
||||
len = end - start;
|
||||
return str_new(RSTRING(RMATCH(match)->str)->ptr + start, len);
|
||||
return rb_str_new(RSTRING(RMATCH(match)->str)->ptr + start, len);
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_last_match(match)
|
||||
rb_reg_last_match(match)
|
||||
VALUE match;
|
||||
{
|
||||
return reg_nth_match(0, match);
|
||||
return rb_reg_nth_match(0, match);
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_match_pre(match)
|
||||
rb_reg_match_pre(match)
|
||||
VALUE match;
|
||||
{
|
||||
if (NIL_P(match)) return Qnil;
|
||||
if (RMATCH(match)->BEG(0) == -1) return Qnil;
|
||||
return str_new(RSTRING(RMATCH(match)->str)->ptr, RMATCH(match)->BEG(0));
|
||||
return rb_str_new(RSTRING(RMATCH(match)->str)->ptr, RMATCH(match)->BEG(0));
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_match_post(match)
|
||||
rb_reg_match_post(match)
|
||||
VALUE match;
|
||||
{
|
||||
if (NIL_P(match)) return Qnil;
|
||||
if (RMATCH(match)->BEG(0) == -1) return Qnil;
|
||||
return str_new(RSTRING(RMATCH(match)->str)->ptr+RMATCH(match)->END(0),
|
||||
return rb_str_new(RSTRING(RMATCH(match)->str)->ptr+RMATCH(match)->END(0),
|
||||
RSTRING(RMATCH(match)->str)->len-RMATCH(match)->END(0));
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_match_last(match)
|
||||
rb_reg_match_last(match)
|
||||
VALUE match;
|
||||
{
|
||||
int i;
|
||||
|
@ -522,31 +539,31 @@ reg_match_last(match)
|
|||
for (i=RMATCH(match)->regs->num_regs-1; RMATCH(match)->BEG(i) == -1 && i > 0; i--)
|
||||
;
|
||||
if (i == 0) return Qnil;
|
||||
return reg_nth_match(i, match);
|
||||
return rb_reg_nth_match(i, match);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
last_match_getter()
|
||||
{
|
||||
return reg_last_match(backref_get());
|
||||
return rb_reg_last_match(rb_backref_get());
|
||||
}
|
||||
|
||||
static VALUE
|
||||
prematch_getter()
|
||||
{
|
||||
return reg_match_pre(backref_get());
|
||||
return rb_reg_match_pre(rb_backref_get());
|
||||
}
|
||||
|
||||
static VALUE
|
||||
postmatch_getter()
|
||||
{
|
||||
return reg_match_post(backref_get());
|
||||
return rb_reg_match_post(rb_backref_get());
|
||||
}
|
||||
|
||||
static VALUE
|
||||
last_paren_match_getter()
|
||||
{
|
||||
return reg_match_last(backref_get());
|
||||
return rb_reg_match_last(rb_backref_get());
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -554,13 +571,13 @@ match_to_a(match)
|
|||
VALUE match;
|
||||
{
|
||||
struct re_registers *regs = RMATCH(match)->regs;
|
||||
VALUE ary = ary_new2(regs->num_regs);
|
||||
VALUE ary = rb_ary_new2(regs->num_regs);
|
||||
char *ptr = RSTRING(RMATCH(match)->str)->ptr;
|
||||
int i;
|
||||
|
||||
for (i=0; i<regs->num_regs; i++) {
|
||||
if (regs->beg[i] == -1) ary_push(ary, Qnil);
|
||||
else ary_push(ary, str_new(ptr+regs->beg[i],
|
||||
if (regs->beg[i] == -1) rb_ary_push(ary, Qnil);
|
||||
else rb_ary_push(ary, rb_str_new(ptr+regs->beg[i],
|
||||
regs->end[i]-regs->beg[i]));
|
||||
}
|
||||
return ary;
|
||||
|
@ -580,7 +597,7 @@ match_aref(argc, argv, match)
|
|||
rb_scan_args(argc, argv, "11", &idx, &rest);
|
||||
|
||||
if (!NIL_P(rest) || !FIXNUM_P(idx) || FIX2INT(idx) < 0) {
|
||||
return ary_aref(argc, argv, match_to_a(match));
|
||||
return rb_ary_aref(argc, argv, match_to_a(match));
|
||||
}
|
||||
|
||||
regs = RMATCH(match)->regs;
|
||||
|
@ -589,23 +606,23 @@ match_aref(argc, argv, match)
|
|||
if (i>=regs->num_regs) return Qnil;
|
||||
|
||||
ptr = RSTRING(RMATCH(match)->str)->ptr;
|
||||
return str_new(ptr+regs->beg[i], regs->end[i]-regs->beg[i]);
|
||||
return rb_str_new(ptr+regs->beg[i], regs->end[i]-regs->beg[i]);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
match_to_s(match)
|
||||
VALUE match;
|
||||
{
|
||||
VALUE str = reg_last_match(match);
|
||||
VALUE str = rb_reg_last_match(match);
|
||||
|
||||
if (NIL_P(str)) return str_new(0,0);
|
||||
if (NIL_P(str)) return rb_str_new(0,0);
|
||||
return str;
|
||||
}
|
||||
|
||||
VALUE cRegexp;
|
||||
VALUE rb_cRegexp;
|
||||
|
||||
static VALUE
|
||||
reg_new_1(klass, s, len, options)
|
||||
rb_reg_new_1(klass, s, len, options)
|
||||
VALUE klass;
|
||||
char *s;
|
||||
int len;
|
||||
|
@ -639,8 +656,10 @@ reg_new_1(klass, s, len, options)
|
|||
break;
|
||||
}
|
||||
|
||||
if (options & ~0x3) {
|
||||
kcode_set_option((VALUE)re);
|
||||
if (RTEST(ignorecase)) {
|
||||
}
|
||||
if (ignorecase) {
|
||||
options |= RE_OPTION_IGNORECASE;
|
||||
FL_SET(re, REG_CASESTATE);
|
||||
}
|
||||
|
@ -652,39 +671,41 @@ reg_new_1(klass, s, len, options)
|
|||
if (options & ~0x3) {
|
||||
kcode_reset_option();
|
||||
}
|
||||
obj_call_init((VALUE)re);
|
||||
rb_obj_call_init((VALUE)re);
|
||||
|
||||
return (VALUE)re;
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_new(s, len, options)
|
||||
rb_reg_new(s, len, options)
|
||||
char *s;
|
||||
int len, options;
|
||||
{
|
||||
return reg_new_1(cRegexp, s, len, options);
|
||||
return rb_reg_new_1(rb_cRegexp, s, len, options);
|
||||
}
|
||||
|
||||
static int ign_cache;
|
||||
static int case_cache;
|
||||
static int kcode_cache;
|
||||
static VALUE reg_cache;
|
||||
|
||||
VALUE
|
||||
reg_regcomp(str)
|
||||
rb_reg_regcomp(str)
|
||||
VALUE str;
|
||||
{
|
||||
int ignc = RTEST(ignorecase);
|
||||
|
||||
if (reg_cache && RREGEXP(reg_cache)->len == RSTRING(str)->len
|
||||
&& ign_cache == ignc
|
||||
&& case_cache == ignorecase
|
||||
&& kcode_cache == reg_kcode
|
||||
&& memcmp(RREGEXP(reg_cache)->str, RSTRING(str)->ptr, RSTRING(str)->len) == 0)
|
||||
return reg_cache;
|
||||
|
||||
ign_cache = ignc;
|
||||
return reg_cache = reg_new(RSTRING(str)->ptr, RSTRING(str)->len, ignc);
|
||||
case_cache = ignorecase;
|
||||
kcode_cache = reg_kcode;
|
||||
return reg_cache = rb_reg_new(RSTRING(str)->ptr, RSTRING(str)->len,
|
||||
ignorecase);
|
||||
}
|
||||
|
||||
static int
|
||||
reg_cur_kcode(re)
|
||||
rb_reg_cur_kcode(re)
|
||||
VALUE re;
|
||||
{
|
||||
if (FL_TEST(re, KCODE_FIXED)) {
|
||||
|
@ -694,58 +715,58 @@ reg_cur_kcode(re)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
reg_equal(re1, re2)
|
||||
rb_reg_equal(re1, re2)
|
||||
VALUE re1, re2;
|
||||
{
|
||||
int min;
|
||||
|
||||
if (re1 == re2) return TRUE;
|
||||
if (TYPE(re2) != T_REGEXP) return FALSE;
|
||||
if (RREGEXP(re1)->len != RREGEXP(re2)->len) return FALSE;
|
||||
if (re1 == re2) return Qtrue;
|
||||
if (TYPE(re2) != T_REGEXP) return Qfalse;
|
||||
if (RREGEXP(re1)->len != RREGEXP(re2)->len) return Qfalse;
|
||||
min = RREGEXP(re1)->len;
|
||||
if (min > RREGEXP(re2)->len) min = RREGEXP(re2)->len;
|
||||
if (memcmp(RREGEXP(re1)->str, RREGEXP(re2)->str, min) == 0 &&
|
||||
reg_cur_kcode(re1) == reg_cur_kcode(re2) &&
|
||||
rb_reg_cur_kcode(re1) == rb_reg_cur_kcode(re2) &&
|
||||
!(FL_TEST(re1,REG_IGNORECASE) ^ FL_TEST(re2,REG_IGNORECASE))) {
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_match(re, str)
|
||||
rb_reg_match(re, str)
|
||||
VALUE re, str;
|
||||
{
|
||||
int start;
|
||||
|
||||
if (NIL_P(str)) return FALSE;
|
||||
str = str_to_str(str);
|
||||
start = reg_search(re, str, 0, 0);
|
||||
if (NIL_P(str)) return Qfalse;
|
||||
str = rb_str_to_str(str);
|
||||
start = rb_reg_search(re, str, 0, 0);
|
||||
if (start < 0) {
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
return INT2FIX(start);
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_match2(re)
|
||||
rb_reg_match2(re)
|
||||
VALUE re;
|
||||
{
|
||||
int start;
|
||||
VALUE line = lastline_get();
|
||||
VALUE line = rb_lastline_get();
|
||||
|
||||
if (TYPE(line) != T_STRING)
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
|
||||
start = reg_search(re, line, 0, 0);
|
||||
start = rb_reg_search(re, line, 0, 0);
|
||||
if (start < 0) {
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
return INT2FIX(start);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reg_s_new(argc, argv, self)
|
||||
rb_reg_s_new(argc, argv, self)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE self;
|
||||
|
@ -754,7 +775,7 @@ reg_s_new(argc, argv, self)
|
|||
int flag = 0;
|
||||
|
||||
if (argc == 0 || argc > 3) {
|
||||
ArgError("wrong # of argument");
|
||||
rb_raise(rb_eArgError, "wrong # of argument");
|
||||
}
|
||||
if (argc >= 2 && RTEST(argv[1])) {
|
||||
flag = RE_OPTION_IGNORECASE;
|
||||
|
@ -779,19 +800,19 @@ reg_s_new(argc, argv, self)
|
|||
|
||||
src = argv[0];
|
||||
if (TYPE(src) == T_REGEXP) {
|
||||
return reg_new_1(self, RREGEXP(src)->str, RREGEXP(src)->len, flag);
|
||||
return rb_reg_new_1(self, RREGEXP(src)->str, RREGEXP(src)->len, flag);
|
||||
}
|
||||
else {
|
||||
char *p;
|
||||
int len;
|
||||
|
||||
p = str2cstr(src, &len);
|
||||
return reg_new_1(self, p, len, flag);
|
||||
return rb_reg_new_1(self, p, len, flag);
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reg_s_quote(re, str)
|
||||
rb_reg_s_quote(re, str)
|
||||
VALUE re, str;
|
||||
{
|
||||
char *s, *send, *t;
|
||||
|
@ -821,11 +842,11 @@ reg_s_quote(re, str)
|
|||
*t++ = *s;
|
||||
}
|
||||
|
||||
return str_new(tmp, t - tmp);
|
||||
return rb_str_new(tmp, t - tmp);
|
||||
}
|
||||
|
||||
static int
|
||||
reg_get_kcode(re)
|
||||
rb_reg_get_kcode(re)
|
||||
VALUE re;
|
||||
{
|
||||
int kcode = 0;
|
||||
|
@ -845,7 +866,7 @@ reg_get_kcode(re)
|
|||
}
|
||||
|
||||
int
|
||||
reg_options(re)
|
||||
rb_reg_options(re)
|
||||
VALUE re;
|
||||
{
|
||||
int options = 0;
|
||||
|
@ -853,21 +874,25 @@ reg_options(re)
|
|||
if (FL_TEST(re, REG_IGNORECASE))
|
||||
options |= RE_OPTION_IGNORECASE;
|
||||
if (FL_TEST(re, KCODE_FIXED)) {
|
||||
options |= reg_get_kcode(re);
|
||||
options |= rb_reg_get_kcode(re);
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
reg_clone(re)
|
||||
VALUE re;
|
||||
rb_reg_clone(orig)
|
||||
VALUE orig;
|
||||
{
|
||||
return reg_new_1(CLASS_OF(re), RREGEXP(re)->str, RREGEXP(re)->len,
|
||||
reg_options(re));
|
||||
VALUE reg;
|
||||
|
||||
reg = rb_reg_new_1(CLASS_OF(orig), RREGEXP(orig)->str, RREGEXP(orig)->len,
|
||||
rb_reg_options(orig));
|
||||
CLONESETUP(reg, orig);
|
||||
return reg;
|
||||
}
|
||||
|
||||
VALUE
|
||||
reg_regsub(str, src, regs)
|
||||
rb_reg_regsub(str, src, regs)
|
||||
VALUE str, src;
|
||||
struct re_registers *regs;
|
||||
{
|
||||
|
@ -888,8 +913,8 @@ reg_regsub(str, src, regs)
|
|||
}
|
||||
if (c != '\\' || s == e) continue;
|
||||
|
||||
if (!val) val = str_new(p, ss-p);
|
||||
else str_cat(val, p, ss-p);
|
||||
if (!val) val = rb_str_new(p, ss-p);
|
||||
else rb_str_cat(val, p, ss-p);
|
||||
|
||||
c = *s++;
|
||||
p = s;
|
||||
|
@ -903,11 +928,11 @@ reg_regsub(str, src, regs)
|
|||
break;
|
||||
|
||||
case '`':
|
||||
str_cat(val, RSTRING(src)->ptr, BEG(0));
|
||||
rb_str_cat(val, RSTRING(src)->ptr, BEG(0));
|
||||
continue;
|
||||
|
||||
case '\'':
|
||||
str_cat(val, RSTRING(src)->ptr+END(0), RSTRING(src)->len-END(0));
|
||||
rb_str_cat(val, RSTRING(src)->ptr+END(0), RSTRING(src)->len-END(0));
|
||||
continue;
|
||||
|
||||
case '+':
|
||||
|
@ -917,23 +942,23 @@ reg_regsub(str, src, regs)
|
|||
break;
|
||||
|
||||
case '\\':
|
||||
str_cat(val, s-1, 1);
|
||||
rb_str_cat(val, s-1, 1);
|
||||
continue;
|
||||
|
||||
default:
|
||||
str_cat(val, s-2, 2);
|
||||
rb_str_cat(val, s-2, 2);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (no >= 0) {
|
||||
if (BEG(no) == -1) continue;
|
||||
str_cat(val, RSTRING(src)->ptr+BEG(no), END(no)-BEG(no));
|
||||
rb_str_cat(val, RSTRING(src)->ptr+BEG(no), END(no)-BEG(no));
|
||||
}
|
||||
}
|
||||
|
||||
if (p < e) {
|
||||
if (!val) val = str_new(p, e-p);
|
||||
else str_cat(val, p, e-p);
|
||||
if (!val) val = rb_str_new(p, e-p);
|
||||
else rb_str_cat(val, p, e-p);
|
||||
}
|
||||
if (!val) return str;
|
||||
|
||||
|
@ -956,7 +981,7 @@ rb_get_kcode()
|
|||
static VALUE
|
||||
kcode_getter()
|
||||
{
|
||||
return str_new2(rb_get_kcode());
|
||||
return rb_str_new2(rb_get_kcode());
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -992,13 +1017,34 @@ static void
|
|||
kcode_setter(val)
|
||||
struct RString *val;
|
||||
{
|
||||
may_need_recompile = 1;
|
||||
rb_set_kcode(STR2CSTR(val));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
ignorecase_getter()
|
||||
{
|
||||
return ignorecase?Qtrue:Qfalse;
|
||||
}
|
||||
|
||||
static void
|
||||
ignorecase_setter(val)
|
||||
VALUE val;
|
||||
{
|
||||
may_need_recompile = 1;
|
||||
ignorecase = RTEST(val);
|
||||
}
|
||||
|
||||
int
|
||||
rb_ignorecase_p()
|
||||
{
|
||||
return (int)ignorecase;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
match_getter()
|
||||
{
|
||||
return backref_get();
|
||||
return match_clone(rb_backref_get());
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1006,13 +1052,13 @@ match_setter(val)
|
|||
VALUE val;
|
||||
{
|
||||
Check_Type(val, T_MATCH);
|
||||
backref_set(val);
|
||||
rb_backref_set(val);
|
||||
}
|
||||
|
||||
void
|
||||
Init_Regexp()
|
||||
{
|
||||
eRegxpError = rb_define_class("RegxpError", eStandardError);
|
||||
rb_eRegxpError = rb_define_class("RegxpError", rb_eStandardError);
|
||||
|
||||
re_set_syntax(RE_NO_BK_PARENS | RE_NO_BK_VBAR
|
||||
| RE_INTERVALS
|
||||
|
@ -1038,32 +1084,32 @@ Init_Regexp()
|
|||
rb_define_virtual_variable("$'", postmatch_getter, 0);
|
||||
rb_define_virtual_variable("$+", last_paren_match_getter, 0);
|
||||
|
||||
rb_define_variable("$=", &ignorecase);
|
||||
rb_define_virtual_variable("$=", ignorecase_getter, ignorecase_setter);
|
||||
rb_define_virtual_variable("$KCODE", kcode_getter, kcode_setter);
|
||||
rb_define_virtual_variable("$-K", kcode_getter, kcode_setter);
|
||||
|
||||
cRegexp = rb_define_class("Regexp", cObject);
|
||||
rb_define_singleton_method(cRegexp, "new", reg_s_new, -1);
|
||||
rb_define_singleton_method(cRegexp, "compile", reg_s_new, -1);
|
||||
rb_define_singleton_method(cRegexp, "quote", reg_s_quote, 1);
|
||||
rb_cRegexp = rb_define_class("Regexp", rb_cObject);
|
||||
rb_define_singleton_method(rb_cRegexp, "new", rb_reg_s_new, -1);
|
||||
rb_define_singleton_method(rb_cRegexp, "compile", rb_reg_s_new, -1);
|
||||
rb_define_singleton_method(rb_cRegexp, "quote", rb_reg_s_quote, 1);
|
||||
|
||||
rb_define_method(cRegexp, "clone", reg_clone, 0);
|
||||
rb_define_method(cRegexp, "==", reg_equal, 1);
|
||||
rb_define_method(cRegexp, "=~", reg_match, 1);
|
||||
rb_define_method(cRegexp, "===", reg_match, 1);
|
||||
rb_define_method(cRegexp, "~", reg_match2, 0);
|
||||
rb_define_method(cRegexp, "inspect", reg_inspect, 0);
|
||||
rb_define_method(cRegexp, "source", reg_source, 0);
|
||||
rb_define_method(cRegexp, "casefold?", reg_casefold_p, 0);
|
||||
rb_define_method(cRegexp, "kcode", reg_kcode_method, 0);
|
||||
rb_define_method(rb_cRegexp, "clone", rb_reg_clone, 0);
|
||||
rb_define_method(rb_cRegexp, "==", rb_reg_equal, 1);
|
||||
rb_define_method(rb_cRegexp, "=~", rb_reg_match, 1);
|
||||
rb_define_method(rb_cRegexp, "===", rb_reg_match, 1);
|
||||
rb_define_method(rb_cRegexp, "~", rb_reg_match2, 0);
|
||||
rb_define_method(rb_cRegexp, "inspect", rb_reg_inspect, 0);
|
||||
rb_define_method(rb_cRegexp, "source", rb_reg_source, 0);
|
||||
rb_define_method(rb_cRegexp, "casefold?", rb_reg_casefold_p, 0);
|
||||
rb_define_method(rb_cRegexp, "kcode", rb_reg_kcode_method, 0);
|
||||
|
||||
rb_global_variable(®_cache);
|
||||
rb_global_variable(&matchcache);
|
||||
|
||||
cMatch = rb_define_class("MatchingData", cData);
|
||||
rb_define_method(cMatch, "clone", match_clone, 0);
|
||||
rb_define_method(cMatch, "to_a", match_to_a, 0);
|
||||
rb_define_method(cMatch, "[]", match_aref, -1);
|
||||
rb_define_method(cMatch, "to_s", match_to_s, 0);
|
||||
rb_define_method(cMatch, "inspect", any_to_s, 0);
|
||||
rb_cMatch = rb_define_class("MatchingData", rb_cData);
|
||||
rb_define_method(rb_cMatch, "clone", match_clone, 0);
|
||||
rb_define_method(rb_cMatch, "to_a", match_to_a, 0);
|
||||
rb_define_method(rb_cMatch, "[]", match_aref, -1);
|
||||
rb_define_method(rb_cMatch, "to_s", match_to_s, 0);
|
||||
rb_define_method(rb_cMatch, "inspect", rb_any_to_s, 0);
|
||||
}
|
||||
|
|
9
re.h
9
re.h
|
@ -29,9 +29,8 @@ struct RMatch {
|
|||
|
||||
#define RMATCH(obj) (R_CAST(RMatch)(obj))
|
||||
|
||||
int str_cicmp _((VALUE, VALUE));
|
||||
VALUE reg_regcomp _((VALUE));
|
||||
int reg_search _((VALUE, VALUE, int, int));
|
||||
VALUE reg_regsub _((VALUE, VALUE, struct re_registers *));
|
||||
void reg_free _((Regexp *));
|
||||
int rb_str_cicmp _((VALUE, VALUE));
|
||||
VALUE rb_reg_regcomp _((VALUE));
|
||||
int rb_reg_search _((VALUE, VALUE, int, int));
|
||||
VALUE rb_reg_regsub _((VALUE, VALUE, struct re_registers *));
|
||||
#endif
|
||||
|
|
1
regex.c
1
regex.c
|
@ -2239,6 +2239,7 @@ slow_match(little, lend, big, bend, translate)
|
|||
if (c == 0xff)
|
||||
c = *little++;
|
||||
if (!trans_eq(*big++, c, translate)) break;
|
||||
little++;
|
||||
}
|
||||
if (little == lend) return 1;
|
||||
return 0;
|
||||
|
|
192
ruby.c
192
ruby.c
|
@ -28,9 +28,6 @@
|
|||
#include "node.h"
|
||||
#endif
|
||||
|
||||
void show_version();
|
||||
void show_copyright();
|
||||
|
||||
#ifdef USE_CWGUSI
|
||||
#include "macruby_missing.h"
|
||||
#endif
|
||||
|
@ -41,43 +38,38 @@ char *strrchr _((char*,char));
|
|||
char *strstr _((char*,char*));
|
||||
#endif
|
||||
|
||||
char *ruby_mktemp _((void));
|
||||
#include "util.h"
|
||||
|
||||
#ifndef HAVE_STDLIB_H
|
||||
char *getenv();
|
||||
#endif
|
||||
|
||||
static int version, copyright;
|
||||
|
||||
VALUE debug = FALSE;
|
||||
VALUE verbose = FALSE;
|
||||
int tainting = FALSE;
|
||||
static int sflag = FALSE;
|
||||
VALUE rb_debug = Qfalse;
|
||||
VALUE rb_verbose = Qfalse;
|
||||
int tainting = Qfalse;
|
||||
static int sflag = Qfalse;
|
||||
|
||||
char *inplace = FALSE;
|
||||
char *ruby_inplace_mode = Qfalse;
|
||||
char *strdup();
|
||||
|
||||
extern char *sourcefile;
|
||||
extern int yydebug;
|
||||
extern int nerrs;
|
||||
|
||||
static int xflag = FALSE;
|
||||
extern VALUE RS, RS_default, ORS, FS;
|
||||
static int xflag = Qfalse;
|
||||
|
||||
static void load_stdin _((void));
|
||||
static void load_file _((char *, int));
|
||||
static void forbid_setid _((char *));
|
||||
|
||||
static VALUE do_loop = FALSE, do_print = FALSE;
|
||||
static VALUE do_check = FALSE, do_line = FALSE;
|
||||
static VALUE do_split = FALSE;
|
||||
static VALUE do_loop = Qfalse, do_print = Qfalse;
|
||||
static VALUE do_check = Qfalse, do_line = Qfalse;
|
||||
static VALUE do_split = Qfalse;
|
||||
|
||||
static char *script;
|
||||
|
||||
static int origargc;
|
||||
static char **origargv;
|
||||
|
||||
extern int sourceline;
|
||||
extern char *sourcefile;
|
||||
|
||||
#ifndef RUBY_LIB
|
||||
#define RUBY_LIB "/usr/local/lib/ruby"
|
||||
#endif
|
||||
|
@ -110,24 +102,24 @@ addpath(path)
|
|||
#endif
|
||||
if (strchr(path, RUBY_LIB_SEP)) {
|
||||
char *p, *s;
|
||||
VALUE ary = ary_new();
|
||||
VALUE ary = rb_ary_new();
|
||||
|
||||
p = path;
|
||||
while (*p) {
|
||||
while (*p == RUBY_LIB_SEP) p++;
|
||||
if (s = strchr(p, RUBY_LIB_SEP)) {
|
||||
ary_push(ary, str_new(p, (int)(s-p)));
|
||||
rb_ary_push(ary, rb_str_new(p, (int)(s-p)));
|
||||
p = s + 1;
|
||||
}
|
||||
else {
|
||||
ary_push(ary, str_new2(p));
|
||||
rb_ary_push(ary, rb_str_new2(p));
|
||||
break;
|
||||
}
|
||||
}
|
||||
rb_load_path = ary_plus(ary, rb_load_path);
|
||||
rb_load_path = rb_ary_plus(ary, rb_load_path);
|
||||
}
|
||||
else {
|
||||
ary_unshift(rb_load_path, str_new2(path));
|
||||
rb_ary_unshift(rb_load_path, rb_str_new2(path));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,7 +150,7 @@ ruby_require_modules()
|
|||
|
||||
req_list_last = 0;
|
||||
while (list) {
|
||||
f_require(Qnil, str_new2(list->name));
|
||||
rb_f_require(Qnil, rb_str_new2(list->name));
|
||||
tmp = list->next;
|
||||
free(list);
|
||||
list = tmp;
|
||||
|
@ -177,8 +169,8 @@ proc_options(argcp, argvp)
|
|||
|
||||
if (argc == 0) return;
|
||||
|
||||
version = FALSE;
|
||||
do_search = FALSE;
|
||||
version = Qfalse;
|
||||
do_search = Qfalse;
|
||||
script_given = 0;
|
||||
e_tmpname = NULL;
|
||||
|
||||
|
@ -189,21 +181,21 @@ proc_options(argcp, argvp)
|
|||
reswitch:
|
||||
switch (*s) {
|
||||
case 'a':
|
||||
do_split = TRUE;
|
||||
do_split = Qtrue;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
case 'p':
|
||||
do_print = TRUE;
|
||||
do_print = Qtrue;
|
||||
/* through */
|
||||
case 'n':
|
||||
do_loop = TRUE;
|
||||
do_loop = Qtrue;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
case 'd':
|
||||
debug = TRUE;
|
||||
verbose |= 1;
|
||||
rb_debug = Qtrue;
|
||||
rb_verbose |= 1;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
|
@ -213,33 +205,33 @@ proc_options(argcp, argvp)
|
|||
goto reswitch;
|
||||
|
||||
case 'v':
|
||||
show_version();
|
||||
verbose = 2;
|
||||
ruby_show_version();
|
||||
rb_verbose = 2;
|
||||
case 'w':
|
||||
verbose |= 1;
|
||||
rb_verbose |= 1;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
case 'c':
|
||||
do_check = TRUE;
|
||||
do_check = Qtrue;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
case 's':
|
||||
forbid_setid("-s");
|
||||
sflag = TRUE;
|
||||
sflag = Qtrue;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
case 'l':
|
||||
do_line = TRUE;
|
||||
ORS = RS;
|
||||
do_line = Qtrue;
|
||||
rb_output_rs = rb_rs;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
case 'S':
|
||||
forbid_setid("-S");
|
||||
do_search = TRUE;
|
||||
do_search = Qtrue;
|
||||
s++;
|
||||
goto reswitch;
|
||||
|
||||
|
@ -247,10 +239,10 @@ proc_options(argcp, argvp)
|
|||
forbid_setid("-e");
|
||||
if (!e_fp) {
|
||||
e_tmpname = ruby_mktemp();
|
||||
if (!e_tmpname) Fatal("Can't mktemp");
|
||||
if (!e_tmpname) rb_fatal("Can't mktemp");
|
||||
e_fp = fopen(e_tmpname, "w");
|
||||
if (!e_fp) {
|
||||
Fatal("Cannot open temporary file: %s", e_tmpname);
|
||||
rb_fatal("Cannot open temporary file: %s", e_tmpname);
|
||||
}
|
||||
if (script == 0) script = e_tmpname;
|
||||
}
|
||||
|
@ -274,15 +266,15 @@ proc_options(argcp, argvp)
|
|||
|
||||
case 'i':
|
||||
forbid_setid("-i");
|
||||
if (inplace) free(inplace);
|
||||
inplace = strdup(s+1);
|
||||
if (ruby_inplace_mode) free(ruby_inplace_mode);
|
||||
ruby_inplace_mode = strdup(s+1);
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
xflag = TRUE;
|
||||
xflag = Qtrue;
|
||||
s++;
|
||||
if (*s && chdir(s) < 0) {
|
||||
Fatal("Can't chdir to %s", s);
|
||||
rb_fatal("Can't chdir to %s", s);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -293,12 +285,12 @@ proc_options(argcp, argvp)
|
|||
argc--,argv++;
|
||||
}
|
||||
if (*s && chdir(s) < 0) {
|
||||
Fatal("Can't chdir to %s", s);
|
||||
rb_fatal("Can't chdir to %s", s);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'F':
|
||||
FS = str_new2(s+1);
|
||||
rb_fs = rb_str_new2(s+1);
|
||||
break;
|
||||
|
||||
case 'K':
|
||||
|
@ -317,7 +309,7 @@ proc_options(argcp, argvp)
|
|||
if (numlen == 0) v = 1;
|
||||
}
|
||||
rb_set_safe_level(v);
|
||||
tainting = TRUE;
|
||||
tainting = Qtrue;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -339,13 +331,13 @@ proc_options(argcp, argvp)
|
|||
|
||||
v = scan_oct(s, 4, &numlen);
|
||||
s += numlen;
|
||||
if (v > 0377) RS = Qnil;
|
||||
if (v > 0377) rb_rs = Qnil;
|
||||
else if (v == 0 && numlen >= 2) {
|
||||
RS = str_new2("\n\n");
|
||||
rb_rs = rb_str_new2("\n\n");
|
||||
}
|
||||
else {
|
||||
c = v & 0xff;
|
||||
RS = str_new(&c, 1);
|
||||
rb_rs = rb_str_new(&c, 1);
|
||||
}
|
||||
}
|
||||
goto reswitch;
|
||||
|
@ -359,15 +351,15 @@ proc_options(argcp, argvp)
|
|||
if (strcmp("copyright", s) == 0)
|
||||
copyright = 1;
|
||||
else if (strcmp("debug", s) == 0)
|
||||
debug = 1;
|
||||
rb_debug = 1;
|
||||
else if (strcmp("version", s) == 0)
|
||||
version = 1;
|
||||
else if (strcmp("verbose", s) == 0)
|
||||
verbose = 2;
|
||||
rb_verbose = 2;
|
||||
else if (strcmp("yydebug", s) == 0)
|
||||
yydebug = 1;
|
||||
else {
|
||||
Fatal("Unrecognized long option: --%s",s);
|
||||
rb_fatal("Unrecognized long option: --%s",s);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -377,7 +369,7 @@ proc_options(argcp, argvp)
|
|||
break;
|
||||
|
||||
default:
|
||||
Fatal("Unrecognized switch: -%s",s);
|
||||
rb_fatal("Unrecognized switch: -%s",s);
|
||||
|
||||
case 0:
|
||||
break;
|
||||
|
@ -389,24 +381,24 @@ proc_options(argcp, argvp)
|
|||
|
||||
if (e_fp) {
|
||||
if (fflush(e_fp) || ferror(e_fp) || fclose(e_fp))
|
||||
Fatal("Cannot write to temp file for -e");
|
||||
rb_fatal("Cannot write to temp file for -e");
|
||||
e_fp = NULL;
|
||||
argc++, argv--;
|
||||
argv[0] = e_tmpname;
|
||||
}
|
||||
|
||||
if (version) {
|
||||
show_version();
|
||||
ruby_show_version();
|
||||
exit(0);
|
||||
}
|
||||
if (copyright) {
|
||||
show_copyright();
|
||||
ruby_show_copyright();
|
||||
}
|
||||
|
||||
Init_ext(); /* should be called here for some reason :-( */
|
||||
if (script_given == FALSE) {
|
||||
if (script_given == Qfalse) {
|
||||
if (argc == 0) { /* no more args */
|
||||
if (verbose == 3) exit(0);
|
||||
if (rb_verbose == 3) exit(0);
|
||||
script = "-";
|
||||
load_stdin();
|
||||
}
|
||||
|
@ -434,9 +426,9 @@ proc_options(argcp, argvp)
|
|||
argc--; argv++;
|
||||
}
|
||||
}
|
||||
if (verbose) verbose = TRUE;
|
||||
if (rb_verbose) rb_verbose = Qtrue;
|
||||
|
||||
xflag = FALSE;
|
||||
xflag = Qfalse;
|
||||
*argvp = argv;
|
||||
*argcp = argc;
|
||||
|
||||
|
@ -452,10 +444,10 @@ proc_options(argcp, argvp)
|
|||
argv[0][0] = '$';
|
||||
if (s = strchr(argv[0], '=')) {
|
||||
*s++ = '\0';
|
||||
rb_gvar_set2(argv[0], str_new2(s));
|
||||
rb_gvar_set2(argv[0], rb_str_new2(s));
|
||||
}
|
||||
else {
|
||||
rb_gvar_set2(argv[0], TRUE);
|
||||
rb_gvar_set2(argv[0], Qtrue);
|
||||
}
|
||||
argv[0][0] = '-';
|
||||
}
|
||||
|
@ -480,24 +472,24 @@ load_file(fname, script)
|
|||
FILE *fp = fopen(fname, "r");
|
||||
|
||||
if (fp == NULL) {
|
||||
LoadError("No such file to load -- %s", fname);
|
||||
rb_raise(rb_eLoadError, "No such file to load -- %s", fname);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
f = file_open(fname, "r");
|
||||
f = rb_file_open(fname, "r");
|
||||
}
|
||||
|
||||
if (script) {
|
||||
VALUE c;
|
||||
VALUE line;
|
||||
VALUE rs = RS;
|
||||
VALUE rs = rb_rs;
|
||||
char *p;
|
||||
|
||||
RS = RS_default;
|
||||
rb_rs = rb_default_rs;
|
||||
if (xflag) {
|
||||
forbid_setid("-x");
|
||||
xflag = FALSE;
|
||||
while (!NIL_P(line = io_gets(f))) {
|
||||
xflag = Qfalse;
|
||||
while (!NIL_P(line = rb_io_gets(f))) {
|
||||
line_start++;
|
||||
if (RSTRING(line)->len > 2
|
||||
&& RSTRING(line)->ptr[0] == '#'
|
||||
|
@ -507,13 +499,13 @@ load_file(fname, script)
|
|||
}
|
||||
}
|
||||
}
|
||||
RS = rs;
|
||||
LoadError("No Ruby script found in input");
|
||||
rb_rs = rs;
|
||||
rb_raise(rb_eLoadError, "No Ruby script found in input");
|
||||
}
|
||||
|
||||
c = io_getc(f);
|
||||
c = rb_io_getc(f);
|
||||
if (c == INT2FIX('#')) {
|
||||
line = io_gets(f);
|
||||
line = rb_io_gets(f);
|
||||
line_start++;
|
||||
|
||||
if (RSTRING(line)->len > 2 && RSTRING(line)->ptr[0] == '!') {
|
||||
|
@ -545,9 +537,9 @@ load_file(fname, script)
|
|||
#ifndef USE_CWGUSI
|
||||
execv(path, argv);
|
||||
#endif
|
||||
sourcefile = fname;
|
||||
sourceline = 1;
|
||||
Fatal("Can't exec %s", path);
|
||||
ruby_sourcefile = fname;
|
||||
ruby_sourceline = 1;
|
||||
rb_fatal("Can't exec %s", path);
|
||||
}
|
||||
|
||||
start_read:
|
||||
|
@ -574,16 +566,16 @@ load_file(fname, script)
|
|||
}
|
||||
}
|
||||
else if (!NIL_P(c)) {
|
||||
io_ungetc(f, c);
|
||||
rb_io_ungetc(f, c);
|
||||
}
|
||||
RS = rs;
|
||||
rb_rs = rs;
|
||||
}
|
||||
compile_file(fname, f, line_start);
|
||||
rb_compile_file(fname, f, line_start);
|
||||
if (script) {
|
||||
rb_define_global_const("DATA", f);
|
||||
}
|
||||
else if (f != rb_stdin) {
|
||||
io_close(f);
|
||||
rb_io_close(f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -614,7 +606,7 @@ set_arg0(val, id)
|
|||
int i;
|
||||
static int len;
|
||||
|
||||
if (origargv == 0) Fail("$0 not initialized");
|
||||
if (origargv == 0) rb_raise(rb_eRuntimeError, "$0 not initialized");
|
||||
if (len == 0) {
|
||||
s = origargv[0];
|
||||
s += strlen(s);
|
||||
|
@ -637,7 +629,7 @@ set_arg0(val, id)
|
|||
while (++i < len)
|
||||
*s++ = ' ';
|
||||
}
|
||||
rb_progname = str_taint(str_new2(origargv[0]));
|
||||
rb_progname = rb_str_taint(rb_str_new2(origargv[0]));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -645,8 +637,8 @@ ruby_script(name)
|
|||
char *name;
|
||||
{
|
||||
if (name) {
|
||||
rb_progname = str_taint(str_new2(name));
|
||||
sourcefile = name;
|
||||
rb_progname = rb_str_taint(rb_str_new2(name));
|
||||
ruby_sourcefile = name;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -673,11 +665,11 @@ forbid_setid(s)
|
|||
char *s;
|
||||
{
|
||||
if (euid != uid)
|
||||
Fatal("No %s allowed while running setuid", s);
|
||||
rb_raise(rb_eSecurityError, "No %s allowed while running setuid", s);
|
||||
if (egid != gid)
|
||||
Fatal("No %s allowed while running setgid", s);
|
||||
rb_raise(rb_eSecurityError, "No %s allowed while running setgid", s);
|
||||
if (rb_safe_level() > 0)
|
||||
Fatal("No %s allowed in tainted mode", s);
|
||||
rb_raise(rb_eSecurityError, "No %s allowed in tainted mode", s);
|
||||
}
|
||||
|
||||
#if defined(_WIN32) || defined(DJGPP)
|
||||
|
@ -719,11 +711,11 @@ ruby_prog_init()
|
|||
{
|
||||
init_ids();
|
||||
|
||||
sourcefile = "ruby";
|
||||
rb_define_variable("$VERBOSE", &verbose);
|
||||
rb_define_variable("$-v", &verbose);
|
||||
rb_define_variable("$DEBUG", &debug);
|
||||
rb_define_variable("$-d", &debug);
|
||||
ruby_sourcefile = "ruby";
|
||||
rb_define_variable("$VERBOSE", &rb_verbose);
|
||||
rb_define_variable("$-v", &rb_verbose);
|
||||
rb_define_variable("$DEBUG", &rb_debug);
|
||||
rb_define_variable("$-d", &rb_debug);
|
||||
rb_define_readonly_variable("$-p", &do_print);
|
||||
rb_define_readonly_variable("$-l", &do_line);
|
||||
|
||||
|
@ -760,7 +752,7 @@ ruby_prog_init()
|
|||
|
||||
rb_define_hooked_variable("$0", &rb_progname, 0, set_arg0);
|
||||
|
||||
rb_argv = ary_new();
|
||||
rb_argv = rb_ary_new();
|
||||
rb_define_readonly_variable("$*", &rb_argv);
|
||||
rb_define_global_const("ARGV", rb_argv);
|
||||
rb_define_readonly_variable("$-a", &do_split);
|
||||
|
@ -788,7 +780,7 @@ ruby_set_argv(argc, argv)
|
|||
else dln_argv0 = argv[0];
|
||||
#endif
|
||||
for (i=0; i < argc; i++) {
|
||||
ary_push(rb_argv, str_taint(str_new2(argv[i])));
|
||||
rb_ary_push(rb_argv, rb_str_taint(rb_str_new2(argv[i])));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -807,15 +799,15 @@ ruby_process_options(argc, argv)
|
|||
ruby_script(script);
|
||||
ruby_set_argv(argc, argv);
|
||||
|
||||
if (do_check && nerrs == 0) {
|
||||
if (do_check && ruby_nerrs == 0) {
|
||||
printf("Syntax OK\n");
|
||||
exit(0);
|
||||
}
|
||||
if (do_print) {
|
||||
yyappend_print();
|
||||
rb_parser_append_print();
|
||||
}
|
||||
if (do_loop) {
|
||||
yywhile_loop(do_line, do_split);
|
||||
rb_parser_while_loop(do_line, do_split);
|
||||
}
|
||||
if (e_fp) {
|
||||
fclose(e_fp);
|
||||
|
|
273
ruby.h
273
ruby.h
|
@ -18,9 +18,14 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
#if 0
|
||||
#ifndef RUBY_RENAME
|
||||
#include "rename2.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
@ -89,11 +94,6 @@ extern "C" {
|
|||
#if SIZEOF_LONG != SIZEOF_VOIDP
|
||||
---->> ruby requires sizeof(void*) == sizeof(long) to be compiled. <<----
|
||||
# endif
|
||||
/* INT, UINT, UCHAR are obsolete macro, do not use them. */
|
||||
typedef long INT;
|
||||
typedef unsigned long UINT;
|
||||
typedef unsigned char UCHAR;
|
||||
|
||||
typedef unsigned long VALUE;
|
||||
typedef unsigned int ID;
|
||||
|
||||
|
@ -121,8 +121,8 @@ typedef unsigned int ID;
|
|||
|
||||
#define FIXNUM_FLAG 0x01
|
||||
#define INT2FIX(i) (VALUE)(((long)(i))<<1 | FIXNUM_FLAG)
|
||||
VALUE int2inum _((long));
|
||||
#define INT2NUM(v) int2inum(v)
|
||||
VALUE rb_int2inum _((long));
|
||||
#define INT2NUM(v) rb_int2inum(v)
|
||||
|
||||
#define FIX2LONG(x) RSHIFT((long)x,1)
|
||||
#define FIX2ULONG(x) (((unsigned long)(x))>>1)
|
||||
|
@ -132,13 +132,6 @@ VALUE int2inum _((long));
|
|||
#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))
|
||||
|
||||
/* special contants - i.e. non-zero and non-fixnum constants */
|
||||
#ifndef MACRUBY_PUBLIC_INTERFACE
|
||||
# undef FALSE
|
||||
# undef TRUE
|
||||
# define FALSE 0
|
||||
# define TRUE 2
|
||||
# define NIL 4
|
||||
#endif
|
||||
#define Qfalse 0
|
||||
#define Qtrue 2
|
||||
#define Qnil 4
|
||||
|
@ -146,7 +139,6 @@ VALUE int2inum _((long));
|
|||
# define RTEST(v) rb_test_false_or_nil((VALUE)(v))
|
||||
#define NIL_P(v) ((VALUE)(v) == Qnil)
|
||||
|
||||
VALUE rb_class_of _((VALUE));
|
||||
#define CLASS_OF(v) rb_class_of((VALUE)(v))
|
||||
|
||||
#define T_NONE 0x00
|
||||
|
@ -187,15 +179,15 @@ void rb_check_safe_str _((VALUE));
|
|||
#define Check_SafeStr(v) rb_check_safe_str((VALUE)(v))
|
||||
void rb_secure _((int));
|
||||
|
||||
long num2long _((VALUE));
|
||||
unsigned long num2ulong _((VALUE));
|
||||
#define NUM2LONG(x) (FIXNUM_P(x)?FIX2INT(x):num2long((VALUE)x))
|
||||
#define NUM2ULONG(x) num2ulong((VALUE)x)
|
||||
long rb_num2long _((VALUE));
|
||||
unsigned long rb_num2ulong _((VALUE));
|
||||
#define NUM2LONG(x) (FIXNUM_P(x)?FIX2INT(x):rb_num2long((VALUE)x))
|
||||
#define NUM2ULONG(x) rb_num2ulong((VALUE)x)
|
||||
#if SIZEOF_INT < SIZEOF_LONG
|
||||
int num2int _((VALUE));
|
||||
#define NUM2INT(x) (FIXNUM_P(x)?FIX2INT(x):num2int((VALUE)x))
|
||||
int fix2int _((VALUE));
|
||||
#define FIX2INT(x) fix2int((VALUE)x)
|
||||
int rb_num2int _((VALUE));
|
||||
#define NUM2INT(x) (FIXNUM_P(x)?FIX2INT(x):rb_num2int((VALUE)x))
|
||||
int rb_fix2int _((VALUE));
|
||||
#define FIX2INT(x) rb_fix2int((VALUE)x)
|
||||
#define NUM2UINT(x) ((unsigned int)NUM2ULONG(x))
|
||||
#define FIX2UINT(x) ((unsigned int)FIX2ULONG(x))
|
||||
#else
|
||||
|
@ -205,11 +197,12 @@ int fix2int _((VALUE));
|
|||
#define FIX2UINT(x) FIX2ULONG(x)
|
||||
#endif
|
||||
|
||||
double num2dbl _((VALUE));
|
||||
#define NUM2DBL(x) num2dbl((VALUE)(x))
|
||||
double rb_num2dbl _((VALUE));
|
||||
#define NUM2DBL(x) rb_num2dbl((VALUE)(x))
|
||||
|
||||
char *str2cstr _((VALUE,int*));
|
||||
#define STR2CSTR(x) str2cstr((VALUE)(x),0)
|
||||
char *rb_str2cstr _((VALUE,int*));
|
||||
#define str2cstr(x,l) rb_str2cstr((VALUE)(x),(l))
|
||||
#define STR2CSTR(x) rb_str2cstr((VALUE)(x),0)
|
||||
|
||||
#define NUM2CHR(x) (((TYPE(x) == T_STRING)&&(RSTRING(x)->len>=1))?\
|
||||
RSTRING(x)->ptr[0]:(char)NUM2INT(x))
|
||||
|
@ -222,8 +215,8 @@ VALUE rb_newobj _((void));
|
|||
RBASIC(obj)->flags = (t);\
|
||||
}
|
||||
#define CLONESETUP(clone,obj) {\
|
||||
OBJSETUP(clone,singleton_class_clone(RBASIC(obj)->klass),RBASIC(obj)->flags);\
|
||||
singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);\
|
||||
OBJSETUP(clone,rb_singleton_class_clone(RBASIC(obj)->klass),RBASIC(obj)->flags);\
|
||||
rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);\
|
||||
}
|
||||
|
||||
struct RBasic {
|
||||
|
@ -272,7 +265,7 @@ struct RHash {
|
|||
struct RBasic basic;
|
||||
struct st_table *tbl;
|
||||
int iter_lev;
|
||||
long status;
|
||||
VALUE ifnone;
|
||||
};
|
||||
|
||||
struct RFile {
|
||||
|
@ -287,19 +280,19 @@ struct RData {
|
|||
void *data;
|
||||
};
|
||||
|
||||
extern VALUE cData;
|
||||
extern VALUE rb_cData;
|
||||
|
||||
#define DATA_PTR(dta) (RDATA(dta)->data)
|
||||
|
||||
VALUE data_object_alloc _((VALUE,void*,void (*)(),void (*)()));
|
||||
VALUE rb_data_object_alloc _((VALUE,void*,void (*)(),void (*)()));
|
||||
#define Data_Make_Struct(klass,type,mark,free,sval) (\
|
||||
sval = ALLOC(type),\
|
||||
memset(sval, 0, sizeof(type)),\
|
||||
data_object_alloc(klass,sval,mark,free)\
|
||||
rb_data_object_alloc(klass,sval,mark,free)\
|
||||
)
|
||||
|
||||
#define Data_Wrap_Struct(klass,mark,free,sval) (\
|
||||
data_object_alloc(klass,sval,mark,free)\
|
||||
rb_data_object_alloc(klass,sval,mark,free)\
|
||||
)
|
||||
|
||||
#define Data_Get_Struct(obj,type,sval) {\
|
||||
|
@ -358,49 +351,6 @@ struct RBignum {
|
|||
#define FL_UNSET(x,f) if(FL_ABLE(x)){RBASIC(x)->flags &= ~(f);}
|
||||
#define FL_REVERSE(x,f) if(FL_ABLE(x)){RBASIC(x)->flags ^= f;}
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 2 && !defined(RUBY_NO_INLINE)
|
||||
extern __inline__ int
|
||||
rb_type(VALUE obj)
|
||||
{
|
||||
if (FIXNUM_P(obj)) return T_FIXNUM;
|
||||
if (obj == Qnil) return T_NIL;
|
||||
#ifdef MACRUBY_PUBLIC_INTERFACE
|
||||
if (obj == RubyFALSE) return T_FALSE;
|
||||
if (obj == RubyTRUE) return T_TRUE;
|
||||
#else
|
||||
if (obj == FALSE) return T_FALSE;
|
||||
if (obj == TRUE) return T_TRUE;
|
||||
#endif
|
||||
return BUILTIN_TYPE(obj);
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
rb_special_const_p(VALUE obj)
|
||||
{
|
||||
#ifdef MACRUBY_PUBLIC_INTERFACE
|
||||
return (FIXNUM_P(obj)||obj == Qnil||obj == RubyFALSE||obj == RubyTRUE)?RubyTRUE:RubyFALSE;
|
||||
#else
|
||||
return (FIXNUM_P(obj)||obj == Qnil||obj == FALSE||obj == TRUE)?TRUE:FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
rb_test_false_or_nil(VALUE v)
|
||||
{
|
||||
#ifdef MACRUBY_PUBLIC_INTERFACE
|
||||
return (v != Qnil) && (v != RubyFALSE);
|
||||
return (v != Qnil) && (v != RubyFALSE);
|
||||
#else
|
||||
return (v != Qnil) && (v != FALSE);
|
||||
return (v != Qnil) && (v != FALSE);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
int rb_type _((VALUE));
|
||||
int rb_special_const_p _((VALUE));
|
||||
int rb_test_false_or_nil _((VALUE));
|
||||
#endif
|
||||
|
||||
void *xmalloc _((int));
|
||||
void *xcalloc _((int,int));
|
||||
void *xrealloc _((void*,int));
|
||||
|
@ -458,89 +408,142 @@ void rb_const_set _((VALUE, ID, VALUE));
|
|||
|
||||
VALUE rb_equal _((VALUE,VALUE));
|
||||
|
||||
extern VALUE verbose, debug;
|
||||
extern VALUE rb_verbose, rb_debug;
|
||||
|
||||
int rb_safe_level _((void));
|
||||
void rb_set_safe_level _((int));
|
||||
|
||||
void Raise __((VALUE, char*, ...)) NORETURN;
|
||||
void Fail __((char*, ...)) NORETURN;
|
||||
void Fatal __((char*, ...)) NORETURN;
|
||||
void Bug __((char*, ...)) NORETURN;
|
||||
void rb_raise __((VALUE, char*, ...)) NORETURN;
|
||||
void rb_fatal __((char*, ...)) NORETURN;
|
||||
void rb_bug __((char*, ...)) NORETURN;
|
||||
void rb_sys_fail _((char*)) NORETURN;
|
||||
void rb_iter_break _((void)) NORETURN;
|
||||
void rb_exit _((int)) NORETURN;
|
||||
void rb_raise _((VALUE)) NORETURN;
|
||||
void rb_fatal _((VALUE)) NORETURN;
|
||||
void rb_notimplement _((void)) NORETURN;
|
||||
|
||||
void Error __((char*, ...));
|
||||
void Warn __((char*, ...));
|
||||
void Warning __((char*, ...)); /* reports if `-w' specified */
|
||||
void rb_warn __((char*, ...));
|
||||
void rb_warning __((char*, ...)); /* reports if `-w' specified */
|
||||
|
||||
VALUE rb_each _((VALUE));
|
||||
VALUE rb_yield _((VALUE));
|
||||
int iterator_p _((void));
|
||||
int rb_iterator_p _((void));
|
||||
VALUE rb_iterate _((VALUE(*)(),VALUE,VALUE(*)(),VALUE));
|
||||
VALUE rb_rescue _((VALUE(*)(),VALUE,VALUE(*)(),VALUE));
|
||||
VALUE rb_ensure _((VALUE(*)(),VALUE,VALUE(*)(),VALUE));
|
||||
VALUE rb_catch _((char*,VALUE(*)(),VALUE));
|
||||
void rb_throw _((char*,VALUE)) NORETURN;
|
||||
|
||||
extern VALUE mKernel;
|
||||
extern VALUE mComparable;
|
||||
extern VALUE mEnumerable;
|
||||
extern VALUE mErrno;
|
||||
extern VALUE mFileTest;
|
||||
extern VALUE mGC;
|
||||
extern VALUE mMath;
|
||||
extern VALUE mProcess;
|
||||
void ruby_init _((void));
|
||||
void ruby_options _((int, char**));
|
||||
void ruby_run _((void));
|
||||
|
||||
#ifdef __MACOS__ /* name conflict, AERegistory.h */
|
||||
extern VALUE cRubyObject;
|
||||
extern VALUE rb_mKernel;
|
||||
extern VALUE rb_mComparable;
|
||||
extern VALUE rb_mEnumerable;
|
||||
extern VALUE rb_mErrno;
|
||||
extern VALUE rb_mFileTest;
|
||||
extern VALUE rb_mGC;
|
||||
extern VALUE rb_mMath;
|
||||
extern VALUE rb_mProcess;
|
||||
|
||||
extern VALUE rb_cObject;
|
||||
extern VALUE rb_cArray;
|
||||
extern VALUE rb_cBignum;
|
||||
extern VALUE rb_cClass;
|
||||
extern VALUE rb_cDir;
|
||||
extern VALUE rb_cData;
|
||||
extern VALUE rb_cFalseClass;
|
||||
extern VALUE rb_cFile;
|
||||
extern VALUE rb_cFixnum;
|
||||
extern VALUE rb_cFloat;
|
||||
extern VALUE rb_cHash;
|
||||
extern VALUE rb_cInteger;
|
||||
extern VALUE rb_cIO;
|
||||
extern VALUE rb_cModule;
|
||||
extern VALUE rb_cNilClass;
|
||||
extern VALUE rb_cNumeric;
|
||||
extern VALUE rb_cProc;
|
||||
extern VALUE rb_cRange;
|
||||
extern VALUE rb_cRegexp;
|
||||
extern VALUE rb_cString;
|
||||
extern VALUE rb_cThread;
|
||||
extern VALUE rb_cTime;
|
||||
extern VALUE rb_cTrueClass;
|
||||
extern VALUE rb_cStruct;
|
||||
|
||||
extern VALUE rb_eException;
|
||||
extern VALUE rb_eStandardError;
|
||||
extern VALUE rb_eSystemExit, rb_eInterrupt, rb_eFatal;
|
||||
extern VALUE rb_eArgError;
|
||||
extern VALUE rb_eEOFError;
|
||||
extern VALUE rb_eIndexError;
|
||||
extern VALUE rb_eIOError;
|
||||
extern VALUE rb_eLoadError;
|
||||
extern VALUE rb_eNameError;
|
||||
extern VALUE rb_eRuntimeError;
|
||||
extern VALUE rb_eSecurityError;
|
||||
extern VALUE rb_eSyntaxError;
|
||||
extern VALUE rb_eSystemCallError;
|
||||
extern VALUE rb_eTypeError;
|
||||
extern VALUE rb_eZeroDiv;
|
||||
extern VALUE rb_eNotImpError;
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 2 && !defined(RUBY_NO_INLINE)
|
||||
extern __inline__ VALUE rb_class_of _((VALUE));
|
||||
extern __inline__ int rb_type _((VALUE));
|
||||
extern __inline__ int rb_special_const_p _((VALUE));
|
||||
extern __inline__ int rb_test_false_or_nil _((VALUE));
|
||||
|
||||
extern __inline__ VALUE
|
||||
rb_class_of(VALUE obj)
|
||||
{
|
||||
if (FIXNUM_P(obj)) return rb_cFixnum;
|
||||
if (obj == Qnil) return rb_cNilClass;
|
||||
if (obj == Qfalse) return rb_cFalseClass;
|
||||
if (obj == Qtrue) return rb_cTrueClass;
|
||||
|
||||
return RBASIC(obj)->klass;
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
rb_type(VALUE obj)
|
||||
{
|
||||
if (FIXNUM_P(obj)) return T_FIXNUM;
|
||||
if (obj == Qnil) return T_NIL;
|
||||
if (obj == Qfalse) return T_FALSE;
|
||||
if (obj == Qtrue) return T_TRUE;
|
||||
return BUILTIN_TYPE(obj);
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
rb_special_const_p(VALUE obj)
|
||||
{
|
||||
return (FIXNUM_P(obj)||obj == Qnil||obj == Qfalse||obj == Qtrue)?Qtrue:Qfalse;
|
||||
}
|
||||
|
||||
extern __inline__ int
|
||||
rb_test_false_or_nil(VALUE v)
|
||||
{
|
||||
#ifdef MACRUBY_PUBLIC_INTERFACE
|
||||
return (v != Qnil) && (v != RubyFALSE);
|
||||
return (v != Qnil) && (v != RubyFALSE);
|
||||
#else
|
||||
extern VALUE cObject;
|
||||
return (v != Qnil) && (v != Qfalse);
|
||||
return (v != Qnil) && (v != Qfalse);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
VALUE rb_class_of _((VALUE));
|
||||
int rb_type _((VALUE));
|
||||
int rb_special_const_p _((VALUE));
|
||||
int rb_test_false_or_nil _((VALUE));
|
||||
#endif
|
||||
extern VALUE cArray;
|
||||
extern VALUE cBignum;
|
||||
extern VALUE cClass;
|
||||
extern VALUE cData;
|
||||
extern VALUE cFile;
|
||||
extern VALUE cFixnum;
|
||||
extern VALUE cFloat;
|
||||
extern VALUE cHash;
|
||||
extern VALUE cInteger;
|
||||
extern VALUE cIO;
|
||||
extern VALUE cModule;
|
||||
extern VALUE cNumeric;
|
||||
extern VALUE cProc;
|
||||
extern VALUE cRegexp;
|
||||
extern VALUE cString;
|
||||
extern VALUE cThread;
|
||||
extern VALUE cStruct;
|
||||
|
||||
extern VALUE eException;
|
||||
extern VALUE eStandardError;
|
||||
extern VALUE eSystemExit, eInterrupt, eFatal;
|
||||
extern VALUE eArgError;
|
||||
extern VALUE eEOFError;
|
||||
extern VALUE eIndexError;
|
||||
extern VALUE eIOError;
|
||||
extern VALUE eLoadError;
|
||||
extern VALUE eNameError;
|
||||
extern VALUE eRuntimeError;
|
||||
extern VALUE eSecurityError;
|
||||
extern VALUE eSyntaxError;
|
||||
extern VALUE eSystemCallError;
|
||||
extern VALUE eTypeError;
|
||||
extern VALUE eZeroDiv;
|
||||
extern VALUE eNotImpError;
|
||||
|
||||
#include "intern.h"
|
||||
|
||||
#if defined(EXTLIB) && defined(USE_DLN_A_OUT)
|
||||
/* hook for external modules */
|
||||
static char *libs_to_be_linked[] = { EXTLIB, 0 };
|
||||
static char *dln_libs_to_be_linked[] = { EXTLIB, 0 };
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
|
13
rubyio.h
13
rubyio.h
|
@ -33,7 +33,7 @@ typedef struct OpenFile {
|
|||
#define FMODE_BINMODE 4
|
||||
#define FMODE_SYNC 8
|
||||
|
||||
#define GetOpenFile(obj,fp) io_check_closed((fp) = RFILE(obj)->fptr)
|
||||
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(obj)->fptr)
|
||||
|
||||
#define MakeOpenFile(obj, fp) do {\
|
||||
fp = RFILE(obj)->fptr = ALLOC(OpenFile);\
|
||||
|
@ -49,10 +49,11 @@ typedef struct OpenFile {
|
|||
|
||||
FILE *rb_fopen _((char *, char *));
|
||||
FILE *rb_fdopen _((int, char *));
|
||||
void io_writable _((OpenFile *));
|
||||
void io_readable _((OpenFile *));
|
||||
void io_fptr_finalize _((OpenFile *));
|
||||
void io_unbuffered _((OpenFile *));
|
||||
void io_check_closed _((OpenFile *));
|
||||
void rb_io_check_writable _((OpenFile *));
|
||||
void rb_io_check_readable _((OpenFile *));
|
||||
void rb_io_fptr_finalize _((OpenFile *));
|
||||
void rb_io_unbuffered _((OpenFile *));
|
||||
void rb_io_check_closed _((OpenFile *));
|
||||
void rb_eof_error _((void));
|
||||
|
||||
#endif
|
||||
|
|
48
rubysig.h
48
rubysig.h
|
@ -10,44 +10,44 @@
|
|||
#ifndef SIG_H
|
||||
#define SIG_H
|
||||
|
||||
extern int trap_immediate;
|
||||
#define TRAP_BEG (trap_immediate=1)
|
||||
#define TRAP_END (trap_immediate=0)
|
||||
extern int rb_trap_immediate;
|
||||
#define TRAP_BEG (rb_trap_immediate=1)
|
||||
#define TRAP_END (rb_trap_immediate=0)
|
||||
|
||||
extern int prohibit_interrupt;
|
||||
#define DEFER_INTS {prohibit_interrupt++;}
|
||||
#define ALLOW_INTS {prohibit_interrupt--; CHECK_INTS;}
|
||||
#define ENABLE_INTS {prohibit_interrupt--;}
|
||||
extern int rb_prohibit_interrupt;
|
||||
#define DEFER_INTS {rb_prohibit_interrupt++;}
|
||||
#define ALLOW_INTS {rb_prohibit_interrupt--; CHECK_INTS;}
|
||||
#define ENABLE_INTS {rb_prohibit_interrupt--;}
|
||||
|
||||
extern int trap_pending;
|
||||
void trap_restore_mask _((void));
|
||||
extern int rb_trap_pending;
|
||||
void rb_trap_restore_mask _((void));
|
||||
|
||||
#ifdef THREAD
|
||||
extern int thread_critical;
|
||||
void thread_schedule _((void));
|
||||
extern int rb_thread_critical;
|
||||
void rb_thread_schedule _((void));
|
||||
#if defined(HAVE_SETITIMER) && !defined(__BOW__)
|
||||
extern int thread_pending;
|
||||
# define CHECK_INTS if (!prohibit_interrupt) {\
|
||||
if (trap_pending) rb_trap_exec();\
|
||||
if (thread_pending && !thread_critical) thread_schedule();\
|
||||
extern int rb_thread_pending;
|
||||
# define CHECK_INTS if (!rb_prohibit_interrupt) {\
|
||||
if (rb_trap_pending) rb_trap_exec();\
|
||||
if (rb_thread_pending && !rb_thread_critical) rb_thread_schedule();\
|
||||
}
|
||||
# else
|
||||
/* pseudo preemptive thread switching */
|
||||
extern int thread_tick;
|
||||
extern int rb_thread_tick;
|
||||
#define THREAD_TICK 500
|
||||
# define CHECK_INTS if (!prohibit_interrupt) {\
|
||||
if (trap_pending) rb_trap_exec();\
|
||||
if (!thread_critical) {\
|
||||
if (thread_tick-- <= 0) {\
|
||||
thread_tick = THREAD_TICK;\
|
||||
thread_schedule();\
|
||||
# define CHECK_INTS if (!rb_prohibit_interrupt) {\
|
||||
if (rb_trap_pending) rb_trap_exec();\
|
||||
if (!rb_thread_critical) {\
|
||||
if (rb_thread_tick-- <= 0) {\
|
||||
rb_thread_tick = THREAD_TICK;\
|
||||
rb_thread_schedule();\
|
||||
}\
|
||||
}\
|
||||
}
|
||||
# endif
|
||||
#else
|
||||
# define CHECK_INTS if (!prohibit_interrupt) {\
|
||||
if (trap_pending) rb_trap_exec();\
|
||||
# define CHECK_INTS if (!rb_prohibit_interrupt) {\
|
||||
if (rb_trap_pending) rb_trap_exec();\
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# word occurrence listing
|
||||
# usege: ruby freq.rb file..
|
||||
freq = {}
|
||||
freq = Hash.new(0)
|
||||
while gets
|
||||
while sub!(/\w+/, '')
|
||||
word = $&
|
||||
freq[word] = freq.fetch(word, 0)+1
|
||||
freq[word] += 1
|
||||
end
|
||||
end
|
||||
|
||||
for word in freq.keys.sort
|
||||
printf("%s -- %d\n", word, freq[word])
|
||||
for word in freq.keys.sort!
|
||||
print word, " -- ", freq[word], "\n"
|
||||
end
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# word occurrence listing
|
||||
# usege: ruby occur.rb file..
|
||||
freq = {}
|
||||
freq = Hash.new(0)
|
||||
while gets()
|
||||
for word in $_.split(/\W+/)
|
||||
freq[word] +=1
|
||||
freq[word] += 1
|
||||
end
|
||||
end
|
||||
|
||||
for word in freq.keys.sort
|
||||
printf("%s -- %d\n", word, freq[word])
|
||||
for word in freq.keys.sort!
|
||||
print word, " -- ", freq[word], "\n"
|
||||
end
|
||||
|
|
|
@ -142,7 +142,7 @@ The variable ruby-indent-level controls the amount of indentation.
|
|||
(interactive)
|
||||
(kill-all-local-variables)
|
||||
(use-local-map ruby-mode-map)
|
||||
(setq mode-name "ruby")
|
||||
(setq mode-name "Ruby")
|
||||
(setq major-mode 'ruby-mode)
|
||||
(ruby-mode-variables)
|
||||
(run-hooks 'ruby-mode-hook))
|
||||
|
@ -464,6 +464,12 @@ The variable ruby-indent-level controls the amount of indentation.
|
|||
(setq bol (point))
|
||||
(end-of-line)
|
||||
(skip-chars-backward " \t")
|
||||
(and (re-search-backward "#" (save-excursion
|
||||
(beginning-of-line)
|
||||
(point)) t)
|
||||
(setq state (ruby-parse-region parse-start (point)))
|
||||
(nth 0 state)
|
||||
(goto-char (nth 0 state)))
|
||||
(or (bobp) (forward-char -1))
|
||||
(and
|
||||
(or (and (looking-at ruby-symbol-re)
|
||||
|
@ -473,7 +479,7 @@ The variable ruby-indent-level controls the amount of indentation.
|
|||
(goto-char (match-end 0))
|
||||
(not (looking-at "[a-z_]"))))
|
||||
(and (looking-at ruby-operator-re)
|
||||
(or (not (or (eq ?/ (char-after (point)))))
|
||||
(or (not (eq ?/ (char-after (point))))
|
||||
(null (nth 0 (ruby-parse-region parse-start (point)))))
|
||||
(not (eq (char-after (1- (point))) ?$))
|
||||
(or (not (eq ?| (char-after (point))))
|
||||
|
|
59
signal.c
59
signal.c
|
@ -180,7 +180,7 @@ signm2signo(nm)
|
|||
}
|
||||
|
||||
VALUE
|
||||
f_kill(argc, argv)
|
||||
rb_f_kill(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -194,13 +194,13 @@ f_kill(argc, argv)
|
|||
|
||||
rb_secure(2);
|
||||
if (argc < 2)
|
||||
ArgError("wrong # of arguments -- kill(sig, pid...)");
|
||||
rb_raise(rb_eArgError, "wrong # of arguments -- kill(sig, pid...)");
|
||||
switch (TYPE(argv[0])) {
|
||||
case T_FIXNUM:
|
||||
sig = FIX2UINT(argv[0]);
|
||||
if (sig >= NSIG) {
|
||||
s = rb_id2name(sig);
|
||||
if (!s) ArgError("Bad signal");
|
||||
if (!s) rb_raise(rb_eArgError, "Bad signal");
|
||||
goto str_signal;
|
||||
}
|
||||
break;
|
||||
|
@ -216,7 +216,7 @@ f_kill(argc, argv)
|
|||
if (strncmp("SIG", s, 3) == 0)
|
||||
s += 3;
|
||||
if((sig = signm2signo(s)) == 0)
|
||||
ArgError("Unrecognized signal name `%s'", s);
|
||||
rb_raise(rb_eArgError, "Unrecognized signal name `%s'", s);
|
||||
|
||||
if (negative)
|
||||
sig = -sig;
|
||||
|
@ -224,7 +224,8 @@ f_kill(argc, argv)
|
|||
break;
|
||||
|
||||
default:
|
||||
ArgError("bad signal type %s", rb_class2name(CLASS_OF(argv[0])));
|
||||
rb_raise(rb_eArgError, "bad signal type %s",
|
||||
rb_class2name(CLASS_OF(argv[0])));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -253,19 +254,19 @@ f_kill(argc, argv)
|
|||
|
||||
static VALUE trap_list[NSIG];
|
||||
static int trap_pending_list[NSIG];
|
||||
int trap_pending;
|
||||
int trap_immediate;
|
||||
int prohibit_interrupt;
|
||||
int rb_trap_pending;
|
||||
int rb_trap_immediate;
|
||||
int rb_prohibit_interrupt;
|
||||
|
||||
void
|
||||
gc_mark_trap_list()
|
||||
rb_gc_mark_trap_list()
|
||||
{
|
||||
#ifndef MACOS_UNUSE_SIGNAL
|
||||
int i;
|
||||
|
||||
for (i=0; i<NSIG; i++) {
|
||||
if (trap_list[i])
|
||||
gc_mark(trap_list[i]);
|
||||
rb_gc_mark(trap_list[i]);
|
||||
}
|
||||
#endif /* MACOS_UNUSE_SIGNAL */
|
||||
}
|
||||
|
@ -286,8 +287,8 @@ posix_signal(signum, handler)
|
|||
#endif
|
||||
|
||||
#ifdef THREAD
|
||||
# define rb_interrupt thread_interrupt
|
||||
# define rb_trap_eval thread_trap_eval
|
||||
# define rb_interrupt rb_thread_interrupt
|
||||
# define rb_trap_eval rb_thread_trap_eval
|
||||
#endif
|
||||
|
||||
static RETSIGTYPE
|
||||
|
@ -295,22 +296,22 @@ sighandle(sig)
|
|||
int sig;
|
||||
{
|
||||
if (sig >= NSIG ||(sig != SIGINT && !trap_list[sig]))
|
||||
Bug("trap_handler: Bad signal %d", sig);
|
||||
rb_bug("trap_handler: Bad signal %d", sig);
|
||||
|
||||
#if !defined(POSIX_SIGNAL) && !defined(BSD_SIGNAL)
|
||||
signal(sig, sighandle);
|
||||
#endif
|
||||
|
||||
if (trap_immediate) {
|
||||
trap_immediate = 0;
|
||||
if (rb_trap_immediate) {
|
||||
rb_trap_immediate = 0;
|
||||
if (sig == SIGINT && !trap_list[SIGINT]) {
|
||||
rb_interrupt();
|
||||
}
|
||||
rb_trap_eval(trap_list[sig], sig);
|
||||
trap_immediate = 1;
|
||||
rb_trap_immediate = 1;
|
||||
}
|
||||
else {
|
||||
trap_pending++;
|
||||
rb_trap_pending++;
|
||||
trap_pending_list[sig]++;
|
||||
}
|
||||
}
|
||||
|
@ -320,7 +321,7 @@ static RETSIGTYPE
|
|||
sigbus(sig)
|
||||
int sig;
|
||||
{
|
||||
Bug("Bus Error");
|
||||
rb_bug("Bus Error");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -329,7 +330,7 @@ static RETSIGTYPE
|
|||
sigsegv(sig)
|
||||
int sig;
|
||||
{
|
||||
Bug("Segmentation fault");
|
||||
rb_bug("Segmentation fault");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -338,7 +339,7 @@ rb_trap_exit()
|
|||
{
|
||||
#ifndef MACOS_UNUSE_SIGNAL
|
||||
if (trap_list[0])
|
||||
rb_eval_cmd(trap_list[0], ary_new3(1, INT2FIX(0)));
|
||||
rb_eval_cmd(trap_list[0], rb_ary_new3(1, INT2FIX(0)));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -359,7 +360,7 @@ rb_trap_exec()
|
|||
}
|
||||
}
|
||||
#endif /* MACOS_UNUSE_SIGNAL */
|
||||
trap_pending = 0;
|
||||
rb_trap_pending = 0;
|
||||
}
|
||||
|
||||
struct trap_arg {
|
||||
|
@ -436,17 +437,17 @@ trap(arg)
|
|||
s += 3;
|
||||
sig = signm2signo(s);
|
||||
if (sig == 0 && strcmp(s, "EXIT") != 0)
|
||||
ArgError("Invalid signal SIG%s", s);
|
||||
rb_raise(rb_eArgError, "Invalid signal SIG%s", s);
|
||||
}
|
||||
else {
|
||||
sig = NUM2INT(arg->sig);
|
||||
}
|
||||
if (sig < 0 || sig > NSIG) {
|
||||
ArgError("Invalid signal no %d", sig);
|
||||
rb_raise(rb_eArgError, "Invalid signal no %d", sig);
|
||||
}
|
||||
#if defined(THREAD) && defined(HAVE_SETITIMER) && !defined(__BOW__)
|
||||
if (sig == SIGVTALRM) {
|
||||
ArgError("SIGVTALRM reserved for Thread; cannot set handler");
|
||||
rb_raise(rb_eArgError, "SIGVTALRM reserved for Thread; cannot set handler");
|
||||
}
|
||||
#endif
|
||||
if (func == SIG_DFL) {
|
||||
|
@ -503,7 +504,7 @@ trap_ensure(arg)
|
|||
#endif
|
||||
|
||||
void
|
||||
trap_restore_mask()
|
||||
rb_trap_restore_mask()
|
||||
{
|
||||
#ifndef NT
|
||||
# ifdef HAVE_SIGPROCMASK
|
||||
|
@ -515,7 +516,7 @@ trap_restore_mask()
|
|||
}
|
||||
|
||||
static VALUE
|
||||
f_trap(argc, argv)
|
||||
rb_f_trap(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -523,12 +524,12 @@ f_trap(argc, argv)
|
|||
|
||||
rb_secure(2);
|
||||
if (argc == 0 || argc > 2) {
|
||||
ArgError("wrong # of arguments -- trap(sig, cmd)/trap(sig){...}");
|
||||
rb_raise(rb_eArgError, "wrong # of arguments -- trap(sig, cmd)/trap(sig){...}");
|
||||
}
|
||||
|
||||
arg.sig = argv[0];
|
||||
if (argc == 1) {
|
||||
arg.cmd = f_lambda();
|
||||
arg.cmd = rb_f_lambda();
|
||||
}
|
||||
else if (argc == 2) {
|
||||
arg.cmd = argv[1];
|
||||
|
@ -553,7 +554,7 @@ void
|
|||
Init_signal()
|
||||
{
|
||||
#ifndef MACOS_UNUSE_SIGNAL
|
||||
rb_define_global_function("trap", f_trap, -1);
|
||||
rb_define_global_function("trap", rb_f_trap, -1);
|
||||
#ifdef POSIX_SIGNAL
|
||||
posix_signal(SIGINT, sighandle);
|
||||
#else
|
||||
|
|
44
sprintf.c
44
sprintf.c
|
@ -100,7 +100,7 @@ remove_sign_bits(str, base)
|
|||
return str;
|
||||
}
|
||||
|
||||
double big2dbl _((VALUE));
|
||||
double rb_big2dbl _((VALUE));
|
||||
|
||||
#define FNONE 0
|
||||
#define FSHARP 1
|
||||
|
@ -125,10 +125,10 @@ double big2dbl _((VALUE));
|
|||
}
|
||||
|
||||
#define GETARG() \
|
||||
((argc == 0)?(ArgError("too few argument."),0):(argc--,((argv++)[0])))
|
||||
((argc == 0)?(rb_raise(rb_eArgError, "too few argument."),0):(argc--,((argv++)[0])))
|
||||
|
||||
VALUE
|
||||
f_sprintf(argc, argv)
|
||||
rb_f_sprintf(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -165,9 +165,9 @@ f_sprintf(argc, argv)
|
|||
switch (*p) {
|
||||
default:
|
||||
if (ISPRINT(*p))
|
||||
ArgError("malformed format string - %%%c", *p);
|
||||
rb_raise(rb_eArgError, "malformed format string - %%%c", *p);
|
||||
else
|
||||
ArgError("malformed format string");
|
||||
rb_raise(rb_eArgError, "malformed format string");
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
|
@ -203,13 +203,13 @@ f_sprintf(argc, argv)
|
|||
width = 10 * width + (*p - '0');
|
||||
}
|
||||
if (p >= end) {
|
||||
ArgError("malformed format string - %%[0-9]");
|
||||
rb_raise(rb_eArgError, "malformed format string - %%[0-9]");
|
||||
}
|
||||
goto retry;
|
||||
|
||||
case '*':
|
||||
if (flags & FWIDTH) {
|
||||
ArgError("width given twice");
|
||||
rb_raise(rb_eArgError, "width given twice");
|
||||
}
|
||||
|
||||
flags |= FWIDTH;
|
||||
|
@ -224,7 +224,7 @@ f_sprintf(argc, argv)
|
|||
|
||||
case '.':
|
||||
if (flags & FPREC) {
|
||||
ArgError("precision given twice");
|
||||
rb_raise(rb_eArgError, "precision given twice");
|
||||
}
|
||||
|
||||
prec = 0;
|
||||
|
@ -242,7 +242,7 @@ f_sprintf(argc, argv)
|
|||
prec = 10 * prec + (*p - '0');
|
||||
}
|
||||
if (p >= end) {
|
||||
ArgError("malformed format string - %%.[0-9]");
|
||||
rb_raise(rb_eArgError, "malformed format string - %%.[0-9]");
|
||||
}
|
||||
if (prec > 0)
|
||||
flags |= FPREC;
|
||||
|
@ -275,7 +275,7 @@ f_sprintf(argc, argv)
|
|||
VALUE arg = GETARG();
|
||||
int len;
|
||||
|
||||
str = obj_as_string(arg);
|
||||
str = rb_obj_as_string(arg);
|
||||
len = RSTRING(str)->len;
|
||||
if (flags&FPREC) {
|
||||
if (prec < len) {
|
||||
|
@ -356,12 +356,12 @@ f_sprintf(argc, argv)
|
|||
v = FIX2LONG(val);
|
||||
break;
|
||||
case T_FLOAT:
|
||||
val = dbl2big(RFLOAT(val)->value);
|
||||
val = rb_dbl2big(RFLOAT(val)->value);
|
||||
if (FIXNUM_P(val)) goto bin_retry;
|
||||
bignum = 1;
|
||||
break;
|
||||
case T_STRING:
|
||||
val = str2inum(RSTRING(val)->ptr, 10);
|
||||
val = rb_str2inum(RSTRING(val)->ptr, 10);
|
||||
goto bin_retry;
|
||||
case T_BIGNUM:
|
||||
bignum = 1;
|
||||
|
@ -377,7 +377,7 @@ f_sprintf(argc, argv)
|
|||
else if (*p == 'b') base = 2;
|
||||
if (!bignum) {
|
||||
if (base == 2) {
|
||||
val = int2big(v);
|
||||
val = rb_int2big(v);
|
||||
goto bin_retry;
|
||||
}
|
||||
if (sign) {
|
||||
|
@ -429,7 +429,7 @@ f_sprintf(argc, argv)
|
|||
}
|
||||
|
||||
if (sign) {
|
||||
val = big2str(val, base);
|
||||
val = rb_big2str(val, base);
|
||||
s = RSTRING(val)->ptr;
|
||||
if (s[0] == '-') {
|
||||
s++;
|
||||
|
@ -447,14 +447,14 @@ f_sprintf(argc, argv)
|
|||
goto format_integer;
|
||||
}
|
||||
if (!RBIGNUM(val)->sign) {
|
||||
val = big_clone(val);
|
||||
big_2comp(val);
|
||||
val = rb_big_clone(val);
|
||||
rb_big_2comp(val);
|
||||
}
|
||||
val = big2str(val, base);
|
||||
val = rb_big2str(val, base);
|
||||
s = RSTRING(val)->ptr;
|
||||
if (*s == '-') {
|
||||
remove_sign_bits(++s, base);
|
||||
val = str_new(0, 3+strlen(s));
|
||||
val = rb_str_new(0, 3+strlen(s));
|
||||
t = RSTRING(val)->ptr;
|
||||
strcpy(t, "..");
|
||||
t += 2;
|
||||
|
@ -563,7 +563,7 @@ f_sprintf(argc, argv)
|
|||
fval = RFLOAT(val)->value;
|
||||
break;
|
||||
case T_BIGNUM:
|
||||
fval = big2dbl(val);
|
||||
fval = rb_big2dbl(val);
|
||||
break;
|
||||
case T_STRING:
|
||||
fval = atof(RSTRING(val)->ptr);
|
||||
|
@ -585,10 +585,10 @@ f_sprintf(argc, argv)
|
|||
}
|
||||
|
||||
sprint_exit:
|
||||
if (RTEST(verbose) && argc > 1) {
|
||||
ArgError("too many argument for format string");
|
||||
if (RTEST(rb_verbose) && argc > 1) {
|
||||
rb_raise(rb_eArgError, "too many argument for format string");
|
||||
}
|
||||
result = str_new(buf, blen);
|
||||
result = rb_str_new(buf, blen);
|
||||
free(buf);
|
||||
|
||||
return result;
|
||||
|
|
14
st.c
14
st.c
|
@ -84,12 +84,26 @@ st_init_numtable()
|
|||
return st_init_table(&type_numhash);
|
||||
}
|
||||
|
||||
st_table*
|
||||
st_init_numtable_with_size(size)
|
||||
int size;
|
||||
{
|
||||
return st_init_table_with_size(&type_numhash, size);
|
||||
}
|
||||
|
||||
st_table*
|
||||
st_init_strtable()
|
||||
{
|
||||
return st_init_table(&type_strhash);
|
||||
}
|
||||
|
||||
st_table*
|
||||
st_init_strtable_with_size(size)
|
||||
int size;
|
||||
{
|
||||
return st_init_table_with_size(&type_strhash, size);
|
||||
}
|
||||
|
||||
void
|
||||
st_free_table(table)
|
||||
st_table *table;
|
||||
|
|
2
st.h
2
st.h
|
@ -35,7 +35,9 @@ enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE};
|
|||
st_table *st_init_table();
|
||||
st_table *st_init_table_with_size();
|
||||
st_table *st_init_numtable();
|
||||
st_table *st_init_numtable_with_size();
|
||||
st_table *st_init_strtable();
|
||||
st_table *st_init_strtable_with_size();
|
||||
int st_delete(), st_delete_safe(), st_insert();
|
||||
int st_lookup(), st_find_or_add();
|
||||
void st_foreach(), st_add_direct(), st_free_table();
|
||||
|
|
250
struct.c
250
struct.c
|
@ -14,7 +14,7 @@
|
|||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
VALUE cStruct;
|
||||
VALUE rb_cStruct;
|
||||
|
||||
static VALUE
|
||||
class_of(obj)
|
||||
|
@ -27,7 +27,7 @@ class_of(obj)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
struct_s_members(obj)
|
||||
rb_struct_s_members(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
VALUE member, ary;
|
||||
|
@ -35,12 +35,12 @@ struct_s_members(obj)
|
|||
|
||||
member = rb_iv_get(obj, "__member__");
|
||||
if (NIL_P(member)) {
|
||||
Bug("non-initialized struct");
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
ary = ary_new2(RARRAY(member)->len);
|
||||
ary = rb_ary_new2(RARRAY(member)->len);
|
||||
p = RARRAY(member)->ptr; pend = p + RARRAY(member)->len;
|
||||
while (p < pend) {
|
||||
ary_push(ary, str_new2(rb_id2name(FIX2INT(*p))));
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(FIX2INT(*p))));
|
||||
p++;
|
||||
}
|
||||
|
||||
|
@ -48,14 +48,14 @@ struct_s_members(obj)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
struct_members(obj)
|
||||
rb_struct_members(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
return struct_s_members(class_of(obj));
|
||||
return rb_struct_s_members(class_of(obj));
|
||||
}
|
||||
|
||||
VALUE
|
||||
struct_getmember(obj, id)
|
||||
rb_struct_getmember(obj, id)
|
||||
VALUE obj;
|
||||
ID id;
|
||||
{
|
||||
|
@ -64,7 +64,7 @@ struct_getmember(obj, id)
|
|||
|
||||
member = rb_iv_get(class_of(obj), "__member__");
|
||||
if (NIL_P(member)) {
|
||||
Bug("non-initialized struct");
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
slot = INT2FIX(id);
|
||||
for (i=0; i<RARRAY(member)->len; i++) {
|
||||
|
@ -72,43 +72,43 @@ struct_getmember(obj, id)
|
|||
return RSTRUCT(obj)->ptr[i];
|
||||
}
|
||||
}
|
||||
NameError("%s is not struct member", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "%s is not struct member", rb_id2name(id));
|
||||
/* not reached */
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_ref(obj)
|
||||
rb_struct_ref(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
return struct_getmember(obj, rb_frame_last_func());
|
||||
return rb_struct_getmember(obj, rb_frame_last_func());
|
||||
}
|
||||
|
||||
static VALUE struct_ref0(obj) VALUE obj; {return RSTRUCT(obj)->ptr[0];}
|
||||
static VALUE struct_ref1(obj) VALUE obj; {return RSTRUCT(obj)->ptr[1];}
|
||||
static VALUE struct_ref2(obj) VALUE obj; {return RSTRUCT(obj)->ptr[2];}
|
||||
static VALUE struct_ref3(obj) VALUE obj; {return RSTRUCT(obj)->ptr[3];}
|
||||
static VALUE struct_ref4(obj) VALUE obj; {return RSTRUCT(obj)->ptr[4];}
|
||||
static VALUE struct_ref5(obj) VALUE obj; {return RSTRUCT(obj)->ptr[5];}
|
||||
static VALUE struct_ref6(obj) VALUE obj; {return RSTRUCT(obj)->ptr[6];}
|
||||
static VALUE struct_ref7(obj) VALUE obj; {return RSTRUCT(obj)->ptr[7];}
|
||||
static VALUE struct_ref8(obj) VALUE obj; {return RSTRUCT(obj)->ptr[8];}
|
||||
static VALUE struct_ref9(obj) VALUE obj; {return RSTRUCT(obj)->ptr[9];}
|
||||
static VALUE rb_struct_ref0(obj) VALUE obj; {return RSTRUCT(obj)->ptr[0];}
|
||||
static VALUE rb_struct_ref1(obj) VALUE obj; {return RSTRUCT(obj)->ptr[1];}
|
||||
static VALUE rb_struct_ref2(obj) VALUE obj; {return RSTRUCT(obj)->ptr[2];}
|
||||
static VALUE rb_struct_ref3(obj) VALUE obj; {return RSTRUCT(obj)->ptr[3];}
|
||||
static VALUE rb_struct_ref4(obj) VALUE obj; {return RSTRUCT(obj)->ptr[4];}
|
||||
static VALUE rb_struct_ref5(obj) VALUE obj; {return RSTRUCT(obj)->ptr[5];}
|
||||
static VALUE rb_struct_ref6(obj) VALUE obj; {return RSTRUCT(obj)->ptr[6];}
|
||||
static VALUE rb_struct_ref7(obj) VALUE obj; {return RSTRUCT(obj)->ptr[7];}
|
||||
static VALUE rb_struct_ref8(obj) VALUE obj; {return RSTRUCT(obj)->ptr[8];}
|
||||
static VALUE rb_struct_ref9(obj) VALUE obj; {return RSTRUCT(obj)->ptr[9];}
|
||||
|
||||
VALUE (*ref_func[10])() = {
|
||||
struct_ref0,
|
||||
struct_ref1,
|
||||
struct_ref2,
|
||||
struct_ref3,
|
||||
struct_ref4,
|
||||
struct_ref5,
|
||||
struct_ref6,
|
||||
struct_ref7,
|
||||
struct_ref8,
|
||||
struct_ref9,
|
||||
rb_struct_ref0,
|
||||
rb_struct_ref1,
|
||||
rb_struct_ref2,
|
||||
rb_struct_ref3,
|
||||
rb_struct_ref4,
|
||||
rb_struct_ref5,
|
||||
rb_struct_ref6,
|
||||
rb_struct_ref7,
|
||||
rb_struct_ref8,
|
||||
rb_struct_ref9,
|
||||
};
|
||||
|
||||
static VALUE
|
||||
struct_set(obj, val)
|
||||
rb_struct_set(obj, val)
|
||||
VALUE obj, val;
|
||||
{
|
||||
VALUE member, slot;
|
||||
|
@ -116,15 +116,15 @@ struct_set(obj, val)
|
|||
|
||||
member = rb_iv_get(class_of(obj), "__member__");
|
||||
if (NIL_P(member)) {
|
||||
Fatal("non-initialized struct");
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
for (i=0; i<RARRAY(member)->len; i++) {
|
||||
slot = RARRAY(member)->ptr[i];
|
||||
if (id_attrset(FIX2INT(slot)) == rb_frame_last_func()) {
|
||||
if (rb_id_attrset(FIX2INT(slot)) == rb_frame_last_func()) {
|
||||
return RSTRUCT(obj)->ptr[i] = val;
|
||||
}
|
||||
}
|
||||
NameError("not struct member");
|
||||
rb_raise(rb_eNameError, "not struct member");
|
||||
/* not reached */
|
||||
}
|
||||
|
||||
|
@ -137,31 +137,31 @@ make_struct(name, member, klass)
|
|||
int i;
|
||||
|
||||
if (NIL_P(name)) {
|
||||
nstr = class_new(klass);
|
||||
nstr = rb_class_new(klass);
|
||||
}
|
||||
else {
|
||||
char *cname = STR2CSTR(name);
|
||||
id = rb_intern(cname);
|
||||
if (!rb_is_const_id(id)) {
|
||||
NameError("identifier %s needs to be constant", cname);
|
||||
rb_raise(rb_eNameError, "identifier %s needs to be constant", cname);
|
||||
}
|
||||
nstr = rb_define_class_under(klass, cname, klass);
|
||||
}
|
||||
rb_iv_set(nstr, "__size__", INT2FIX(RARRAY(member)->len));
|
||||
rb_iv_set(nstr, "__member__", member);
|
||||
|
||||
rb_define_singleton_method(nstr, "new", struct_alloc, -2);
|
||||
rb_define_singleton_method(nstr, "[]", struct_alloc, -2);
|
||||
rb_define_singleton_method(nstr, "members", struct_s_members, 0);
|
||||
rb_define_singleton_method(nstr, "new", rb_struct_alloc, -2);
|
||||
rb_define_singleton_method(nstr, "[]", rb_struct_alloc, -2);
|
||||
rb_define_singleton_method(nstr, "members", rb_struct_s_members, 0);
|
||||
for (i=0; i< RARRAY(member)->len; i++) {
|
||||
ID id = FIX2INT(RARRAY(member)->ptr[i]);
|
||||
if (i<10) {
|
||||
rb_define_method_id(nstr, id, ref_func[i], 0);
|
||||
}
|
||||
else {
|
||||
rb_define_method_id(nstr, id, struct_ref, 0);
|
||||
rb_define_method_id(nstr, id, rb_struct_ref, 0);
|
||||
}
|
||||
rb_define_method_id(nstr, id_attrset(id), struct_set, 1);
|
||||
rb_define_method_id(nstr, rb_id_attrset(id), rb_struct_set, 1);
|
||||
}
|
||||
|
||||
return nstr;
|
||||
|
@ -177,9 +177,9 @@ make_struct(name, member, klass)
|
|||
|
||||
VALUE
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
struct_define(char *name, ...)
|
||||
rb_struct_define(char *name, ...)
|
||||
#else
|
||||
struct_define(name, va_alist)
|
||||
rb_struct_define(name, va_alist)
|
||||
char *name;
|
||||
va_dcl
|
||||
#endif
|
||||
|
@ -188,21 +188,21 @@ struct_define(name, va_alist)
|
|||
VALUE nm, ary;
|
||||
char *mem;
|
||||
|
||||
nm = str_new2(name);
|
||||
ary = ary_new();
|
||||
nm = rb_str_new2(name);
|
||||
ary = rb_ary_new();
|
||||
|
||||
va_init_list(ar, name);
|
||||
while (mem = va_arg(ar, char*)) {
|
||||
ID slot = rb_intern(mem);
|
||||
ary_push(ary, INT2FIX(slot));
|
||||
rb_ary_push(ary, INT2FIX(slot));
|
||||
}
|
||||
va_end(ar);
|
||||
|
||||
return make_struct(nm, ary, cStruct);
|
||||
return make_struct(nm, ary, rb_cStruct);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_s_def(argc, argv, klass)
|
||||
rb_struct_s_def(argc, argv, klass)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -216,13 +216,13 @@ struct_s_def(argc, argv, klass)
|
|||
RARRAY(rest)->ptr[i] = INT2FIX(id);
|
||||
}
|
||||
st = make_struct(name, rest, klass);
|
||||
obj_call_init(st);
|
||||
rb_obj_call_init(st);
|
||||
|
||||
return st;
|
||||
}
|
||||
|
||||
VALUE
|
||||
struct_alloc(klass, values)
|
||||
rb_struct_alloc(klass, values)
|
||||
VALUE klass, values;
|
||||
{
|
||||
VALUE size;
|
||||
|
@ -230,8 +230,8 @@ struct_alloc(klass, values)
|
|||
|
||||
size = rb_iv_get(klass, "__size__");
|
||||
n = FIX2INT(size);
|
||||
if (n < RARRAY(values)->len) {
|
||||
ArgError("struct size differs");
|
||||
if (n != RARRAY(values)->len) {
|
||||
rb_raise(rb_eArgError, "struct size differs");
|
||||
}
|
||||
else {
|
||||
NEWOBJ(st, struct RStruct);
|
||||
|
@ -240,8 +240,7 @@ struct_alloc(klass, values)
|
|||
st->ptr = ALLOC_N(VALUE, n);
|
||||
st->len = n;
|
||||
MEMCPY(st->ptr, RARRAY(values)->ptr, VALUE, RARRAY(values)->len);
|
||||
memclear(st->ptr+RARRAY(values)->len, n-RARRAY(values)->len);
|
||||
obj_call_init((VALUE)st);
|
||||
rb_obj_call_init((VALUE)st);
|
||||
|
||||
return (VALUE)st;
|
||||
}
|
||||
|
@ -250,32 +249,32 @@ struct_alloc(klass, values)
|
|||
|
||||
VALUE
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
struct_new(VALUE klass, ...)
|
||||
rb_struct_new(VALUE klass, ...)
|
||||
#else
|
||||
struct_new(klass, va_alist)
|
||||
rb_struct_new(klass, va_alist)
|
||||
VALUE klass;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
VALUE val, mem;
|
||||
int size;
|
||||
int size, i;
|
||||
va_list args;
|
||||
|
||||
val = rb_iv_get(klass, "__size__");
|
||||
size = FIX2INT(val);
|
||||
mem = ary_new();
|
||||
mem = rb_ary_new2(size);
|
||||
va_init_list(args, klass);
|
||||
while (size--) {
|
||||
for (i=0; i<size; i++) {
|
||||
val = va_arg(args, VALUE);
|
||||
ary_push(mem, val);
|
||||
rb_ary_store(mem, i, val);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
return struct_alloc(klass, mem);
|
||||
return rb_struct_alloc(klass, mem);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_each(s)
|
||||
rb_struct_each(s)
|
||||
VALUE s;
|
||||
{
|
||||
int i;
|
||||
|
@ -287,19 +286,14 @@ struct_each(s)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
struct_to_s(s)
|
||||
rb_struct_to_s(s)
|
||||
VALUE s;
|
||||
{
|
||||
char *name, *buf;
|
||||
|
||||
name = rb_class2name(CLASS_OF(s));
|
||||
buf = ALLOCA_N(char, strlen(name)+1);
|
||||
sprintf(buf, "%s", name);
|
||||
return str_new2(buf);
|
||||
return rb_str_new2(rb_class2name(CLASS_OF(s)));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_inspect(s)
|
||||
rb_struct_inspect(s)
|
||||
VALUE s;
|
||||
{
|
||||
char *name = rb_class2name(CLASS_OF(s));
|
||||
|
@ -308,40 +302,40 @@ struct_inspect(s)
|
|||
|
||||
member = rb_iv_get(CLASS_OF(s), "__member__");
|
||||
if (NIL_P(member)) {
|
||||
Fatal("non-initialized struct");
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
|
||||
str = str_new2("#<");
|
||||
str_cat(str, name, strlen(name));
|
||||
str_cat(str, " ", 1);
|
||||
str = rb_str_new2("#<");
|
||||
rb_str_cat(str, name, strlen(name));
|
||||
rb_str_cat(str, " ", 1);
|
||||
for (i=0; i<RSTRUCT(s)->len; i++) {
|
||||
VALUE str2, slot;
|
||||
char *p;
|
||||
|
||||
if (i > 0) {
|
||||
str_cat(str, ", ", 2);
|
||||
rb_str_cat(str, ", ", 2);
|
||||
}
|
||||
slot = RARRAY(member)->ptr[i];
|
||||
p = rb_id2name(FIX2INT(slot));
|
||||
str_cat(str, p, strlen(p));
|
||||
str_cat(str, "=", 1);
|
||||
rb_str_cat(str, p, strlen(p));
|
||||
rb_str_cat(str, "=", 1);
|
||||
str2 = rb_inspect(RSTRUCT(s)->ptr[i]);
|
||||
str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len);
|
||||
rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len);
|
||||
}
|
||||
str_cat(str, ">", 1);
|
||||
rb_str_cat(str, ">", 1);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_to_a(s)
|
||||
rb_struct_to_a(s)
|
||||
VALUE s;
|
||||
{
|
||||
return ary_new4(RSTRUCT(s)->len, RSTRUCT(s)->ptr);
|
||||
return rb_ary_new4(RSTRUCT(s)->len, RSTRUCT(s)->ptr);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_clone(s)
|
||||
rb_struct_clone(s)
|
||||
VALUE s;
|
||||
{
|
||||
NEWOBJ(st, struct RStruct);
|
||||
|
@ -355,7 +349,7 @@ struct_clone(s)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
struct_aref_id(s, id)
|
||||
rb_struct_aref_id(s, id)
|
||||
VALUE s;
|
||||
ID id;
|
||||
{
|
||||
|
@ -364,7 +358,7 @@ struct_aref_id(s, id)
|
|||
|
||||
member = rb_iv_get(CLASS_OF(s), "__member__");
|
||||
if (NIL_P(member)) {
|
||||
Bug("non-initialized struct");
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
|
||||
len = RARRAY(member)->len;
|
||||
|
@ -373,30 +367,32 @@ struct_aref_id(s, id)
|
|||
return RSTRUCT(s)->ptr[i];
|
||||
}
|
||||
}
|
||||
NameError("no member '%s' in struct", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "no member '%s' in struct", rb_id2name(id));
|
||||
}
|
||||
|
||||
VALUE
|
||||
struct_aref(s, idx)
|
||||
rb_struct_aref(s, idx)
|
||||
VALUE s, idx;
|
||||
{
|
||||
int i;
|
||||
|
||||
if (TYPE(idx) == T_STRING) {
|
||||
return struct_aref_id(s, rb_to_id(idx));
|
||||
return rb_struct_aref_id(s, rb_to_id(idx));
|
||||
}
|
||||
|
||||
i = NUM2INT(idx);
|
||||
if (i < 0) i = RSTRUCT(s)->len + i;
|
||||
if (i < 0)
|
||||
IndexError("offset %d too small for struct(size:%d)", i, RSTRUCT(s)->len);
|
||||
rb_raise(rb_eIndexError, "offset %d too small for struct(size:%d)",
|
||||
i, RSTRUCT(s)->len);
|
||||
if (RSTRUCT(s)->len <= i)
|
||||
IndexError("offset %d too large for struct(size:%d)", i, RSTRUCT(s)->len);
|
||||
rb_raise(rb_eIndexError, "offset %d too large for struct(size:%d)",
|
||||
i, RSTRUCT(s)->len);
|
||||
return RSTRUCT(s)->ptr[i];
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_aset_id(s, id, val)
|
||||
rb_struct_aset_id(s, id, val)
|
||||
VALUE s, val;
|
||||
ID id;
|
||||
{
|
||||
|
@ -405,7 +401,7 @@ struct_aset_id(s, id, val)
|
|||
|
||||
member = rb_iv_get(CLASS_OF(s), "__member__");
|
||||
if (NIL_P(member)) {
|
||||
Bug("non-initialized struct");
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
|
||||
len = RARRAY(member)->len;
|
||||
|
@ -415,66 +411,68 @@ struct_aset_id(s, id, val)
|
|||
return val;
|
||||
}
|
||||
}
|
||||
NameError("no member '%s' in struct", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "no member '%s' in struct", rb_id2name(id));
|
||||
}
|
||||
|
||||
VALUE
|
||||
struct_aset(s, idx, val)
|
||||
rb_struct_aset(s, idx, val)
|
||||
VALUE s, idx, val;
|
||||
{
|
||||
int i;
|
||||
|
||||
if (TYPE(idx) == T_STRING) {
|
||||
return struct_aset_id(s, rb_to_id(idx), val);
|
||||
return rb_struct_aset_id(s, rb_to_id(idx), val);
|
||||
}
|
||||
|
||||
i = NUM2INT(idx);
|
||||
if (i < 0) i = RSTRUCT(s)->len + i;
|
||||
if (i < 0)
|
||||
IndexError("offset %d too small for struct(size:%d)", i, RSTRUCT(s)->len);
|
||||
rb_raise(rb_eIndexError, "offset %d too small for struct(size:%d)",
|
||||
i, RSTRUCT(s)->len);
|
||||
if (RSTRUCT(s)->len <= i)
|
||||
IndexError("offset %d too large for struct(size:%d)", i, RSTRUCT(s)->len);
|
||||
rb_raise(rb_eIndexError, "offset %d too large for struct(size:%d)",
|
||||
i, RSTRUCT(s)->len);
|
||||
return RSTRUCT(s)->ptr[i] = val;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_equal(s, s2)
|
||||
rb_struct_equal(s, s2)
|
||||
VALUE s, s2;
|
||||
{
|
||||
int i;
|
||||
|
||||
if (TYPE(s2) != T_STRUCT) return FALSE;
|
||||
if (CLASS_OF(s) != CLASS_OF(s2)) return FALSE;
|
||||
if (TYPE(s2) != T_STRUCT) return Qfalse;
|
||||
if (CLASS_OF(s) != CLASS_OF(s2)) return Qfalse;
|
||||
if (RSTRUCT(s)->len != RSTRUCT(s2)->len) {
|
||||
Bug("inconsistent struct"); /* should never happen */
|
||||
rb_bug("inconsistent struct"); /* should never happen */
|
||||
}
|
||||
|
||||
for (i=0; i<RSTRUCT(s)->len; i++) {
|
||||
if (!rb_equal(RSTRUCT(s)->ptr[i], RSTRUCT(s2)->ptr[i])) return FALSE;
|
||||
if (!rb_equal(RSTRUCT(s)->ptr[i], RSTRUCT(s2)->ptr[i])) return Qfalse;
|
||||
}
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_eql(s, s2)
|
||||
rb_struct_eql(s, s2)
|
||||
VALUE s, s2;
|
||||
{
|
||||
int i;
|
||||
|
||||
if (TYPE(s2) != T_STRUCT) return FALSE;
|
||||
if (CLASS_OF(s) != CLASS_OF(s2)) return FALSE;
|
||||
if (TYPE(s2) != T_STRUCT) return Qfalse;
|
||||
if (CLASS_OF(s) != CLASS_OF(s2)) return Qfalse;
|
||||
if (RSTRUCT(s)->len != RSTRUCT(s2)->len) {
|
||||
Bug("inconsistent struct"); /* should never happen */
|
||||
rb_bug("inconsistent struct"); /* should never happen */
|
||||
}
|
||||
|
||||
for (i=0; i<RSTRUCT(s)->len; i++) {
|
||||
if (!rb_eql(RSTRUCT(s)->ptr[i], RSTRUCT(s2)->ptr[i])) return FALSE;
|
||||
if (!rb_eql(RSTRUCT(s)->ptr[i], RSTRUCT(s2)->ptr[i])) return Qfalse;
|
||||
}
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
struct_hash(s)
|
||||
rb_struct_hash(s)
|
||||
VALUE s;
|
||||
{
|
||||
int i, h;
|
||||
|
@ -489,25 +487,25 @@ struct_hash(s)
|
|||
void
|
||||
Init_Struct()
|
||||
{
|
||||
cStruct = rb_define_class("Struct", cObject);
|
||||
rb_include_module(cStruct, mEnumerable);
|
||||
rb_cStruct = rb_define_class("Struct", rb_cObject);
|
||||
rb_include_module(rb_cStruct, rb_mEnumerable);
|
||||
|
||||
rb_define_singleton_method(cStruct, "new", struct_s_def, -1);
|
||||
rb_define_singleton_method(rb_cStruct, "new", rb_struct_s_def, -1);
|
||||
|
||||
rb_define_method(cStruct, "clone", struct_clone, 0);
|
||||
rb_define_method(rb_cStruct, "clone", rb_struct_clone, 0);
|
||||
|
||||
rb_define_method(cStruct, "==", struct_equal, 1);
|
||||
rb_define_method(cStruct, "eql?", struct_eql, 1);
|
||||
rb_define_method(cStruct, "hash", struct_hash, 0);
|
||||
rb_define_method(rb_cStruct, "==", rb_struct_equal, 1);
|
||||
rb_define_method(rb_cStruct, "eql?", rb_struct_eql, 1);
|
||||
rb_define_method(rb_cStruct, "hash", rb_struct_hash, 0);
|
||||
|
||||
rb_define_method(cStruct, "to_s", struct_to_s, 0);
|
||||
rb_define_method(cStruct, "inspect", struct_inspect, 0);
|
||||
rb_define_method(cStruct, "to_a", struct_to_a, 0);
|
||||
rb_define_method(cStruct, "values", struct_to_a, 0);
|
||||
rb_define_method(rb_cStruct, "to_s", rb_struct_to_s, 0);
|
||||
rb_define_method(rb_cStruct, "inspect", rb_struct_inspect, 0);
|
||||
rb_define_method(rb_cStruct, "to_a", rb_struct_to_a, 0);
|
||||
rb_define_method(rb_cStruct, "values", rb_struct_to_a, 0);
|
||||
|
||||
rb_define_method(cStruct, "each", struct_each, 0);
|
||||
rb_define_method(cStruct, "[]", struct_aref, 1);
|
||||
rb_define_method(cStruct, "[]=", struct_aset, 2);
|
||||
rb_define_method(rb_cStruct, "each", rb_struct_each, 0);
|
||||
rb_define_method(rb_cStruct, "[]", rb_struct_aref, 1);
|
||||
rb_define_method(rb_cStruct, "[]=", rb_struct_aset, 2);
|
||||
|
||||
rb_define_method(cStruct, "members", struct_members, 0);
|
||||
rb_define_method(rb_cStruct, "members", rb_struct_members, 0);
|
||||
}
|
||||
|
|
174
time.c
174
time.c
|
@ -35,7 +35,7 @@ struct timeval {
|
|||
#endif
|
||||
#include <math.h>
|
||||
|
||||
static VALUE cTime;
|
||||
VALUE rb_cTime;
|
||||
#if defined(HAVE_TIMES) || defined(NT)
|
||||
static VALUE S_Tms;
|
||||
#endif
|
||||
|
@ -66,7 +66,7 @@ time_s_now(klass)
|
|||
if (gettimeofday(&(tobj->tv), 0) == -1) {
|
||||
rb_sys_fail("gettimeofday");
|
||||
}
|
||||
obj_call_init(obj);
|
||||
rb_obj_call_init(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
@ -88,14 +88,14 @@ time_new_internal(klass, sec, usec)
|
|||
}
|
||||
|
||||
VALUE
|
||||
time_new(sec, usec)
|
||||
rb_time_new(sec, usec)
|
||||
int sec, usec;
|
||||
{
|
||||
return time_new_internal(cTime, sec, usec);
|
||||
return time_new_internal(rb_cTime, sec, usec);
|
||||
}
|
||||
|
||||
struct timeval
|
||||
time_timeval(time)
|
||||
rb_time_timeval(time)
|
||||
VALUE time;
|
||||
{
|
||||
struct time_object *tobj;
|
||||
|
@ -105,7 +105,7 @@ time_timeval(time)
|
|||
case T_FIXNUM:
|
||||
t.tv_sec = FIX2UINT(time);
|
||||
if (t.tv_sec < 0)
|
||||
ArgError("time must be positive");
|
||||
rb_raise(rb_eArgError, "time must be positive");
|
||||
t.tv_usec = 0;
|
||||
break;
|
||||
|
||||
|
@ -114,7 +114,7 @@ time_timeval(time)
|
|||
double seconds, microseconds;
|
||||
|
||||
if (RFLOAT(time)->value < 0.0)
|
||||
ArgError("time must be positive");
|
||||
rb_raise(rb_eArgError, "time must be positive");
|
||||
seconds = floor(RFLOAT(time)->value);
|
||||
microseconds = (RFLOAT(time)->value - seconds) * 1000000.0;
|
||||
t.tv_sec = seconds;
|
||||
|
@ -128,8 +128,8 @@ time_timeval(time)
|
|||
break;
|
||||
|
||||
default:
|
||||
if (!obj_is_kind_of(time, cTime)) {
|
||||
TypeError("Can't convert %s into Time",
|
||||
if (!rb_obj_is_kind_of(time, rb_cTime)) {
|
||||
rb_raise(rb_eTypeError, "Can't convert %s into Time",
|
||||
rb_class2name(CLASS_OF(time)));
|
||||
}
|
||||
GetTimeval(time, tobj);
|
||||
|
@ -145,7 +145,7 @@ time_s_at(klass, time)
|
|||
{
|
||||
struct timeval tv;
|
||||
|
||||
tv = time_timeval(time);
|
||||
tv = rb_time_timeval(time);
|
||||
return time_new_internal(klass, tv.tv_sec, tv.tv_usec);
|
||||
}
|
||||
|
||||
|
@ -159,7 +159,7 @@ obj2int(obj)
|
|||
VALUE obj;
|
||||
{
|
||||
if (TYPE(obj) == T_STRING) {
|
||||
obj = str2inum(RSTRING(obj)->ptr, 10);
|
||||
obj = rb_str2inum(RSTRING(obj)->ptr, 10);
|
||||
}
|
||||
|
||||
return NUM2INT(obj);
|
||||
|
@ -233,7 +233,7 @@ time_arg(argc, argv, args)
|
|||
|| args[3] < 0 || args[3] > 23
|
||||
|| args[4] < 0 || args[4] > 60
|
||||
|| args[5] < 0 || args[5] > 61)
|
||||
ArgError("argument out of range");
|
||||
rb_raise(rb_eArgError, "argument out of range");
|
||||
}
|
||||
|
||||
static VALUE time_gmtime _((VALUE));
|
||||
|
@ -264,7 +264,7 @@ time_gm_or_local(argc, argv, gm_or_local, klass)
|
|||
t = args[0];
|
||||
while (diff = t - (tm->tm_year)) {
|
||||
guess += diff * 364 * 24 * 3600;
|
||||
if (guess < 0) ArgError("too far future");
|
||||
if (guess < 0) rb_raise(rb_eArgError, "too far future");
|
||||
tm = (*fn)(&guess);
|
||||
if (!tm) goto error;
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ time_gm_or_local(argc, argv, gm_or_local, klass)
|
|||
return time_localtime(time);
|
||||
|
||||
error:
|
||||
ArgError("gmtime/localtime error");
|
||||
rb_raise(rb_eArgError, "gmtime/localtime error");
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -312,7 +312,7 @@ time_to_i(time)
|
|||
struct time_object *tobj;
|
||||
|
||||
GetTimeval(time, tobj);
|
||||
return int2inum(tobj->tv.tv_sec);
|
||||
return rb_int2inum(tobj->tv.tv_sec);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -322,7 +322,7 @@ time_to_f(time)
|
|||
struct time_object *tobj;
|
||||
|
||||
GetTimeval(time, tobj);
|
||||
return float_new((double)tobj->tv.tv_sec+(double)tobj->tv.tv_usec/1000000);
|
||||
return rb_float_new((double)tobj->tv.tv_sec+(double)tobj->tv.tv_usec/1000000);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -362,7 +362,7 @@ time_cmp(time1, time2)
|
|||
}
|
||||
}
|
||||
|
||||
if (obj_is_instance_of(time2, cTime)) {
|
||||
if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
||||
GetTimeval(time2, tobj2);
|
||||
if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) {
|
||||
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return INT2FIX(0);
|
||||
|
@ -385,13 +385,13 @@ time_eql(time1, time2)
|
|||
struct time_object *tobj1, *tobj2;
|
||||
|
||||
GetTimeval(time1, tobj1);
|
||||
if (obj_is_instance_of(time2, cTime)) {
|
||||
if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
||||
GetTimeval(time2, tobj2);
|
||||
if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) {
|
||||
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return TRUE;
|
||||
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return Qtrue;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -454,7 +454,7 @@ time_asctime(time)
|
|||
s = asctime(&(tobj->tm));
|
||||
if (s[24] == '\n') s[24] = '\0';
|
||||
|
||||
return str_new2(s);
|
||||
return rb_str_new2(s);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -478,7 +478,7 @@ time_to_s(time)
|
|||
{
|
||||
len = strftime(buf, 64, "%a %b %d %H:%M:%S %Z %Y", &(tobj->tm));
|
||||
}
|
||||
return str_new(buf, len);
|
||||
return rb_str_new(buf, len);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -494,7 +494,7 @@ time_plus(time1, time2)
|
|||
sec = tobj1->tv.tv_sec + nsec;
|
||||
usec = tobj1->tv.tv_usec + (RFLOAT(time2)->value - (double)nsec)*1e6;
|
||||
}
|
||||
else if (obj_is_instance_of(time2, cTime)) {
|
||||
else if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
||||
GetTimeval(time2, tobj2);
|
||||
sec = tobj1->tv.tv_sec + tobj2->tv.tv_sec;
|
||||
usec = tobj1->tv.tv_usec + tobj2->tv.tv_usec;
|
||||
|
@ -508,7 +508,7 @@ time_plus(time1, time2)
|
|||
sec++;
|
||||
usec -= 1000000;
|
||||
}
|
||||
return time_new(sec, usec);
|
||||
return rb_time_new(sec, usec);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -519,7 +519,7 @@ time_minus(time1, time2)
|
|||
int sec, usec;
|
||||
|
||||
GetTimeval(time1, tobj1);
|
||||
if (obj_is_instance_of(time2, cTime)) {
|
||||
if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
||||
double f;
|
||||
|
||||
GetTimeval(time2, tobj2);
|
||||
|
@ -527,7 +527,7 @@ time_minus(time1, time2)
|
|||
|
||||
f += (tobj1->tv.tv_usec - tobj2->tv.tv_usec)*1e-6;
|
||||
|
||||
return float_new(f);
|
||||
return rb_float_new(f);
|
||||
}
|
||||
else if (TYPE(time2) == T_FLOAT) {
|
||||
sec = tobj1->tv.tv_sec - (int)RFLOAT(time2)->value;
|
||||
|
@ -542,7 +542,7 @@ time_minus(time1, time2)
|
|||
sec--;
|
||||
usec += 1000000;
|
||||
}
|
||||
return time_new(sec, usec);
|
||||
return rb_time_new(sec, usec);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -607,7 +607,6 @@ time_mon(time)
|
|||
if (tobj->tm_got == 0) {
|
||||
time_localtime(time);
|
||||
}
|
||||
Warning("Time#month now start from 1 for January");
|
||||
return INT2FIX(tobj->tm.tm_mon+1);
|
||||
}
|
||||
|
||||
|
@ -621,7 +620,6 @@ time_year(time)
|
|||
if (tobj->tm_got == 0) {
|
||||
time_localtime(time);
|
||||
}
|
||||
Warning("Time#year now returns 19xx");
|
||||
return INT2FIX(tobj->tm.tm_year+1900);
|
||||
}
|
||||
|
||||
|
@ -661,8 +659,7 @@ time_isdst(time)
|
|||
if (tobj->tm_got == 0) {
|
||||
time_localtime(time);
|
||||
}
|
||||
Warning("Time#isdst now returns boolean value");
|
||||
return tobj->tm.tm_isdst?TRUE:FALSE;
|
||||
return tobj->tm.tm_isdst?Qtrue:Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -679,7 +676,7 @@ time_zone(time)
|
|||
}
|
||||
|
||||
len = strftime(buf, 10, "%Z", &(tobj->tm));
|
||||
return str_new(buf, len);
|
||||
return rb_str_new(buf, len);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -692,8 +689,7 @@ time_to_a(time)
|
|||
if (tobj->tm_got == 0) {
|
||||
time_localtime(time);
|
||||
}
|
||||
Warning("Time#to_a's return values are now changed");
|
||||
return ary_new3(10,
|
||||
return rb_ary_new3(10,
|
||||
INT2FIX(tobj->tm.tm_sec),
|
||||
INT2FIX(tobj->tm.tm_min),
|
||||
INT2FIX(tobj->tm.tm_hour),
|
||||
|
@ -702,7 +698,7 @@ time_to_a(time)
|
|||
INT2FIX(tobj->tm.tm_year+1900),
|
||||
INT2FIX(tobj->tm.tm_wday),
|
||||
INT2FIX(tobj->tm.tm_yday),
|
||||
tobj->tm.tm_isdst?TRUE:FALSE,
|
||||
tobj->tm.tm_isdst?Qtrue:Qfalse,
|
||||
time_zone(time));
|
||||
}
|
||||
|
||||
|
@ -728,7 +724,7 @@ rb_strftime(buf, format, time)
|
|||
return len;
|
||||
}
|
||||
|
||||
ArgError("bad strftime format or result too long");
|
||||
rb_raise(rb_eArgError, "bad strftime format or result too long");
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -751,17 +747,17 @@ time_strftime(time, format)
|
|||
/* Ruby string may contain \0's. */
|
||||
char *p = fmt, *pe = fmt + len;
|
||||
|
||||
str = str_new(0, 0);
|
||||
str = rb_str_new(0, 0);
|
||||
while (p < pe) {
|
||||
len = rb_strftime(&buf, p, &(tobj->tm));
|
||||
str_cat(str, buf, len);
|
||||
rb_str_cat(str, buf, len);
|
||||
p += strlen(p) + 1;
|
||||
if (len > SMALLBUF) free(buf);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
len = rb_strftime(&buf, RSTRING(format)->ptr, &(tobj->tm));
|
||||
str = str_new(buf, len);
|
||||
str = rb_str_new(buf, len);
|
||||
if (buf != buffer) free(buf);
|
||||
return str;
|
||||
}
|
||||
|
@ -777,11 +773,11 @@ time_s_times(obj)
|
|||
struct tms buf;
|
||||
|
||||
if (times(&buf) == -1) rb_sys_fail(0);
|
||||
return struct_new(S_Tms,
|
||||
float_new((double)buf.tms_utime / HZ),
|
||||
float_new((double)buf.tms_stime / HZ),
|
||||
float_new((double)buf.tms_cutime / HZ),
|
||||
float_new((double)buf.tms_cstime / HZ));
|
||||
return rb_struct_new(S_Tms,
|
||||
rb_float_new((double)buf.tms_utime / HZ),
|
||||
rb_float_new((double)buf.tms_stime / HZ),
|
||||
rb_float_new((double)buf.tms_cutime / HZ),
|
||||
rb_float_new((double)buf.tms_cstime / HZ));
|
||||
#else
|
||||
#ifdef NT
|
||||
FILETIME create, exit, kernel, user;
|
||||
|
@ -789,11 +785,11 @@ time_s_times(obj)
|
|||
|
||||
hProc = GetCurrentProcess();
|
||||
GetProcessTimes(hProc,&create, &exit, &kernel, &user);
|
||||
return struct_new(S_Tms,
|
||||
float_new((double)(kernel.dwHighDateTime*2e32+kernel.dwLowDateTime)/2e6),
|
||||
float_new((double)(user.dwHighDateTime*2e32+user.dwLowDateTime)/2e6),
|
||||
float_new((double)0),
|
||||
float_new((double)0));
|
||||
return rb_struct_new(S_Tms,
|
||||
rb_float_new((double)(kernel.dwHighDateTime*2e32+kernel.dwLowDateTime)/2e6),
|
||||
rb_float_new((double)(user.dwHighDateTime*2e32+user.dwLowDateTime)/2e6),
|
||||
rb_float_new((double)0),
|
||||
rb_float_new((double)0));
|
||||
#else
|
||||
rb_notimplement();
|
||||
#endif
|
||||
|
@ -803,55 +799,55 @@ time_s_times(obj)
|
|||
void
|
||||
Init_Time()
|
||||
{
|
||||
cTime = rb_define_class("Time", cObject);
|
||||
rb_include_module(cTime, mComparable);
|
||||
rb_cTime = rb_define_class("Time", rb_cObject);
|
||||
rb_include_module(rb_cTime, rb_mComparable);
|
||||
|
||||
rb_define_singleton_method(cTime, "now", time_s_now, 0);
|
||||
rb_define_singleton_method(cTime, "new", time_s_now, 0);
|
||||
rb_define_singleton_method(cTime, "at", time_s_at, 1);
|
||||
rb_define_singleton_method(cTime, "gm", time_s_timegm, -1);
|
||||
rb_define_singleton_method(cTime, "local", time_s_timelocal, -1);
|
||||
rb_define_singleton_method(cTime, "mktime", time_s_timelocal, -1);
|
||||
rb_define_singleton_method(rb_cTime, "now", time_s_now, 0);
|
||||
rb_define_singleton_method(rb_cTime, "new", time_s_now, 0);
|
||||
rb_define_singleton_method(rb_cTime, "at", time_s_at, 1);
|
||||
rb_define_singleton_method(rb_cTime, "gm", time_s_timegm, -1);
|
||||
rb_define_singleton_method(rb_cTime, "local", time_s_timelocal, -1);
|
||||
rb_define_singleton_method(rb_cTime, "mktime", time_s_timelocal, -1);
|
||||
|
||||
rb_define_singleton_method(cTime, "times", time_s_times, 0);
|
||||
rb_define_singleton_method(rb_cTime, "times", time_s_times, 0);
|
||||
|
||||
rb_define_method(cTime, "to_i", time_to_i, 0);
|
||||
rb_define_method(cTime, "to_f", time_to_f, 0);
|
||||
rb_define_method(cTime, "<=>", time_cmp, 1);
|
||||
rb_define_method(cTime, "eql?", time_eql, 0);
|
||||
rb_define_method(cTime, "hash", time_hash, 0);
|
||||
rb_define_method(rb_cTime, "to_i", time_to_i, 0);
|
||||
rb_define_method(rb_cTime, "to_f", time_to_f, 0);
|
||||
rb_define_method(rb_cTime, "<=>", time_cmp, 1);
|
||||
rb_define_method(rb_cTime, "eql?", time_eql, 0);
|
||||
rb_define_method(rb_cTime, "hash", time_hash, 0);
|
||||
|
||||
rb_define_method(cTime, "localtime", time_localtime, 0);
|
||||
rb_define_method(cTime, "gmtime", time_gmtime, 0);
|
||||
rb_define_method(cTime, "ctime", time_asctime, 0);
|
||||
rb_define_method(cTime, "asctime", time_asctime, 0);
|
||||
rb_define_method(cTime, "to_s", time_to_s, 0);
|
||||
rb_define_method(cTime, "inspect", time_to_s, 0);
|
||||
rb_define_method(cTime, "to_a", time_to_a, 0);
|
||||
rb_define_method(rb_cTime, "localtime", time_localtime, 0);
|
||||
rb_define_method(rb_cTime, "gmtime", time_gmtime, 0);
|
||||
rb_define_method(rb_cTime, "ctime", time_asctime, 0);
|
||||
rb_define_method(rb_cTime, "asctime", time_asctime, 0);
|
||||
rb_define_method(rb_cTime, "to_s", time_to_s, 0);
|
||||
rb_define_method(rb_cTime, "inspect", time_to_s, 0);
|
||||
rb_define_method(rb_cTime, "to_a", time_to_a, 0);
|
||||
|
||||
rb_define_method(cTime, "+", time_plus, 1);
|
||||
rb_define_method(cTime, "-", time_minus, 1);
|
||||
rb_define_method(rb_cTime, "+", time_plus, 1);
|
||||
rb_define_method(rb_cTime, "-", time_minus, 1);
|
||||
|
||||
rb_define_method(cTime, "sec", time_sec, 0);
|
||||
rb_define_method(cTime, "min", time_min, 0);
|
||||
rb_define_method(cTime, "hour", time_hour, 0);
|
||||
rb_define_method(cTime, "mday", time_mday, 0);
|
||||
rb_define_method(cTime, "day", time_mday, 0);
|
||||
rb_define_method(cTime, "mon", time_mon, 0);
|
||||
rb_define_method(cTime, "month", time_mon, 0);
|
||||
rb_define_method(cTime, "year", time_year, 0);
|
||||
rb_define_method(cTime, "wday", time_wday, 0);
|
||||
rb_define_method(cTime, "yday", time_yday, 0);
|
||||
rb_define_method(cTime, "isdst", time_isdst, 0);
|
||||
rb_define_method(cTime, "zone", time_zone, 0);
|
||||
rb_define_method(rb_cTime, "sec", time_sec, 0);
|
||||
rb_define_method(rb_cTime, "min", time_min, 0);
|
||||
rb_define_method(rb_cTime, "hour", time_hour, 0);
|
||||
rb_define_method(rb_cTime, "mday", time_mday, 0);
|
||||
rb_define_method(rb_cTime, "day", time_mday, 0);
|
||||
rb_define_method(rb_cTime, "mon", time_mon, 0);
|
||||
rb_define_method(rb_cTime, "month", time_mon, 0);
|
||||
rb_define_method(rb_cTime, "year", time_year, 0);
|
||||
rb_define_method(rb_cTime, "wday", time_wday, 0);
|
||||
rb_define_method(rb_cTime, "yday", time_yday, 0);
|
||||
rb_define_method(rb_cTime, "isdst", time_isdst, 0);
|
||||
rb_define_method(rb_cTime, "zone", time_zone, 0);
|
||||
|
||||
rb_define_method(cTime, "tv_sec", time_to_i, 0);
|
||||
rb_define_method(cTime, "tv_usec", time_usec, 0);
|
||||
rb_define_method(cTime, "usec", time_usec, 0);
|
||||
rb_define_method(rb_cTime, "tv_sec", time_to_i, 0);
|
||||
rb_define_method(rb_cTime, "tv_usec", time_usec, 0);
|
||||
rb_define_method(rb_cTime, "usec", time_usec, 0);
|
||||
|
||||
rb_define_method(cTime, "strftime", time_strftime, 1);
|
||||
rb_define_method(rb_cTime, "strftime", time_strftime, 1);
|
||||
|
||||
#if defined(HAVE_TIMES) || defined(NT)
|
||||
S_Tms = struct_define("Tms", "utime", "stime", "cutime", "cstime", 0);
|
||||
S_Tms = rb_struct_define("Tms", "utime", "stime", "cutime", "cstime", 0);
|
||||
#endif
|
||||
}
|
||||
|
|
35
util.c
35
util.c
|
@ -19,14 +19,26 @@
|
|||
#include "missing/file.h"
|
||||
#endif
|
||||
|
||||
VALUE
|
||||
rb_class_of(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
if (FIXNUM_P(obj)) return rb_cFixnum;
|
||||
if (obj == Qnil) return rb_cNilClass;
|
||||
if (obj == Qfalse) return rb_cFalseClass;
|
||||
if (obj == Qtrue) return rb_cTrueClass;
|
||||
|
||||
return RBASIC(obj)->klass;
|
||||
}
|
||||
|
||||
int
|
||||
rb_type(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
if (FIXNUM_P(obj)) return T_FIXNUM;
|
||||
if (obj == Qnil) return T_NIL;
|
||||
if (obj == FALSE) return T_FALSE;
|
||||
if (obj == TRUE) return T_TRUE;
|
||||
if (obj == Qfalse) return T_FALSE;
|
||||
if (obj == Qtrue) return T_TRUE;
|
||||
|
||||
return BUILTIN_TYPE(obj);
|
||||
}
|
||||
|
@ -35,19 +47,19 @@ int
|
|||
rb_special_const_p(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
if (FIXNUM_P(obj)) return TRUE;
|
||||
if (obj == Qnil) return TRUE;
|
||||
if (obj == FALSE) return TRUE;
|
||||
if (obj == TRUE) return TRUE;
|
||||
if (FIXNUM_P(obj)) return Qtrue;
|
||||
if (obj == Qnil) return Qtrue;
|
||||
if (obj == Qfalse) return Qtrue;
|
||||
if (obj == Qtrue) return Qtrue;
|
||||
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
int
|
||||
rb_test_false_or_nil(v)
|
||||
VALUE v;
|
||||
{
|
||||
return (v != Qnil) && (v != FALSE);
|
||||
return (v != Qnil) && (v != Qfalse);
|
||||
}
|
||||
|
||||
#include "util.h"
|
||||
|
@ -229,12 +241,13 @@ add_suffix(VALUE str, char *suffix)
|
|||
char buf[1024];
|
||||
|
||||
if (RSTRING(str)->len > 1000)
|
||||
Fatal("Cannot do inplace edit on long filename (%d characters)", RSTRING(str)->len);
|
||||
rb_fatal("Cannot do inplace edit on long filename (%d characters)",
|
||||
RSTRING(str)->len);
|
||||
|
||||
#if defined(DJGPP) || defined(__CYGWIN32__) || defined(NT)
|
||||
/* Style 0 */
|
||||
slen = RSTRING(str)->len;
|
||||
str_cat(str, suffix, extlen);
|
||||
rb_str_cat(str, suffix, extlen);
|
||||
#if defined(DJGPP)
|
||||
if (_USE_LFN) return;
|
||||
#else
|
||||
|
@ -277,7 +290,7 @@ add_suffix(VALUE str, char *suffix)
|
|||
fallback:
|
||||
(void)memcpy(p, strEQ(ext, suffix1) ? suffix2 : suffix1, 5);
|
||||
}
|
||||
str_resize(str, strlen(buf));
|
||||
rb_str_resize(str, strlen(buf));
|
||||
memcpy(RSTRING(str)->ptr, buf, RSTRING(str)->len);
|
||||
}
|
||||
|
||||
|
|
9
util.h
9
util.h
|
@ -12,7 +12,16 @@
|
|||
#ifndef UTIL_H
|
||||
#define UTIL_H
|
||||
|
||||
#define scan_oct ruby_scan_oct
|
||||
unsigned long scan_oct();
|
||||
#define scan_hex ruby_scan_hex
|
||||
unsigned long scan_hex();
|
||||
|
||||
#if defined(MSDOS) || defined(__CYGWIN32__) || defined(NT)
|
||||
#define add_suffix ruby_add_suffix
|
||||
void add_suffix();
|
||||
#endif
|
||||
|
||||
char *ruby_mktemp();
|
||||
|
||||
#endif /* UTIL_H */
|
||||
|
|
245
variable.c
245
variable.c
|
@ -19,20 +19,12 @@ char* strdup(char*);
|
|||
|
||||
static st_table *rb_global_tbl;
|
||||
st_table *rb_class_tbl;
|
||||
#define global_tbl rb_global_tbl
|
||||
#define class_tbl rb_class_tbl
|
||||
|
||||
st_table*
|
||||
new_idhash()
|
||||
{
|
||||
return st_init_numtable();
|
||||
}
|
||||
|
||||
void
|
||||
Init_var_tables()
|
||||
{
|
||||
global_tbl = new_idhash();
|
||||
class_tbl = new_idhash();
|
||||
rb_global_tbl = st_init_numtable();
|
||||
rb_class_tbl = st_init_numtable();
|
||||
}
|
||||
|
||||
struct fc_result {
|
||||
|
@ -56,19 +48,19 @@ fc_i(key, value, res)
|
|||
|
||||
name = rb_id2name(key);
|
||||
if (res->path) {
|
||||
path = str_dup(res->path);
|
||||
str_cat(path, "::", 2);
|
||||
str_cat(path, name, strlen(name));
|
||||
path = rb_str_dup(res->path);
|
||||
rb_str_cat(path, "::", 2);
|
||||
rb_str_cat(path, name, strlen(name));
|
||||
}
|
||||
else {
|
||||
path = str_new2(name);
|
||||
path = rb_str_new2(name);
|
||||
}
|
||||
if (value == res->klass) {
|
||||
res->name = key;
|
||||
res->path = path;
|
||||
return ST_STOP;
|
||||
}
|
||||
if (obj_is_kind_of(value, cModule)) {
|
||||
if (rb_obj_is_kind_of(value, rb_cModule)) {
|
||||
struct fc_result arg;
|
||||
struct fc_result *list;
|
||||
|
||||
|
@ -105,13 +97,13 @@ find_class_path(klass)
|
|||
arg.name = 0;
|
||||
arg.path = 0;
|
||||
arg.klass = klass;
|
||||
arg.track = cObject;
|
||||
arg.track = rb_cObject;
|
||||
arg.prev = 0;
|
||||
if (RCLASS(cObject)->iv_tbl) {
|
||||
st_foreach(RCLASS(cObject)->iv_tbl, fc_i, &arg);
|
||||
if (RCLASS(rb_cObject)->iv_tbl) {
|
||||
st_foreach(RCLASS(rb_cObject)->iv_tbl, fc_i, &arg);
|
||||
}
|
||||
if (arg.name == 0) {
|
||||
st_foreach(class_tbl, fc_i, &arg);
|
||||
st_foreach(rb_class_tbl, fc_i, &arg);
|
||||
}
|
||||
if (arg.name) {
|
||||
rb_iv_set(klass, "__classpath__", arg.path);
|
||||
|
@ -129,13 +121,14 @@ classname(klass)
|
|||
while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) {
|
||||
klass = (VALUE)RCLASS(klass)->super;
|
||||
}
|
||||
if (!klass) klass = rb_cObject;
|
||||
path = rb_iv_get(klass, "__classpath__");
|
||||
if (NIL_P(path)) {
|
||||
ID classid = rb_intern("__classid__");
|
||||
|
||||
path = rb_ivar_get(klass, classid);
|
||||
if (!NIL_P(path)) {
|
||||
path = str_new2(rb_id2name(FIX2INT(path)));
|
||||
path = rb_str_new2(rb_id2name(FIX2INT(path)));
|
||||
rb_ivar_set(klass, classid, path);
|
||||
st_delete(RCLASS(klass)->iv_tbl, &classid, 0);
|
||||
}
|
||||
|
@ -147,18 +140,19 @@ classname(klass)
|
|||
}
|
||||
return path;
|
||||
}
|
||||
if (TYPE(path) != T_STRING) Bug("class path is not set properly");
|
||||
if (TYPE(path) != T_STRING)
|
||||
rb_bug("class path is not set properly");
|
||||
return path;
|
||||
}
|
||||
|
||||
VALUE
|
||||
mod_name(mod)
|
||||
rb_mod_name(mod)
|
||||
VALUE mod;
|
||||
{
|
||||
VALUE path = classname(mod);
|
||||
|
||||
if (path) return str_dup(path);
|
||||
return str_new(0,0);
|
||||
if (path) return rb_str_dup(path);
|
||||
return rb_str_new(0,0);
|
||||
}
|
||||
|
||||
VALUE
|
||||
|
@ -174,7 +168,7 @@ rb_class_path(klass)
|
|||
|
||||
if (TYPE(klass) == T_MODULE) s = "Module";
|
||||
sprintf(buf, "#<%s 0x%x>", s, klass);
|
||||
return str_new2(buf);
|
||||
return rb_str_new2(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -185,13 +179,13 @@ rb_set_class_path(klass, under, name)
|
|||
{
|
||||
VALUE str;
|
||||
|
||||
if (under == cObject) {
|
||||
str = str_new2(name);
|
||||
if (under == rb_cObject) {
|
||||
str = rb_str_new2(name);
|
||||
}
|
||||
else {
|
||||
str = str_dup(rb_class_path(under));
|
||||
str_cat(str, "::", 2);
|
||||
str_cat(str, name, strlen(name));
|
||||
str = rb_str_dup(rb_class_path(under));
|
||||
rb_str_cat(str, "::", 2);
|
||||
rb_str_cat(str, name, strlen(name));
|
||||
}
|
||||
rb_iv_set(klass, "__classpath__", str);
|
||||
}
|
||||
|
@ -201,7 +195,7 @@ rb_path2class(path)
|
|||
char *path;
|
||||
{
|
||||
if (path[0] == '#') {
|
||||
ArgError("can't retrieve anonymous class %s", path);
|
||||
rb_raise(rb_eArgError, "can't retrieve anonymous class %s", path);
|
||||
}
|
||||
return rb_eval_string(path);
|
||||
}
|
||||
|
@ -211,8 +205,8 @@ rb_name_class(klass, id)
|
|||
VALUE klass;
|
||||
ID id;
|
||||
{
|
||||
if (cString) {
|
||||
rb_iv_set(klass, "__classpath__", str_new2(rb_id2name(id)));
|
||||
if (rb_cString) {
|
||||
rb_iv_set(klass, "__classpath__", rb_str_new2(rb_id2name(id)));
|
||||
}
|
||||
else {
|
||||
rb_iv_set(klass, "__classid__", INT2FIX(id));
|
||||
|
@ -227,11 +221,12 @@ rb_autoload_id(id, filename)
|
|||
char *filename;
|
||||
{
|
||||
if (!rb_is_const_id(id)) {
|
||||
NameError("autoload must be constant name", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "autoload must be constant name",
|
||||
rb_id2name(id));
|
||||
}
|
||||
|
||||
if (!autoload_tbl) {
|
||||
autoload_tbl = new_idhash();
|
||||
autoload_tbl = st_init_numtable();
|
||||
}
|
||||
st_insert(autoload_tbl, id, strdup(filename));
|
||||
}
|
||||
|
@ -244,7 +239,7 @@ rb_autoload(klass, filename)
|
|||
}
|
||||
|
||||
VALUE
|
||||
f_autoload(obj, klass, file)
|
||||
rb_f_autoload(obj, klass, file)
|
||||
VALUE obj, klass, file;
|
||||
{
|
||||
rb_autoload_id(rb_to_id(klass), STR2CSTR(file));
|
||||
|
@ -293,9 +288,9 @@ rb_global_entry(id)
|
|||
{
|
||||
struct global_entry *entry;
|
||||
|
||||
if (!st_lookup(global_tbl, id, &entry)) {
|
||||
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
||||
entry = ALLOC(struct global_entry);
|
||||
st_insert(global_tbl, id, entry);
|
||||
st_add_direct(rb_global_tbl, id, entry);
|
||||
entry->id = id;
|
||||
entry->data = 0;
|
||||
entry->getter = undef_getter;
|
||||
|
@ -312,7 +307,9 @@ static VALUE
|
|||
undef_getter(id)
|
||||
ID id;
|
||||
{
|
||||
Warning("global variable `%s' not initialized", rb_id2name(id));
|
||||
if (rb_verbose) {
|
||||
rb_warning("global variable `%s' not initialized", rb_id2name(id));
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -357,7 +354,7 @@ static void
|
|||
val_marker(data)
|
||||
void *data;
|
||||
{
|
||||
if (data) gc_mark_maybe(data);
|
||||
if (data) rb_gc_mark_maybe(data);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -382,7 +379,7 @@ static void
|
|||
var_marker(var)
|
||||
VALUE **var;
|
||||
{
|
||||
if (var) gc_mark_maybe(*var);
|
||||
if (var) rb_gc_mark_maybe(*var);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -391,7 +388,7 @@ readonly_setter(val, id, var)
|
|||
ID id;
|
||||
void *var;
|
||||
{
|
||||
NameError("Can't set variable %s", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "Can't set variable %s", rb_id2name(id));
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -404,16 +401,16 @@ mark_global_entry(key, entry)
|
|||
(*entry->marker)(entry->data);
|
||||
trace = entry->trace;
|
||||
while (trace) {
|
||||
if (trace->data) gc_mark_maybe(trace->data);
|
||||
if (trace->data) rb_gc_mark_maybe(trace->data);
|
||||
trace = trace->next;
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
void
|
||||
gc_mark_global_tbl()
|
||||
rb_gc_mark_global_tbl()
|
||||
{
|
||||
st_foreach(global_tbl, mark_global_entry, 0);
|
||||
st_foreach(rb_global_tbl, mark_global_entry, 0);
|
||||
}
|
||||
|
||||
static ID
|
||||
|
@ -480,11 +477,11 @@ static void
|
|||
rb_trace_eval(cmd, val)
|
||||
VALUE cmd, val;
|
||||
{
|
||||
rb_eval_cmd(cmd, ary_new3(1, val));
|
||||
rb_eval_cmd(cmd, rb_ary_new3(1, val));
|
||||
}
|
||||
|
||||
VALUE
|
||||
f_trace_var(argc, argv)
|
||||
rb_f_trace_var(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -494,14 +491,15 @@ f_trace_var(argc, argv)
|
|||
struct trace_var *trace;
|
||||
|
||||
if (rb_scan_args(argc, argv, "11", &var, &cmd) == 1) {
|
||||
cmd = f_lambda();
|
||||
cmd = rb_f_lambda();
|
||||
}
|
||||
if (NIL_P(cmd)) {
|
||||
return f_untrace_var(argc, argv);
|
||||
return rb_f_untrace_var(argc, argv);
|
||||
}
|
||||
id = rb_to_id(var);
|
||||
if (!st_lookup(global_tbl, id, &entry)) {
|
||||
NameError("undefined global variable %s", rb_id2name(id));
|
||||
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
||||
rb_raise(rb_eNameError, "undefined global variable %s",
|
||||
rb_id2name(id));
|
||||
}
|
||||
trace = ALLOC(struct trace_var);
|
||||
trace->next = entry->trace;
|
||||
|
@ -535,7 +533,7 @@ remove_trace(entry)
|
|||
}
|
||||
|
||||
VALUE
|
||||
f_untrace_var(argc, argv)
|
||||
rb_f_untrace_var(argc, argv)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
{
|
||||
|
@ -546,17 +544,18 @@ f_untrace_var(argc, argv)
|
|||
|
||||
rb_scan_args(argc, argv, "11", &var, &cmd);
|
||||
id = rb_to_id(var);
|
||||
if (!st_lookup(global_tbl, id, &entry)) {
|
||||
NameError("undefined global variable %s", rb_id2name(id));
|
||||
if (!st_lookup(rb_global_tbl, id, &entry)) {
|
||||
rb_raise(rb_eNameError, "undefined global variable %s",
|
||||
rb_id2name(id));
|
||||
}
|
||||
|
||||
trace = entry->trace;
|
||||
if (NIL_P(cmd)) {
|
||||
VALUE ary = ary_new();
|
||||
VALUE ary = rb_ary_new();
|
||||
|
||||
while (trace) {
|
||||
struct trace_var *next = trace->next;
|
||||
ary_push(ary, (VALUE)trace->data);
|
||||
rb_ary_push(ary, (VALUE)trace->data);
|
||||
trace->removed = 1;
|
||||
trace = next;
|
||||
}
|
||||
|
@ -570,7 +569,7 @@ f_untrace_var(argc, argv)
|
|||
if (trace->data == (void*)cmd) {
|
||||
trace->removed = 1;
|
||||
if (!entry->block_trace) remove_trace(entry);
|
||||
return ary_new3(1, cmd);
|
||||
return rb_ary_new3(1, cmd);
|
||||
}
|
||||
trace = trace->next;
|
||||
}
|
||||
|
@ -617,7 +616,7 @@ rb_gvar_set(entry, val)
|
|||
struct trace_data trace;
|
||||
|
||||
if (rb_safe_level() >= 4) {
|
||||
Raise(eSecurityError, "cannot change global variable value");
|
||||
rb_raise(rb_eSecurityError, "cannot change global variable value");
|
||||
}
|
||||
(*entry->setter)(val, entry->id, entry->data, entry);
|
||||
|
||||
|
@ -645,8 +644,8 @@ VALUE
|
|||
rb_gvar_defined(entry)
|
||||
struct global_entry *entry;
|
||||
{
|
||||
if (entry->getter == undef_getter) return FALSE;
|
||||
return TRUE;
|
||||
if (entry->getter == undef_getter) return Qfalse;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -655,22 +654,22 @@ gvar_i(key, entry, ary)
|
|||
struct global_entry *entry;
|
||||
VALUE ary;
|
||||
{
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
VALUE
|
||||
f_global_variables()
|
||||
rb_f_global_variables()
|
||||
{
|
||||
VALUE ary = ary_new();
|
||||
VALUE ary = rb_ary_new();
|
||||
char buf[4];
|
||||
char *s = "&`'+123456789";
|
||||
|
||||
st_foreach(global_tbl, gvar_i, ary);
|
||||
if (!NIL_P(backref_get())) {
|
||||
st_foreach(rb_global_tbl, gvar_i, ary);
|
||||
if (!NIL_P(rb_backref_get())) {
|
||||
while (*s) {
|
||||
sprintf(buf, "$%c", *s++);
|
||||
ary_push(ary, str_new2(buf));
|
||||
rb_ary_push(ary, rb_str_new2(buf));
|
||||
}
|
||||
}
|
||||
return ary;
|
||||
|
@ -707,11 +706,13 @@ rb_ivar_get(obj, id)
|
|||
return val;
|
||||
return Qnil;
|
||||
default:
|
||||
TypeError("class %s can not have instance variables",
|
||||
rb_raise(rb_eTypeError, "class %s can not have instance variables",
|
||||
rb_class2name(CLASS_OF(obj)));
|
||||
break;
|
||||
}
|
||||
Warning("instance var %s not initialized", rb_id2name(id));
|
||||
if (rb_verbose) {
|
||||
rb_warning("instance var %s not initialized", rb_id2name(id));
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -722,17 +723,17 @@ rb_ivar_set(obj, id, val)
|
|||
VALUE val;
|
||||
{
|
||||
if (rb_safe_level() >= 5) {
|
||||
Raise(eSecurityError, "cannot change object status");
|
||||
rb_raise(rb_eSecurityError, "cannot change object status");
|
||||
}
|
||||
switch (TYPE(obj)) {
|
||||
case T_OBJECT:
|
||||
case T_CLASS:
|
||||
case T_MODULE:
|
||||
if (!ROBJECT(obj)->iv_tbl) ROBJECT(obj)->iv_tbl = new_idhash();
|
||||
if (!ROBJECT(obj)->iv_tbl) ROBJECT(obj)->iv_tbl = st_init_numtable();
|
||||
st_insert(ROBJECT(obj)->iv_tbl, id, val);
|
||||
break;
|
||||
default:
|
||||
TypeError("class %s can not have instance variables",
|
||||
rb_raise(rb_eTypeError, "class %s can not have instance variables",
|
||||
rb_class2name(CLASS_OF(obj)));
|
||||
break;
|
||||
}
|
||||
|
@ -744,17 +745,17 @@ rb_ivar_defined(obj, id)
|
|||
VALUE obj;
|
||||
ID id;
|
||||
{
|
||||
if (!rb_is_instance_id(id)) return FALSE;
|
||||
if (!rb_is_instance_id(id)) return Qfalse;
|
||||
|
||||
switch (TYPE(obj)) {
|
||||
case T_OBJECT:
|
||||
case T_CLASS:
|
||||
case T_MODULE:
|
||||
if (ROBJECT(obj)->iv_tbl && st_lookup(ROBJECT(obj)->iv_tbl, id, 0))
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -764,13 +765,13 @@ ivar_i(key, entry, ary)
|
|||
VALUE ary;
|
||||
{
|
||||
if (rb_is_instance_id(key)) {
|
||||
ary_push(ary, str_new2(rb_id2name(key)));
|
||||
rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
VALUE
|
||||
obj_instance_variables(obj)
|
||||
rb_obj_instance_variables(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
VALUE ary;
|
||||
|
@ -779,7 +780,7 @@ obj_instance_variables(obj)
|
|||
case T_OBJECT:
|
||||
case T_CLASS:
|
||||
case T_MODULE:
|
||||
ary = ary_new();
|
||||
ary = rb_ary_new();
|
||||
if (ROBJECT(obj)->iv_tbl) {
|
||||
st_foreach(ROBJECT(obj)->iv_tbl, ivar_i, ary);
|
||||
}
|
||||
|
@ -789,14 +790,15 @@ obj_instance_variables(obj)
|
|||
}
|
||||
|
||||
VALUE
|
||||
obj_remove_instance_variable(obj, name)
|
||||
rb_obj_remove_instance_variable(obj, name)
|
||||
VALUE obj, name;
|
||||
{
|
||||
VALUE val = Qnil;
|
||||
ID id = rb_to_id(name);
|
||||
|
||||
if (!rb_is_instance_id(id)) {
|
||||
NameError("`%s' is not an instance variable", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "`%s' is not an instance variable",
|
||||
rb_id2name(id));
|
||||
}
|
||||
|
||||
switch (TYPE(obj)) {
|
||||
|
@ -808,7 +810,7 @@ obj_remove_instance_variable(obj, name)
|
|||
}
|
||||
break;
|
||||
default:
|
||||
TypeError("object %s can not have instance variables",
|
||||
rb_raise(rb_eTypeError, "object %s can not have instance variables",
|
||||
rb_class2name(CLASS_OF(obj)));
|
||||
break;
|
||||
}
|
||||
|
@ -825,10 +827,10 @@ rb_const_get_at(klass, id)
|
|||
if (RCLASS(klass)->iv_tbl && st_lookup(RCLASS(klass)->iv_tbl, id, &value)) {
|
||||
return value;
|
||||
}
|
||||
if (klass == cObject) {
|
||||
if (klass == rb_cObject) {
|
||||
return rb_const_get(klass, id);
|
||||
}
|
||||
NameError("Uninitialized constant %s::%s",
|
||||
rb_raise(rb_eNameError, "Uninitialized constant %s::%s",
|
||||
RSTRING(rb_class_path(klass))->ptr,
|
||||
rb_id2name(id));
|
||||
/* not reached */
|
||||
|
@ -851,11 +853,11 @@ rb_const_get(klass, id)
|
|||
tmp = RCLASS(tmp)->super;
|
||||
}
|
||||
if (BUILTIN_TYPE(klass) == T_MODULE) {
|
||||
return rb_const_get(cObject, id);
|
||||
return rb_const_get(rb_cObject, id);
|
||||
}
|
||||
|
||||
/* pre-defined class */
|
||||
if (st_lookup(class_tbl, id, &value)) return value;
|
||||
if (st_lookup(rb_class_tbl, id, &value)) return value;
|
||||
|
||||
/* autoload */
|
||||
if (autoload_tbl && st_lookup(autoload_tbl, id, 0)) {
|
||||
|
@ -863,19 +865,19 @@ rb_const_get(klass, id)
|
|||
VALUE module;
|
||||
|
||||
st_delete(autoload_tbl, &id, &modname);
|
||||
module = str_new2(modname);
|
||||
module = rb_str_new2(modname);
|
||||
free(modname);
|
||||
f_require(0, module);
|
||||
rb_f_require(Qnil, module);
|
||||
return rb_const_get(klass, id);
|
||||
}
|
||||
|
||||
/* Uninitialized constant */
|
||||
if (klass && klass != cObject)
|
||||
NameError("Uninitialized constant %s::%s",
|
||||
if (klass && klass != rb_cObject)
|
||||
rb_raise(rb_eNameError, "Uninitialized constant %s::%s",
|
||||
RSTRING(rb_class_path(klass))->ptr,
|
||||
rb_id2name(id));
|
||||
else {
|
||||
NameError("Uninitialized constant %s",rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "Uninitialized constant %s",rb_id2name(id));
|
||||
}
|
||||
/* not reached */
|
||||
}
|
||||
|
@ -887,33 +889,33 @@ const_i(key, value, ary)
|
|||
VALUE ary;
|
||||
{
|
||||
if (rb_is_const_id(key)) {
|
||||
VALUE kval = str_new2(rb_id2name(key));
|
||||
if (!ary_includes(ary, kval)) {
|
||||
ary_push(ary, kval);
|
||||
VALUE kval = rb_str_new2(rb_id2name(key));
|
||||
if (!rb_ary_includes(ary, kval)) {
|
||||
rb_ary_push(ary, kval);
|
||||
}
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
VALUE
|
||||
mod_remove_const(mod, name)
|
||||
rb_mod_remove_const(mod, name)
|
||||
VALUE mod, name;
|
||||
{
|
||||
ID id = rb_to_id(name);
|
||||
VALUE val;
|
||||
|
||||
if (!rb_is_const_id(id)) {
|
||||
NameError("`%s' is not constant", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "`%s' is not constant", rb_id2name(id));
|
||||
}
|
||||
|
||||
if (RCLASS(mod)->iv_tbl && st_delete(ROBJECT(mod)->iv_tbl, &id, &val)) {
|
||||
return val;
|
||||
}
|
||||
if (rb_const_defined_at(mod, id)) {
|
||||
NameError("cannot remove %s::%s",
|
||||
rb_raise(rb_eNameError, "cannot remove %s::%s",
|
||||
rb_class2name(mod), rb_id2name(id));
|
||||
}
|
||||
NameError("constant %s::%s not defined",
|
||||
rb_raise(rb_eNameError, "constant %s::%s not defined",
|
||||
rb_class2name(mod), rb_id2name(id));
|
||||
}
|
||||
|
||||
|
@ -923,22 +925,22 @@ autoload_i(key, name, ary)
|
|||
char *name;
|
||||
VALUE ary;
|
||||
{
|
||||
VALUE kval = str_new2(rb_id2name(key));
|
||||
if (!ary_includes(ary, kval)) {
|
||||
ary_push(ary, kval);
|
||||
VALUE kval = rb_str_new2(rb_id2name(key));
|
||||
if (!rb_ary_includes(ary, kval)) {
|
||||
rb_ary_push(ary, kval);
|
||||
}
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
VALUE
|
||||
mod_const_at(mod, ary)
|
||||
rb_mod_const_at(mod, ary)
|
||||
VALUE mod, ary;
|
||||
{
|
||||
if (RCLASS(mod)->iv_tbl) {
|
||||
st_foreach(RCLASS(mod)->iv_tbl, const_i, ary);
|
||||
}
|
||||
if ((VALUE)mod == cObject) {
|
||||
st_foreach(class_tbl, const_i, ary);
|
||||
if ((VALUE)mod == rb_cObject) {
|
||||
st_foreach(rb_class_tbl, const_i, ary);
|
||||
if (autoload_tbl) {
|
||||
st_foreach(autoload_tbl, autoload_i, ary);
|
||||
}
|
||||
|
@ -947,22 +949,22 @@ mod_const_at(mod, ary)
|
|||
}
|
||||
|
||||
VALUE
|
||||
mod_constants(mod)
|
||||
rb_mod_constants(mod)
|
||||
VALUE mod;
|
||||
{
|
||||
return mod_const_at(mod, ary_new());
|
||||
return rb_mod_const_at(mod, rb_ary_new());
|
||||
}
|
||||
|
||||
VALUE
|
||||
mod_const_of(mod, ary)
|
||||
rb_mod_const_of(mod, ary)
|
||||
VALUE mod;
|
||||
VALUE ary;
|
||||
{
|
||||
mod_const_at(mod, ary);
|
||||
rb_mod_const_at(mod, ary);
|
||||
for (;;) {
|
||||
mod = RCLASS(mod)->super;
|
||||
if (!mod) break;
|
||||
mod_const_at(mod, ary);
|
||||
rb_mod_const_at(mod, ary);
|
||||
}
|
||||
return ary;
|
||||
}
|
||||
|
@ -973,12 +975,12 @@ rb_const_defined_at(klass, id)
|
|||
ID id;
|
||||
{
|
||||
if (RCLASS(klass)->iv_tbl && st_lookup(RCLASS(klass)->iv_tbl, id, 0)) {
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
if (klass == cObject) {
|
||||
if (klass == rb_cObject) {
|
||||
return rb_const_defined(klass, id);
|
||||
}
|
||||
return FALSE;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -986,8 +988,8 @@ rb_autoload_defined(id)
|
|||
ID id;
|
||||
{
|
||||
if (autoload_tbl && st_lookup(autoload_tbl, id, 0))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -999,15 +1001,15 @@ rb_const_defined(klass, id)
|
|||
|
||||
while (tmp) {
|
||||
if (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,0)) {
|
||||
return TRUE;
|
||||
return Qtrue;
|
||||
}
|
||||
tmp = RCLASS(tmp)->super;
|
||||
}
|
||||
if (BUILTIN_TYPE(klass) == T_MODULE) {
|
||||
return rb_const_defined(cObject, id);
|
||||
return rb_const_defined(rb_cObject, id);
|
||||
}
|
||||
if (st_lookup(class_tbl, id, 0))
|
||||
return TRUE;
|
||||
if (st_lookup(rb_class_tbl, id, 0))
|
||||
return Qtrue;
|
||||
return rb_autoload_defined(id);
|
||||
}
|
||||
|
||||
|
@ -1018,13 +1020,14 @@ rb_const_set(klass, id, val)
|
|||
VALUE val;
|
||||
{
|
||||
if (!RCLASS(klass)->iv_tbl) {
|
||||
RCLASS(klass)->iv_tbl = new_idhash();
|
||||
RCLASS(klass)->iv_tbl = st_init_numtable();
|
||||
}
|
||||
else if (st_lookup(RCLASS(klass)->iv_tbl, id, 0)) {
|
||||
NameError("already initialized constant %s", rb_id2name(id));
|
||||
rb_raise(rb_eNameError, "already initialized constant %s",
|
||||
rb_id2name(id));
|
||||
}
|
||||
|
||||
st_insert(RCLASS(klass)->iv_tbl, id, val);
|
||||
st_add_direct(RCLASS(klass)->iv_tbl, id, val);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1035,7 +1038,7 @@ rb_define_const(klass, name, val)
|
|||
{
|
||||
ID id = rb_intern(name);
|
||||
if (!rb_is_const_id(id)) {
|
||||
NameError("wrong constant name %s", name);
|
||||
rb_raise(rb_eNameError, "wrong constant name %s", name);
|
||||
}
|
||||
rb_const_set(klass, id, val);
|
||||
}
|
||||
|
@ -1045,7 +1048,7 @@ rb_define_global_const(name, val)
|
|||
char *name;
|
||||
VALUE val;
|
||||
{
|
||||
rb_define_const(cObject, name, val);
|
||||
rb_define_const(rb_cObject, name, val);
|
||||
}
|
||||
|
||||
VALUE
|
||||
|
|
|
@ -18,18 +18,18 @@
|
|||
void
|
||||
Init_version()
|
||||
{
|
||||
rb_define_global_const("VERSION", str_new2(RUBY_VERSION));
|
||||
rb_define_global_const("PLATFORM", str_new2(RUBY_PLATFORM));
|
||||
rb_define_global_const("VERSION", rb_str_new2(RUBY_VERSION));
|
||||
rb_define_global_const("PLATFORM", rb_str_new2(RUBY_PLATFORM));
|
||||
}
|
||||
|
||||
void
|
||||
show_version()
|
||||
ruby_show_version()
|
||||
{
|
||||
fprintf(stderr, "ruby %s(%s) [%s]\n", RUBY_VERSION, VERSION_DATE, RUBY_PLATFORM);
|
||||
}
|
||||
|
||||
void
|
||||
show_copyright()
|
||||
ruby_show_copyright()
|
||||
{
|
||||
fprintf(stderr, "ruby - Copyright (C) 1993-1998 Yukihiro Matsumoto\n");
|
||||
exit(0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue