diff options
| -rw-r--r-- | include/mruby.h | 6 | ||||
| -rw-r--r-- | include/mruby/compile.h | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-debugger/bintest/print.rb | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-enum-lazy/mrblib/lazy.rb | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-enumerator/mrblib/enumerator.rb | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-object-ext/src/object.c | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 78 | ||||
| -rw-r--r-- | mrbgems/mruby-sprintf/test/sprintf.rb | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-string-ext/src/string.c | 20 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 1 | ||||
| -rw-r--r-- | mrblib/10error.rb | 4 | ||||
| -rw-r--r-- | mrblib/string.rb | 2 | ||||
| -rw-r--r-- | src/array.c | 2 | ||||
| -rw-r--r-- | src/class.c | 4 | ||||
| -rw-r--r-- | src/gc.c | 2 | ||||
| -rw-r--r-- | src/kernel.c | 4 | ||||
| -rw-r--r-- | src/vm.c | 18 | ||||
| -rw-r--r-- | tasks/toolchains/android.rake | 2 | ||||
| -rw-r--r-- | test/assert.rb | 8 | ||||
| -rw-r--r-- | test/t/kernel.rb | 4 | ||||
| -rw-r--r-- | test/t/superclass.rb | 3 |
24 files changed, 92 insertions, 85 deletions
diff --git a/include/mruby.h b/include/mruby.h index 995e1a743..9ffe37a2e 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1186,8 +1186,8 @@ MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...); static inline void* mrbmemcpy(void *dst, const void *src, size_t n) { - char *d = dst; - const char *s = src; + char *d = (char*)dst; + const char *s = (const char*)src; while (n--) *d++ = *s++; return d; @@ -1197,7 +1197,7 @@ mrbmemcpy(void *dst, const void *src, size_t n) static inline void* mrbmemset(void *s, int c, size_t n) { - char *t = s; + char *t = (char*)s; while (n--) *t++ = c; return s; diff --git a/include/mruby/compile.h b/include/mruby/compile.h index ad3f19db1..13e04d0fc 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -33,6 +33,8 @@ typedef struct mrbc_context { mrb_bool no_exec:1; mrb_bool keep_lv:1; mrb_bool no_optimize:1; + + size_t parser_nerr; } mrbc_context; MRB_API mrbc_context* mrbc_context_new(mrb_state *mrb); diff --git a/mrbgems/mruby-bin-debugger/bintest/print.rb b/mrbgems/mruby-bin-debugger/bintest/print.rb index 403ada8e1..1bc96c478 100644 --- a/mrbgems/mruby-bin-debugger/bintest/print.rb +++ b/mrbgems/mruby-bin-debugger/bintest/print.rb @@ -341,8 +341,8 @@ assert('mruby-bin-debugger(print) Literal:Numeric') do tc << {:cmd=>"p +0100", :exp=>'$3 = 64'} tc << {:cmd=>"p 0x100", :exp=>'$4 = 256'} tc << {:cmd=>"p 1_234", :exp=>'$5 = 1234'} - tc << {:cmd=>"p 0b1000_0000", :exp=>"$6 = #{0b1000_0000.to_s}"} - tc << {:cmd=>"p 0x1000_0000", :exp=>"$7 = #{0x1000_0000.to_s}"} + tc << {:cmd=>"p 0b1000_0000", :exp=>"$6 = #{0b1000_0000}"} + tc << {:cmd=>"p 0x1000_0000", :exp=>"$7 = #{0x1000_0000}"} tc << {:cmd=>"p 3.14", :exp=>'$8 = 3.14'} tc << {:cmd=>"p -12.3", :exp=>'$9 = -12.3'} diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index daf6100a3..3094ead69 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2948,7 +2948,7 @@ loop_break(codegen_scope *s, node *tree) genop_peep(s, MKOP_A(OP_POPERR, 1), NOVAL); loop = loop->prev; } - while (loop && loop->type == LOOP_RESCUE) { + while (loop && (loop->type == LOOP_RESCUE || loop->type == LOOP_BEGIN)) { loop = loop->prev; } if (!loop) { diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 1266bb8f5..76f1ceb2b 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -5777,6 +5777,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) return mrb_undef_value(); } if (!p->tree || p->nerr) { + c->parser_nerr = p->nerr; if (p->capture_errors) { char buf[256]; int n; diff --git a/mrbgems/mruby-enum-lazy/mrblib/lazy.rb b/mrbgems/mruby-enum-lazy/mrblib/lazy.rb index b650072e2..8a7ac7fdc 100644 --- a/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +++ b/mrbgems/mruby-enum-lazy/mrblib/lazy.rb @@ -69,7 +69,7 @@ class Enumerator def reject(&block) Lazy.new(self){|yielder, val| - if not block.call(val) + unless block.call(val) yielder << val end } diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb index c7b78be5c..a60f19aaf 100644 --- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb +++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb @@ -612,7 +612,7 @@ module Kernel def to_enum(meth=:each, *args) Enumerator.new self, meth, *args end - alias :enum_for :to_enum + alias enum_for to_enum end module Enumerable diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 8a6146dbe..0a6d92f67 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -125,6 +125,7 @@ fiber_init(mrb_state *mrb, mrb_value self) ci = c->ci; ci->target_class = p->target_class; ci->proc = p; + mrb_field_write_barrier(mrb, (struct RBasic*)mrb_obj_ptr(self), (struct RBasic*)p); ci->pc = p->body.irep->iseq; ci->nregs = p->body.irep->nregs; ci[1] = ci[0]; diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index c6caf935f..35a07b584 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -67,7 +67,6 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) mrb_int argc; mrb_value blk; struct RClass *c; - mrb_value args; mrb_get_args(mrb, "*&", &argv, &argc, &blk); @@ -85,8 +84,6 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) c = mrb_class_ptr(mrb_singleton_class(mrb, self)); break; } - args = mrb_ary_new_from_values(mrb, argc, argv); - argv = RARRAY_PTR(args); mrb->c->ci->target_class = c; return mrb_yield_cont(mrb, blk, self, argc, argv); } diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index b1dfabbc2..df0edf590 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -528,7 +528,6 @@ mrb_str_format(mrb_state *mrb, int argc, const mrb_value *argv, mrb_value fmt) mrb_int n; mrb_int width; mrb_int prec; - int flags = FNONE; int nextarg = 1; int posarg = 0; mrb_value nextvalue; @@ -564,6 +563,7 @@ mrb_str_format(mrb_state *mrb, int argc, const mrb_value *argv, mrb_value fmt) for (; p < end; p++) { const char *t; mrb_sym id = 0; + int flags = FNONE; for (t = p; t < end && *t != '%'; t++) ; if (t + 1 == end) ++t; @@ -701,17 +701,27 @@ retry: tmp = mrb_check_string_type(mrb, val); if (!mrb_nil_p(tmp)) { - if (mrb_fixnum(mrb_funcall(mrb, tmp, "size", 0)) != 1 ) { + if (RSTRING_LEN(tmp) != 1) { mrb_raise(mrb, E_ARGUMENT_ERROR, "%c requires a character"); } } else if (mrb_fixnum_p(val)) { - tmp = mrb_funcall(mrb, val, "chr", 0); + mrb_int n = mrb_fixnum(val); + + if (n < 0x80) { + char buf[1]; + + buf[0] = (char)n; + tmp = mrb_str_new(mrb, buf, 1); + } + else { + tmp = mrb_funcall(mrb, val, "chr", 0); + mrb_check_type(mrb, tmp, MRB_TT_STRING); + } } else { mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid character"); } - mrb_check_type(mrb, tmp, MRB_TT_STRING); c = RSTRING_PTR(tmp); n = RSTRING_LEN(tmp); if (!(flags & FWIDTH)) { @@ -791,13 +801,6 @@ retry: int base; mrb_int len; - switch (*p) { - case 'd': - case 'i': - sign = 1; break; - default: - break; - } if (flags & FSHARP) { switch (*p) { case 'o': prefix = "0"; break; @@ -835,22 +838,14 @@ retry: case 'b': case 'B': base = 2; break; - case 'u': case 'd': case 'i': + sign = 1; + case 'u': default: base = 10; break; } - if (base == 2) { - if (v < 0 && !sign) { - val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base); - dots = 1; - } - else { - val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base); - } - } if (sign) { if (v > 0) { if (flags & FPLUS) { @@ -862,37 +857,33 @@ retry: width--; } } - switch (base) { - case 2: - strncpy(nbuf, RSTRING_PTR(val), sizeof(nbuf)); - break; - case 8: - snprintf(nbuf, sizeof(nbuf), "%" MRB_PRIo, v); - break; - case 10: - snprintf(nbuf, sizeof(nbuf), "%" MRB_PRId, v); - break; - case 16: - snprintf(nbuf, sizeof(nbuf), "%" MRB_PRIx, v); - break; + else { + sc = '-'; + width--; + v = -v; } + mrb_assert(base == 10); + snprintf(nbuf, sizeof(nbuf), "%" MRB_PRId, v); s = nbuf; } else { s = nbuf; - if (base != 10 && v < 0) { + if (v < 0) { dots = 1; } switch (base) { case 2: + if (v < 0) { + val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base); + } + else { + val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base); + } strncpy(++s, RSTRING_PTR(val), sizeof(nbuf)-1); break; case 8: snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRIo, v); break; - case 10: - snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRId, v); - break; case 16: snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRIx, v); break; @@ -920,11 +911,6 @@ retry: len = (mrb_int)size; } - if (dots) { - prec -= 2; - width -= 2; - } - if (*p == 'X') { char *pp = s; int c; @@ -980,7 +966,11 @@ retry: int plen = (int)strlen(prefix); PUSH(prefix, plen); } - if (dots) PUSH("..", 2); + if (dots) { + prec -= 2; + width -= 2; + PUSH("..", 2); + } if (prec > len) { CHECK(prec - len); diff --git a/mrbgems/mruby-sprintf/test/sprintf.rb b/mrbgems/mruby-sprintf/test/sprintf.rb index 2c4a7f7a9..89620606b 100644 --- a/mrbgems/mruby-sprintf/test/sprintf.rb +++ b/mrbgems/mruby-sprintf/test/sprintf.rb @@ -75,7 +75,7 @@ assert("String#% with invalid chr") do end assert_raise TypeError do - "%c" % 0 + "%c" % 0x80 end ensure class Fixnum diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 6bab87b06..0d834b6ef 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -601,18 +601,26 @@ mrb_str_upto(mrb_state *mrb, mrb_value beg) if (ISDIGIT(RSTRING_PTR(beg)[0]) && ISDIGIT(RSTRING_PTR(end)[0]) && all_digits_p(RSTRING_PTR(beg), RSTRING_LEN(beg)) && all_digits_p(RSTRING_PTR(end), RSTRING_LEN(end))) { - int ai = mrb_gc_arena_save(mrb); mrb_int min_width = RSTRING_LEN(beg); - mrb_int max_width = RSTRING_LEN(end); mrb_int bi = mrb_int(mrb, mrb_str_to_inum(mrb, beg, 10, FALSE)); mrb_int ei = mrb_int(mrb, mrb_str_to_inum(mrb, end, 10, FALSE)); - mrb_value str = mrb_str_new(mrb, NULL, max_width); - char *buf = RSTRING_PTR(str); + int ai = mrb_gc_arena_save(mrb); while (bi <= ei) { + mrb_value ns, str; + if (excl && bi == ei) break; - snprintf(buf, max_width+1, "%.*" MRB_PRId, (int)min_width, bi); - mrb_yield(mrb, block, mrb_str_new(mrb, buf, strlen(buf))); + ns = mrb_format(mrb, "%S", mrb_fixnum_value(bi)); + if (min_width > RSTRING_LEN(ns)) { + str = mrb_str_new(mrb, NULL, min_width); + memset(RSTRING_PTR(str), '0', min_width-RSTRING_LEN(ns)); + memcpy(RSTRING_PTR(str)+min_width-RSTRING_LEN(ns), + RSTRING_PTR(ns), RSTRING_LEN(ns)); + } + else { + str = ns; + } + mrb_yield(mrb, block, str); mrb_gc_arena_restore(mrb, ai); bi++; } diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index c5fd34754..1d4fdca92 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -276,7 +276,6 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) mrb_int argc; name = mrb_nil_value(); - rest = mrb_nil_value(); mrb_get_args(mrb, "*&", &argv, &argc, &b); if (argc == 0) { /* special case to avoid crash */ rest = mrb_ary_new(mrb); diff --git a/mrblib/10error.rb b/mrblib/10error.rb index 2674af7a2..22a8d1ad7 100644 --- a/mrblib/10error.rb +++ b/mrblib/10error.rb @@ -2,8 +2,8 @@ class ArgumentError < StandardError end -# ISO 15.2.25 -class LocalJumpError < StandardError +# ISO 15.2.25 says "LocalJumpError < StandardError" +class LocalJumpError < ScriptError end # ISO 15.2.26 diff --git a/mrblib/string.rb b/mrblib/string.rb index f91b5a23c..4c6114ecb 100644 --- a/mrblib/string.rb +++ b/mrblib/string.rb @@ -133,7 +133,7 @@ class String if args.length == 2 && block block = nil end - if !block + unless block replace = replace.to_str end result = [] diff --git a/src/array.c b/src/array.c index 86fb50e5c..8b6b9fa1e 100644 --- a/src/array.c +++ b/src/array.c @@ -169,7 +169,7 @@ ary_expand_capa(mrb_state *mrb, struct RArray *a, mrb_int len) { mrb_int capa = a->aux.capa; - if (len > ARY_MAX_SIZE) { + if (len > ARY_MAX_SIZE || len < 0) { size_error: mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big"); } diff --git a/src/class.c b/src/class.c index 0eea9b4dc..99ad14d81 100644 --- a/src/class.c +++ b/src/class.c @@ -902,7 +902,9 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) if (argc > i) { *pl = argc-i; if (*pl > 0) { - *var = ARGV + arg_i; + mrb_value args = mrb_ary_new_from_values(mrb, *pl, ARGV+arg_i); + RARRAY(args)->c = NULL; + *var = (mrb_value*)RARRAY_PTR(args); } i = argc; arg_i += *pl; @@ -579,6 +579,8 @@ mark_context(mrb_state *mrb, struct mrb_context *c) int i; mrb_callinfo *ci; + if (c->status == MRB_FIBER_TERMINATED) return; + /* mark VM stack */ mark_context_stack(mrb, c); diff --git a/src/kernel.c b/src/kernel.c index 20f52922d..f1d7700de 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -318,6 +318,7 @@ mrb_obj_clone(mrb_state *mrb, mrb_value self) } p = (struct RObject*)mrb_obj_alloc(mrb, mrb_type(self), mrb_obj_class(mrb, self)); p->c = mrb_singleton_class_clone(mrb, self); + mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)p->c); clone = mrb_obj_value(p); init_copy(mrb, clone, self); @@ -410,11 +411,8 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self) { mrb_value *argv; mrb_int argc; - mrb_value args; mrb_get_args(mrb, "*", &argv, &argc); - args = mrb_ary_new_from_values(mrb, argc, argv); - argv = (mrb_value*)RARRAY_PTR(args); return mrb_obj_extend(mrb, argc, argv, self); } @@ -1684,6 +1684,8 @@ RETRY_TRY_BLOCK: else { struct REnv *e = uvenv(mrb, lv-1); if (!e) goto L_NOSUPER; + if (MRB_ENV_STACK_LEN(e) <= m1+r+m2+1) + goto L_NOSUPER; stack = e->stack + 1; } if (r == 0) { @@ -1894,9 +1896,13 @@ RETRY_TRY_BLOCK: } /* call ensure only when we skip this callinfo */ if (ci[0].ridx == ci[-1].ridx) { + mrb_value *org_stbase = mrb->c->stbase; while (mrb->c->eidx > ci->epos) { ecall(mrb, --mrb->c->eidx); ci = mrb->c->ci; + if (org_stbase != mrb->c->stbase) { + stk = mrb->c->stack; + } } } } @@ -1985,21 +1991,21 @@ RETRY_TRY_BLOCK: if (!proc->env || !MRB_ENV_STACK_SHARED_P(proc->env)) { goto L_BREAK_ERROR; } + if (proc->env->cxt.c != mrb->c) { + goto L_BREAK_ERROR; + } + while (mrb->c->eidx > mrb->c->ci->epos) { + ecall(mrb, --mrb->c->eidx); + } /* break from fiber block */ if (mrb->c->ci == mrb->c->cibase && mrb->c->ci->pc) { struct mrb_context *c = mrb->c; - while (mrb->c->eidx > 0) { - ecall(mrb, --mrb->c->eidx); - } mrb->c = c->prev; c->prev = NULL; ci = mrb->c->ci; } if (ci->acc < 0) { - while (mrb->c->eidx > mrb->c->ci->epos) { - ecall(mrb, --mrb->c->eidx); - } ARENA_RESTORE(mrb, ai); mrb->c->vmexec = FALSE; mrb->exc = (struct RObject*)break_new(mrb, proc, v); diff --git a/tasks/toolchains/android.rake b/tasks/toolchains/android.rake index e69dbf5a6..c59da7fcb 100644 --- a/tasks/toolchains/android.rake +++ b/tasks/toolchains/android.rake @@ -263,7 +263,7 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter case toolchain when :gcc when :clang - flags += %W(-gcc-toolchain "#{gcc_toolchain_path.to_s}" -Wno-invalid-command-line-argument -Wno-unused-command-line-argument) + flags += %W(-gcc-toolchain "#{gcc_toolchain_path}" -Wno-invalid-command-line-argument -Wno-unused-command-line-argument) end flags += %W(-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes) diff --git a/test/assert.rb b/test/assert.rb index 7efc24e19..4e1d309eb 100644 --- a/test/assert.rb +++ b/test/assert.rb @@ -23,8 +23,8 @@ def assertion_string(err, str, iso=nil, e=nil, bt=nil) msg += " => #{e.message}" if e msg += " (mrbgems: #{GEMNAME})" if Object.const_defined?(:GEMNAME) if $mrbtest_assert && $mrbtest_assert.size > 0 - $mrbtest_assert.each do |idx, str, diff| - msg += "\n - Assertion[#{idx}] Failed: #{str}\n#{diff}" + $mrbtest_assert.each do |idx, msg, diff| + msg += "\n - Assertion[#{idx}] Failed: #{msg}\n#{diff}" end end msg += "\nbacktrace:\n\t#{bt.join("\n\t")}" if bt @@ -62,7 +62,7 @@ def assert(str = 'Assertion failed', iso = '') $asserts.push(assertion_string("#{e.class}: ", str, iso, e, bt)) $kill_test += 1 t_print('X') - end + end ensure $mrbtest_assert = nil end @@ -157,7 +157,7 @@ def assert_raise(*exp) msg = "#{msg}#{exp.inspect} exception expected, not" diff = " Class: <#{e.class}>\n" + " Message: #{e.message}" - if not exp.any?{|ex| ex.instance_of?(Module) ? e.kind_of?(ex) : ex == e.class } + unless exp.any?{|ex| ex.instance_of?(Module) ? e.kind_of?(ex) : ex == e.class } $mrbtest_assert.push([$mrbtest_assert_idx, msg, diff]) ret = false end diff --git a/test/t/kernel.rb b/test/t/kernel.rb index aff2dd461..40a3482f8 100644 --- a/test/t/kernel.rb +++ b/test/t/kernel.rb @@ -387,7 +387,7 @@ assert('Kernel#method_missing', '15.3.1.3.30') do begin c.no_method_named_this rescue NoMethodError => e - assert_equal "undefined method 'no_method_named_this' for #{c.to_s}", e.message + assert_equal "undefined method 'no_method_named_this' for #{c}", e.message end class NoInspectClass @@ -397,7 +397,7 @@ assert('Kernel#method_missing', '15.3.1.3.30') do begin d.no_method_named_this rescue NoMethodError => e - assert_equal "undefined method 'no_method_named_this' for #{d.to_s}", e.message + assert_equal "undefined method 'no_method_named_this' for #{d}", e.message end end diff --git a/test/t/superclass.rb b/test/t/superclass.rb index 9fd8830b3..10b6438d3 100644 --- a/test/t/superclass.rb +++ b/test/t/superclass.rb @@ -23,7 +23,8 @@ [:Exception, :Object, '15.2.22.2'], [:StandardError, :Exception, '15.2.23.2'], [:ArgumentError, :StandardError, '15.2.24.2'], - [:LocalJumpError, :StandardError, '15.2.25.2'], + # [:LocalJumpError, :StandardError, '15.2.25.2'], + [:LocalJumpError, :ScriptError, '15.2.25.2'], # mruby specific [:RangeError, :StandardError, '12.2.26.2'], [:RegexpError, :StandardError, '12.2.27.2'], [:RuntimeError, :StandardError, '12.2.28.2'], |
