From aa578c346db6058801a2b64781a50fab9ed1f74b Mon Sep 17 00:00:00 2001 From: Hiroshi Mimaki Date: Tue, 30 Jun 2020 18:33:47 +0900 Subject: Revert "Free the original pointer if `realloc` failed." This reverts commit 9cdf439db52b66447b4e37c61179d54fad6c8f33. --- src/gc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gc.c b/src/gc.c index 6c83911d5..03c561d35 100644 --- a/src/gc.c +++ b/src/gc.c @@ -225,9 +225,14 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) p2 = mrb_realloc_simple(mrb, p, len); if (len == 0) return p2; if (p2 == NULL) { - mrb_free(mrb, p); - mrb->gc.out_of_memory = TRUE; - mrb_raise_nomemory(mrb); + if (mrb->gc.out_of_memory) { + mrb_raise_nomemory(mrb); + /* mrb_panic(mrb); */ + } + else { + mrb->gc.out_of_memory = TRUE; + mrb_raise_nomemory(mrb); + } } else { mrb->gc.out_of_memory = FALSE; -- cgit v1.2.3 From b6b9c57f247a26fb5dbea129cd81fcc9b7d485a3 Mon Sep 17 00:00:00 2001 From: Hiroshi Mimaki Date: Wed, 1 Jul 2020 16:49:21 +0900 Subject: Update version to `2.1.2`. (mruby 2.1.2 RC) --- Doxyfile | 2 +- README.md | 2 +- doc/guides/debugger.md | 2 +- doc/limitations.md | 20 ++++++++++---------- include/mruby/version.h | 6 +++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Doxyfile b/Doxyfile index 86a657bc7..2550aac22 100644 --- a/Doxyfile +++ b/Doxyfile @@ -6,7 +6,7 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "mruby" -PROJECT_NUMBER = 2.1.1 +PROJECT_NUMBER = 2.1.2 PROJECT_BRIEF = "mruby is the lightweight implementation of the Ruby language" diff --git a/README.md b/README.md index cba00fe06..5bea9d442 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ of the Ministry of Economy, Trade and Industry of Japan. ## How to get mruby -The stable version 2.1.1 of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/archive/2.1.1.zip](https://github.com/mruby/mruby/archive/2.1.1.zip) +The stable version 2.1.2 of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/archive/2.1.2.zip](https://github.com/mruby/mruby/archive/2.1.2.zip) The latest development version of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/zipball/master](https://github.com/mruby/mruby/zipball/master) diff --git a/doc/guides/debugger.md b/doc/guides/debugger.md index 74f9f6115..b06153935 100644 --- a/doc/guides/debugger.md +++ b/doc/guides/debugger.md @@ -38,7 +38,7 @@ To confirm mrdb was installed properly, run mrdb with the `--version` option: ```bash $ mrdb --version -mruby 2.1.1 (2020-06-04) +mruby 2.1.2 (2020-07-10) ``` ## 2.2 Basic Operation diff --git a/doc/limitations.md b/doc/limitations.md index c3c027cb9..ea32ed3a5 100644 --- a/doc/limitations.md +++ b/doc/limitations.md @@ -38,7 +38,7 @@ puts [1,2,3] 3 ``` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] ``` [1, 2, 3] @@ -61,7 +61,7 @@ end `ZeroDivisionError` is raised. -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] No exception is raised. @@ -89,7 +89,7 @@ p Liste.new "foobar" ` [] ` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] `ArgumentError` is raised. @@ -119,7 +119,7 @@ false true ``` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] ``` true @@ -156,7 +156,7 @@ p 'ok' ok ``` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] ``` test.rb:8: undefined method 'test_func' (NoMethodError) @@ -178,7 +178,7 @@ defined?(Foo) nil ``` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] `NameError` is raised. @@ -195,7 +195,7 @@ alias $a $__a__ ` nil ` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] Syntax error @@ -217,7 +217,7 @@ end `ArgumentError` is raised. The re-defined `+` operator does not accept any arguments. -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] ` 'ab' ` Behavior of the operator wasn't changed. @@ -233,7 +233,7 @@ $ ruby -e 'puts Proc.new {}.binding' # ``` -#### mruby [2.1.1 (2020-06-04)] +#### mruby [2.1.2 (2020-07-10)] ``` $ ./bin/mruby -e 'puts Proc.new {}.binding' @@ -255,7 +255,7 @@ $ ruby -e 'def m(*r,**k) p [r,k] end; m("a"=>1,:b=>2)' [[{"a"=>1}], {:b=>2}] ``` -#### mruby [mruby 2.1.1] +#### mruby [mruby 2.1.2] ``` $ ./bin/mruby -e 'def m(*r,**k) p [r,k] end; m("a"=>1,:b=>2)' diff --git a/include/mruby/version.h b/include/mruby/version.h index 64664b700..b77c3a9c6 100644 --- a/include/mruby/version.h +++ b/include/mruby/version.h @@ -47,7 +47,7 @@ MRB_BEGIN_DECL /* * Tiny release version number. */ -#define MRUBY_RELEASE_TEENY 1 +#define MRUBY_RELEASE_TEENY 2 /* * The mruby version. @@ -67,12 +67,12 @@ MRB_BEGIN_DECL /* * Release month. */ -#define MRUBY_RELEASE_MONTH 6 +#define MRUBY_RELEASE_MONTH 7 /* * Release day. */ -#define MRUBY_RELEASE_DAY 4 +#define MRUBY_RELEASE_DAY 10 /* * Release date as a string. -- cgit v1.2.3 From cdf45438f03379292e71f5c16e7b2fe221b8b272 Mon Sep 17 00:00:00 2001 From: dearblue Date: Thu, 16 Jul 2020 23:11:30 +0900 Subject: Fixed shift width for `MRB_ENV_SET_BIDX()` ref c07f24cd1 and close #5035 --- include/mruby/proc.h | 2 +- test/t/kernel.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/mruby/proc.h b/include/mruby/proc.h index ef5357d5d..12013c3ae 100644 --- a/include/mruby/proc.h +++ b/include/mruby/proc.h @@ -34,7 +34,7 @@ struct REnv { #define MRB_ENV_HEAP_P(e) ((e)->flags & MRB_ENV_HEAPED) #define MRB_ENV_ONSTACK_P(e) (((e)->flags & MRB_ENV_CLOSED) == 0) #define MRB_ENV_BIDX(e) (((e)->flags >> 8) & 0xff) -#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0xff<<8))|((unsigned int)(idx) & 0xff)<<10)) +#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0xff<<8))|((unsigned int)(idx) & 0xff)<<8)) void mrb_env_unshare(mrb_state*, struct REnv*); diff --git a/test/t/kernel.rb b/test/t/kernel.rb index b7291a000..606150147 100644 --- a/test/t/kernel.rb +++ b/test/t/kernel.rb @@ -116,6 +116,13 @@ assert('Kernel#block_given?', '15.3.1.3.6') do "block" end end + + def bg_try_in_block + -> { block_given? }[] + end + + assert_false bg_try_in_block + assert_true bg_try_in_block{} end assert('Kernel#class', '15.3.1.3.7') do -- cgit v1.2.3 From 63956036e116ef6a33a91e16348c4d1a09f6f72c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 21 Jul 2020 12:47:35 +0900 Subject: Fix the VM stack handling bug in 'mrb_yield_with_class()`; fix #5042 --- src/vm.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/vm.c b/src/vm.c index 136ea2fcf..f74be7edd 100644 --- a/src/vm.c +++ b/src/vm.c @@ -754,16 +754,25 @@ mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value ci = cipush(mrb); ci->mid = mid; ci->proc = p; - ci->stackent = mrb->c->stack; - ci->argc = (int)argc; ci->target_class = c; ci->acc = CI_ACC_SKIP; - n = MRB_PROC_CFUNC_P(p) ? (int)(argc+2) : p->body.irep->nregs; - mrb->c->stack = mrb->c->stack + n; + ci->stackent = mrb->c->stack; + mrb->c->stack += n; + if (argc >= CALL_MAXARGS) { + ci->argc = -1; + n = 3; + } + else { + ci->argc = (int)argc; + n = argc + 2; + } mrb_stack_extend(mrb, n); - mrb->c->stack[0] = self; - if (argc > 0) { + if (ci->argc < 0) { + mrb->c->stack[1] = mrb_ary_new_from_values(mrb, argc, argv); + argc = 1; + } + else if (argc > 0) { stack_copy(mrb->c->stack+1, argv, argc); } mrb->c->stack[argc+1] = mrb_nil_value(); -- cgit v1.2.3 From 112120969d5a08c9d496e176a2655bbe1ff7f97b Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sat, 25 Jul 2020 16:59:02 +0900 Subject: Use type tag for hash code in `ht_hash_func()` The function corresponding to `ht_hash_func()` was as follows in the days of khash implementation (before d78acc7a). ```c mrb_hash_ht_hash_func(mrb_state *mrb, mrb_value key) { enum mrb_vtype t = mrb_type(key); ... switch (t) { ... default: hv = mrb_funcall(mrb, key, "hash", 0); h = (khint_t)t ^ (khint_t)mrb_fixnum(hv); break; } ... } ``` When switched to the segmented list implementation (d78acc7a), this function was changed as follows. ```c sg_hash_func(mrb_state *mrb, seglist *t, mrb_value key) { enum mrb_vtype tt = mrb_type(key); ... switch (tt) { ... default: hv = mrb_funcall(mrb, key, "hash", 0); h = (size_t)t ^ (size_t)mrb_fixnum(hv); break; } ... } ``` Since the argument `t` was added, the variable for type tag was changed from `t` to `tt`, but the variable used in the expression of `h` remained `t`. Probably this is an omission of change, so fixed it. --- src/hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hash.c b/src/hash.c index 4d5310903..d9ee483d5 100644 --- a/src/hash.c +++ b/src/hash.c @@ -73,7 +73,7 @@ ht_hash_func(mrb_state *mrb, htable *t, mrb_value key) default: hv = mrb_funcall(mrb, key, "hash", 0); - h = (size_t)t ^ (size_t)mrb_fixnum(hv); + h = (size_t)tt ^ (size_t)mrb_fixnum(hv); break; } if (index && (index != t->index || capa != index->capa)) { -- cgit v1.2.3 From 1a9bdfcde5fd7c91e756747ba0565f29385115a7 Mon Sep 17 00:00:00 2001 From: Hiroshi Mimaki Date: Thu, 6 Aug 2020 12:45:59 +0900 Subject: Update release date. --- doc/guides/debugger.md | 2 +- doc/limitations.md | 18 +++++++++--------- include/mruby/version.h | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/guides/debugger.md b/doc/guides/debugger.md index b06153935..61c0418b0 100644 --- a/doc/guides/debugger.md +++ b/doc/guides/debugger.md @@ -38,7 +38,7 @@ To confirm mrdb was installed properly, run mrdb with the `--version` option: ```bash $ mrdb --version -mruby 2.1.2 (2020-07-10) +mruby 2.1.2 (2020-08-06) ``` ## 2.2 Basic Operation diff --git a/doc/limitations.md b/doc/limitations.md index ea32ed3a5..770daa7a4 100644 --- a/doc/limitations.md +++ b/doc/limitations.md @@ -38,7 +38,7 @@ puts [1,2,3] 3 ``` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] ``` [1, 2, 3] @@ -61,7 +61,7 @@ end `ZeroDivisionError` is raised. -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] No exception is raised. @@ -89,7 +89,7 @@ p Liste.new "foobar" ` [] ` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] `ArgumentError` is raised. @@ -119,7 +119,7 @@ false true ``` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] ``` true @@ -156,7 +156,7 @@ p 'ok' ok ``` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] ``` test.rb:8: undefined method 'test_func' (NoMethodError) @@ -178,7 +178,7 @@ defined?(Foo) nil ``` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] `NameError` is raised. @@ -195,7 +195,7 @@ alias $a $__a__ ` nil ` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] Syntax error @@ -217,7 +217,7 @@ end `ArgumentError` is raised. The re-defined `+` operator does not accept any arguments. -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] ` 'ab' ` Behavior of the operator wasn't changed. @@ -233,7 +233,7 @@ $ ruby -e 'puts Proc.new {}.binding' # ``` -#### mruby [2.1.2 (2020-07-10)] +#### mruby [2.1.2 (2020-08-06)] ``` $ ./bin/mruby -e 'puts Proc.new {}.binding' diff --git a/include/mruby/version.h b/include/mruby/version.h index b77c3a9c6..f52cb3ffd 100644 --- a/include/mruby/version.h +++ b/include/mruby/version.h @@ -67,12 +67,12 @@ MRB_BEGIN_DECL /* * Release month. */ -#define MRUBY_RELEASE_MONTH 7 +#define MRUBY_RELEASE_MONTH 8 /* * Release day. */ -#define MRUBY_RELEASE_DAY 10 +#define MRUBY_RELEASE_DAY 6 /* * Release date as a string. -- cgit v1.2.3