summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
2020-10-12Allow `MRUBY_CONFIG` to specify target file out of source tree.Yukihiro "Matz" Matsumoto
2020-10-12Add a new document named `mruby3.md`.Yukihiro "Matz" Matsumoto
That describes the changes in `mruby3`.
2020-10-12Add assertion we can pack function pointers in `mrb_method_t`.Yukihiro "Matz" Matsumoto
If this assertion fails, you have to define `MRB_USE_METHOD_T_STRUCT`.
2020-10-12Rename `MRB_METHOD_T_STRUCT` to `MRB_USE_METHOD_T_STRUCT`.Yukihiro "Matz" Matsumoto
It's the first change of renaming configuration options to `MRB_XXX` to `MRB_USE_XXX` or `MRB_NO_XXX`.
2020-10-12Change out-of-range condition of `time_t` conversion.Yukihiro "Matz" Matsumoto
2020-10-12Avoid out-of-range error for negative time on `MRB_TIME_T_UINT`.Yukihiro "Matz" Matsumoto
On platforms where `time_t` is unsigned, negative time can be a result of integer casting. Out-of-range error is too strict for those cases. This fix does not address wrong time value in `MRB_WORD_BOXING`. It will be addressed later (by introducing "big" integers).
2020-10-12Change default `mrb_value` representation to `MRB_WORD_BOXING`.Yukihiro "Matz" Matsumoto
2020-10-12Skip array embedding if `MRB_NO_BOXING` and `MRB_32BIT`; fix #4382Yukihiro "Matz" Matsumoto
On some platforms, `sizeof(mrb_value) > sizeof(void*)*3`, which makes `MRB_ARY_EMBED_LEN_MAX` zero. And zero sized array cause compile errors.
2020-10-12Add static check for `MRB_USE_FLOAT` and `MRB_WITHOUT_FLOAT`.Yukihiro "Matz" Matsumoto
2020-10-12Fix wrong YAML in `.github/workflows/build.yml`.Yukihiro "Matz" Matsumoto
2020-10-12Simplify `NaN` boxing definitions.Yukihiro "Matz" Matsumoto
Remove `#ifdef` from `union mrb_value_`.
2020-10-12Rename `OP_JUW` instruction to `OP_JMPUW`.Yukihiro "Matz" Matsumoto
2020-10-12Fix typo `_hander` -> `_handler`.Yukihiro "Matz" Matsumoto
2020-10-12Adjust PR #5060 to the latest `mruby3` branch.Yukihiro "Matz" Matsumoto
2020-10-12Suppress warnings for C++dearblue
Variables in jump destination block separate declaration and assignment.
2020-10-12Restore the variable `pc` after `longjmp()`dearblue
Changes made after `setjmp()` are destroyed and need reassignment. This problem is now caused by the addition of the `OP_JUW` instruction. When actually building on FreeBSD 12.1 with `clang10 -fsanitize=address`, mrbtest "NameError#name [15.2.31.2.1]" is failed. However, qualifying `pc` with `volatile` slows down significantly and increases the object code. Suppress them by qualifying only the variables that restore `pc`.
2020-10-12Replace global jump with catch handler implementationdearblue
When a global jump occurs, look at the catch handler table to determine where to jump. In that case, `pc` already shows the following instruction, but since the table shows `begin_offset ... end_offset`, the comparison is done with `begin_offset < pc && pc <= end_offset`. If there is a corresponding handler, move `pc` to `handler.target_offset` and continue running the VM. When a global jump across `ensure` is made by `return`, `break`, `next`, `redo` and `retry`, the extended `RBreak` object saves and restores the C-level execution position. This extended `RBreak` can have tag information, which makes it a pseudo coroutine (the "tag" mimics CRuby). The implementation of pseudo coroutines by `RBreak` is summarized by `CHECKPOINT_RESTORE ... CHECKPOINT_MAIN ... CHECKPOINT_END` and `throw_tagged_break` / `unwind_ensure` macros. The restart of processing is branched by `RBREAK_TAG_FOREACH(DISPATCH_CHECKPOINTS)`. - Not only `rescue` blocks but also `ensure` blocks are now sandwiched between `OP_EXCEPT` and `OP_RAISEIF`. - Remove the function `ecall()`. It is no longer necessary to re-enter the VM to perform an "ensure block". This will resolves #1888. - Added instruction `OP_JUW` (Jump while UnWind). It jumps unconditionally like `OP_JMP`, but searches the catch handler table and executes the ensure block. Since it searches the catch handler table, it is much heavier than `OP_JMP`.
2020-10-12Removed push/pop instructions for rescue/ensuredearblue
`OP_PUSHERR`, `OP_POPERR`, `OP_EPUSH` and `OP_EPOP` are removed.
2020-10-12Extended `OP_EXCEPT` and `OP_RAISE` (`OP_RAISEIF`) instructionsdearblue
- `OP_EXCEPT` checks if `mrb->exc` is `NULL`, `MRB_TT_EXCEPTION` or `MRB_TT_BREAK`. If `mrb->exc` is `NULL`, it will be replaced with `nil`. - If `OP_RAISE` is `nil`, it does nothing and the immediately following instruction is executed (like `OP_NOP`). Also, in case of `RBreak` object, it moves to the processing for `break`. With this change, the instruction name is changed from `OP_RAISE` to `OP_RAISEIF`.
2020-10-12Extended mruby binary formatdearblue
The catch handler table is combined with iseq block. This is to prevent the structure from growing by adding a field for the catch handler table to the `mrb_irep` structure. "iseq block" and "catch handler table": [number of catch handler table (2 bytes)] [number of byte code (4 bytes)] [iseq (any bytes)] [catch handlers (multiple of 7 bytes)] catch handler: [catch type (1 byte)] [begin offset (2 bytes)] [end offset (2 bytes)] [target offset (2 bytes)] catch type: enum mrb_catch_type (0 = rescue, 1 = ensure) begin offset: Includes the specified instruction address end offset: Does not include the specified instruction address target offset: replaces pc with the specified instruction address This table is not expanded by `read_irep_record_1()`. The necessary elements are expanded one by one when used.
2020-10-12Add `target/host-cxx.rb` to compile `mruby` with `cxx_abi`.Yukihiro "Matz" Matsumoto
2020-10-12Avoid breaking the `result` array by side-effect in C++.Yukihiro "Matz" Matsumoto
2020-10-12Revert 4c001673bYukihiro "Matz" Matsumoto
Probably I misunderstand strict aliasing rule of C++. The fix in 4c001673b was other way around.
2020-10-12Initialize `kdict` in `OP_ENTER` in `vm.c`.Yukihiro "Matz" Matsumoto
2020-10-12Rename `union mrb_value` to `union mrb_value_`.Yukihiro "Matz" Matsumoto
Since some compiler complains when we `typedef` `mrb_value`.
2020-10-12Simplify `mrb_value` structure for `MRB_WORD_BOXING`.Yukihiro "Matz" Matsumoto
2020-10-12Simplify `mrb_value` structure for `MRB_NAN_BOXING`.Yukihiro "Matz" Matsumoto
2020-10-12Remove `mc_clear_by_id`.Yukihiro "Matz" Matsumoto
Clearing all method cache using `memset` is faster than conditional clear by method id.
2020-10-12Do not call `mrb_mc_clear_by_class` at `mrb` finalization.Yukihiro "Matz" Matsumoto
2020-10-12Refine `MRB_NAN_BOXING` on 32bit architecture.Yukihiro "Matz" Matsumoto
You don't need pointer tweaking on 32bit architecture, where pointers fit in 32bit (lower half of mrb_value).
2020-10-12Add `target/host-m32.rb` to compile mruby in 32bit mode.Yukihiro "Matz" Matsumoto
Tested only on Linux. You need to install 32bit relate libraries, e.g. libc6-dev-i386.
2020-10-12Use `memset()` to clear method cache.Yukihiro "Matz" Matsumoto
2020-10-12Add `const` specifier to `cipush()`; ref #5052Yukihiro "Matz" Matsumoto
2020-10-12Change default boxing scheme from `MRB_NO_BOXING`.Yukihiro "Matz" Matsumoto
On 64bit platforms: `MRB_NAN_BOXING` On 32bit platforms: `MRB_WORD_BOXING` On debugging: `MRB_NO_BOXING`
2020-10-12Make sure `bintest` only works with `host` target.Yukihiro "Matz" Matsumoto
2020-10-12Pack `mrb_value` into `uint64_t` when `MRB_NAN_BOXING`.Yukihiro "Matz" Matsumoto
2020-10-12Use hash table instead of segment list for instance variables.Yukihiro "Matz" Matsumoto
2020-10-12Rename `mrb_hash_modify` to `hash_modify`.Yukihiro "Matz" Matsumoto
Since it's an internal static function.
2020-10-12Use `mrb_field_write_barrier` instead of `mrb_write_barrier` for `push`.Yukihiro "Matz" Matsumoto
When the array is very big, the simpler `mrb_write_barrier` causes calling `gc_mark_children` for big arrays repeatedly. That would hinder performance very badly.
2020-10-12Check `lv` before printing local variable names.Yukihiro "Matz" Matsumoto
2020-10-12Fix the bug by the combination with `MRB_64BIT` and `MRB_INT32`.Yukihiro "Matz" Matsumoto
Which is caused by `MRB_NAN_BOXING`.
2020-10-12Run tests for `target/boxing.rb`.Yukihiro "Matz" Matsumoto
2020-10-12You don't need to keep index in local variables info in `irep`.Yukihiro "Matz" Matsumoto
2020-10-12Enable method cache by default.Yukihiro "Matz" Matsumoto
Introduced `MRB_NO_METHOD_CACHE` which is inverse of `MRB_METHOD_CACHE` that should be enabled intestinally. In addition, the default cache is made bigger (128 -> 256).
2020-10-12Provide a new build target `host-gprof` that enables profiling.Yukihiro "Matz" Matsumoto
2020-10-12Call `#initialize_copy` from `init_copy` only if it's redefined.Yukihiro "Matz" Matsumoto
2020-10-12Skip `mrb_get_args()` in `mrb_ary_push()`.Yukihiro "Matz" Matsumoto
2020-10-12Upgrade `RITE_VM_VERSION` to `0300` (means mruby 3.0).Yukihiro "Matz" Matsumoto
2020-10-12Split `MRB_BINARY_FORMAT` to major and minor.Yukihiro "Matz" Matsumoto
The minor versions should be upper compatible. So mere opcode, section addition can be done without breaking compiled binary.
2020-10-12Update opcode reference and comment.Yukihiro "Matz" Matsumoto
- no OP_EXT_ anymore - OP_LOADI16 in right position