diff options
| -rw-r--r-- | mrbgems/mruby-complex/mrbgem.rake | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-complex/mrblib/complex.rb | 10 | ||||
| -rw-r--r-- | mrbgems/mruby-io/README.md | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-io/mrbgem.rake | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-io/test/mruby_io_test.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-pack/README.md | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-pack/mrbgem.rake | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-sleep/mrbgem.rake | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-sleep/src/mrb_sleep.c | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/README.md | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/mrbgem.rake | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-test/vformat.c | 7 | ||||
| -rw-r--r-- | src/backtrace.c | 91 | ||||
| -rw-r--r-- | src/class.c | 2 | ||||
| -rw-r--r-- | src/error.c | 6 | ||||
| -rw-r--r-- | src/print.c | 1 | ||||
| -rw-r--r-- | test/t/vformat.rb | 9 |
17 files changed, 53 insertions, 90 deletions
diff --git a/mrbgems/mruby-complex/mrbgem.rake b/mrbgems/mruby-complex/mrbgem.rake index 19612e74d..8f782ae18 100644 --- a/mrbgems/mruby-complex/mrbgem.rake +++ b/mrbgems/mruby-complex/mrbgem.rake @@ -3,8 +3,5 @@ MRuby::Gem::Specification.new('mruby-complex') do |spec| spec.author = 'mruby developers' spec.summary = 'Complex class' - spec.add_dependency 'mruby-metaprog', core: 'mruby-metaprog' - spec.add_dependency 'mruby-object-ext', core: 'mruby-object-ext' - spec.add_dependency 'mruby-numeric-ext', core: 'mruby-numeric-ext' spec.add_dependency 'mruby-math', core: 'mruby-math' end diff --git a/mrbgems/mruby-complex/mrblib/complex.rb b/mrbgems/mruby-complex/mrblib/complex.rb index f32b84c8b..ea8530919 100644 --- a/mrbgems/mruby-complex/mrblib/complex.rb +++ b/mrbgems/mruby-complex/mrblib/complex.rb @@ -8,7 +8,7 @@ class Complex < Numeric end def to_s - "#{real}#{'+' unless imaginary.negative?}#{imaginary}i" + "#{real}#{'+' unless imaginary < 0}#{imaginary}i" end def +@ @@ -56,7 +56,7 @@ class Complex < Numeric if rhs.is_a? Complex real == rhs.real && imaginary == rhs.imaginary elsif rhs.is_a? Numeric - imaginary.zero? && real == rhs + imaginary == 0 && real == rhs end end @@ -106,14 +106,14 @@ class Complex < Numeric [Fixnum, Float].each do |cls| [:+, :-, :*, :/, :==].each do |op| - cls.instance_exec do + cls.instance_eval do original_operator_name = "__original_operator_#{op}_complex" alias_method original_operator_name, op define_method op do |rhs| if rhs.is_a? Complex - Complex(self).send(op, rhs) + Complex(self).__send__(op, rhs) else - send(original_operator_name, rhs) + __send__(original_operator_name, rhs) end end end diff --git a/mrbgems/mruby-io/README.md b/mrbgems/mruby-io/README.md index ccf56f970..2c5b762d8 100644 --- a/mrbgems/mruby-io/README.md +++ b/mrbgems/mruby-io/README.md @@ -171,6 +171,7 @@ Add the line below to your `build_config.rb`: ## License Copyright (c) 2013 Internet Initiative Japan Inc. +Copyright (c) 2017 mruby developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/mrbgems/mruby-io/mrbgem.rake b/mrbgems/mruby-io/mrbgem.rake index e4f0b7bb6..bd20f6d20 100644 --- a/mrbgems/mruby-io/mrbgem.rake +++ b/mrbgems/mruby-io/mrbgem.rake @@ -1,6 +1,6 @@ MRuby::Gem::Specification.new('mruby-io') do |spec| spec.license = 'MIT' - spec.authors = 'Internet Initiative Japan Inc.' + spec.authors = ['Internet Initiative Japan Inc.', 'mruby developers'] spec.summary = 'IO and File class' spec.cc.include_paths << "#{build.root}/src" diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index f5c55499b..1c31c5fe0 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -18,7 +18,7 @@ typedef int mode_t; #define open _open #define close _close -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(__MINGW32__) #include <sys/stat.h> static int diff --git a/mrbgems/mruby-pack/README.md b/mrbgems/mruby-pack/README.md index 95733e2d5..c8a653fba 100644 --- a/mrbgems/mruby-pack/README.md +++ b/mrbgems/mruby-pack/README.md @@ -49,6 +49,7 @@ There is no dependency on other mrbgems. ## License Copyright (c) 2012 Internet Initiative Japan Inc. +Copyright (c) 2017 mruby developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/mrbgems/mruby-pack/mrbgem.rake b/mrbgems/mruby-pack/mrbgem.rake index 6e8375d1e..f1c0306b1 100644 --- a/mrbgems/mruby-pack/mrbgem.rake +++ b/mrbgems/mruby-pack/mrbgem.rake @@ -1,6 +1,6 @@ MRuby::Gem::Specification.new('mruby-pack') do |spec| spec.license = 'MIT' - spec.authors = 'Internet Initiative Japan Inc.' + spec.authors = ['Internet Initiative Japan Inc.', 'mruby developers'] spec.summary = 'Array#pack and String#unpack method' spec.cc.include_paths << "#{build.root}/src" diff --git a/mrbgems/mruby-sleep/mrbgem.rake b/mrbgems/mruby-sleep/mrbgem.rake index 8827b3580..7a303b81c 100644 --- a/mrbgems/mruby-sleep/mrbgem.rake +++ b/mrbgems/mruby-sleep/mrbgem.rake @@ -1,5 +1,5 @@ MRuby::Gem::Specification.new('mruby-sleep') do |spec| spec.license = 'MIT' - spec.authors = 'MATSUMOTO Ryosuke' + spec.authors = ['MATSUMOTO Ryosuke', 'mruby developers'] spec.version = '0.0.1' end diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index 3f8ef90cf..ac9b07e85 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -2,6 +2,7 @@ ** mrb_sleep - sleep methods for mruby ** ** Copyright (c) mod_mruby developers 2012- +** Copyright (c) mruby developers 2018 ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the diff --git a/mrbgems/mruby-socket/README.md b/mrbgems/mruby-socket/README.md index ceb50c651..947a24e9e 100644 --- a/mrbgems/mruby-socket/README.md +++ b/mrbgems/mruby-socket/README.md @@ -35,6 +35,7 @@ Date: Tue, 21 May 2013 04:31:30 GMT ## License Copyright (c) 2013 Internet Initiative Japan Inc. +Copyright (c) 2017 mruby developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/mrbgems/mruby-socket/mrbgem.rake b/mrbgems/mruby-socket/mrbgem.rake index b0894e095..24d6f953d 100644 --- a/mrbgems/mruby-socket/mrbgem.rake +++ b/mrbgems/mruby-socket/mrbgem.rake @@ -1,6 +1,6 @@ MRuby::Gem::Specification.new('mruby-socket') do |spec| spec.license = 'MIT' - spec.authors = 'Internet Initiative Japan' + spec.authors = ['Internet Initiative Japan', 'mruby developers'] spec.summary = 'standard socket class' spec.cc.include_paths << "#{build.root}/src" diff --git a/mrbgems/mruby-test/vformat.c b/mrbgems/mruby-test/vformat.c index 6984aaeb1..ffe150f83 100644 --- a/mrbgems/mruby-test/vformat.c +++ b/mrbgems/mruby-test/vformat.c @@ -17,7 +17,6 @@ typedef mrb_int mrb_float; /* size_t l; */\ mrb_sym n; \ char *s; \ - struct RClass *C #define NATIVE_DEFINE_TYPE_FUNC(t) \ static mrb_value \ @@ -39,7 +38,6 @@ typedef enum { /* ARG_l,*/ ARG_n, ARG_s, - ARG_C, ARG_v, } VFArgumentType; @@ -87,7 +85,6 @@ native_initialize(mrb_state *mrb, mrb_value self) case ARG_s: data.s = (char*)mrb_malloc(mrb, RSTRING_LEN(obj) + 1); memcpy(data.s, RSTRING_PTR(obj), RSTRING_LEN(obj)); data.s[RSTRING_LEN(obj)] = '\0'; break; - case ARG_C: data.C = mrb_class_ptr(obj); break; default: mrb_raise(mrb, E_ARGUMENT_ERROR, "unknown type"); } datap = (VFNative*)mrb_malloc(mrb, sizeof(VFNative)); @@ -103,7 +100,6 @@ NATIVE_DEFINE_TYPE_FUNC(i) /*NATIVE_DEFINE_TYPE_FUNC(l)*/ NATIVE_DEFINE_TYPE_FUNC(n) NATIVE_DEFINE_TYPE_FUNC(s) -NATIVE_DEFINE_TYPE_FUNC(C) static VFArgument* arg_from_obj(mrb_state *mrb, mrb_value obj, struct RClass *native_class, @@ -140,7 +136,6 @@ arg_from_obj(mrb_state *mrb, mrb_value obj, struct RClass *native_class, /* VF_FORMAT2_COND_EXPR(fmt, vf_args, vf_args+1, l) : */\ VF_FORMAT2_COND_EXPR(fmt, vf_args, vf_args+1, n) : \ VF_FORMAT2_COND_EXPR(fmt, vf_args, vf_args+1, s) : \ - VF_FORMAT2_COND_EXPR(fmt, vf_args, vf_args+1, C) : \ VF_FORMAT2_COND_EXPR(fmt, vf_args, vf_args+1, v) : \ mrb_nil_value() /* not reached */ \ ) @@ -154,7 +149,6 @@ arg_from_obj(mrb_state *mrb, mrb_value obj, struct RClass *native_class, /* VF_FORMAT_TYPED_COND_EXPR(fmt, n_arg, type_a, v1, l) : */\ VF_FORMAT_TYPED_COND_EXPR(fmt, n_arg, type_a, v1, n) : \ VF_FORMAT_TYPED_COND_EXPR(fmt, n_arg, type_a, v1, s) : \ - VF_FORMAT_TYPED_COND_EXPR(fmt, n_arg, type_a, v1, C) : \ VF_FORMAT_TYPED_COND_EXPR(fmt, n_arg, type_a, v1, v) : \ mrb_nil_value() /* not reached */ #define VF_FORMAT_TYPED_COND_EXPR(fmt, n_arg, type_a, v1, t) \ @@ -195,6 +189,5 @@ mrb_init_test_vformat(mrb_state *mrb) /* NATIVE_DEFINE_TYPE_METHOD(l);*/ NATIVE_DEFINE_TYPE_METHOD(n); NATIVE_DEFINE_TYPE_METHOD(s); - NATIVE_DEFINE_TYPE_METHOD(C); mrb_define_method(mrb, n, "initialize", native_initialize, MRB_ARGS_REQ(2)); } diff --git a/src/backtrace.c b/src/backtrace.c index 803c5e285..a25a5adad 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -25,6 +25,10 @@ typedef void (*each_backtrace_func)(mrb_state*, const struct backtrace_location* static const mrb_data_type bt_type = { "Backtrace", mrb_free }; +mrb_value mrb_exc_to_s(mrb_state *mrb, mrb_value exc); +mrb_value mrb_mod_to_s(mrb_state *mrb, mrb_value klass); +mrb_value mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace); + static void each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, const mrb_code *pc0, each_backtrace_func func, void *data) { @@ -74,65 +78,35 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, const mrb_code *pc0, each_backtr #ifndef MRB_DISABLE_STDIO static void -print_backtrace(mrb_state *mrb, mrb_value backtrace) +print_backtrace(mrb_state *mrb, struct RObject *exc, mrb_value backtrace) { int i; - mrb_int n; + mrb_int n = RARRAY_LEN(backtrace); + mrb_value *loc, mesg, cname; FILE *stream = stderr; - n = RARRAY_LEN(backtrace) - 1; - if (n == 0) return; - - fprintf(stream, "trace (most recent call last):\n"); - for (i=0; i<n; i++) { - mrb_value entry = RARRAY_PTR(backtrace)[n-i-1]; - - if (mrb_string_p(entry)) { - fprintf(stream, "\t[%d] %.*s\n", i, (int)RSTRING_LEN(entry), RSTRING_PTR(entry)); + if (n != 0) { + fprintf(stream, "trace (most recent call last):\n"); + for (i=n-1,loc=&RARRAY_PTR(backtrace)[i]; i>0; i--,loc--) { + if (mrb_string_p(*loc)) { + fprintf(stream, "\t[%d] %.*s\n", + i, (int)RSTRING_LEN(*loc), RSTRING_PTR(*loc)); + } } } -} -static int -packed_bt_len(const struct backtrace_location *bt, int n) -{ - int len = 0; - int i; - - for (i=0; i<n; i++) { - if (!bt[i].filename && !bt[i].lineno && !bt[i].method_id) - continue; - len++; + if (n != 0) { + fprintf(stream, "%.*s: ", (int)RSTRING_LEN(*loc), RSTRING_PTR(*loc)); } - return len; -} - -static void -print_packed_backtrace(mrb_state *mrb, mrb_value packed) -{ - FILE *stream = stderr; - const struct backtrace_location *bt; - int n, i; - int ai = mrb_gc_arena_save(mrb); - - bt = (struct backtrace_location*)mrb_data_check_get_ptr(mrb, packed, &bt_type); - if (bt == NULL) return; - n = (mrb_int)RDATA(packed)->flags; - - if (packed_bt_len(bt, n) == 0) return; - fprintf(stream, "trace (most recent call last):\n"); - for (i = 0; i<n; i++) { - const struct backtrace_location *entry = &bt[n-i-1]; - if (entry->filename == NULL) continue; - fprintf(stream, "\t[%d] %s:%d", i, entry->filename, entry->lineno); - if (entry->method_id != 0) { - const char *method_name; - - method_name = mrb_sym_name(mrb, entry->method_id); - fprintf(stream, ":in %s", method_name); - mrb_gc_arena_restore(mrb, ai); - } - fprintf(stream, "\n"); + mesg = mrb_exc_to_s(mrb, mrb_obj_value(exc)); + cname = mrb_mod_to_s(mrb, mrb_obj_value(exc->c)); + if (RSTRING_LEN(mesg) == 0) { + fprintf(stream, "%.*s \n", (int)RSTRING_LEN(cname), RSTRING_PTR(cname)); + } + else { + fprintf(stream, "%.*s (%.*s)\n", + (int)RSTRING_LEN(mesg), RSTRING_PTR(mesg), + (int)RSTRING_LEN(cname), RSTRING_PTR(cname)); } } @@ -152,12 +126,8 @@ mrb_print_backtrace(mrb_state *mrb) backtrace = mrb_obj_iv_get(mrb, mrb->exc, mrb_intern_lit(mrb, "backtrace")); if (mrb_nil_p(backtrace)) return; - if (mrb_array_p(backtrace)) { - print_backtrace(mrb, backtrace); - } - else { - print_packed_backtrace(mrb, backtrace); - } + if (!mrb_array_p(backtrace)) backtrace = mrb_unpack_backtrace(mrb, backtrace); + print_backtrace(mrb, mrb->exc, backtrace); } #else @@ -175,7 +145,6 @@ count_backtrace_i(mrb_state *mrb, { int *lenp = (int*)data; - if (loc->filename == NULL) return; (*lenp)++; } @@ -187,7 +156,6 @@ pack_backtrace_i(mrb_state *mrb, struct backtrace_location **pptr = (struct backtrace_location**)data; struct backtrace_location *ptr = *pptr; - if (loc->filename == NULL) return; *ptr = *loc; *pptr = ptr+1; } @@ -205,7 +173,7 @@ packed_backtrace(mrb_state *mrb) size = len * sizeof(struct backtrace_location); ptr = mrb_malloc(mrb, size); backtrace = mrb_data_object_alloc(mrb, NULL, ptr, &bt_type); - backtrace->flags = (unsigned int)len; + backtrace->flags = (uint32_t)len; each_backtrace(mrb, ciidx, mrb->c->ci->pc, pack_backtrace_i, &ptr); return mrb_obj_value(backtrace); } @@ -245,8 +213,7 @@ mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace) const struct backtrace_location *entry = &bt[i]; mrb_value btline; - if (entry->filename == NULL) continue; - btline = mrb_format(mrb, "%s:%d", entry->filename, entry->lineno); + btline = mrb_format(mrb, "%s:%d", entry->filename, (int)entry->lineno); if (entry->method_id != 0) { mrb_str_cat_lit(mrb, btline, ":in "); mrb_str_cat_cstr(mrb, btline, mrb_sym_name(mrb, entry->method_id)); diff --git a/src/class.c b/src/class.c index e0196fe0a..0da572b0e 100644 --- a/src/class.c +++ b/src/class.c @@ -2323,7 +2323,9 @@ mrb_init_class(mrb_state *mrb) mrb_define_method(mrb, mod, "dup", mrb_mod_dup, MRB_ARGS_NONE()); mrb_undef_method(mrb, cls, "append_features"); + mrb_undef_method(mrb, cls, "prepend_features"); mrb_undef_method(mrb, cls, "extend_object"); + mrb_undef_method(mrb, cls, "module_function"); mrb->top_self = (struct RObject*)mrb_obj_alloc(mrb, MRB_TT_OBJECT, mrb->object_class); mrb_define_singleton_method(mrb, mrb->top_self, "inspect", inspect_main, MRB_ARGS_NONE()); diff --git a/src/error.c b/src/error.c index 2e3e8c09d..eb9c50b1c 100644 --- a/src/error.c +++ b/src/error.c @@ -87,8 +87,8 @@ exc_exception(mrb_state *mrb, mrb_value self) * no message is set). */ -static mrb_value -exc_to_s(mrb_state *mrb, mrb_value exc) +mrb_value +mrb_exc_to_s(mrb_state *mrb, mrb_value exc) { mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg")); struct RObject *p; @@ -543,7 +543,7 @@ mrb_init_exception(mrb_state *mrb) mrb_define_class_method(mrb, exception, "exception", mrb_instance_new, MRB_ARGS_OPT(1)); mrb_define_method(mrb, exception, "exception", exc_exception, MRB_ARGS_OPT(1)); mrb_define_method(mrb, exception, "initialize", exc_initialize, MRB_ARGS_OPT(1)); - mrb_define_method(mrb, exception, "to_s", exc_to_s, MRB_ARGS_NONE()); + mrb_define_method(mrb, exception, "to_s", mrb_exc_to_s, MRB_ARGS_NONE()); mrb_define_method(mrb, exception, "message", exc_message, MRB_ARGS_NONE()); mrb_define_method(mrb, exception, "inspect", exc_inspect, MRB_ARGS_NONE()); mrb_define_method(mrb, exception, "backtrace", mrb_exc_backtrace, MRB_ARGS_NONE()); diff --git a/src/print.c b/src/print.c index 03b5eadfa..7d2d16086 100644 --- a/src/print.c +++ b/src/print.c @@ -31,7 +31,6 @@ MRB_API void mrb_print_error(mrb_state *mrb) { mrb_print_backtrace(mrb); - printstr(mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0), stderr); } MRB_API void diff --git a/test/t/vformat.rb b/test/t/vformat.rb index 679f30407..ef82f22bc 100644 --- a/test/t/vformat.rb +++ b/test/t/vformat.rb @@ -1,3 +1,4 @@ +# coding: cp932 def assert_format(exp, args) assert_equal(exp, TestVFormat.format(*args)) end @@ -44,9 +45,9 @@ assert('mrb_vformat') do # assert_format 'string and length', ['string %l length', n.s('andante'), n.l(3)] assert_format '`n`: sym', ['`n`: %n', n.n(:sym)] assert_format '%C文字列%', ['%s', n.s('%C文字列%')] - assert_format '`C`: Kernel module', ['`C`: %C module', n.C(Kernel)] - assert_format '`C`: NilClass', ['`C`: %C', n.C(nil.class)] - assert_format_pattern '#<Class:#<String:0x*>>', ['%C', n.C(sclass(""))] + assert_format '`C`: Kernel module', ['`C`: %C module', Kernel] + assert_format '`C`: NilClass', ['`C`: %C', nil.class] + assert_format_pattern '#<Class:#<String:0x*>>', ['%C', sclass("")] assert_format '`T`: NilClass', ['`T`: %T', nil] assert_format '`T`: FalseClass', ['`T`: %T', false] assert_format '`T`: TrueClass', ['`T`: %T', true] @@ -69,7 +70,7 @@ assert('mrb_vformat') do assert_format ':"&.": inspect symbol', ['%!n: inspect symbol', n.n(:'&.')] assert_format 'inspect "String"', ['inspect %!v', 'String'] assert_format 'inspect Array: [1, :x, {}]', ['inspect Array: %!v', [1,:x,{}]] - assert_format_pattern '`!C`: #<Class:0x*>', ['`!C`: %!C', n.C(Class.new)] + assert_format_pattern '`!C`: #<Class:0x*>', ['`!C`: %!C', Class.new] assert_format 'to_s -> to_s: ab,cd', ['to_s -> to_s: %n,%v', n.n(:ab), 'cd'] assert_format 'to_s -> inspect: x:y', ['to_s -> inspect: %v%!v', 'x', :y] assert_format 'inspect -> to_s: "a"b', ['inspect -> to_s: %!v%n', 'a', n.n(:b)] |
