ID rb_intern(const char* string) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); return reinterpret_cast<ID>(env->state()->symbol(string)); }
VALUE rb_thread_current(void) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Thread* thread = env->state()->vm()->thread.get(); return env->get_handle(thread); }
VALUE rb_reg_new(const char *source, long len, int options) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); String *pat = String::create(env->state(), source, len); return rb_funcall(rb_cRegexp, rb_intern("new"), 2, env->get_handle(pat), Fixnum::from(options)); }
void rb_register_transcoder(const rb_transcoder* trans) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Transcoding::define(env->state(), (OnigTranscodingType*)trans); }
void rb_set_kcode(const char *code) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); System::vm_set_kcode(env->state(), String::create(env->state(), code)); }
VALUE rb_obj_encoding(VALUE obj) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Object* val = env->get_object(obj); Encoding* enc = Encoding::get_object_encoding(env->state(), val); return env->get_handle(enc); }
VALUE rb_enc_from_encoding(rb_encoding *enc) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); return env->get_handle(Encoding::find(env->state(), enc->name)); }
VALUE rb_str_length(VALUE self) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); String* string = capi_get_string(env, self); return LONG2FIX(string->char_size(env->state())); }
/** @todo Should this be a global handle? Surely not.. --rue */ VALUE rb_singleton_class(VALUE object_handle) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Class* sc = env->get_object(object_handle)->singleton_class(env->state()); return env->get_handle(sc); }
VALUE rb_str_dup(VALUE self) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); String* string = capi_get_string(env, self); return env->get_handle(string->string_dup(env->state())); }
VALUE rb_str_new(const char* string, long length) { if(length < 0) rb_raise(rb_eArgError, "invalid string size"); NativeMethodEnvironment* env = NativeMethodEnvironment::get(); return env->get_handle(String::create(env->state(), string, length)); }
void rb_str_modify(VALUE self) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); String* string = capi_get_string(env, self); string->unshare(env->state()); }
char* rb_class2name(VALUE class_handle) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Class* class_object = c_as<Class>(env->get_object(class_handle)); return ::strdup(class_object->name()->c_str(env->state())); }
VALUE rb_class_name(VALUE class_handle) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Class* class_object = c_as<Class>(env->get_object(class_handle)); return env->get_handle(class_object->name()->to_str(env->state())); }
VALUE rb_obj_freeze(VALUE hndl) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); env->get_object(hndl)->freeze(env->state()); return hndl; }
VALUE rb_class_of(VALUE object_handle) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Class* class_object = env->get_object(object_handle)->class_object(env->state()); return env->get_handle(class_object); }
VALUE rb_float_new(double val) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); return env->get_handle(Float::create(env->state(), val)); }
VALUE rb_path_to_class(VALUE str) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); String* string = c_as<String>(env->get_object(str)); return rb_path2class(string->c_str(env->state())); }
int rb_enc_find_index(const char *name) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); return Encoding::find_index(env->state(), name); }
// MUST return the immediate object in the class field, not the real class! VALUE CLASS_OF(VALUE object_handle) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Class* class_object = env->get_object(object_handle)->direct_class(env->state()); return env->get_handle(class_object); }
void rb_declare_transcoder(const char* from, const char* to, const char* lib) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Transcoding::declare(env->state(), from, to, lib); }
VALUE rb_thread_local_aset(VALUE thread, ID id, VALUE value) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); Thread* thr = capi::c_as<Thread>(env->get_object(thread)); return env->get_handle(thr->locals_store(env->state(), reinterpret_cast<Symbol*>(id), env->get_object(value))); }
rb_encoding* rb_utf8_encoding() { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); return Encoding::utf8_encoding(env->state())->get_encoding(); }
void rb_gc_unregister_address(VALUE* address) { NativeMethodEnvironment* env = NativeMethodEnvironment::get(); capi::Handle** loc = reinterpret_cast<capi::Handle**>(address); env->state()->vm()->shared.del_global_handle_location(loc); }