Example #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
        }
Example #2
0
        public R_VAL DoString(string str)
        {
#if MRUBY
            int    arena        = RubyDLL.mrb_gc_arena_save(rb_state);
            IntPtr mrbc_context = RubyDLL.mrbc_context_new(rb_state);
            RubyDLL.mrbc_filename(this, mrbc_context, "*interactive*");
            var ret = RubyDLL.mrb_load_string_cxt(rb_state, RubyDLL.ToCBytes(str), mrbc_context);
            RubyDLL.mrbc_context_free(rb_state, mrbc_context);

            if (RubyDLL.mrb_has_exc(rb_state))
            {
                Console.WriteLine(GetExceptionBackTrace());
                RubyDLL.mrb_exc_clear(rb_state);
            }
            RubyDLL.mrb_gc_arena_restore(rb_state, arena);
            return(ret);
#else
            int status;

            // return RubyDLL.rb_eval_string ( str );
            return(RubyDLL.rb_eval_string_protect(str, out status));
#endif
        }