summaryrefslogtreecommitdiff
path: root/C-IF
blob: 5c66a20ddc95fd1c6787e5fb53080f785e95c38c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
.\" C-IF -  -*- Text -*- created at: Tue Oct 12 14:15:00 JST 1993

Ruby-C インターフェース

型

 VALUE

   Rubyオブジェクトを表現する型. 必要に応じてキャストして用いる. 組み
   込み型を表現するCの型はruby.hに記述してあるRで始まる構造体である.
   VALUE型をこれらにキャストするためにRで始まる構造体名を全て大文字に
   した名前のマクロが用意されている.

変数・定数

 Qnil

   定数: nilオブジェクト

 Qself

   変数: 現在のselfオブジェクトの値. 一般にメソッドにはselfを指す引数
   が与えられるので, この変数にアクセスする必要はない. この変数の値を
   変更する時は以後のselfの値そのものが変わってしまうので, 特別な事情
   がない限り代入してはならない.

 TRUE

   定数: tオブジェクト(真のデフォルト値)

 FALSE

   定数: nilオブジェクト

クラス・モジュール定義

 VALUE rb_define_class(char *name, VALUE super)

   superのサブクラスとして新しいRubyクラスを定義する.

 VALUE rb_define_module(char *name)

   新しいRubyモジュールを定義する.

 void rb_include_module(VALUE class, VALUE module)

   モジュールをインクルードする. classがすでにmoduleをインクルードして
   いる時には何もしない(多重インクルードの禁止).

大域変数

 void rb_define_variable(char *name, VALUE *var,
			 VALUE (*get_hook), VALUE (*set_hook)(), void *data)

   RubyとCとで共有するグローバル変数を定義する. get_hookがQnilでない時, 
   変数参照の際にget_hookにセットされた関数が呼ばれる. set_hookがQnil 
   でない時には代入の時にset_hookが呼ばれる. hook関数には変数名を示す 
   ID,(set hookの場合新しい値も)とともにdataで与えたデータが引数とし
   て渡される.

   変数名が`$'で始まらない時には自動的に追加される. 変数名としてrubyの
   識別子として許されない文字(例えば` ')を含む場合にはrubyプログラムか
   らアクセスできなくなる.

 void rb_global_variable(VALUE *var)

   GCのため,Rubyプログラムからはアクセスされないが, Rubyオブジェクト
   を含む大域変数をマークする.

 void rb_read_only_hook()

   読み出し専用の変数のためのset_hook関数. 値を設定しようとすると例外
   を発生させる.

クラス定数

 void rb_define_const(VALUE class, char *name, VALUE val)

   クラス定数を定義する.

メソッド定義

 rb_define_method(VALUE class, char *name, VALUE (*func)(), int argc)

   メソッドを定義する. argcはselfを除く引数の数. argcが-1の時, 関数に
   は引数の数(selfを含まない)を第1引数, 引数の配列を第2引数とする形式
   で与えられる(第3引数はself). argcが-2の時, 引数はself, args(argsは
   引数を含むrubyの配列)という形式で与えられる.

 rb_define_single_method(VALUE class, char *name, VALUE (*func)(), int argc)

   特異メソッドを定義する. 引数はrb_define_method()と同じ.

 rb_scan_args(int atgc, VALUE *argv, char *fmt, ...)

   argc,argv形式で与えられた引数を分解する. fmtは必須引数の数, 付加引
   数の数, 残りの引数があるかを指定する文字列で, "数字数字*"という形式
   である.  2 番目の数字と"*"はそれぞれ省略可能である. 必須引数が一つ
   もない場合は0を指定する.第3引数以降は変数へのポインタで, 該当する
   要素がその変数に格納される. 付加引数に対応する引数が与えられていな
   い場合は変数にQnilが代入される.

Rubyメソッド呼び出し

 VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)

   メソッド呼び出し. 文字列からmidを得るためにはrb_intern()を使う.

 VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)

   メソッド呼び出し. 引数をargc,argv形式で渡す.

 VALUE rb_eval_string(char *str)

   文字列をrubyとスクリプトしてコンパイル・実行する.

 ID rb_intern(char *name)

   文字列に対応するIDを返す.

 char *rb_id2name(ID id)

   IDに対応する文字列を返す(デバッグ用).

 char *rb_class2name(VALUE class)

   classの名前を返す(デバッグ用). classが名前を持たない時には, 一番近
   い名前を持つクラスの名前を返す.

インスタンス変数

 VALUE rb_iv_get(VALUE obj, char *name)

   objのインスタンス変数の値を得る. `@'で始まらないインスタンス変数は 
   Rubyプログラムからアクセスできない.

 VALUE rb_iv_set(VALUE obj, char *name, VALUE val)

   objのインスタンス変数をvalにセットする.

制御構造

 VALUE rb_iterate(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2)

   func2をブロックとして設定し, func1をイテレータとして呼ぶ.  func1に
   は arg1が引数として渡され, func2には第1引数にイテレータから与えられ
   た値, 第2引数にarg2が渡される.
 
 VALUE rb_yield(VALUE val)

   valを値としてイテレータブロックを呼び出す.

 VALUE rb_resque(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2)

   関数func1をarg1を引数に呼び出す. func1の実行中に例外が発生した時に
   は func2をarg2を引数として呼ぶ. 戻り値は例外が発生しなかった時は
   func1の戻り値, 例外が発生した時にはfunc2の戻り値である.

 VALUE rb_ensure(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2)

   関数func1をarg1を引数として実行し, 実行終了後(たとえ例外が発生して
   も) func2をarg2を引数として実行する. 戻り値はfunc1の戻り値である(例
   外が発生した時は戻らない).

例外・エラー

 void Warning(char *fmt, ...)

   標準エラー出力に警告情報を表示する. 引数はprintf()と同じ.

 void Fail(char *fmt, ...)

   例外を発生させる. 引数はprintf()と同じ.

 void Fatal(char *fmt, ...)

   致命的例外を発生させる. 通常の例外処理は行なわれず, インタープリタ
   が終了する(ただしensureで指定されたコードは終了前に実行される).

 void Bug(char *fmt, ...)

   インタープリタなどプログラムのバグでしか発生するはずのない状況の時
   呼ぶ. インタープリタはコアダンプし直ちに終了する. 例外処理は一切行
   なわれない.

rubyの初期化・実行

 void ruby_init(int argc, char **argv, char **envp)

  rubyインタプリタの初期化を行なう.

 void ruby_run()

  rubyインタプリタを実行する.

 void ruby_script(char *name)

  rubyのスクリプト名($0)を設定する.

/*
 * Local variables:
 * fill-column: 70
 * end:
 */