summaryrefslogtreecommitdiffhomepage
path: root/src
AgeCommit message (Collapse)Author
2015-04-18Suppress warnings generated by -Wwrite-stringsKouhei Sutou
Here are suppressed warnings: src/fmt_fp.c: In function 'fmt_fp': src/fmt_fp.c:124:16: warning: initialization discards 'const' qualifier from pointer target type char *ss = (t&32)?"inf":"INF"; ^ src/fmt_fp.c:125:17: warning: assignment discards 'const' qualifier from pointer target type if (y!=y) ss=(t&32)?"nan":"NAN"; ^ mrbgems/mruby-string-ext/src/string.c: In function 'mrb_str_succ_bang': mrbgems/mruby-string-ext/src/string.c:302:27: warning: assignment discards 'const' qualifier from pointer target type if (e == b) prepend = "1"; ^ mrbgems/mruby-string-ext/src/string.c:305:27: warning: assignment discards 'const' qualifier from pointer target type if (e == b) prepend = "a"; ^ mrbgems/mruby-string-ext/src/string.c:308:27: warning: assignment discards 'const' qualifier from pointer target type if (e == b) prepend = "A"; ^ mrbgems/mruby-bin-mruby/tools/mruby/mruby.c: In function 'main': mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:213:13: warning: assignment discards 'const' qualifier from pointer target type cmdline = args.cmdline ? args.cmdline : "-"; ^ mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c: In function 'print_breakpoint': mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c:159:3: warning: initialization discards 'const' qualifier from pointer target type char* enable_letter[] = {BREAK_INFO_MSG_DISABLE, BREAK_INFO_MSG_ENABLE}; ^ mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c:159:3: warning: initialization discards 'const' qualifier from pointer target type
2015-03-22refactor write_pool_block()cremno
No need to write the same assertion in each case (except the default one). Instead we can assert after the switch statement.
2015-03-21execute ensure clause only when skipping call frame; fix #2726Yukihiro "Matz" Matsumoto
2015-03-16I have added the #ifdef __CYGWIN32__ to modify the fmt_fp.cTarosa
2015-03-16I modified the undefined frexpl in cygwin of makeTarosa
2015-03-05stack_extend in mrb_f_sendGo Saito
mrb_f_send needs stack_extend like OP_SEND Signed-off-by: Go Saito <[email protected]>
2015-02-28Use ptrdiff_t to suppress signedness warningKouhei Sutou
3df32161797aa9c6e9df259e8d8571b454cb2333 says so but there is no warning with GCC 4.9 on my Debian GNU/Linux environment.
2015-02-27Merge pull request #2736 from cremno/delete-prototypes-of-undefined-functionsYukihiro "Matz" Matsumoto
delete prototypes of undefined functions
2015-02-27fix MSVC initialization issue by a patch from @dyama; close #2734Yukihiro "Matz" Matsumoto
2015-02-27change size_t to ptrdiff_t to silence signedness warnings; #2732Yukihiro "Matz" Matsumoto
2015-02-26delete prototypes of undefined functionscremno
2015-02-25Fix a crash bug on raising after reallocKouhei Sutou
The following program reproduces this problem: #include <mruby.h> static mrb_value recursive(mrb_state *mrb, mrb_value self) { mrb_int n; mrb_get_args(mrb, "i", &n); if (n == 0) { mrb_raise(mrb, E_RUNTIME_ERROR, "XXX"); } else { mrb_funcall(mrb, self, "recursive", 1, mrb_fixnum_value(n - 1)); } return self; } int main(void) { mrb_state *mrb; mrb = mrb_open(); mrb_define_method(mrb, mrb->kernel_module, "recursive", recursive, MRB_ARGS_REQ(1)); mrb_funcall(mrb, mrb_top_self(mrb), "recursive", 1, mrb_fixnum_value(30)); mrb_close(mrb); } Recursive method call isn't required. It's just for expanding call info stack. If mrb_realloc() is called in cipush(), cibase address is changed. So, we shouldn't compare ci before mrb_realloc() and cibase after mrb_realloc(). It accesses unknown address and causes crash.
2015-02-24Fix a bug that no expression case doesn't return valid valueKouhei Sutou
Here is a script that reproduces this problem: x = case when true; 1 end p x # => main # 1 is expected
2015-02-24Merge pull request #2729 from kou/fix-if-and-no-value-returned-caseYukihiro "Matz" Matsumoto
Fix a bug that if and no return value case can't return true clause value
2015-02-24Fix a bug that if and no return value case can't return true clause valueKouhei Sutou
Here is a script that reproduce this problem: x = if true 1 else case 2 when 3 end 4 end p x # => nil # 1 is expected
2015-02-23fix pointer dereference after reallocGo Saito
In src/vm.c: mrb_funcall_with_block stack_extend may realloc mrb->c->stbase, if argv points on mruby's stack, then it points invalid address after stack_extend. e.g. src/class.c: mrb_instance_new This code: ```ruby class A def initialize(a0,a1,a2,a3,a4) a0.is_a? Array end end def f(a0,a1,a2,a3,a4) A.new(a0,a1,a2,a3,a4) f(a0,a1,a2,a3,a4) end f(0,1,2,3,4) ``` is expected to get exception ``` stack level too deep. (limit=(0x40000 - 128)) (SystemStackError) ``` but get segfault. Signed-off-by: Go Saito <[email protected]>
2015-02-16silence warnings in fmt_fp.cYukihiro "Matz" Matsumoto
2015-02-16Merge pull request #2723 from cremno/use-musl-fmt_fpYukihiro "Matz" Matsumoto
re-implement mrb_float_to_str()
2015-02-13re-implement mrb_float_to_str()cremno
The new implementation is backwards incompatible, but I couldn't find any usage outside mruby and I also couldn't think of a different and good name. All ISO C99 printf conversion specifiers for floating point numbers and an optional precision are supported. It is largely based on code from the MIT licensed musl libc (http://www.musl-libc.org/) and its floating point printing is exact (unlike the current code behind Float#to_s).
2015-02-12DISABLE_STDIO does not disable backtraces.Simon Génier
2015-02-07Merge pull request #2717 from sgnr/missing-lastpc-on-funcall-cfuncYukihiro "Matz" Matsumoto
Fix possible segfault when accessing backtrace with MRB_WORD_BOXING.
2015-02-05Fix possible segfault when accessing backtrace with MRB_WORD_BOXING.Simon Génier
2015-02-05Fix ensure with yield context on break and returnKouhei Sutou
How to reproduce: class A def x yield ensure y end def y end end # Work A.new.x do end # Not work # trace: # [2] /tmp/a.rb:5:in A.x # [0] /tmp/a.rb:15 # /tmp/a.rb:5: undefined method 'y' for main (NoMethodError) A.new.x do break end # trace: # [2] /tmp/a.rb:5:in A.call # [0] /tmp/a.rb:19 # /tmp/a.rb:5: undefined method 'y' for main (NoMethodError) lambda do A.new.x do return end end.call `self` in ensure is broken when yield and break/return are used.
2015-02-02Replace int with mrb_bool in dump_bigendian_p funcJun Hiroe
2015-02-02allow endian specification of mrb files by `mrbc -e/-E`Yukihiro "Matz" Matsumoto
`mruby -b` now accepts both big/little endian mrb (compiled binary) files. `mrbc` generates mrb files in big endian for .mrb files and in native endian for C files (with -B option specified) by default. If you are cross compiling, you need to specify target endian by -e/-E options if it is different from host endian.
2015-01-31block_given? should work with nested block; fix #2695 close #2712Yukihiro "Matz" Matsumoto
2015-01-26Use setter macro instead of directly setting valuesXuejie "Rafael" Xiao
2015-01-03Use mrb_exc_new_str_lit().Tatsuhiko Kubo
2014-12-27Use suitable type.Tatsuhiko Kubo
2014-12-23Fix splat and multiple assignmentsKouhei Sutou
Case1: From variable Code: a = [1, 2, 3, 4, 5] b, c, *d = a p [a, b, c, d] Before: [[1, 2, 3, 4, 5], 1, 2, []] After: [[1, 2, 3, 4, 5], 1, 2, [3, 4, 5]] Ruby: [[1, 2, 3, 4, 5], 1, 2, [3, 4, 5]] Case2: From variables Code: a = [1, 2, 3] b = [4, 5, 6, 7] c, d, *e, f, g = *a, *b p [a, b, c, d, e, f, g] Before: [[1, 2, 3], [4, 5, 6, 7], 1, 2, [], 6, 7] After: [[1, 2, 3], [4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7] Ruby: [[1, 2, 3], [4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7] Case 3: "for" Code: a = [1, 2, 3, 4, 5, 6, 7] for b, c, *d, e, f in [a] do p [a, b, c, d, e, f] end Before: [[1, 2, 3, 4, 5, 6, 7], 1, 2, [], nil, nil] After: [[1, 2, 3, 4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7] Ruby: [[1, 2, 3, 4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7]
2014-12-19block_given? should return correct value when called in blocks; close #2678Yukihiro "Matz" Matsumoto
avoid a loop to find parent's callinfo using mrb->c->cibase[env->cioff]
2014-12-19block_given? should return false on top-level; ref #2678Yukihiro "Matz" Matsumoto
2014-12-17String#[]: float handling merged to #2677Yukihiro "Matz" Matsumoto
2014-12-17try to convert not only nil but every objects to fixnums; ref #2677Yukihiro "Matz" Matsumoto
2014-12-17String#[] should reject nil indexh2so5
2014-12-17mrb_str_new(mrb, "", len) creates an unmodifiable string object; ref #2674Yukihiro "Matz" Matsumoto
2014-12-12Fix crash if #inspect does not return a string valuesdottaka
case 1 ~~~ class A; def inspect; 1; end; end A.new.a ~~~ case 2 ~~~ class A def self.inspect 1 end alias_method :a, :b end ~~~
2014-12-12mrb_p() should print mrb_obj_as_string() if #inspect does not return a ↵Yukihiro "Matz" Matsumoto
string value
2014-12-11block_given did not work with nested block invocation for some cases; fix #2665Yukihiro "Matz" Matsumoto
2014-12-11mrb_parser_dump() did not work with block argumentsYukihiro "Matz" Matsumoto
2014-12-01should not pop register when value from multiple assignment requiredYukihiro "Matz" Matsumoto
2014-11-28preserve ICLASS in ci->target_class; fix #2657; ensuring #1467 #1470 #1493 ↵Yukihiro "Matz" Matsumoto
still works
2014-11-27wrong register adjustmentYukihiro "Matz" Matsumoto
2014-11-26add "fall through" commentYukihiro "Matz" Matsumoto
2014-11-26fix(String) String#[] accepts float; close #2650 #2651Robert Mosolgo
2014-11-26wrong register number adjustment in multiple assignment; fix #2654Yukihiro "Matz" Matsumoto
2014-11-26OP_APOST local variable display was wrongYukihiro "Matz" Matsumoto
2014-11-25remove unnecessary _WIN32 preprocessor checkcremno
SIZE_MAX < UINT32_MAX is false on Win32 / Win64.
2014-11-23align indent of local variable names in codedump()Yukihiro "Matz" Matsumoto
2014-11-22should support recursive mlhs decomposition, e.g. (a,b),c = [1,2],3Yukihiro "Matz" Matsumoto