summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
AgeCommit message (Collapse)Author
2017-12-16Need to set `ci->proc` before calling methods; fix #3902Yukihiro "Matz" Matsumoto
2017-12-16Need to clear exception handler on `return`; fix #3898Yukihiro "Matz" Matsumoto
2017-12-13Retrieve operands at the beginning of `OP_SCLASS`.Yukihiro "Matz" Matsumoto
2017-12-07Cancel df3507660 that does not do any good.Yukihiro "Matz" Matsumoto
2017-12-07Avoid updating to reallocated stack in `OP_RETURN`; fix #3870Yukihiro "Matz" Matsumoto
The code was introduced to address #3175 but it's no longer needed.
2017-12-06The `ci` should not be equal to `cibase` with `OP_R_BREAK`; #3871Yukihiro "Matz" Matsumoto
2017-12-06The proc with top-level env must be 'proc-closure'; fix #3871Yukihiro "Matz" Matsumoto
2017-12-06Limit `ecall()` depth to 32 (default).Yukihiro "Matz" Matsumoto
2017-12-05Need to set `ci->proc` when we have `RProc` structure.Yukihiro "Matz" Matsumoto
Mentioned in https://qiita.com/bamchoh/items/eabebbbb330cb0e0470a
2017-12-04Need to unshare env stack on `break`; fix #3866Yukihiro "Matz" Matsumoto
2017-12-04Check if `ci->proc` is not `NULL` and `MRB_PROC_CFUNC_P()`; fix #3867Yukihiro "Matz" Matsumoto
2017-12-01The stack shift width should be determined by `p->upper`; fix #3864Yukihiro "Matz" Matsumoto
And check required register number from `ci->proc` as well. The fixes for #3859 and #3862 were incomplete.
2017-11-30Avoid calling `mrb_env_unshare()` when `env` is `NULL`.Yukihiro "Matz" Matsumoto
Small performance improvement by reducing function invocations.
2017-11-30Avoid double free() of env stack; fix #3860Yukihiro "Matz" Matsumoto
Should turn on `MRB_ENV_STACK_UNSHARED` flag only after env stack reallocation. `malloc()` may fail.
2017-11-30Wrong stack adjustment in `ecall()` (f35f975 #3859); fix #3862Yukihiro "Matz" Matsumoto
2017-11-29Clear `c->prev` on fiber termination.Yukihiro "Matz" Matsumoto
2017-11-29Set `MRB_FIBER_TERMINATED` flag on exception termination of a fiber.Yukihiro "Matz" Matsumoto
2017-11-29Call all ensure clauses pushed at `OP_STOP`.Yukihiro "Matz" Matsumoto
2017-11-29No need to use `ecall_adjust()`.Yukihiro "Matz" Matsumoto
2017-11-29Fixed stack address adjustment in `ecall()`; fix #3859Yukihiro "Matz" Matsumoto
2017-11-29Need to evaluate ensure clauses at fiber termination.Yukihiro "Matz" Matsumoto
2017-11-29Remove unnecessary code; ref #3711Yukihiro "Matz" Matsumoto
2017-11-22Stack adjustment should be based on `p->upper`; fix #3857Yukihiro "Matz" Matsumoto
It used to be based on `ci->proc` but the callinfo position may be wrong when `ecall()` is called during stack rewinding from `OP_RETURN`.
2017-11-22Clear ensure stack after calling in `OP_EPOP`; #3855 3856Yukihiro "Matz" Matsumoto
2017-11-22No need to pop ensure stack if `eidx` is smaller than `epos`; #3855 #3856Yukihiro "Matz" Matsumoto
2017-11-22fixup! Remove fixed argument of `ecall()`; ref #3855 #3856Yukihiro "Matz" Matsumoto
2017-11-22Remove fixed argument of `ecall()`; ref #3855 #3856Yukihiro "Matz" Matsumoto
2017-11-20Reduce the size of `struct RBreak` to reduce memory usage.Yukihiro "Matz" Matsumoto
The old size of `struct RBreak` was 56 bytes (`MRB_NO_BOXING`) and it's bigger than other object structures. That increase the size of `RVALUE` thus increase the total amount of memory consumption.
2017-11-20Add `MRB_METHOD_TABLE_INLINE` option.Yukihiro "Matz" Matsumoto
Now the method tables (in classes/modules and caches) keeps C function pointers without wrapping in `struct RProc` objects. For the sake of portability, `mrb_method_t` is represented by the struct and union, but if the most significant bit of the pointer is not used by the platform, `mrb_method_t` should be packed in `uintptr_t` to reduce memory usage. `MRB_METHOD_TABLE_INLINE` is turned on by default for linux.
2017-11-18Assign operands to local variables.Yukihiro "Matz" Matsumoto
2017-11-17Need to save stack space by number of registers from the current proc,Yukihiro "Matz" Matsumoto
Not from the execution ensure proc; fix #3849
2017-11-11Fixed wrong stack extend size; fix #3847Yukihiro "Matz" Matsumoto
2017-11-10Need to clear stack region for local variables in eval; fix #3844Yukihiro "Matz" Matsumoto
2017-11-09Use proper target_class to define class/module; fix #3843Yukihiro "Matz" Matsumoto
The outer class of the class/module definition should be taken from `MRB_TARGET_CLASS(mrb->c->ci->proc)` not `mrb->c->ci->target_class` which is the target of constant lookups.
2017-11-04Merge branch 'mrb_without_float' of https://github.com/pandax381/mruby into ↵Yukihiro "Matz" Matsumoto
pandax381-mrb_without_float
2017-11-04Reimplement `block_given?`; ref #3841Yukihiro "Matz" Matsumoto
Make `block_given?` to search for the top of the scope first. The top of the scope means either: * the top method body * the enclosing class body * the top-level The special case is the method defined by `define_method` with a block as in #3841. In cases like this, the method body (given by a block) is not considered as the top of the scope. You need to use `&block` in the block parameter if you want to know if a block is given to the method. This commit also changes the behavior of `MRB_PROC_SCOPE` flag. Now it is only set if the `proc` is either a class body or a method body defined in Ruby. It is no longer set for a block that given to `define_method`.
2017-11-04Merge branch 'master' of github.com:mruby/mrubyYAMAMOTO Masaya
2017-11-03Always check division-by-zero to avoid undefined behavior; fix #3816Yukihiro "Matz" Matsumoto
Also removed the code to normalize NaN value for `MRB_NAN_BOXING`. Tha code was added to fix #1712 but no longer required after 249f05e7d.
2017-10-31Call stack may not reference the destination `proc`; fix #3838Yukihiro "Matz" Matsumoto
The destination `proc` may be an orphan.
2017-10-28Removed a debug printf; fix #3834Yukihiro "Matz" Matsumoto
2017-10-28Remove one of the lines that did the same thing; fix #3836Yukihiro "Matz" Matsumoto
The change is suggested by `ukrainskiysergey` in #3836. I deleted the other line for clarity. I also updated comment lines.
2017-10-28Should clear ensure stack at `OP_RETURN break`; #3715Yukihiro "Matz" Matsumoto
This is a resurrection of d0a7e01, which is accidentally removed by 93f5f22; Fix #3715
2017-10-28Should check if `callinfo` stack is popped before updating the stack.Yukihiro "Matz" Matsumoto
This is a resurrection of 75c374c, which is accidentally removed by 93f5f22; Fix #3507 #3512 #3518 #3521
2017-10-28Fixed UPVAR gotchas; fix #3835Yukihiro "Matz" Matsumoto
Both `uvenv` function and `env` generation in `create_proc_from_string` function have bugs to handling enclosed environment objects.
2017-10-28Remove a debug variableYukihiro "Matz" Matsumoto
2017-10-28Heavily refactored how lexical scope links are implemented; fix #3821Yukihiro "Matz" Matsumoto
Instead of `irep` links, we added a `upper` link to `struct RProc`. To make a space for the `upper` link, we moved `target_class` reference. If a `Proc` does not have `env`, `target_class` is saved in an `union` shared with `env` (if a `Proc` has env, you can tell it by `MRB_PROC_ENV_P()). Otherwise `target_class` is referenced from `env->c`. We removed links in `env` as well. This change removes 2 members from `mrb_irep` struct, thus saving 2 words per method/proc/block. This also fixes potential memory leaks due to the circular references caused by a link from `mrb_irep`.
2017-10-28Remove MRB_API from `mrb_env_unshare()`Yukihiro "Matz" Matsumoto
2017-10-11Add MRB_WITHOUT_FLOATYAMAMOTO Masaya
2017-09-27fix: src\vm.c(2631): warning C4244: '=': conversion from 'mrb_int' to 'int', ↵Tomasz Dąbrowski
possible loss of data
2017-09-27fix: src\vm.c(1757): warning C4244: '=': conversion from 'mrb_int' to 'int', ↵Tomasz Dąbrowski
possible loss of data