summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
AgeCommit message (Collapse)Author
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-02Fixed a bug in register size calculation; fix #3479Yukihiro "Matz" Matsumoto
2017-03-01Keep space for safe navigation operator; fix #3475Yukihiro "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-28Fixed a bug in dregex option generation; fix #3471Yukihiro "Matz" Matsumoto
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-06Check maximum number of formal arguments.Yukihiro "Matz" Matsumoto
http://hkdnet.hatenablog.com/entry/2017/02/06/080000 (Japanese)
2017-02-04Jump address should fit in 16 bits range; fix #3426Yukihiro "Matz" Matsumoto
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
2017-01-20Remove problematic optimization.Clayton Smith
2016-12-18NODE_NEGATE cdr may not be code-node; fix #3348 ref #3324Yukihiro "Matz" Matsumoto
Reported by Denis Kasak https://hackerone.com/dkasak
2016-12-13Fixed wrong condition in new_sym() that breaks symbol data.Yukihiro "Matz" Matsumoto
2016-12-13Failed to realloc irep->syms in certain condition.Yukihiro "Matz" Matsumoto
Also msym size changed to 512 from 256.
2016-12-10Merge pull request #3324 from bouk/mruby/bouk-negateYukihiro "Matz" Matsumoto
Don't generate code for NODE_NEGATE if the result isn't used Reported by https://hackerone.com/haquaman
2016-12-09Fix segfault in gen_values with NOVAL and more than 127 argsBouke van der Bijl
2016-12-08Fix segfault when undef is called with exactly 127 argumentsBouke van der Bijl
The issue is that when there are more than 126 arguments an array needs to be created to pass the arguments on with. Reported by https://hackerone.com/revskills
2016-12-07Don't generate code for NODE_NEGATE if the result isn't usedBouke van der Bijl
Reported by https://hackerone.com/haquaman
2016-12-03Import locale insensitive strtod() from Ruby1.8; fix #3270Yukihiro "Matz" Matsumoto
The function was renamed to `mrb_float_read(const char*, char**)`.
2016-12-03codegen: avoid unnecessary OP_MOVE after CASEYukihiro "Matz" Matsumoto
2016-12-01Fix segfault when using result of rest assignmentBouke van der Bijl
Reported by https://hackerone.com/haquaman
2016-11-25resolve conflict; ref #3279Yukihiro "Matz" Matsumoto
2016-11-25resolve conflict; ref #3283Yukihiro "Matz" Matsumoto
2016-11-25resolve conflict; ref #3285Yukihiro "Matz" Matsumoto
2016-11-25resolve conflict; ref #3286Yukihiro "Matz" Matsumoto
2016-11-24Fix unsafe peephole optimizationFrancis Bogsanyi
Reported by https://hackerone.com/dkasak
2016-11-24Fix segfault caused by empty condition in ternaryBouke van der Bijl
Reported by https://hackerone.com/jpenalbae
2016-11-24Fix codegen issue causing misaligned registerBouke van der Bijl
Reported by https://hackerone.com/haquaman
2016-11-24Fix segfault on method call with exactly 127 argumentsBouke van der Bijl
Reported by https://hackerone.com/dkasak
2016-11-24Fix nested empty heredoc causing segfaultBouke van der Bijl
As reported by https://hackerone.com/jpenalbae
2016-11-24redo should work well in for statement; fix #3275Yukihiro "Matz" Matsumoto
2016-11-24Add forgotten loop_pop() in NODE_OP_ASGN codegenYukihiro "Matz" Matsumoto
2016-11-23codegen_scope should not keep old iseq ptr from irepYukihiro "Matz" Matsumoto
2016-11-11fixed a bug when number of LHS and RHS differs; fix #3239Yukihiro "Matz" Matsumoto
2016-11-08fixed a bug with [] in RHS of multiple assignments; fix #3236Yukihiro "Matz" Matsumoto
2016-09-26Fix unexpected behavior with breakksss
``` def yie yield end def bre yie { 1+1 break } end p bre #=> display 2, but should be nil ```
2016-07-25OP_ASGN vsp may be negativeYukihiro "Matz" Matsumoto
reported by https://gist.github.com/miura1729/53fbd8af889c289a79108e38635b2378 fix proposed by @miura1729 in https://github.com/miura1729/mruby/commit/b1b7933f7aa950cfb747b06327a0d0340f3e4ff8
2016-06-10fix a compiler warning for uninitialized variableYukihiro "Matz" Matsumoto
2016-05-16fixed remaining bugs in OP_ASGN stack adjustment; close #3159Yukihiro "Matz" Matsumoto
2016-05-16stack adjustment after NODE_OP_ASGN with NODE_CALL was wrong; fix #3159Yukihiro "Matz" Matsumoto
2016-05-09raise the error at runtime; fix #3152cremno
2016-04-01fix too much optimization for `||=`Yukihiro "Matz" Matsumoto
2016-03-30fix duplicated eval in op_asgnYukihiro "Matz" Matsumoto
`a` in `a.m += c` or `a[b] += c` should be evaluated only once.
2016-03-30reduce OP_ARRAY in argument splatYukihiro "Matz" Matsumoto
2016-03-24better code generation for `||=`; #3138Yukihiro "Matz" Matsumoto
2016-03-23add safe-navigation (aka lonely) operator `&.`Yukihiro "Matz" Matsumoto
2016-03-21rescue NameError from class variable access like `@@foo ||= 42`; fix #3138Yukihiro "Matz" Matsumoto