summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
AgeCommit message (Collapse)Author
2017-03-19Fixed some compiler errors regarding PRId.Yukihiro "Matz" Matsumoto
2017-03-19Use MRB_PRId instead of "%d"; fix #3515Yukihiro "Matz" Matsumoto
2017-03-19Fixed OP_RESCUE code generation bug; fix #3519Yukihiro "Matz" Matsumoto
916b8e let code executed with mrb->exc set, and may cause a crash like #3519. Instead modified OP_RESCUE again. To retrieve the exception object, we use `OP_RESCUE R(A), 0, 0` (old behavior). To compare the exception object and the class, we use `OP_RESCUE R(A), R(B), 1`. The reason we use OP_RESCUE for two instruction switched by operand C is to save the instruction space. As a result, the following code: ```ruby begin raise "a" rescue TypeError p 1 rescue RuntimeError p 2 end ``` will be compiled as: ``` irep 0x55cd1f565cb0 nregs=4 nlocals=1 pools=1 syms=4 reps=0 file: - 2 000 OP_ONERR 005 2 001 OP_LOADSELF R1 2 002 OP_STRING R2 L(0) ; "a" 2 003 OP_SEND R1 :raise 1 2 004 OP_JMP 023 2 005 OP_RESCUE R1 3 006 OP_GETCONST R2 :TypeError 3 007 OP_RESCUE R1 R2 cont 3 008 OP_JMPIF R2 010 3 009 OP_JMP 014 4 010 OP_LOADSELF R1 4 011 OP_LOADI R2 1 4 012 OP_SEND R1 :p 1 4 013 OP_JMP 024 5 014 OP_GETCONST R2 :RuntimeError 5 015 OP_RESCUE R1 R2 cont 5 016 OP_JMPIF R2 018 5 017 OP_JMP 022 6 018 OP_LOADSELF R1 6 019 OP_LOADI R2 2 6 020 OP_SEND R1 :p 1 6 021 OP_JMP 024 6 022 OP_RAISE R1 6 023 OP_POPERR 1 6 024 OP_STOP ```
2017-03-18Should use mrb_int for any objectksss
o=Object.new def o.to_int 1 end p "%*d" % [o, 1]
2017-03-17Avoid trampoline when #eval is called from mrb_funcall(); fix #3522Yukihiro "Matz" Matsumoto
2017-03-15`instance_eval` method does not introduce C function boundary; fix #3508Yukihiro "Matz" Matsumoto
2017-03-13Fix out-of-bound accessNobuyoshi Nakada
Get rid of out-of-bound access when single % at the end.
2017-03-13Need to copy argv since it may be reallocated; fix #3500Yukihiro "Matz" Matsumoto
The argv for `mrb_yield_with_class()` should not be on mruby stack. Note the result from `mrb_get_args("*")` is on the stack.
2017-03-12Generate new OP_RESCUE; fix #3487Yukihiro "Matz" Matsumoto
The old OP_RESCUE took one operand A, which specifies a class to match with the exception. The new OP_RESCUE takes tree operands: A: the register to hold exception B: the matching exception; the match result will be stored here. C: the continuation; if C is zero, the exception will be stored to R(A) otherwise, the value from R(A) is used as a exception. Thus, ```ruby begin raise "a" rescue TypeError p 1 rescue RuntimeError p 2 end ``` will be compiled as ``` irep 0x557a06667aa0 nregs=4 nlocals=1 pools=1 syms=4 reps=0 file: /tmp/e.rb 2 000 OP_ONERR 005 2 001 OP_LOADSELF R1 2 002 OP_STRING R2 L(0) ; "a" 2 003 OP_SEND R1 :raise 1 2 004 OP_JMP 022 3 005 OP_GETCONST R2 :TypeError 3 006 OP_RESCUE R1 R2 3 007 OP_JMPIF R2 009 3 008 OP_JMP 013 4 009 OP_LOADSELF R1 4 010 OP_LOADI R2 1 4 011 OP_SEND R1 :p 1 4 012 OP_JMP 023 5 013 OP_GETCONST R2 :RuntimeError 5 014 OP_RESCUE R1 R2 cont 5 015 OP_JMPIF R2 017 5 016 OP_JMP 021 6 017 OP_LOADSELF R1 6 018 OP_LOADI R2 2 6 019 OP_SEND R1 :p 1 6 020 OP_JMP 023 6 021 OP_RAISE R1 6 022 OP_POPERR 1 6 023 OP_STOP ``` The new VM can accept old OP_RESCUE. The mruby compatible VM (namely mruby/c) should be updated to support the new OP_RESCUE behavior.
2017-03-12Enhance OP_RESCUE to take B operand fas matching exception; ref #3487Yukihiro "Matz" Matsumoto
2017-03-11OP_RETRUN to take B as matching exception; ref #3487Yukihiro "Matz" Matsumoto
2017-03-11The width printf specifier may be negative; fix #3498Yukihiro "Matz" Matsumoto
2017-03-11fixup! Check return value from snprintf(); ref #3498Yukihiro "Matz" Matsumoto
2017-03-11Check return value from snprintf(); ref #3498Yukihiro "Matz" Matsumoto
2017-03-10Terminate loop if generated string longer than the last; ref #3489Yukihiro "Matz" Matsumoto
2017-03-07`__FILE__` should not update `p->filename`; fix #3485Yukihiro "Matz" Matsumoto
2017-03-05Check modifiable for String `bang' methodsksss
2017-03-02Fixed a bug in register size calculation; fix #3479Yukihiro "Matz" Matsumoto
2017-03-02Reorganize C++ exceptions; ref #3470Yukihiro "Matz" Matsumoto
There are 3 levels of C++ exception handling: * default - no C++ exception (use setjmp/longjmp) * enable_cxx_exception (use C++ exceptions with C ABI) * enable_cxx_abi (use C++ ABI including exceptions)
2017-03-02Avoid using <mruby/throw.h> in mruby.cYukihiro "Matz" Matsumoto
2017-03-01Keep space for safe navigation operator; fix #3475Yukihiro "Matz" Matsumoto
2017-03-01Newlines in strings should be counted; fix #3477Yukihiro "Matz" Matsumoto
2017-02-28Ignore empty ensure clause.Yukihiro "Matz" Matsumoto
2017-02-28`return` (and `break`) should handle splat correctly; fix #3472Yukihiro "Matz" Matsumoto
2017-02-28Fix NODE_DREGX dump; ref #3471Yukihiro "Matz" Matsumoto
2017-02-28Fixed a bug in dregex option generation; fix #3471Yukihiro "Matz" Matsumoto
2017-02-28Update codegen.c commentsYukihiro "Matz" Matsumoto
2017-02-24replace "yylval" with "pylval" to make it compile with byacc.Tomoyuki Sahara
2017-02-16Configure callinfo target_class as CRuby; ref #3429Yukihiro "Matz" Matsumoto
2017-02-16Avoid executing OP_STOP in eval(); fix #3429Yukihiro "Matz" Matsumoto
2017-02-16Adjust callinfo env and target_class; ref #3429Yukihiro "Matz" Matsumoto
2017-02-15Move #instance_exec to Kernel moduleYukihiro "Matz" Matsumoto
CRuby defines #instance_exec in BasicObject, but we don't. It's a small incompatibility that isn't worth accomplish at the price of implementation complexity.
2017-02-13Fixed codegen error of redo in rescue; fix #3422Yukihiro "Matz" Matsumoto
The issue (and the fix) was reported by https://hackerone.com/dgaletic
2017-02-12Merge pull request #3452 from dabroz/fix-kernel-caller-aspecYukihiro "Matz" Matsumoto
Fixed aspec for Kernel#caller
2017-02-12Fixed aspec for Kernel#callerTomasz Dabrowski
2017-02-11Avoid integer overflow in sprintf(); fix #3439Yukihiro "Matz" Matsumoto
This issue was reported by https://hackerone.com/aerodudrizzt
2017-02-11Remove historical comment; ref #3450 #3448Yukihiro "Matz" Matsumoto
2017-02-11remove skip that shouldn't be necessary anymore.robert
the test should pass after https://github.com/mruby/mruby/commit/8f4a929e1a01c8d6176fb53a9ef5dff6de632959.
2017-02-10String#ljust and String#rjust reimplemented with optimized RubyTomasz Dabrowski
2017-02-10Tests for UTF-8 String#ljust and String#rjustTomasz Dabrowski
2017-02-10String#ljust and String#rjust reimplementation (fix #3445)Tomasz Dabrowski
- String#ljust and String#rjust are now C functions to improve performance - infinite loop because of an empty padding argument is now prevented (ArgumentError is raised) - extra tests for ljust/rjust added
2017-02-08Fixed mixture of signed/unsigned integersYukihiro "Matz" Matsumoto
in mrbgems/mruby-bin-debugger.
2017-02-06Check maximum number of formal arguments.Yukihiro "Matz" Matsumoto
http://hkdnet.hatenablog.com/entry/2017/02/06/080000 (Japanese)
2017-02-04Make `eval` to use trampoline technique; fix #3415Yukihiro "Matz" Matsumoto
Now `eval()` can call Fiber.yield etc.
2017-02-04Jump address should fit in 16 bits range; fix #3426Yukihiro "Matz" Matsumoto
2017-02-03Merge pull request #3420 from udzura/patch-1Yukihiro "Matz" Matsumoto
Fix usage of Class#name in mruby-bin-mruby's bintest
2017-02-02Fetch arguments earlier to avoid a crash.Clayton Smith
2017-02-02Use standard Module(Class)#to_sUchio KONDO
2017-01-23Fix a double free problem in codegen.c; fix #3378Yukihiro "Matz" Matsumoto
This issue was first reported by https://hackerone.com/geeknik The fix was proposed by @titanous
2017-01-23Fix memory leak; ref #3378Yukihiro "Matz" Matsumoto
The fix was proposed by @titanous