2020-02-28 13:07:17 -05:00
|
|
|
#include "ruby.h"
|
|
|
|
#include "rubyspec.h"
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
static VALUE language_spec_switch(VALUE self, VALUE value) {
|
|
|
|
if (value == ID2SYM(rb_intern("undef"))) {
|
|
|
|
value = Qundef;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (value) {
|
|
|
|
case Qtrue:
|
|
|
|
return ID2SYM(rb_intern("true"));
|
|
|
|
case Qfalse:
|
|
|
|
return ID2SYM(rb_intern("false"));
|
|
|
|
case Qnil:
|
|
|
|
return ID2SYM(rb_intern("nil"));
|
|
|
|
case Qundef:
|
|
|
|
return ID2SYM(rb_intern("undef"));
|
|
|
|
default:
|
|
|
|
return ID2SYM(rb_intern("default"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-27 19:22:51 -04:00
|
|
|
/* Defining a local variable rb_mProcess which already exists as a global variable
|
|
|
|
* For instance eventmachine does this in Init_rubyeventmachine() */
|
|
|
|
static VALUE language_spec_global_local_var(VALUE self) {
|
|
|
|
VALUE rb_mProcess = rb_const_get(rb_cObject, rb_intern("Process"));
|
|
|
|
return rb_mProcess;
|
|
|
|
}
|
|
|
|
|
2020-02-28 13:07:17 -05:00
|
|
|
void Init_language_spec(void) {
|
|
|
|
VALUE cls = rb_define_class("CApiLanguageSpecs", rb_cObject);
|
|
|
|
rb_define_method(cls, "switch", language_spec_switch, 1);
|
2020-03-27 19:22:51 -04:00
|
|
|
rb_define_method(cls, "global_local_var", language_spec_global_local_var, 0);
|
2020-02-28 13:07:17 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|