static sl_object_t* allocate_regexp(sl_vm_t* vm) { sl_object_t* re = sl_alloc(vm->arena, sizeof(sl_regexp_t)); sl_gc_set_finalizer(re, (void(*)(void*))free_regexp); return re; }
static sl_object_t* alloc_ruby_object(sl_vm_t* vm) { sl_ruby_object_t* obj = sl_alloc(vm->arena, sizeof(sl_ruby_object_t)); obj->obj = Qnil; rb_gc_register_address(&obj->obj); sl_gc_set_finalizer(obj, free_ruby_object); return (sl_object_t*)obj; }
static sl_object_t* slash_alloc(sl_vm_t* vm) { slash_t* sl = sl_alloc(vm->arena, sizeof(*sl)); sl->vm = NULL; sl->host_vm = vm; sl->output_handler = vm->lib.nil; sl_gc_set_finalizer(sl, slash_free); return (sl_object_t*)sl; }