示例#1
0
文件: posix.c 项目: Hmaal/slash
static SLVAL
sl_new_oserror(sl_vm_t* vm, int errno)
{
    char* description = strerror(errno);
    SLVAL Posix_OSError = vm->store[cPosix_OSError];
    SLVAL error = sl_make_error2(vm, Posix_OSError, sl_make_cstring(vm, description));
    sl_set_ivar(vm, error, sl_intern(vm, "errno"), sl_make_int(vm, errno));
    return error;
}
示例#2
0
文件: ruby.c 项目: filp/slash
static void
sl_ruby_protect(sl_vm_t* vm, void(*func)(sl_vm_t*,void*), void* data)
{
    struct sl_ruby_protect_args args = { vm, data, func, 0, { 0 } };
    sl_vm_frame_t frame;
    pthread_mutex_lock(&sl_ruby_lock);
    SL_ENSURE(frame, {
        rb_rescue2(sl_ruby_protect_try, (VALUE)&args, sl_ruby_protect_catch, (VALUE)&args, rb_eException, 0);
        pthread_mutex_unlock(&sl_ruby_lock);
        if(args.exception) {
            SLVAL Ruby_Exception = sl_vm_store_get(vm, &cRuby_Exception);
            SLVAL err = sl_allocate(vm, Ruby_Exception);
            sl_error_set_message(vm, err, sl_ruby_to_slash(vm, rb_obj_as_string(args.exception)));
            sl_set_ivar(vm, err, sl_intern(vm, "object"), make_ruby_object(vm, args.exception));
            args.sl_exception = err;
        }
    }, {