Commit Graph

1222 Commits

Author SHA1 Message Date
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
dearblue 859f1b3002 Separate unwinding process for break / return 2023-12-20 21:54:53 +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 9c2af6aaed load.c: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:29:02 +09:00
Yukihiro "Matz" Matsumoto 073a4f19f8 proc.h: update document in the comment (regarding compiler context) 2023-12-06 15:22:09 +09:00
Yukihiro "Matz" Matsumoto c5e3cbe4bf compile.h: stop using mrbc_ prefix for compiler context
Since it is confusing that the term `mrbc` stands for both "mruby
compiler" and "mruby compiler context" in the source code. Instead,
we use `mrb_ccontext` (stands for compiler context) prefix hereafter.

We choose `mrb_ccontext` because we have already used `mrb_context` (for
VM execusion context).
2023-12-06 15:22:08 +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 91b4da3a2b class.c: keep alias flag in proc object; fix #6098 2023-11-16 17:18:28 +09:00
John Bampton db20a19711 include/mruby/version.h: change MRuby to mruby 2023-10-14 19:13:49 +10:00
Yukihiro "Matz" Matsumoto d708931b10 gc.c: revert 38b9a25e83
Fix #6041
2023-09-09 14:31:13 +09:00
Yukihiro "Matz" Matsumoto e8841fbf58 gc.h: move mrb_heap_page definition to gc.c 2023-09-05 23:29:24 +09:00
Yukihiro "Matz" Matsumoto 0542d6bad4 debug.c (mrb_packed_int_encode): remove end argument
The function requires the buffer bigger than `mrb_packed_int_len()`
anyway, so we don't need boundary checks for each iteration. Should
makes the function a little bit faster.
2023-07-28 17:05:38 +09:00
Yukihiro "Matz" Matsumoto aa5ffb686f mruby-os-memsize: more precise memory size for method tables 2023-07-06 16:12:51 +09:00
Yukihiro "Matz" Matsumoto 38b9a25e83 gc.c (mrb_obj_alloc): remove free_next,free_prev from heap pages
It used to be maintain heap pages with allocatable objects (free_heaps)
but we can save two words (16 bytes) per page by scanning live heap pages.
2023-06-27 15:48:25 +09:00
Yukihiro "Matz" Matsumoto e2bbf75d58 kernel.c: prepare for new recursive inspect check
Like previous recursive `<=>` check, scan call stack to detect recursive
`inspect` calls. We no longer need incomplete `_inspect` hack to pass
around a hash table to record objects currently inspecting.
2023-06-20 07:04:28 +09:00
Yukihiro "Matz" Matsumoto 5e4cecf766 internal.h: add mrb_obj_equal_m to internal.h 2023-06-15 23:36:27 +09:00
Yukihiro "Matz" Matsumoto 17720c9b7b variable.c (const_get): avoid mrb_funcall if possible
Directly call mrb_const_missing() if const_missing is not overridden.
2023-06-12 23:47:35 +09:00
Yukihiro "Matz" Matsumoto b6181ae58a mruby/gc.h: reorder mrb_gc members to reduce alignment gaps 2023-06-09 17:19:09 +09:00
Yukihiro "Matz" Matsumoto 8b8e186688 gc.h: rename majorgc_old_threashold to oldgen_threashold
This field means that if you have more old generation objects than
this value, major GC mode will be turned on.
2023-06-06 11:26:35 +09:00
Yukihiro "Matz" Matsumoto f07281a026 Revert "object.h: make GC color uint8_t that fits in 3 bits"
The change made the size of mruby data types bigger on Win.
This reverts commit afcf7fc86d.
2023-06-03 16:55:58 +09:00
Yukihiro "Matz" Matsumoto afcf7fc86d object.h: make GC color uint8_t that fits in 3 bits 2023-05-31 08:27:23 +09:00
Yukihiro "Matz" Matsumoto 795044f82c internal.h: add mrb_check_num_exact prototype to the header 2023-05-30 08:54:05 +09:00
Yukihiro "Matz" Matsumoto bba2fd84ea class.h: instance type should occupy 5 bits in flags 2023-05-29 09:27:08 +09:00
Yukihiro "Matz" Matsumoto 2f7f797473 remove extra spaces before ; 2023-05-22 12:05:35 +09:00
Yukihiro "Matz" Matsumoto eea72ec84a fix spaces in the type cast expressions (cosmetic changes) 2023-05-18 23:29:16 +09:00
John Bampton 06a765a1c2 Change MRuby to mruby 2023-05-03 22:12:59 +10:00
Yukihiro "Matz" Matsumoto abd1222089 class.h (mrb_class): treat immediate values first 2023-04-30 23:19:00 +09:00
Yukihiro "Matz" Matsumoto 85aefa8992 Merge pull request #5955 from LanzaSchneider/master
fix: wrong comment for ```mrb_debug_get_filename```
2023-03-31 08:27:27 +09:00
Yukihiro "Matz" Matsumoto d482eabfa2 mruby-bigint/bigint.c: int.pow(n,m) to take bigint as exponential 2023-03-31 08:26:47 +09:00
Lanza 01b03d852f fix: wrong comment for ``mrb_debug_get_filename`` 2023-03-30 06:57:33 +08:00
Yukihiro "Matz" Matsumoto fbb3a2426f proc.c (mrb_proc_eql): define == and eql? for Proc class 2023-03-27 19:14:21 +09:00
dearblue 2675477f07 Safely retrieve self from proc in mrb_yield()
Passing a proc generated by the following method to `mrb_yield()` or `mrb_yield_argv()` no longer causes `SIGSEGV`:

