dearblue
69682e3d41
Fixed when combined mrb_fiber_resume() and Fiber#transfer
...
For example, the following code was crashing.
```c
#include <mruby.h>
#include <mruby/compile.h>
#include <mruby/proc.h>
int
main(int argc, char *argv[])
{
mrb_state *mrb = mrb_open();
mrb_value fiber = mrb_load_string(mrb, "Fiber.new { Fiber.new { 12345.6789 }.transfer }");
mrb_value res = mrb_fiber_resume(mrb, fiber, 0, NULL);
mrb_p(mrb, res);
mrb_close(mrb);
return 0;
}
```
2024-01-04 14:12:35 +09:00
Yukihiro "Matz" Matsumoto
a8b82bfae5
Merge pull request #6128 from dearblue/fiber-end
...
Integrates the sequence when a fiber is terminated by `OP_RETURN`
2023-12-27 22:24:01 +09:00
Yukihiro "Matz" Matsumoto
e51c20888b
Merge pull request #6127 from dearblue/catch_handler_find
...
Changed parameters for `catch_handler_find()`
2023-12-27 22:22:12 +09:00
Yukihiro "Matz" Matsumoto
1ac4148020
Merge pull request #6126 from dearblue/block-return
...
Fixed return value of `OP_RETURN_BLK` called directly under C function
2023-12-27 22:19:36 +09:00
Yukihiro "Matz" Matsumoto
074374e28d
Merge pull request #6125 from dearblue/cross-c
...
Allow `OP_RETURN_BLK` to cross C boundaries
2023-12-27 22:18:06 +09:00
dearblue
dba1dcdd25
Integrates the sequence when a fiber is terminated by OP_RETURN
...
In the `ensure` block while executing `fiber.transfer`, keep `fiber->cxt->prev` to be `NULL`.
2023-12-24 15:45:15 +09:00
dearblue
dc09000f01
Fixed return value of OP_RETURN_BLK called directly under C function
...
```ruby
def cross; Class.new { return 1 }; end; p cross'
# => #<Class:0x8245cf170> # without this patch
# => 1 # with this patch
```
2023-12-24 13:56:25 +09:00
dearblue
d41a2612f4
Allow OP_RETURN_BLK to cross C boundaries
...
The restriction was introduced in commit b563bcb7ff to resolve https://github.com/mruby/mruby/issues/3462 .
Subsequently, the `RBreak` object, introduced by mruby 1.3.0, allowed crossing the C boundary.
```ruby
def cross; Class.new { proc { return }.call }; end; cross
# => unexpected return (LocalJumpError) # without this patch
# => nothing raised # with this patch
```
2023-12-24 13:56:25 +09:00
dearblue
6a9671eac7
Changed parameters for catch_handler_find()
...
- Removed `mrb` and `ci` parameters.
- Added `irep` parameter.
The caller must guarantee that `irep->clen > 0`.
2023-12-23 23:02:48 +09:00
dearblue
2a1ea7d605
Inherit MRB_FL_UNDEF_ALLOCATE in subclasses
...
If `Class#allocate` is prohibited, subclasses should also be implicitly prohibited.
```ruby
p Class.new(Struct).allocate.class
# => #<Class:0x82362ac00> by #6122
# => allocator undefined for #<Class:0x000000083a983220> (TypeError) by Ruby 3.2
```
Added `MRB_DEFINE_ALLOCATOR()` to allow subclasses to use `Class#allocate`.
Supplement to #6122 .
2023-12-23 21:01:42 +09:00
dearblue
8ecfacefca
Prohibit Class#allocate in a different way
...
The method introduced by #5979 causes a fault by swapping classes.
```console
% bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
zsh: segmentation fault (core dumped) bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
```
After applying this patch, a `TypeError` exception will be raised.
```console
% bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
trace (most recent call last):
[1] -e:1
-e:1:in method: allocation failure of Proc (TypeError)
```
However, if the `mrb_vtype` is the same object, the same care must still be taken as before.
```console
% bin/mruby -e 'Method = Binding; p method(:puts).eval("12345")'
trace (most recent call last):
[1] -e:1
-e:1:in eval: wrong argument type nil (expected Proc) (TypeError)
```
2023-12-22 21:59:34 +09:00
Yukihiro "Matz" Matsumoto
fa75865a33
Merge pull request #6121 from dearblue/separate-breaks
...
Separate unwinding process for `break` / `return`
2023-12-22 16:12:12 +09:00
Yukihiro "Matz" Matsumoto
97b522d778
src/fmt_fp.c: change condition order for memory safety
2023-12-22 15:35:21 +09:00
Yukihiro "Matz" Matsumoto
34c5d96e86
allof.c: mrb_default_allocf() definition in the separate file
...
So that the user can define their own version of mrb_default_alloc
function to override memory allocation of mruby.
2023-12-21 15:28:04 +09:00
dearblue
859f1b3002
Separate unwinding process for break / return
2023-12-20 21:54:53 +09:00
Yukihiro "Matz" Matsumoto
992bd49344
Merge pull request #6116 from dearblue/send-branch
...
Improve branching in the execution part of the `OP_SEND` block
2023-12-18 12:17:39 +09:00
Yukihiro "Matz" Matsumoto
e8a36235d8
Merge pull request #6115 from dearblue/loop-inclusion
...
Replace `for` and `CHECKPOINT` block comprehensions
2023-12-18 12:16:38 +09:00
dearblue
990e18ad59
Improve branching in the execution part of the OP_SEND block
...
The `MRB_METHOD_CFUNC_P()` macro contains several branches, which will be replaced by simple branches.
2023-12-15 21:46:00 +09:00
dearblue
7144eab350
Replace for and CHECKPOINT block comprehensions
...
I think it will make the eyes less tired for a process flow.
2023-12-15 21:46:00 +09:00
dearblue
e9904ddb2a
Move L_RAISE and L_BREAK blocks to OP_RAISEIF
...
`OP_RAISEIF` should be easier to relate than `OP_RETURN`.
2023-12-15 21:46:00 +09:00
Yukihiro "Matz" Matsumoto
5311d1aa1b
Merge pull request #6106 from dearblue/fiber-limits-ease
...
Ease fiber limitations
2023-12-13 16:10:42 +09:00
Yukihiro "Matz" Matsumoto
ae8dcb82ba
vm.c: CINFO_SKIP should not be called with prev_jmp == NULL
...
We have added assertion to ensure.
2023-12-12 16:49:11 +09:00
dearblue
38c7936c94
Remove unreachable code in OP_R_BREAK
...
Termination of fiber by `break` results in a `LocalJumpError`, so the indicated code will not be executed.
2023-12-11 21:25:08 +09:00
dearblue
73c8330cbd
RBreak remembers the CI location
...
It is now possible to specify return destination directly.
This allows callinfo to distinguish between calls to the same proc object.
At the same time, the `Kernel#catch` method is adjusted.
By removing the previously required double lambda object, the REnv object is no longer created as well.
2023-12-07 21:33:14 +09:00
Yukihiro "Matz" Matsumoto
5a258f0872
Merge pull request #6109 from dearblue/fix-6108
...
Needs `cipop()` before crossing the C boundary
2023-12-06 15:57:16 +09:00
Yukihiro "Matz" Matsumoto
9c2af6aaed
load.c: replace mrbc_ prefix by mrb_ccontext
2023-12-06 15:29:02 +09:00
dearblue
ca9e8d91e4
Needs cipop() before crossing the C boundary
...
fix #6108
2023-12-05 22:03:38 +09:00
dearblue
42308c42b5
Fix CI misalignment between Fiber#resume and Fiber.yield
...
When a fiber switched by `Fiber.yield` is resumed by `Fiber#resume` by C, it is necessary to pop CI with `fiber_switch()`.
Previously, CI misalignment caused inconsistencies, including crashes, on the next `Fiber#resume`.
2023-12-04 22:32:57 +09:00
dearblue
568309b25a
Propagating exceptions to the caller of Fiber#resume
...
Need to return control from `mrb_vm_exec()` to the caller if `Fiber#resume` was done from C.
2023-12-04 22:32:57 +09:00
Yukihiro "Matz" Matsumoto
87453fb70b
vm.c (CI_PROC_SET): consider alias proc
2023-12-03 22:38:31 +09:00
Yukihiro "Matz" Matsumoto
e8da16cdf5
vm.c (exec_irep): need to support aliases
2023-12-03 22:38:30 +09:00
Yukihiro "Matz" Matsumoto
ccdd81eb69
Merge pull request #6101 from dearblue/unwinding
...
Reorganization of unwinding at `break` / `return`.
2023-11-22 08:11:15 +09:00
Yukihiro "Matz" Matsumoto
f2dc76e3b5
Change alias handling to avoid using mid in Env; ref 6098
...
Since `Env` objects are shared by Blocks/Procs in the same context,
making multiple aliases in one context screws up with alias names.
New implementation uses alias bodies (Procs) to refer new names.
As a side effect, `__callee__` stop working correctly for aliases.
To fix this `__callee__` problem, we need to keep alias method names in
`callinfo`, which consumes more memory. We are wondering that is worth
the compatibility.
2023-11-21 09:37:17 +09:00
Yukihiro "Matz" Matsumoto
9c1c9ba8e5
vm.c: rename local variable m to p
...
`m` usually stands for a method but this one was `struct RProc*`.
2023-11-19 23:21:05 +09:00
Yukihiro "Matz" Matsumoto
91b4da3a2b
class.c: keep alias flag in proc object; fix #6098
2023-11-16 17:18:28 +09:00
Yukihiro "Matz" Matsumoto
9959d4fc66
range.c: use presym for symbol initialization
2023-11-16 16:30:40 +09:00
Yukihiro "Matz" Matsumoto
a94005b740
range.c: use presym to initialize Range class
2023-11-16 16:27:57 +09:00
dearblue
2e881d3297
Reorganization of unwinding at break / return.
...
The unwinding process that has been done at each point in time is now done in a merged block after looking for the last ci to `break` / `return`.
2023-11-12 20:39:33 +09:00
Yukihiro "Matz" Matsumoto
76d0ff9a45
error.c: use presym for error initialization
2023-11-11 23:49:32 +09:00
Yukihiro "Matz" Matsumoto
8e6f4a79a8
hash.c: use presym to initialize Hash class
2023-11-11 23:48:31 +09:00
Yukihiro "Matz" Matsumoto
df1d397da5
numeric.c: use presym to initialize numeric classes
2023-11-11 23:48:31 +09:00
Yukihiro "Matz" Matsumoto
5084716e6b
class.c: use presym to undefine Module methods
2023-11-11 23:48:23 +09:00
Yukihiro "Matz" Matsumoto
d5a69ac8c7
proc.c: use presym to initialize Proc class
2023-11-07 21:40:45 +09:00
Yukihiro "Matz" Matsumoto
e41bbaa67a
class.c: move Proc class allocation to proc.c
2023-11-07 21:40:45 +09:00
Yukihiro "Matz" Matsumoto
eb906bd4c1
array.c: use presyms to define the class
2023-11-07 21:40:44 +09:00
Yukihiro "Matz" Matsumoto
1dec82d82f
object.c: use presyms to define classes
2023-11-07 21:40:44 +09:00
Yukihiro "Matz" Matsumoto
4fd63cfb9d
kernel.c: use presym to define a module
2023-11-07 21:40:44 +09:00
Yukihiro "Matz" Matsumoto
bc012deef9
object.c (mrb_eql): avoid mrb_funcall_argv() when possible
2023-11-02 13:20:10 +09:00
Yukihiro "Matz" Matsumoto
7db4050040
enum.c: use presym
2023-11-02 13:15:45 +09:00
Yukihiro "Matz" Matsumoto
1e3d47760f
Merge pull request #6090 from LanzaSchneider/patch-1
...
fix(class.c): typo in format specifiers
2023-11-02 08:20:39 +09:00