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
|
#include "ruby.h"
#include "rubyspec.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef HAVE_RB_DEFINE_HOOKED_VARIABLE
VALUE g_hooked_var = Qnil;
void var_2x_setter(VALUE val, ID id, VALUE *var) {
*var = INT2NUM(NUM2INT(val) * 2);
}
static VALUE sb_define_hooked_variable(VALUE self, VALUE var_name) {
rb_define_hooked_variable(StringValuePtr(var_name), &g_hooked_var, 0, var_2x_setter);
return Qnil;
}
#endif
#ifdef HAVE_RB_DEFINE_READONLY_VARIABLE
VALUE g_ro_var = Qnil;
static VALUE sb_define_readonly_variable(VALUE self, VALUE var_name, VALUE val) {
g_ro_var = val;
rb_define_readonly_variable(StringValuePtr(var_name), &g_ro_var);
return Qnil;
}
#endif
#ifdef HAVE_RB_DEFINE_VARIABLE
VALUE g_var = Qnil;
static VALUE sb_get_global_value(VALUE self) {
return g_var;
}
static VALUE sb_define_variable(VALUE self, VALUE var_name, VALUE val) {
g_var = val;
rb_define_variable(StringValuePtr(var_name), &g_var);
return Qnil;
}
#endif
#ifdef HAVE_RB_F_GLOBAL_VARIABLES
static VALUE sb_f_global_variables(VALUE self) {
return rb_f_global_variables();
}
#endif
#ifdef HAVE_RB_GV_GET
static VALUE sb_gv_get(VALUE self, VALUE var) {
return rb_gv_get(StringValuePtr(var));
}
#endif
#ifdef HAVE_RB_GV_SET
static VALUE sb_gv_set(VALUE self, VALUE var, VALUE val) {
return rb_gv_set(StringValuePtr(var), val);
}
#endif
#ifdef HAVE_RB_SET_KCODE
static VALUE global_spec_rb_set_kcode(VALUE self, VALUE code) {
rb_set_kcode(RSTRING_PTR(code));
return Qnil;
}
#endif
#ifdef HAVE_RB_RS
static VALUE global_spec_rb_rs(VALUE self) {
return rb_rs;
}
#endif
#ifdef HAVE_RB_DEFAULT_RS
static VALUE global_spec_rb_default_rs(VALUE self) {
return rb_default_rs;
}
#endif
#ifdef HAVE_RB_OUTPUT_RS
static VALUE global_spec_rb_output_rs(VALUE self) {
return rb_output_rs;
}
#endif
#ifdef HAVE_RB_OUTPUT_FS
static VALUE global_spec_rb_output_fs(VALUE self) {
return rb_output_fs;
}
#endif
#ifdef HAVE_RB_LASTLINE_SET
static VALUE global_spec_rb_lastline_set(VALUE self, VALUE line) {
rb_lastline_set(line);
return Qnil;
}
#endif
#ifdef HAVE_RB_LASTLINE_GET
static VALUE global_spec_rb_lastline_get(VALUE self) {
return rb_lastline_get();
}
#endif
void Init_globals_spec() {
VALUE cls;
cls = rb_define_class("CApiGlobalSpecs", rb_cObject);
#ifdef HAVE_RB_DEFINE_HOOKED_VARIABLE
rb_define_method(cls, "rb_define_hooked_variable_2x", sb_define_hooked_variable, 1);
#endif
#ifdef HAVE_RB_DEFINE_READONLY_VARIABLE
rb_define_method(cls, "rb_define_readonly_variable", sb_define_readonly_variable, 2);
#endif
#ifdef HAVE_RB_DEFINE_VARIABLE
rb_define_method(cls, "rb_define_variable", sb_define_variable, 2);
rb_define_method(cls, "sb_get_global_value", sb_get_global_value, 0);
#endif
#ifdef HAVE_RB_F_GLOBAL_VARIABLES
rb_define_method(cls, "rb_f_global_variables", sb_f_global_variables, 0);
#endif
#ifdef HAVE_RB_GV_GET
rb_define_method(cls, "sb_gv_get", sb_gv_get, 1);
#endif
#ifdef HAVE_RB_GV_SET
rb_define_method(cls, "sb_gv_set", sb_gv_set, 2);
#endif
#ifdef HAVE_RB_SET_KCODE
rb_define_method(cls, "rb_set_kcode", global_spec_rb_set_kcode, 1);
#endif
#ifdef HAVE_RB_RS
rb_define_method(cls, "rb_rs", global_spec_rb_rs, 0);
#endif
#ifdef HAVE_RB_DEFAULT_RS
rb_define_method(cls, "rb_default_rs", global_spec_rb_default_rs, 0);
#endif
#ifdef HAVE_RB_OUTPUT_RS
rb_define_method(cls, "rb_output_rs", global_spec_rb_output_rs, 0);
#endif
#ifdef HAVE_RB_OUTPUT_FS
rb_define_method(cls, "rb_output_fs", global_spec_rb_output_fs, 0);
#endif
#ifdef HAVE_RB_LASTLINE_SET
rb_define_method(cls, "rb_lastline_set", global_spec_rb_lastline_set, 1);
#endif
#ifdef HAVE_RB_LASTLINE_GET
rb_define_method(cls, "rb_lastline_get", global_spec_rb_lastline_get, 0);
#endif
}
#ifdef __cplusplus
}
#endif
|