- C functions made into proc objects with `mrb_proc_new_cfunc()`.
- A proc object which is the top level of a program generated by `mrb_load_string_cxt()` etc. with `mrbc_context::no_exec` enabled.

See also: #5932
2023-03-17 21:20:48 +09:00
Yukihiro "Matz" Matsumoto 4fc69ce3bc Revert "mruby/throw.h: do not use __builtin_setjmp for GCC; close #5950"
This reverts commit 9cf49d08b4.

This change caused flaky tests on MinGW. I now remember it was introduced
for MINGW64 to address #5133. Sorry.
2023-03-14 19:50:15 +09:00
Yukihiro "Matz" Matsumoto 0d07af104b internal.h: move function prototypes to <mruby/internal.h> 2023-03-14 11:06:44 +09:00
Yukihiro "Matz" Matsumoto 9a1e6760a8 mruby-bigint: add new functions mrb_bint_add_d, mrb_bint_sub_d
Those functions do not normalize the return value to avoid repeated
conversions between Bigints and (small) Integers.
2023-03-13 16:07:17 +09:00
Yukihiro "Matz" Matsumoto f7cbb319cb mruby-bigint: remove unused mrb_bint_div_ii() function 2023-03-13 08:10:41 +09:00
Yukihiro "Matz" Matsumoto 9cf49d08b4 mruby/throw.h: do not use __builtin_setjmp for GCC; close #5950
https://gcc.gnu.org/onlinedocs/gcc/Nonlocal-Gotos.html
2023-03-13 08:05:55 +09:00
Yukihiro "Matz" Matsumoto 90e53cad39 Merge pull request #5945 from dearblue/env-internal
Avoid exposure for `REnv` objects
2023-03-11 16:18:28 +09:00
Yukihiro "Matz" Matsumoto 01233f70bd mruby-bigint/bigint.c: add two new functions to convert to 64bit int
- mrb_bint_as_int64()
- mrb_bint_as_uint64()
2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto a3b84fbb08 mruby-bigint/bigint.c: add 2 new functions for 64 bit integer
- mrb_bint_new_int64()
- mrb_bint_new_uint64()
2023-03-10 08:52:05 +09:00
dearblue 38d5ed44e1 Avoid exposure for REnv objects
The `REnv` object is difficult to deal with, and it would be ideal if the user did not have to manipulate it directly.
In some previous situations, it was necessary to call `mrb_env_unshare()`, a non-API function, after `mrb_load_string()` or similar.

With this patch, it is no longer necessary for users to use `mrb_env_unshare()` directly, as it is now handled internally simply by using the `mrb_vm_ci_env_clear()` function.
Also, `mrb_vm_ci_env_set()` is demoted from the `MRB_API` function for the same reason.

ref. commit 1ab3da6f08
2023-03-05 17:45:47 +09:00
Yukihiro "Matz" Matsumoto 82c67d52fc Merge pull request #5931 from mruby/stable
Merge mruby 3.2.0
2023-02-24 23:19:09 +09:00
mimaki 87260e7bb1 Update version and release date. (mruby 3.2.0 (2023-02-24)) 2023-02-24 19:51:12 +09:00
Yukihiro "Matz" Matsumoto 1ab3da6f08 vm.c (ci_env_set): inline ci_env_set()
Along with making preparing mrb_vm_ci_env_clar() as a replacement of
mrb_vm_ci_env_set(mrb, NULL).
2023-02-23 17:16:10 +09:00
Yukihiro "Matz" Matsumoto 7cbe6894b4 debug.c (mrb_debug_get_position): avoid duplicate calls to get_file() 2023-02-19 19:05:54 +09:00
Yukihiro "Matz" Matsumoto 78137f31c8 error.c (mrb_make_exception): reinvent exception creation
The arguments of mrb_make_exception() has changed. I believe no one is
using the function, but beware.
2023-02-18 11:51:33 +09:00
Yukihiro "Matz" Matsumoto 431f83eb8c error.c (mrb_make_exception): make the function internal 2023-02-17 17:04:09 +09:00
mimaki 4ca2129889 Update version to 3.2.0RC4. 2023-02-08 10:04:29 +09:00
dearblue 0898ce982e Demotion mrb_f_raise() from MRB_API
This function is the entity of the `Kernel.#raise` or `Kernel#fail` method.
I don't think users can use it whenever they want, and I don't think there is any need to expose it as an entity of a user-defined method.
2023-02-07 22:37:58 +09:00
Yukihiro "Matz" Matsumoto 8c8bbd94dc error.c: add new error handling API functions; ref #2837
- mrb_clear_error(): clear error status of mrb_state
- mrb_check_error(): check if error caused in the previous API

Note that `mrb_check_error` clears error status, so if you call
`mrb_check_error` more than once, latter calls will return FALSE.
2023-02-03 14:28:24 +09:00