Yukihiro "Matz" Matsumoto
03719490eb
class.c: define const_added method (with empty body)
2025-04-25 15:56:57 +09:00
dearblue
84e1b0045c
Fixed class method visibility via module_function
...
The following code should work
```ruby
module M
def me
p self
end
module_function :me
end
M.me
```
2025-04-07 21:40:56 +09:00
Yukihiro "Matz" Matsumoto
1e6442f54e
Revert "class.c (include_module_at): narrow local variable scope"
...
C++ does not compile `goto` cross local variable declaration.
This reverts commit c618b44fee .
2025-03-10 19:33:49 +09:00
Yukihiro "Matz" Matsumoto
1e36d7662c
object.h: rename gccolor to clearer gc_color
2025-03-10 14:23:51 +09:00
Yukihiro "Matz" Matsumoto
c618b44fee
class.c (include_module_at): narrow local variable scope
2025-03-10 11:26:13 +09:00
Yukihiro "Matz" Matsumoto
48f93adcdc
class.c (boot_defclass): unify variable declaration and initialization
2025-03-10 11:25:34 +09:00
Yukihiro "Matz" Matsumoto
436269f62c
class.c: remove duplicated CI_TARGET_CLASS definition from class.c
2025-03-08 11:09:57 +09:00
Yukihiro "Matz" Matsumoto
3c4f6501b0
class.c (find_visibility_ci): inline find_ci_from_proc()
2025-03-08 07:54:51 +09:00
Yukihiro "Matz" Matsumoto
ec7477fe0d
class.c: take visibility from outer scope
...
It is possible to update the visibility from within a block, so that
`find_visibility_ci()` should look up outer scopes.
2025-03-07 17:49:08 +09:00
Yukihiro "Matz" Matsumoto
889f09f8b7
class.c: move visibility flags from classes/modules to callinfo
2025-03-07 17:17:50 +09:00
Yukihiro "Matz" Matsumoto
6e1ab49ed3
class.c: allow changing visibility of methods defined in superclasses
2025-03-07 17:17:49 +09:00
Yukihiro "Matz" Matsumoto
37fb59bdac
class.h: rename macros for clarity
...
- MRB_SET_VISIBILITY -> MRB_CLASS_SET_VISIBILITY
- MRB_VISIBILITY -> MRB_CLASS_VISIBILITY
2025-03-07 17:17:49 +09:00
Yukihiro "Matz" Matsumoto
2a876d2047
class.c: implement top-level public/private/protected in the core in C
2025-03-07 17:17:49 +09:00
Yukihiro "Matz" Matsumoto
43da490a1e
class.c: alias should keep the visibility of the original
2025-03-07 17:17:48 +09:00
Yukihiro "Matz" Matsumoto
921d632615
class.c (mrb_mod_visibility): clear method cache
2025-03-07 17:17:48 +09:00
Yukihiro "Matz" Matsumoto
20d5330417
class.c: use MT_VMASK to mask the flag values
2025-03-07 17:17:48 +09:00
Yukihiro "Matz" Matsumoto
aba9a7d053
class.c: #initialize should be private by default
...
Fixed wrong condition.
2025-03-07 17:17:46 +09:00
Yukihiro "Matz" Matsumoto
cfc104e66c
class.c (mrb_define_module_function): make instance method private
2025-03-07 17:17:42 +09:00
Yukihiro "Matz" Matsumoto
4122cee9e4
class.c: implement attr_accessor in C
2025-03-07 17:17:39 +09:00
Yukihiro "Matz" Matsumoto
7d2beb9fef
class.c (mrb_remove_method): should call hook method from the origin
...
MRB_CLASS_ORIGIN moves the pointer for prepended class/module, but the
hook method should be searched from the original class/module.
2025-03-07 17:17:38 +09:00
Yukihiro "Matz" Matsumoto
6168b15e0e
class.c (undef_method): call hook method when undef'ing a method
2025-03-07 17:17:38 +09:00
Yukihiro "Matz" Matsumoto
bcd0e0e439
class.c (mrb_remove_method): call hook method
...
Depending the context, hook method should be either method_removed or
singleton_method_removed.
2025-03-07 17:17:38 +09:00
Yukihiro "Matz" Matsumoto
0863c08841
class.c: implement singleton method hook methods
...
- singleton_method_removed
- singleton_method_undefined
2025-03-07 17:17:37 +09:00
Yukihiro "Matz" Matsumoto
9c74f6e908
class.c: implement method hook methods
...
- method_removed
- method_undefined
2025-03-07 17:17:37 +09:00
Yukihiro "Matz" Matsumoto
eb8b4120d7
class.c: initialize method needs to be private by default
2025-03-07 17:17:37 +09:00
Yukihiro "Matz" Matsumoto
e660e28a39
class.c: make some Module methods private
...
- append_features
- extend_object
- extended
- included
- initialize
- method_added
- module_function
- prepend_features
- prepended
- private
- protected
- public
- remove_const
2025-03-07 17:17:36 +09:00
Yukihiro "Matz" Matsumoto
f5150ab98a
class.c: make some Class methods private
...
- initialize
- inherited
2025-03-07 17:17:36 +09:00
Yukihiro "Matz" Matsumoto
c5e270e8f3
class.c: make some BasicObject methods private
...
- initialize
- singleton_method_added
- method_missing
2025-03-07 17:17:36 +09:00
Yukihiro "Matz" Matsumoto
ca20017ac9
class.c: implement mrb_define_private_method()
2025-03-07 17:17:36 +09:00
Yukihiro "Matz" Matsumoto
71c0de7f08
class.c (mrb_define_method_raw): take visibility from the class
...
If not explicitly specified in the method struct.
2025-03-07 17:17:36 +09:00
Yukihiro "Matz" Matsumoto
fdf71d8f2d
class.c: first step to private methods; #1835
...
Now each method entry holds visibility information in flag bits.
2025-03-07 17:17:34 +09:00
dearblue
b86c220384
Avoid array object creation with “unknown keyword” error
...
It is sufficient to return the first element.
2025-02-02 21:02:03 +09:00
dearblue
a981f5aed7
Add more const qualifier for RProc
2025-01-20 22:25:50 +09:00
Yukihiro "Matz" Matsumoto
8276143f03
object.h: remove MRB_SET_FROZEN_FLAG/MRB_UNSET_FROZEN_FLAG macros
...
Simple `o->frozen = 1/0` now works.
2025-01-07 13:56:30 +09:00
Yukihiro "Matz" Matsumoto
c11d18e426
object.h: unify MRB_FROZEN_P() and mrb_frozen_p()
2025-01-07 11:24:58 +09:00
Yukihiro "Matz" Matsumoto
21003746df
object.h: separate frozen flag to the independent bit-field
...
So that other flag operation do not break frozen flag.
2025-01-07 07:44:10 +09:00
Yukihiro "Matz" Matsumoto
a234c66c97
class.c: removed a mistakenly copied function
2025-01-06 22:15:58 +09:00
Yukihiro "Matz" Matsumoto
0e79f6b34b
include/object.h: rename color to gccolor
...
To clarify the color is for garbage collection.
2025-01-03 19:12:40 +09:00
Yukihiro "Matz" Matsumoto
9f59d26c35
class.c: adjust space around the operator
2024-12-30 22:45:13 +09:00
Yukihiro "Matz" Matsumoto
86a40189b4
class.c: remove _P suffix from non predicate
2024-12-28 11:18:46 +09:00
Yukihiro "Matz" Matsumoto
0b5ebf1b79
class.c: avoid using separate values in files
2024-12-27 18:49:35 +09:00
Yukihiro "Matz" Matsumoto
cf8e0f3f47
class.c: define MT_KEY_SHIFT (2) for the future
2024-12-27 18:39:46 +09:00
Yukihiro "Matz" Matsumoto
a247f48cf6
Merge pull request #6416 from hoshiumiarata/optimize_class_new_iseq
2024-11-15 15:42:57 +09:00
Yukihiro "Matz" Matsumoto
ab3bc12fcb
class.c: remove 'class' prefix from error messages
2024-11-15 15:33:14 +09:00
Yukihiro "Matz" Matsumoto
65e0e5bbd3
class.c (mrb_method_missing): add receiver's class to clarify
...
We needed to modify a lot of test code that expected the old style.
2024-11-15 15:13:24 +09:00
Hoshiumi Arata
0b1d55a088
class.c: replace OP_SEND with OP_SSEND in "new" method's iseq
2024-11-13 18:34:16 +09:00
Yukihiro "Matz" Matsumoto
fa68e634a7
variable.c (mrb_exc_const_get): E_XXX_ERROR should not call const_missing
...
As #6359 pointed out, calling const_missing hook from E_XXX_ERROR (that
calls mrb_exc_get_id()) can be an attack vector. Since E_XXX_ERROR is
supposed to be a defined error class, we think that the situation where
it is undefined and the const_missing hook is called should be detected
as an error; fix #6359
2024-10-15 21:09:48 +09:00
dearblue
cf23861166
Making splat argument objects invisible from Ruby side
...
The `mrb_get_argv()` function and the `*` specifier of `mrb_get_args()` get the address of the argument.
At this time, if it is passed in the form of a splat argument, it will be an address to an element of an array object.
After getting the pointer to the array object, the caller may call `mrb_vm_exec()` directly or indirectly.
At this time, a splat argument with the class set can be retrieved as an array object by searching with `ObjectSpace.each_object`.
If changes are made as array objects, addresses on the heap as arrays may become invalid, or objects in the array may be recycled by the GC.
When the caller references the changed address in a subsequent operation, use-after-free is established.
This patch assigns `NULL` as the class of the array object so that it cannot be detected by `ObjectSpace.each_object` from the Ruby side.
2024-09-19 23:13:18 +09:00
dearblue
42513d61fd
Need to place static proc objects into 8-byte alignments
...
Static proc objects defined as methods may be placed in 4-byte alignments in 32-bit environments.
This may be misinterpreted as an immediate value depending on the address.
Since C11 and C++11 have additional language features for byte alignment, corresponding compilers use them to define the `mrb_alignas()` macro.
For earlier compilers, they use their own extensions to define the `mrb_alignas()` macro.
GCC supports `__attribute__((aligned(alignment)))` since at least version 2.95.3 (1999).
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#IDX305
According to GPT-4, support was added in version 2.7 (1995).
It is not known which version of Visual C++ added support for `__declspec(align(n))`.
According to GPT-4, at least Visual C++ 6.0 (1998) seems to support it.
Also, the documentation of past Intel C/C++ compilers that support `__declspec(align(n))` makes reference to support with Visual C++ 4.2 (1996).
https://www.intel.com/content/dam/www/public/ijkk/jp/ja/documents/developer/ccomp40j.pdf
2024-09-01 20:28:34 +09:00
Yukihiro "Matz" Matsumoto
325c918464
class.c: use mrb_unboxed_type where obj is not immediate for sure
2024-08-26 05:33:19 +09:00