Beispiel #1
0
        public static R_VAL DoFile(IntPtr mrb, string path)
        {
            if (!File.Exists(path))
            {
                return(R_VAL.NIL);
            }

#if MRUBY
            string filename     = Path.GetFileName(path);
            int    arena        = RubyDLL.mrb_gc_arena_save(mrb);
            IntPtr mrbc_context = RubyDLL.mrbc_context_new(mrb);
            RubyDLL.mrbc_filename(mrb, mrbc_context, filename);
            var ret = RubyDLL.mrb_load_string_cxt(mrb, RubyDLL.ToCBytes(File.ReadAllText(path)), mrbc_context);
            RubyDLL.mrbc_context_free(mrb, mrbc_context);
            if (RubyDLL.mrb_has_exc(mrb))
            {
                Console.WriteLine(GetExceptionBackTrace(mrb));
                RubyDLL.mrb_exc_clear(mrb);
            }
            RubyDLL.mrb_gc_arena_restore(mrb, arena);
            return(ret);
#else
            int status;
            RubyDLL.rb_load_protect(R_VAL.Create(path), 0, out status);
            return(status == 0 ? R_VAL.TRUE : R_VAL.FALSE);
#endif
        }