From e28451585db8828e18b4638b1513352efb98f86c Mon Sep 17 00:00:00 2001 From: takkaw Date: Mon, 9 Sep 2019 22:32:10 +0900 Subject: add special local variable _ in mirb --- mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index 17b2ca16c..fc85cdac0 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -406,6 +406,26 @@ ctrl_c_handler(int signo) } #endif +#ifdef ENABLE_MIRB_UNDERSCORE +void decl_lv_underscore(mrb_state *mrb, mrbc_context *cxt) +{ + struct RProc *proc; + struct mrb_parser_state *parser; + + parser = mrb_parse_string(mrb, "_=nil", cxt); + if (parser == NULL) { + fputs("create parser state error\n", stderr); + mrb_close(mrb); + exit(EXIT_FAILURE); + } + + proc = mrb_generate_code(mrb, parser); + mrb_vm_run(mrb, proc, mrb_top_self(mrb), 0); + + mrb_parser_free(parser); +} +#endif + int main(int argc, char **argv) { @@ -471,6 +491,10 @@ main(int argc, char **argv) cxt = mrbc_context_new(mrb); +#ifdef ENABLE_MIRB_UNDERSCORE + decl_lv_underscore(mrb, cxt); +#endif + /* Load libraries */ for (i = 0; i < args.libc; i++) { FILE *lfp = fopen(args.libv[i], "r"); @@ -643,6 +667,9 @@ main(int argc, char **argv) result = mrb_any_to_s(mrb, result); } p(mrb, result, 1); +#ifdef ENABLE_MIRB_UNDERSCORE + *(mrb->c->stack + 1) = result; +#endif } } ruby_code[0] = '\0'; -- cgit v1.2.3 From 3f70e3a81f3855f13c2f1a1b9e7864bd0f562117 Mon Sep 17 00:00:00 2001 From: takkaw Date: Mon, 9 Sep 2019 23:40:51 +0900 Subject: change _ variable in mirb to be enable by default --- mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index fc85cdac0..45ead75f1 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -406,7 +406,7 @@ ctrl_c_handler(int signo) } #endif -#ifdef ENABLE_MIRB_UNDERSCORE +#ifndef DISABLE_MIRB_UNDERSCORE void decl_lv_underscore(mrb_state *mrb, mrbc_context *cxt) { struct RProc *proc; @@ -491,7 +491,7 @@ main(int argc, char **argv) cxt = mrbc_context_new(mrb); -#ifdef ENABLE_MIRB_UNDERSCORE +#ifndef DISABLE_MIRB_UNDERSCORE decl_lv_underscore(mrb, cxt); #endif @@ -667,7 +667,7 @@ main(int argc, char **argv) result = mrb_any_to_s(mrb, result); } p(mrb, result, 1); -#ifdef ENABLE_MIRB_UNDERSCORE +#ifndef DISABLE_MIRB_UNDERSCORE *(mrb->c->stack + 1) = result; #endif } -- cgit v1.2.3