Change soft-fail to use the config, rather than env
[rbx.git] / spec / subtend / ext / subtend_class.c
bloba9106759c3bb8ddd202493684890ffb6a29e27e7
1 #include <ruby.h>
2 #include <stdio.h>
3 #include <string.h>
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];
13 int i;
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);
20 return Qnil;
23 static VALUE sc_rb_class_new_instance(VALUE self,
24 VALUE nargs, VALUE args,
25 VALUE klass) {
26 int c_nargs = FIX2INT(nargs);
27 VALUE c_args[c_nargs];
28 int i;
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);
38 return klass;
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);
46 return Qnil;
49 static VALUE sc_rbclass2name(VALUE self, VALUE klass) {
50 return rb_str_new2( rb_class2name(klass) );
53 void Init_subtend_class() {
54 VALUE cls;
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);