summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
AgeCommit message (Collapse)Author
2020-01-06Avoid creating temporary objects in `read_irep_record_1`; close #4920Yukihiro "Matz" Matsumoto
The basic idea of this change is from @dearblue. Note: the arguments of `mrb_str_pool()` have changed, but the function is provided for internal use (No `MRB_API`). So basically you don't have to worry about the change.
2020-01-05Fix ainfo with keyword arguments; fix #4921dearblue
2019-12-09Implement numbered parametersUkrainskiy Sergey
2019-10-11Move exception raising to `scope_new`.Yukihiro "Matz" Matsumoto
Besides that fix bugs that mistakenly calls `raise_error` that emits code to raise runtime error instead of `codegen_error` that terminates code generation immediately.
2019-09-28Remove unused node type in `codegen()`KOBAYASHI Shuji
2019-09-26Use type predicate macros instead of `mrb_type` if possibleKOBAYASHI Shuji
For efficiency with `MRB_WORD_BOXING` (implement type predicate macros for all `enum mrb_vtype`).
2019-09-25Rename symbol-to-string functions; close #4684Yukihiro "Matz" Matsumoto
* mrb_sym2name -> mrb_sym_name * mrb_sym2name_len -> mrb_sym_name_len * mrb_sym2str -> mrb_sym_str
2019-08-31Skip `nil?` method call in `if` conditionals.Yukihiro "Matz" Matsumoto
Compile `if expr.nil?` to use `OP_JMPNIL` instead of calls.
2019-08-20Fixed a bug in the `OP_JMPNOT` optimization (13eaff4); fix #4644Yukihiro "Matz" Matsumoto
2019-08-18Prohibit changes to iseq in principledearblue
2019-08-17Remove unnecessary `OP_JMPNOT` for `unless` statement.Yukihiro "Matz" Matsumoto
2019-08-16Avoid creating unnecessary empty arrays on splat.Yukihiro "Matz" Matsumoto
But this changes requires `OP_ARYCAT` and `OP_ARYPUSH` to accept `nil` as their first operand. Alternative VMs (e.g. `mruby/c`) that understand mruby bytecode need to be updated.
2019-08-05Use new specifiers/modifiers of `mrb_vfromat()`KOBAYASHI Shuji
The binary sizes (gems are only `mruby-bin-mruby`) are reduced slightly in my environment than before the introduction of new specifiers/modifiers (5116789a) with this change. ------------+-------------------+-------------------+-------- BINARY | BEFORE (5116789a) | AFTER (This PR) | RATIO ------------+-------------------+-------------------+-------- mruby | 593416 bytes | 593208 bytes | -0.04% libmruby.a | 769048 bytes | 767264 bytes | -0.23% ------------+-------------------+-------------------+-------- BTW, I accidentally changed `tasks/toolchains/visualcpp.rake` at #4613, so I put it back.
2019-04-14Fix leaked function symbolsdearblue
- `free_heap()` in src/gc.c - `symhash()` in src/symbol.c - `no_optimize()` in mrbgems/mruby-compiler/core/codegen.c
2019-04-12Deallocate `s->lines` in `codegen_error`; ref #4370Yukihiro "Matz" Matsumoto
2019-04-12The number of local variables should be less than 1024; fix #4370Yukihiro "Matz" Matsumoto
The `env` stores stack length in a 10 bit field. See `MRB_ENV_STACK_LEN()` macro.
2019-04-01Avoid keeping pointers from `mrb_sym2name_len()`; fix #4342Yukihiro "Matz" Matsumoto
The addresses for packed inline symbols reference `mrb->symbuf` that could be overridden by the later call of `mrb_sym2name_len`. Since file names in call stack information are kept as symbols, keeping the address in the C structures could cause problems like #4342. This changes small incompatible changes in function prototypes: * `mrb_parser_get_filename`: return value changed to `mrb_sym`. * `mrb_debug_get_filename`: add `mrb_state*` as a first argument. * `mrb_debug_get_line`: ditto. I believe above functions are almost internal, and no third-party mrbgem use them.
2019-02-18Use key argument register for `OP_KEY_P` to reduce register use.Yukihiro "Matz" Matsumoto
2019-02-11Small refactoring in `codegen.c`KOBAYASHI Shuji
2019-02-07Add `OP_ENTER` to blocks without parameters; fix #4175Yukihiro "Matz" Matsumoto
So that `lambda{}.call(1)` raises `ArgumentError` as CRuby does. Also, fixed junk assignment for `lambda{|;a|p a}.call{}`.
2019-01-28`class`/`module` expression with empty body should return `nil`KOBAYASHI Shuji
Before: p(class A end) #=> A p(class << self; end) #=> #<Class:#<Object:0x7fdc3880e420>> p(module B end) #=> B After/Ruby: p(class A end) #=> nil p(class << self; end) #=> nil p(module B end) #=> nil
2019-01-06Fix 0.0 and -0.0 handling.KOBAYASHI Shuji
Fix the following issue: Good: $ bin/mruby -e 'p(-0.0)' #=> "-0" Bad: $ bin/mruby -e 'a=0.0; p(-0.0)' #=> "0"
2018-11-25Allow destructuring in formal arguments.Yukihiro "Matz" Matsumoto
e.g. ``` def m(a,(b,c),d); p [a,b,c,d]; end m(1,[2,3],4) # => [1,2,3,4] ``` mruby limitation: Destructured arguments (`b` and `c` in above example) cannot be accessed from the default expression of optional arguments and keyword arguments, since actual assignment is done after the evaluation of those default expressions. Thus: ``` def f(a,(b,c),d=b) p [a,b,c,d] end f(1,[2,3]) ``` raises `NoMethodError` for `b` in mruby.
2018-11-15Fixed a bug in continuous read of target files; ref #4138Yukihiro "Matz" Matsumoto
Line number information in a compiled file was wrong.
2018-11-15Remove `filename`&`lines` from `mrb_irep` struct.Yukihiro "Matz" Matsumoto
This patch slightly reduce memory consumption (2% for my test).
2018-11-02Remove reserved symbols for now.Yukihiro "Matz" Matsumoto
It should be done by planned embedded symbols.
2018-10-29Reduce unnecessary symbol table entrytake-cheeze
2018-10-29Reduce instruction sizetake-cheeze
2018-10-13Fixed a bug caused by too much optimization; fix #4137Yukihiro "Matz" Matsumoto
2018-10-12Fixed broken stack consistency; fix #4135Yukihiro "Matz" Matsumoto
2018-09-07Clear terminated spacedearblue
2018-09-06Need to support multiple `**` splats in argument list; fix #4106Yukihiro "Matz" Matsumoto
2018-09-01Avoid warning in MSVC compilation.Yukihiro "Matz" Matsumoto
2018-09-01Too much peephole optimization in `gen_call`; fix #4091Yukihiro "Matz" Matsumoto
It causes trouble for safe navigation operator.
2018-08-30Remove consequent `OP_RETURN` by peephole optimization.Yukihiro "Matz" Matsumoto
2018-08-29Merge branch 'node_negate_fix' of https://github.com/ukrainskiysergey/mruby ↵Yukihiro "Matz" Matsumoto
into ukrainskiysergey-node_negate_fix
2018-08-29Check iseq buffer size before code emission; fix #4090Yukihiro "Matz" Matsumoto
The type of `s->pc` is now `uint16_t` that can be overflowed easily. Need more checks.
2018-08-25Reduce integer casting warnings.Yukihiro "Matz" Matsumoto
2018-08-25fixup! New bytecode implementation of mruby VM.Yukihiro "Matz" Matsumoto
2018-08-25Hash splat `**` should not be ignored.Yukihiro "Matz" Matsumoto
Implemented by adding `OP_HASHCAT` that merges hashes.
2018-08-25New bytecode implementation of mruby VM.Yukihiro "Matz" Matsumoto
2018-08-10Added push() after OP_SENDUkrainskiy Sergey
2018-08-09Small fixUkrainskiy Sergey
2018-08-09Fix weird behavior of the NODE_NEGATEUkrainskiy Sergey
2018-07-31Bytecode support for `mrdb`.Yukihiro "Matz" Matsumoto
2018-07-30Keyword argument implemented.Yukihiro "Matz" Matsumoto
2018-07-30New bytecode implementation of mruby VM.Yukihiro "Matz" Matsumoto
2018-07-10move mrb_irep_remove_lv to codegen.c in mruby-compileryuri
2018-05-01Update `MRB_FLO_TO_STR_FMT` to "%.16g"; fix #4016Yukihiro "Matz" Matsumoto
2018-05-01Fix stack position in multiple assignment; fix #4008Yukihiro "Matz" Matsumoto
This was caused by a patch from #2684.