From 080480092145ce456f432060cae48431518eb82f Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sat, 27 Jul 2013 13:16:08 +0900 Subject: I replace 0 with NULL because struct pointer be should set NULL in. --- mrbgems/mruby-object-ext/src/object.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index 598ebe91d..927a23d66 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -59,7 +59,7 @@ nil_to_i(mrb_state *mrb, mrb_value obj) * k.instance_exec(5) {|x| @secret+x } #=> 104 */ -mrb_value +mrb_value mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c); static mrb_value @@ -69,7 +69,7 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) int argc; mrb_value blk; struct RClass *c; - + mrb_get_args(mrb, "*&", &argv, &argc, &blk); if (mrb_nil_p(blk)) { @@ -80,7 +80,7 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) case MRB_TT_SYMBOL: case MRB_TT_FIXNUM: case MRB_TT_FLOAT: - c = 0; + c = NULL; break; default: c = mrb_class_ptr(mrb_singleton_class(mrb, self)); -- cgit v1.2.3 From d6b24de6e1b7384c5cd974cefc63865f7f705ed4 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sat, 27 Jul 2013 14:57:34 +0900 Subject: I replace 'Pre-Conditions' with 'Preconditions' because the former is a wrong word. --- doc/mrbgems/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/mrbgems/README.md b/doc/mrbgems/README.md index 881fbb228..65b794dc0 100644 --- a/doc/mrbgems/README.md +++ b/doc/mrbgems/README.md @@ -156,7 +156,7 @@ the following options additionally inside of your GEM specification: mruby can be extended with C. This is possible by using the C API to integrate C libraries into mruby. -### Pre-Conditions +### Preconditions mrbgems expects that you have implemented a C method called `mrb_YOURGEMNAME_gem_init(mrb_state)`. `YOURGEMNAME` will be replaced -- cgit v1.2.3 From ff40793fc726c3d05cbf38ec703d8d39a0dd09df Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sun, 28 Jul 2013 13:15:22 -0400 Subject: Remove pop that was done when not a return val --- src/codegen.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index 37176653b..3f18aad0b 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1551,7 +1551,6 @@ codegen(codegen_scope *s, node *tree, int val) // variable rhs codegen(s, t, VAL); gen_vmassignment(s, tree->car, rhs, val); - if (!val) pop(); } } break; -- cgit v1.2.3 From 2eb2cdf0deefeb090e9737f86e5c300660bda299 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sun, 28 Jul 2013 13:35:00 -0400 Subject: Add a couple splat tests --- test/t/syntax.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/t/syntax.rb b/test/t/syntax.rb index 332cfcca8..b975d0103 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -65,3 +65,12 @@ assert('Abbreviated variable assignment as returns') do end assert_equal Syntax4AbbrVarAsgnAsReturns::A.new.b, 1 end + +assert('Splat and mass assignment') do + *a = *[1,2,3] + b, *c = *[7,8,9] + + assert_equal [1,2,3], a + assert_equal 7, b + assert_equal [8,9], c +end -- cgit v1.2.3 From dbd36128ad652c743ecb9331f7c4b9ba4a9fb933 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 30 Jul 2013 01:33:02 +0900 Subject: forget to re-initialize target_class for top-level eval; close #1418 --- include/mruby/compile.h | 1 + src/parse.y | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/mruby/compile.h b/include/mruby/compile.h index c1c646508..7c5884e58 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -23,6 +23,7 @@ typedef struct mrbc_context { short lineno; int (*partial_hook)(struct mrb_parser_state*); void *partial_data; + struct RClass *target_class; mrb_bool capture_errors:1; mrb_bool dump_result:1; mrb_bool no_exec:1; diff --git a/src/parse.y b/src/parse.y index 9a83d5cbd..168dca9f0 100644 --- a/src/parse.y +++ b/src/parse.y @@ -5207,9 +5207,13 @@ mrb_parse_string(mrb_state *mrb, const char *s, mrbc_context *c) return mrb_parse_nstring(mrb, s, strlen(s), c); } +struct RProc* mrb_proc_new_with_target(mrb_state *mrb, mrb_irep *irep, struct RClass *target); + static mrb_value load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) { + struct RClass *target = mrb->object_class; + struct RProc *proc; int n; mrb_value v; @@ -5243,8 +5247,11 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) if (c) { if (c->dump_result) codedump_all(mrb, n); if (c->no_exec) return mrb_fixnum_value(n); + if (c->target_class) target = c->target_class; } - v = mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + proc = mrb_proc_new(mrb, mrb->irep[n]); + proc->target_class = target; + v = mrb_run(mrb, proc, mrb_top_self(mrb)); if (mrb->exc) return mrb_nil_value(); return v; } -- cgit v1.2.3 From 326396a6e365ccaf7692aca216c85693f790ed22 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 31 Jul 2013 00:16:55 +0900 Subject: remove unused mrb_proc_new_with_target() --- src/parse.y | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/parse.y b/src/parse.y index 168dca9f0..50ba0b1c8 100644 --- a/src/parse.y +++ b/src/parse.y @@ -5207,8 +5207,6 @@ mrb_parse_string(mrb_state *mrb, const char *s, mrbc_context *c) return mrb_parse_nstring(mrb, s, strlen(s), c); } -struct RProc* mrb_proc_new_with_target(mrb_state *mrb, mrb_irep *irep, struct RClass *target); - static mrb_value load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) { -- cgit v1.2.3 From 029613bc5510e240a0e4c080ab9c03f56a6f7c02 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 31 Jul 2013 00:31:37 +0900 Subject: stop storing target_class info for C defined methods --- src/class.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/class.c b/src/class.c index ad4c9eaa2..6d77f24e6 100644 --- a/src/class.c +++ b/src/class.c @@ -311,7 +311,6 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f int ai = mrb_gc_arena_save(mrb); p = mrb_proc_new_cfunc(mrb, func); - p->target_class = c; mrb_define_method_raw(mrb, c, mid, p); mrb_gc_arena_restore(mrb, ai); } -- cgit v1.2.3 From 1b6b00e2d02db0c8a0e0460412932a62968c8835 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 31 Jul 2013 11:52:34 +0900 Subject: remove unnecessary spaces --- build_config.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build_config.rb b/build_config.rb index 8367f4ca5..fce424686 100644 --- a/build_config.rb +++ b/build_config.rb @@ -42,25 +42,25 @@ MRuby::Build.new do |conf| # linker.option_library_path = '-L%s' # linker.link_options = "%{flags} -o %{outfile} %{objs} %{libs}" # end - + # Archiver settings # conf.archiver do |archiver| # archiver.command = ENV['AR'] || 'ar' # archiver.archive_options = 'rs %{outfile} %{objs}' # end - + # Parser generator settings # conf.yacc do |yacc| # yacc.command = ENV['YACC'] || 'bison' # yacc.compile_options = '-o %{outfile} %{infile}' # end - + # gperf settings # conf.gperf do |gperf| # gperf.command = 'gperf' # gperf.compile_options = '-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" %{infile} > %{outfile}' # end - + # file extensions # conf.exts do |exts| # exts.object = '.o' @@ -75,12 +75,12 @@ end # Define cross build settings # MRuby::CrossBuild.new('32bit') do |conf| # toolchain :gcc -# +# # conf.cc.flags << "-m32" # conf.linker.flags << "-m32" # # conf.build_mrbtest_lib_only -# +# # conf.gem 'examples/mrbgems/c_and_ruby_extension_example' # # conf.test_runner.command = 'env' -- cgit v1.2.3 From 016640324744a3bdf963fc276bce3b3806bd9850 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 31 Jul 2013 11:53:48 +0900 Subject: add new mrbgem mruby-exit --- mrbgems/mruby-exit/mrbgem.rake | 4 ++++ mrbgems/mruby-exit/src/mruby-exit.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 mrbgems/mruby-exit/mrbgem.rake create mode 100644 mrbgems/mruby-exit/src/mruby-exit.c diff --git a/mrbgems/mruby-exit/mrbgem.rake b/mrbgems/mruby-exit/mrbgem.rake new file mode 100644 index 000000000..910b3b4f9 --- /dev/null +++ b/mrbgems/mruby-exit/mrbgem.rake @@ -0,0 +1,4 @@ +MRuby::Gem::Specification.new('mruby-exit') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' +end diff --git a/mrbgems/mruby-exit/src/mruby-exit.c b/mrbgems/mruby-exit/src/mruby-exit.c new file mode 100644 index 000000000..d81657592 --- /dev/null +++ b/mrbgems/mruby-exit/src/mruby-exit.c @@ -0,0 +1,24 @@ +#include +#include "mruby.h" + +static mrb_value +f_exit(mrb_state *mrb, mrb_value self) +{ + mrb_int i = EXIT_SUCCESS; + + mrb_get_args(mrb, "|i", &i); + exit(i); + /* not reached */ + return mrb_nil_value(); +} + +void +mrb_mruby_exit_gem_init(mrb_state* mrb) +{ + mrb_define_method(mrb, mrb->kernel_module, "exit", f_exit, MRB_ARGS_REQ(1)); +} + +void +mrb_mruby_exit_gem_final(mrb_state* mrb) +{ +} -- cgit v1.2.3 From c550a0f834a09bbcacf1dfe62545ff256863f7e3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 31 Jul 2013 22:24:10 +0900 Subject: move mrb_gc_arena_restore() after cipop(); a bug found by Kilo Kawai --- src/vm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vm.c b/src/vm.c index 3cdf57551..4d99ad413 100644 --- a/src/vm.c +++ b/src/vm.c @@ -386,9 +386,9 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr if (MRB_PROC_CFUNC_P(p)) { int ai = mrb_gc_arena_save(mrb); val = p->body.func(mrb, self); - mrb_gc_arena_restore(mrb, ai); mrb->c->stack = mrb->c->stbase + mrb->c->ci->stackidx; cipop(mrb); + mrb_gc_arena_restore(mrb, ai); } else { val = mrb_run(mrb, p, self); -- cgit v1.2.3 From 7f282429b0a6d8033be44db012d75a571eab7273 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 1 Aug 2013 11:56:20 +0900 Subject: ci->target_class should be updated as well; #1418 --- src/parse.y | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/parse.y b/src/parse.y index 50ba0b1c8..4fa9e70de 100644 --- a/src/parse.y +++ b/src/parse.y @@ -5245,10 +5245,15 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) if (c) { if (c->dump_result) codedump_all(mrb, n); if (c->no_exec) return mrb_fixnum_value(n); - if (c->target_class) target = c->target_class; + if (c->target_class) { + target = c->target_class; + } } proc = mrb_proc_new(mrb, mrb->irep[n]); proc->target_class = target; + if (mrb->c->ci) { + mrb->c->ci->target_class = target; + } v = mrb_run(mrb, proc, mrb_top_self(mrb)); if (mrb->exc) return mrb_nil_value(); return v; -- cgit v1.2.3 From d5eab236e7ca92e361cc9bc13e4a72a2ea99a519 Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Thu, 1 Aug 2013 11:32:46 +0800 Subject: Fix assignment of block as actual value and not expected --- test/assert.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/assert.rb b/test/assert.rb index 98057331b..3d35fc267 100644 --- a/test/assert.rb +++ b/test/assert.rb @@ -101,7 +101,7 @@ end def assert_equal(arg1, arg2 = nil, arg3 = nil) if block_given? - exp, act, msg = yield, arg1, arg2 + exp, act, msg = arg1, yield, arg2 else exp, act, msg = arg1, arg2, arg3 end @@ -113,7 +113,7 @@ end def assert_not_equal(arg1, arg2 = nil, arg3 = nil) if block_given? - exp, act, msg = yield, arg1, arg2 + exp, act, msg = arg1, yield, arg2 else exp, act, msg = arg1, arg2, arg3 end -- cgit v1.2.3