5 static VALUE
sc_rb_obj_alloc(VALUE self
, VALUE klass
) {
6 return rb_obj_alloc(klass
);
9 static VALUE
sc_rb_obj_call_init(VALUE self
, VALUE object
,
10 VALUE nargs
, VALUE args
) {
11 int c_nargs
= FIX2INT(nargs
);
12 VALUE c_args
[c_nargs
];
15 for (i
= 0; i
< c_nargs
; i
++)
16 c_args
[i
] = rb_ary_entry(args
, i
);
18 rb_obj_call_init(object
, c_nargs
, c_args
);
23 static VALUE
sc_rb_class_new_instance(VALUE self
,
24 VALUE nargs
, VALUE args
,
26 int c_nargs
= FIX2INT(nargs
);
27 VALUE c_args
[c_nargs
];
30 for (i
= 0; i
< c_nargs
; i
++)
31 c_args
[i
] = rb_ary_entry(args
, i
);
33 return rb_class_new_instance(c_nargs
, c_args
, klass
);
36 static VALUE
sc_include_module(VALUE self
, VALUE klass
, VALUE module
) {
37 rb_include_module(klass
, module
);
41 VALUE
sc_define_attr(VALUE self
, VALUE klass
, VALUE sym
, VALUE read
, VALUE write
) {
42 int int_read
, int_write
;
43 int_read
= read
== Qtrue
? 1 : 0;
44 int_write
= write
== Qtrue
? 1 : 0;
45 rb_define_attr(klass
, rb_id2name(SYM2ID(sym
)), int_read
, int_write
);
49 static VALUE
sc_rbclass2name(VALUE self
, VALUE klass
) {
50 return rb_str_new2( rb_class2name(klass
) );
53 void Init_subtend_class() {
55 cls
= rb_define_class("SubtendClass", rb_cObject
);
56 rb_define_method(cls
, "rb_obj_alloc", sc_rb_obj_alloc
, 1);
57 rb_define_method(cls
, "rb_obj_call_init", sc_rb_obj_call_init
, 3);
58 rb_define_method(cls
, "rb_class_new_instance", sc_rb_class_new_instance
, 3);
59 rb_define_method(cls
, "rb_include_module", sc_include_module
, 2);
60 rb_define_method(cls
, "rb_define_attr", sc_define_attr
, 4);
61 rb_define_method(cls
, "rb_class2name", sc_rbclass2name
, 1);