summaryrefslogtreecommitdiffhomepage
path: root/src/load.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-11-15 10:49:40 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-11-15 10:49:40 +0900
commit04a2c58e949843dcab9650c5a5ed2f2490bf0837 (patch)
tree53cd9e8810b8f618f31da977985627b7d73a08ed /src/load.c
parentd8f9a30ef37b5ac53b7e54123c870e069f5c88c7 (diff)
downloadmruby-04a2c58e949843dcab9650c5a5ed2f2490bf0837.tar.gz
mruby-04a2c58e949843dcab9650c5a5ed2f2490bf0837.zip
add new function mrb_load_irep_file_cxt() and simplifies mruby.c
Diffstat (limited to 'src/load.c')
-rw-r--r--src/load.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/load.c b/src/load.c
index 562a1a0d9..5b689368f 100644
--- a/src/load.c
+++ b/src/load.c
@@ -477,7 +477,7 @@ irep_error(mrb_state *mrb)
}
mrb_value
-mrb_load_irep(mrb_state *mrb, const uint8_t *bin)
+mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c)
{
mrb_irep *irep = mrb_read_irep(mrb, bin);
mrb_value val;
@@ -488,11 +488,18 @@ mrb_load_irep(mrb_state *mrb, const uint8_t *bin)
return mrb_nil_value();
}
proc = mrb_proc_new(mrb, irep);
- val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0);
mrb_irep_decref(mrb, irep);
+ if (c && c->no_exec) return mrb_obj_value(proc);
+ val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0);
return val;
}
+mrb_value
+mrb_load_irep(mrb_state *mrb, const uint8_t *bin)
+{
+ return mrb_load_irep_cxt(mrb, bin, NULL);
+}
+
#ifdef ENABLE_STDIO
static int
@@ -691,7 +698,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
}
mrb_value
-mrb_load_irep_file(mrb_state *mrb, FILE* fp)
+mrb_load_irep_file_cxt(mrb_state *mrb, FILE* fp, mrbc_context *c)
{
mrb_irep *irep = mrb_read_irep_file(mrb, fp);
mrb_value val;
@@ -702,8 +709,15 @@ mrb_load_irep_file(mrb_state *mrb, FILE* fp)
return mrb_nil_value();
}
proc = mrb_proc_new(mrb, irep);
- val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0);
mrb_irep_decref(mrb, irep);
+ if (c && c->no_exec) return mrb_obj_value(proc);
+ val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0);
return val;
}
+
+mrb_value
+mrb_load_irep_file(mrb_state *mrb, FILE* fp)
+{
+ return mrb_load_irep_file_cxt(mrb, fp, NULL);
+}
#endif /* ENABLE_STDIO */