diff options
| -rw-r--r-- | include/mruby/dump.h | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-array-ext/mrblib/array.rb | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-math/src/math.c | 39 | ||||
| -rw-r--r-- | mrbgems/mruby-time/src/time.c | 2 | ||||
| -rw-r--r-- | src/dump.c | 6 | ||||
| -rw-r--r-- | src/gc.c | 6 | ||||
| -rw-r--r-- | src/numeric.c | 12 | ||||
| -rw-r--r-- | src/range.c | 25 | ||||
| -rw-r--r-- | tasks/toolchains/visualcpp.rake | 3 |
9 files changed, 50 insertions, 46 deletions
diff --git a/include/mruby/dump.h b/include/mruby/dump.h index e5a853bad..5a63933d4 100644 --- a/include/mruby/dump.h +++ b/include/mruby/dump.h @@ -14,7 +14,7 @@ extern "C" { #include "mruby.h" #include "mruby/irep.h" -int dump_irep(mrb_state *mrb, mrb_irep *irep, int debug_info, uint8_t **bin, size_t *bin_size); +int mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, int debug_info, uint8_t **bin, size_t *bin_size); #ifdef ENABLE_STDIO int mrb_dump_irep_binary(mrb_state*, mrb_irep*, int, FILE*); int mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep*, int, FILE *f, const char *initname); diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index df3ab97e4..fd80fa0bb 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -617,7 +617,6 @@ class Array return to_enum :delete_if unless block_given? idx = 0 - len = self.size while idx < self.size do if block.call(self[idx]) self.delete_at(idx) diff --git a/mrbgems/mruby-math/src/math.c b/mrbgems/mruby-math/src/math.c index a699a12f0..871cba301 100644 --- a/mrbgems/mruby-math/src/math.c +++ b/mrbgems/mruby-math/src/math.c @@ -9,8 +9,14 @@ #include <math.h> -#define domain_error(msg) \ - mrb_raise(mrb, E_RANGE_ERROR, "Numerical argument is out of domain - " #msg) +static void +domain_error(mrb_state *mrb, const char *func) +{ + struct RClass *math = mrb_module_get(mrb, "Math"); + struct RClass *domainerror = mrb_class_get_under(mrb, math, "DomainError"); + mrb_value str = mrb_str_new_cstr(mrb, func); + mrb_raisef(mrb, domainerror, "Numerical argument is out of domain - %S", str); +} /* math functions not provided by Microsoft Visual C++ 2012 or older */ #if defined _MSC_VER && _MSC_VER < 1800 @@ -172,6 +178,9 @@ math_asin(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < -1.0 || x > 1.0) { + domain_error(mrb, "asin"); + } x = asin(x); return mrb_float_value(mrb, x); @@ -189,6 +198,9 @@ math_acos(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < -1.0 || x > 1.0) { + domain_error(mrb, "acos"); + } x = acos(x); return mrb_float_value(mrb, x); @@ -334,6 +346,9 @@ math_acosh(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < 1.0) { + domain_error(mrb, "acosh"); + } x = acosh(x); return mrb_float_value(mrb, x); @@ -351,6 +366,9 @@ math_atanh(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < -1.0 || x > 1.0) { + domain_error(mrb, "atanh"); + } x = atanh(x); return mrb_float_value(mrb, x); @@ -404,8 +422,14 @@ math_log(mrb_state *mrb, mrb_value obj) int argc; argc = mrb_get_args(mrb, "f|f", &x, &base); + if (x < 0.0) { + domain_error(mrb, "log"); + } x = log(x); if (argc == 2) { + if (base < 0.0) { + domain_error(mrb, "log"); + } x /= log(base); } return mrb_float_value(mrb, x); @@ -429,6 +453,9 @@ math_log2(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < 0.0) { + domain_error(mrb, "log2"); + } x = log2(x); return mrb_float_value(mrb, x); @@ -451,6 +478,9 @@ math_log10(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < 0.0) { + domain_error(mrb, "log10"); + } x = log10(x); return mrb_float_value(mrb, x); @@ -469,6 +499,9 @@ math_sqrt(mrb_state *mrb, mrb_value obj) mrb_float x; mrb_get_args(mrb, "f", &x); + if (x < 0.0) { + domain_error(mrb, "sqrt"); + } x = sqrt(x); return mrb_float_value(mrb, x); @@ -624,6 +657,8 @@ mrb_mruby_math_gem_init(mrb_state* mrb) struct RClass *mrb_math; mrb_math = mrb_define_module(mrb, "Math"); + mrb_define_class_under(mrb, mrb_math, "DomainError", mrb->eStandardError_class); + #ifdef M_PI mrb_define_const(mrb, mrb_math, "PI", mrb_float_value(mrb, M_PI)); #else diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 1ffab9ae6..0427fe3c0 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -54,7 +54,7 @@ typedef long suseconds_t; -# ifndef __MINGW64__ +# if (!defined __MINGW64__) && (!defined __MINGW32__) struct timeval { time_t tv_sec; suseconds_t tv_usec; diff --git a/src/dump.c b/src/dump.c index e89617823..09ac80fac 100644 --- a/src/dump.c +++ b/src/dump.c @@ -726,7 +726,7 @@ is_debug_info_defined(mrb_irep *irep) } int -dump_irep(mrb_state *mrb, mrb_irep *irep, int debug_info, uint8_t **bin, size_t *bin_size) +mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, int debug_info, uint8_t **bin, size_t *bin_size) { int result = MRB_DUMP_GENERAL_FAILURE; size_t section_irep_size; @@ -815,7 +815,7 @@ mrb_dump_irep_binary(mrb_state *mrb, mrb_irep *irep, int debug_info, FILE* fp) return MRB_DUMP_INVALID_ARGUMENT; } - result = dump_irep(mrb, irep, debug_info, &bin, &bin_size); + result = mrb_dump_irep(mrb, irep, debug_info, &bin, &bin_size); if (result == MRB_DUMP_OK) { fwrite(bin, bin_size, 1, fp); } @@ -851,7 +851,7 @@ mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep *irep, int debug_info, FILE *fp, co return MRB_DUMP_INVALID_ARGUMENT; } - result = dump_irep(mrb, irep, debug_info, &bin, &bin_size); + result = mrb_dump_irep(mrb, irep, debug_info, &bin, &bin_size); if (result == MRB_DUMP_OK) { fprintf(fp, "#include <stdint.h>\n"); /* for uint8_t under at least Darwin */ fprintf(fp, "const uint8_t %s[] = {", initname); @@ -121,9 +121,9 @@ static double gc_total_time = 0; static double gettimeofday_time(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec + tv.tv_usec * 1e-6; + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec + tv.tv_usec * 1e-6; } #define GC_INVOKE_TIME_REPORT(with) do {\ diff --git a/src/numeric.c b/src/numeric.c index 46b3cdf37..4c955a61e 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -980,17 +980,11 @@ rshift(mrb_int val, mrb_int width) mrb_assert(width >= 0); if (width >= NUMERIC_SHIFT_WIDTH_MAX) { if (val < 0) { - val = -1; - } - else { - val = 0; + return mrb_fixnum_value(-1); } + return mrb_fixnum_value(0); } - else { - val = val >> width; - } - - return mrb_fixnum_value(val); + return mrb_fixnum_value(val >> width); } static inline void diff --git a/src/range.c b/src/range.c index 340d64ec1..627b572d4 100644 --- a/src/range.c +++ b/src/range.c @@ -234,30 +234,6 @@ mrb_range_include(mrb_state *mrb, mrb_value range) return mrb_bool_value(include_p); } -/* - * call-seq: - * rng.each {| i | block } => rng - * - * Iterates over the elements <i>rng</i>, passing each in turn to the - * block. You can only iterate if the start object of the range - * supports the +succ+ method (which means that you can't iterate over - * ranges of +Float+ objects). - * - * (10..15).each do |n| - * print n, ' ' - * end - * - * <em>produces:</em> - * - * 10 11 12 13 14 15 - */ - -mrb_value -mrb_range_each(mrb_state *mrb, mrb_value range) -{ - return range; -} - mrb_bool mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len) { @@ -435,7 +411,6 @@ mrb_init_range(mrb_state *mrb) mrb_define_method(mrb, r, "end", mrb_range_end, MRB_ARGS_NONE()); /* 15.2.14.4.5 */ mrb_define_method(mrb, r, "==", mrb_range_eq, MRB_ARGS_REQ(1)); /* 15.2.14.4.1 */ mrb_define_method(mrb, r, "===", mrb_range_include, MRB_ARGS_REQ(1)); /* 15.2.14.4.2 */ - mrb_define_method(mrb, r, "each", mrb_range_each, MRB_ARGS_NONE()); /* 15.2.14.4.4 */ mrb_define_method(mrb, r, "exclude_end?", mrb_range_excl, MRB_ARGS_NONE()); /* 15.2.14.4.6 */ mrb_define_method(mrb, r, "first", mrb_range_beg, MRB_ARGS_NONE()); /* 15.2.14.4.7 */ mrb_define_method(mrb, r, "include?", mrb_range_include, MRB_ARGS_REQ(1)); /* 15.2.14.4.8 */ diff --git a/tasks/toolchains/visualcpp.rake b/tasks/toolchains/visualcpp.rake index 1498ec3c9..a5726dce7 100644 --- a/tasks/toolchains/visualcpp.rake +++ b/tasks/toolchains/visualcpp.rake @@ -1,7 +1,8 @@ MRuby::Toolchain.new(:visualcpp) do |conf| [conf.cc].each do |cc| cc.command = ENV['CC'] || 'cl.exe' - cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /Zi /MD /O2 /D_CRT_SECURE_NO_WARNINGS)] + # C4013: implicit function declaration + cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /we4013 /Zi /MD /O2 /D_CRT_SECURE_NO_WARNINGS)] cc.include_paths = ["#{MRUBY_ROOT}/include"] cc.defines = %w(DISABLE_GEMS MRB_STACK_EXTEND_DOUBLING) cc.option_include_path = '/I%s' |
