Commit Graph

18378 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto 0ed26f8352 class.c: rename mt_/MT_ to mrb_mt_/MRB_MT_ for non-static identifiers
Follow mruby's naming convention: non-static types, macros, and
functions use the mrb_/MRB_ prefix. Renamed:
- union mt_ptr -> union mrb_mt_ptr
- mt_tbl -> mrb_mt_tbl
- MT_KEY(), MT_FUNC, MT_NOARG, MT_PUBLIC, MT_PRIVATE -> MRB_MT_*
- MT_KEY_SHIFT, MT_READONLY_BIT, MT_REMOVED_P -> MRB_MT_*
- mt_init_rom() -> mrb_mt_init_rom()
File-local static functions and macros in class.c are unchanged.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 15:22:55 +09:00
Yukihiro "Matz" Matsumoto 494d55c9f7 class.c: use tombstone for remove_method with ROM method tables
Previously, removing a ROM method required flattening all chain layers
into a single mutable table. This was O(n) and allocated RAM for all
previously-ROM methods.

Use a tombstone marker (MT_FUNC flag with func=NULL) instead. The
mt_get() lookup treats this as "not found" and stops the chain walk,
hiding the ROM entry while allowing superclass lookup.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 14:57:50 +09:00
Yukihiro "Matz" Matsumoto 16fb8a6b08 doc: add ROM method table guide
Comprehensive documentation covering architecture, definition
format, flags, extension gem usage, conditional methods, runtime
behavior (COW, method removal, GC), and conversion guide.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 14:38:29 +09:00
Yukihiro "Matz" Matsumoto bcc585a80f presym.h: merge enable.h into presym.h
Since disable.h was removed, enable.h was the only remaining
dispatch target from presym.h. Inline its contents into presym.h
and delete the now-redundant enable.h. Also define _2 backward
compatibility macros in terms of the standard macros.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 14:24:27 +09:00
Yukihiro "Matz" Matsumoto dcd77f1efd mruby-compiler: replace MRB_SYM_2() with MRB_SYM() macros
The _2 suffix variants accept an mrb_state* parameter that is
always ignored with presym enabled. Replace all uses in codegen.c,
parse.y, and y.tab.c with the standard macros. The _2 macro
definitions are kept in presym headers for backward compatibility.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 14:14:40 +09:00
Yukihiro "Matz" Matsumoto bd4f380178 build system: remove dead presym_enabled? checks
Since presym is now always enabled, the @enable_presym flag,
presym_enabled? method, and all conditional branches guarding
presym-specific code paths are dead code. Remove them and
simplify the affected build logic.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 14:10:02 +09:00
Yukihiro "Matz" Matsumoto 5829ca60b6 doc: update presym documentation
Remove references to conf.disable_presym and MRB_NO_PRESYM.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:18:00 +09:00
Yukihiro "Matz" Matsumoto f86caf9e14 mruby-errno: remove MRB_NO_PRESYM fallback code
Simplify struct layouts and macros to use presym-only path.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:17:51 +09:00
Yukihiro "Matz" Matsumoto 52c71f5b99 mrbgems: remove MRB_NO_PRESYM guards from additional gems
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:17:43 +09:00
Yukihiro "Matz" Matsumoto 9fbc11c6d0 mrbgems: remove MRB_NO_PRESYM guards from core extension gems
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:17:34 +09:00
Yukihiro "Matz" Matsumoto 03be6af0b9 src: remove MRB_NO_PRESYM guards from core source files
Presym is now always enabled. Remove #ifndef MRB_NO_PRESYM
guards and their #else fallback branches from all core files.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:17:24 +09:00
Yukihiro "Matz" Matsumoto 81689045a6 presym.h: remove MRB_NO_PRESYM dispatch and delete disable.h
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:17:15 +09:00
Yukihiro "Matz" Matsumoto eccfe52612 build system: always enable presym for mrbc build
Remove disable_presym from mrbc_build and cross-build fallback.
Add explicit object file dependencies on presym headers in
presym.rake to prevent compilation before headers are generated.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 12:17:02 +09:00
Yukihiro "Matz" Matsumoto cf52364c43 mruby-kernel-ext: ROM method table for Kernel extensions (7 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:39 +09:00
Yukihiro "Matz" Matsumoto 4448b5e227 mruby-random: ROM method tables for Random/Kernel/Array (9 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:37 +09:00
Yukihiro "Matz" Matsumoto 7e83c0e974 mruby-complex: ROM method tables for Complex/NilClass/Kernel
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:34 +09:00
Yukihiro "Matz" Matsumoto 3a7e0e9d82 mruby-rational: ROM method tables for Rational/Integer/NilClass/Kernel
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:33 +09:00
Yukihiro "Matz" Matsumoto 3041dda976 mruby-struct: ROM method table for Struct class (15 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:32 +09:00
Yukihiro "Matz" Matsumoto 653bf360bc mruby-socket: ROM method tables for Socket classes
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:30 +09:00
Yukihiro "Matz" Matsumoto 067f123193 mruby-method: ROM method tables for Method/UnboundMethod classes
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:28 +09:00
Yukihiro "Matz" Matsumoto 08e800e43e mruby-metaprog: ROM method tables for metaprogramming extensions
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:26 +09:00
Yukihiro "Matz" Matsumoto ba0f450fb4 mruby-io: ROM method tables for IO and File classes
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:24 +09:00
Yukihiro "Matz" Matsumoto ae41bb332a mruby-set: ROM method table for Set class (43 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:23 +09:00
Yukihiro "Matz" Matsumoto f46d77dcf0 mruby-time: ROM method table for Time class
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-19 09:39:19 +09:00
Yukihiro "Matz" Matsumoto f0a4820d44 mruby-symbol-ext: ROM method table for Symbol extensions (2 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:44:30 +09:00
Yukihiro "Matz" Matsumoto 4f167f55f7 mruby-range-ext: ROM method table for Range extensions (3 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:44:29 +09:00
Yukihiro "Matz" Matsumoto 63df017ff6 mruby-object-ext: ROM method tables for NilClass/Kernel/BasicObject extensions (5 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:44:27 +09:00
Yukihiro "Matz" Matsumoto b52d3936e6 mruby-numeric-ext: ROM method table for Integer extensions (9 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:44:25 +09:00
Yukihiro "Matz" Matsumoto 0ac01f23ba mruby-hash-ext: ROM method table for Hash extensions (6 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:44:23 +09:00
Yukihiro "Matz" Matsumoto 532ab1a74a mruby-proc-ext: ROM method tables for Proc/Kernel extensions (6 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:41:20 +09:00
Yukihiro "Matz" Matsumoto 51d0bfa1fc mruby-class-ext: ROM method tables for Module/Class extensions (11 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:41:18 +09:00
Yukihiro "Matz" Matsumoto 6b66f99c6b mruby-array-ext: ROM method table for Array extensions (29 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:41:10 +09:00
Yukihiro "Matz" Matsumoto d95d71fb8b mruby-string-ext: ROM method table for String/Integer extensions (54 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:38:51 +09:00
Yukihiro "Matz" Matsumoto 2c2e38cceb proc.c: ROM method table for Proc class (5 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:53 +09:00
Yukihiro "Matz" Matsumoto 6cf02c26b9 error.c: ROM method table for Exception class (7 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:51 +09:00
Yukihiro "Matz" Matsumoto c679c2762d symbol.c: ROM method table for Symbol class (6 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:49 +09:00
Yukihiro "Matz" Matsumoto c5470958c7 range.c: ROM method table for Range class (15 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:47 +09:00
Yukihiro "Matz" Matsumoto 1b20096c31 object.c: ROM method tables for NilClass/TrueClass/FalseClass (16 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:45 +09:00
Yukihiro "Matz" Matsumoto 8fdd5757e3 class.c: ROM method tables for BasicObject/Module/Class (49 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:43 +09:00
Yukihiro "Matz" Matsumoto cdbc18cf76 kernel.c: ROM method table for Kernel module (27 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:41 +09:00
Yukihiro "Matz" Matsumoto 63f462ef1f numeric.c: ROM method tables for Numeric/Integer/Float (63 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:38 +09:00
Yukihiro "Matz" Matsumoto 7f74ba248f hash.c: ROM method table for Hash class (36 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:37 +09:00
Yukihiro "Matz" Matsumoto 3b44a7001b array.c: ROM method table for Array class (36 methods)
Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:30:35 +09:00
Yukihiro "Matz" Matsumoto 96da40605f class.c, string.c: ROM method table for String class
Move String's 46 method definitions from runtime
mrb_define_method_id() calls to a static ROM method table
sorted at init time. mrb_mt_init_rom() sorts the parallel
vals/keys arrays by presym ID and sets the readonly flag.

Expose mt_tbl and related types in internal.h so ROM tables
can be defined in individual source files.

When MRB_NO_PRESYM is defined, falls back to traditional
runtime method registration.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 16:12:56 +09:00
Yukihiro "Matz" Matsumoto 1e0f9b76c3 class.c: add chained method table infrastructure for ROM support
Add next pointer and readonly flag to mt_tbl struct to support
chained ROM method table layers. mt_get() walks the chain,
mt_copy() shares ROM layers, mt_free() and mrb_gc_mark_mt() skip
readonly layers. COW in mrb_define_method_raw() creates a mutable
top layer when the existing table is readonly. mt_flatten() merges
all layers for the rare remove_method case.

No ROM tables exist yet -- all tables have next==NULL and no
readonly flag, so behavior is identical to the previous code.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 15:53:18 +09:00
Yukihiro "Matz" Matsumoto e49479feaa mlc_config.json: ignore iso.org links in markdown-link-check
iso.org blocks automated HTTP requests with 403 Forbidden.
Also update the ISO 30170 URLs to current format in README.md
and CONTRIBUTING.md.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 15:41:55 +09:00
Yukihiro "Matz" Matsumoto 9910444212 etc.c: inline special float values in word boxing rotation encoding
Encode 0.0, -0.0, +Inf, -Inf, and NaN as small sentinel constants
with the float tag pattern, avoiding heap allocation for these common
special values.  All NaN bit patterns are normalized to a single
canonical NaN.  The 5 obscure floats near 2^(-255) whose rotation
encoding would collide with a sentinel are heap-allocated instead.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 15:41:55 +09:00
Yukihiro "Matz" Matsumoto b6148c893f boxing_word.h: lossless float encoding using rotation
Replace lossy 2-bit truncation with rotation-based encoding for
64-bit word boxing with float64. The new scheme uses
rotl64(float_bits - ADDEND, 3) to embed floats inline with full
52-bit mantissa precision. Floats with exponents outside [-255,+256]
(0.0, NaN, Inf, very small/large values) fall back to heap-allocated
RFloat.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 15:41:55 +09:00
Yukihiro "Matz" Matsumoto 4e63489d1a hash.c: add __pat_values() for pattern matching optimization
Add Hash#__pat_values(keys) that returns an array of values if all
keys exist, or false if any key is missing. This replaces per-key
key?() + []() calls (2N hash lookups) with a single method call
(N hash lookups). The compiler generates __pat_values() followed by
array indexing to extract each value for pattern matching.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 15:41:55 +09:00
Yukihiro "Matz" Matsumoto 5f429e151a mruby-compiler: extract gen_pat_keys_ary() helper for hash pattern codegen
Extract the keys-to-array loop (load keys + OP_ARRAY) into
gen_pat_keys_ary() helper. The pattern appeared in both
deconstruct_keys argument and __except argument generation.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 15:41:55 +09:00