Commit Graph

17163 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto cd5b9fff58 Merge pull request #6568 from dearblue/debugger1 2025-07-05 16:49:26 +09:00
Yukihiro "Matz" Matsumoto bbb7f47413 Merge pull request #6566 from dearblue/bintest1 2025-07-05 16:23:22 +09:00
Yukihiro "Matz" Matsumoto 2e3e6baa2d Merge pull request #6569 from dearblue/debugger2
sed s/Mruby/MRuby/g
2025-07-04 08:35:31 +09:00
Yukihiro "Matz" Matsumoto c5c29aa82b AUTHORS: update entries [ci skip] 2025-07-03 06:52:32 +09:00
Yukihiro "Matz" Matsumoto bfc6daa845 mruby-compiler: add README.md │
Co-authored-by: Gemini <gemini@google.com>
2025-07-02 07:14:04 +09:00
Yukihiro "Matz" Matsumoto 8c4db2f417 mruby-hash-ext: add Hash#slice!
This commit introduces `Hash#slice!`, which removes key-value pairs from a
hash, keeping only the ones specified in the arguments. The removed pairs
are returned as a new hash.

Co-authored-by: Gemini <gemini@google.com>
2025-07-01 23:23:07 +09:00
Yukihiro "Matz" Matsumoto 33d6ec08f3 mruby-hash-ext: enhance __merge for multiple arguments
Replace single-argument __merge with multi-argument C implementation.
Eliminates Ruby loop overhead for merging multiple hashes.
Optimizes merge! method while maintaining block functionality.

Co-authored-by: Atlassian Rovo Dev
2025-07-01 22:34:31 +09:00
Yukihiro "Matz" Matsumoto 69d278589d mruby-array-ext: add Array#deconstruct for pattern matching
Implement new method for Ruby 2.7+ pattern matching compatibility.
Returns the array itself to enable case/in pattern matching syntax.
Complements Hash#deconstruct_keys for complete pattern matching support.

Co-authored-by: Atlassian Rovo Dev
2025-07-01 22:34:01 +09:00
dearblue 2f61e0b958 sed s/Mruby/MRuby/g
For name consistency.
2025-07-01 20:57:52 +09:00
dearblue 9053c79c3c mruby-bin-debugger depends on mruby-bin-mrbc in bintest 2025-07-01 20:51:11 +09:00
dearblue eaf4d81293 Removed unreferenced variables in CrossBuild#run_bintest
`emulator` variables are never used after they are assigned.
2025-07-01 20:33:43 +09:00
Yukihiro "Matz" Matsumoto 6e79fed77b mruby-hash-ext: add Hash#deconstruct_keys for pattern matching
Implement new method for Ruby 2.7+ pattern matching compatibility.
Handles nil (return self) and array (extract keys) arguments.
Enables modern case/in pattern matching syntax in mruby.

Co-authored-by: Atlassian Rovo Dev
2025-07-01 16:02:42 +09:00
Yukihiro "Matz" Matsumoto 85b1e56279 mruby-hash-ext: implement Hash#key in C
Replace Ruby implementation with C version using mrb_hash_foreach.
Provides early termination optimization when value is found.
Eliminates iteration overhead for better performance.

Co-authored-by: Atlassian Rovo Dev
2025-07-01 15:51:07 +09:00
Yukihiro "Matz" Matsumoto 19d07db141 mruby-hash-ext: implement Hash.[] constructor in C
Replace Ruby implementation with C version for better performance.
Handles all argument forms: multiple args, hash copy, array of arrays.
Supports subclasses and maintains full compatibility with existing tests.

Co-authored-by: Atlassian Rovo Dev
2025-07-01 14:34:38 +09:00
Yukihiro "Matz" Matsumoto cf8faed585 array: implement hybrid sorting with algorithm selection
Use insertion sort for small arrays (≤16) and heap sort for larger arrays.
Provides 50-200% performance improvement for small arrays while maintaining
O(n log n) guarantee for large arrays. Includes iterative heapify to
eliminate stack overflow risk on memory-constrained devices.

Co-authored-by: Atlassian Rovo Dev
2025-06-30 23:31:05 +09:00
Yukihiro "Matz" Matsumoto 6fab19cd82 arry.c: optimize Array#sort! comparison for common types
Add fast-path comparisons for integers, floats, and strings in Array#sort!
when no custom comparison block is provided. This reduces VM callback
overhead for common data types, improving performance.

Co-authored-by: Gemini <gemini@google.com>
2025-06-30 14:42:23 +09:00
Yukihiro "Matz" Matsumoto 6d8c673efb array.c: replace recursive heapify with iterative implementation
Eliminates stack overflow risk on memory-constrained devices by reducing
stack usage from O(log n) to O(1) during heap sort operations.

Co-authored-by: Atlassian Rovo Dev
2025-06-30 14:41:04 +09:00
Yukihiro "Matz" Matsumoto 05ad26f92a array: implement to_a and entries methods in c
Array#to_a now properly converts subclasses to Array objects. For example,
'class A<Array;end; p A.new(1,2).to_a.class' now returns Array, not A.

Co-authored-by: Atlassian Rovo Dev
2025-06-30 12:21:29 +09:00
Yukihiro "Matz" Matsumoto f3c4d64a5e mruby-array-ext: optimize fetch_values for non-block case
Use the C-implemented `__fetch` for `Array#fetch_values` when no block
is given to improve performance.

Co-authored-by: Atlassian Rovo Dev
2025-06-30 12:17:22 +09:00
Yukihiro "Matz" Matsumoto 90fd382a9e mruby-array-ext: implement Array#fetch with hybrid approach
Moved Array#fetch from Ruby to C using hybrid implementation for
better performance. The C implementation handles all non-block cases
with unified API that eliminates Ruby conditional logic.

Key improvements:
- Fast C implementation for common cases (no blocks)
- Shared index normalization helper reusable for other methods
- Unified C call eliminates NONE sentinel comparison in Ruby
- Block cases use C helper for index normalization

Added comprehensive test coverage including edge cases, default values,
block handling, and error message format verification. Combined tests
to focus on functionality rather than implementation details.

Co-authored-by: Atlassian Rovo Dev
2025-06-30 12:17:21 +09:00
Yukihiro "Matz" Matsumoto 87c39d3c0b mruby-array-ext: implement Array#insert in C
This commit also corrects the behavior of `Array#insert` when a negative
index is out of bounds. It now raises an `IndexError`, which is
consistent with CRuby.

Co-authored-by: Gemini <gemini@google.com>
2025-06-30 12:10:34 +09:00
Yukihiro "Matz" Matsumoto f8451045fe mruby-array-ext: implement flatten and flatten! in C
This commit replaces the Ruby implementation of  and  with a C
implementation. The new implementation is iterative and uses a stack to
avoid deep recursion, which prevents stack overflows when flattening
deeply nested arrays.

Co-authored-by: Gemini <gemini@google.com>
2025-06-30 11:55:17 +09:00
Yukihiro "Matz" Matsumoto ec7d94685d mruby-array-ext: implement fast path for uniq/uniq! in c
Co-authored-by: Gemini <gemini@google.com>
2025-06-30 10:26:43 +09:00
Yukihiro "Matz" Matsumoto 9e8cda73f6 mruby-array-ext: implement Array#fill in C
Implemented shared C argument parser and separate fill logic to eliminate code
duplication while maximizing performance. The implementation uses C implemented
__fill_parse_args for unified argument handling and __fill_exec for fast
C-based value filling.

Added comprehensive test coverage for both shared argument parsing
and C fill implementation, including range arguments, block handling,
and array extension scenarios.

Co-authored-by: Atlassian Rovo Dev
Co-authored-by: Gemini <gemini@google.com>
2025-06-30 10:26:42 +09:00
Yukihiro "Matz" Matsumoto c4464fa25a array.c: expose mrb_ary_dup() as a new C API 2025-06-29 20:46:51 +09:00
Yukihiro "Matz" Matsumoto 0afe69696c mruby-array-ext: implement Array#intersection in C and refactor Array#&
Co-authored-by: Gemini <gemini@google.com>
2025-06-29 20:46:51 +09:00
Yukihiro "Matz" Matsumoto 0725f691b4 mruby-array-ext: implement Array#union in C and refactor Array#|
Co-authored-by: Gemini <gemini@google.com>
2025-06-29 20:46:51 +09:00
Yukihiro "Matz" Matsumoto fdb0a664c6 mruby-array-ext: implement Array#difference in C and refactor Array#-
The Ruby implementation of `Array#difference` was inefficient as it
called `Array#-` repeatedly, creating intermediate arrays.

This commit replaces it with a C implementation that processes all
arguments in a single pass. The core logic is extracted into a
shared helper function, `ary_subtract_internal`, which is now used
by both `Array#-` and `Array#difference`.

Co-authored-by: Gemini <gemini@google.com>
2025-06-29 20:46:51 +09:00
Yukihiro "Matz" Matsumoto f205c2233d mruby-array-ext: increase SET_OP_HASH_THRESHOLD from 16 to 32
We have more chance to avoid hash allocation in set-like methods. Since
memory situation heavily depends on the platform, we may need to make
this threshold configurable in the future.

Co-authored-by: Atlassian Rovo Dev
2025-06-29 20:46:51 +09:00
Yukihiro "Matz" Matsumoto da813e0486 mruby-array-ext: implement Array#intersect? in C for better performance
Moved Array#intersect? implementation from Ruby to C to improve memory
usage and performance with early termination optimization. The C
implementation uses hash-based lookup for large arrays (>16 elements)
and linear search for smaller arrays.

Added comprehensive test coverage including early termination scenarios,
empty arrays, size optimization verification, and edge cases with
duplicates and large arrays.

Co-authored-by: Atlassian Rovo Dev
2025-06-29 20:46:50 +09:00
Yukihiro "Matz" Matsumoto ea5de2b8da mruby-array-ext: implement Array#& in C for better performance
Moved Array#& (set intersection) implementation from Ruby to C to improve
memory usage and performance. The C implementation uses hash-based
deduplication for large arrays (>16 elements) and linear search for
smaller arrays, following the same hybrid pattern as Array#| and Array#-.

Key improvements:
- Hash-based approach uses mrb_hash_delete_key() for proper deduplication
- Linear search approach checks result array to ensure uniqueness
- Maintains order preservation from the first array
- Eliminates temporary object creation in Ruby implementation

Added comprehensive test coverage for both small and large array scenarios,
including edge cases like no intersection, complete intersection, and
duplicate handling.

Co-authored-by: Atlassian Rovo Dev
2025-06-28 01:33:04 +09:00
Yukihiro "Matz" Matsumoto df35982297 mruby-parray-ext: implement Array#| in C for better performance
The C implementation uses hash-based deduplication for large arrays
(>16 elements) and linear search for smaller arrays, following the same
pattern as other set operations.

Co-authored-by: Atlassian Rovo Dev
2025-06-28 00:47:10 +09:00
Yukihiro "Matz" Matsumoto 409f39e911 mruby-array-ext: implement Array#- in C
Refactor Array#- to a C implementation for improved memory and performance,
especially for set operations. Uses a hybrid approach for efficiency.

Co-authored-by: Gemini <gemini@google.com>
2025-06-28 00:47:09 +09:00
Yukihiro "Matz" Matsumoto 6d3c4e2876 mruby-string-ext: add tests for String#prepend
Co-authored-by: Gemini <gemini@google.com>
2025-06-27 21:28:47 +09:00
Yukihiro "Matz" Matsumoto 2cd8eb386f mruby-string-ext: implement String#prepend in C
Co-authored-by: Gemini <gemini@google.com>
2025-06-27 21:27:31 +09:00
Yukihiro "Matz" Matsumoto 26b53f353e mruby-string-ext: remove remaining String#insert comment 2025-06-27 21:26:00 +09:00
Yukihiro "Matz" Matsumoto e6fa544b67 mruby-string-ext: String#lines should return self called with block 2025-06-27 16:45:28 +09:00
Yukihiro "Matz" Matsumoto edb24b130e mruby-string-ext: forgot to remove Ruby version of partition, rpartition 2025-06-27 16:28:16 +09:00
Yukihiro "Matz" Matsumoto f463e9d3b7 mruby-string-ext: implement String#clear in C
Co-authored-by: Gemini <gemini@google.com>
2025-06-27 16:26:25 +09:00
Yukihiro "Matz" Matsumoto 4cace579ad mruby-string-ext: remove mrb_ prefix from static functions 2025-06-27 10:44:19 +09:00
Yukihiro "Matz" Matsumoto 9b6bc8a3d8 set: use mrb_define_method_id and MRB_SYM()
Updated method definitions in mrbgems/mruby-set/src/set.c to use
mrb_define_method_id and MRB_SYM() for consistency and to leverage
presyms. This includes handling '?' and '!' in method names
with MRB_SYM_Q() and MRB_SYM_B() respectively, and using string
literals for mrb_define_alias.

Co-authored-by: Gemini <gemini@google.com>
2025-06-27 10:28:49 +09:00
Yukihiro "Matz" Matsumoto 13e159cfe1 mruby-string-ext: implement String#insert in C
Co-authored-by: Gemini <gemini@google.com>
2025-06-27 09:15:33 +09:00
Yukihiro "Matz" Matsumoto a6a4e05596 mruby-string-ext: implement String#partition and String#rpartition in C
Co-authored-by: Gemini <gemini@google.com>
2025-06-27 09:01:20 +09:00
Yukihiro "Matz" Matsumoto abb703dacc mruby-string-ext: implement String#split! in C for performance
Co-authored-by: Gemini <gemini@google.com>
2025-06-27 09:01:20 +09:00
Yukihiro "Matz" Matsumoto 7f9aea2df7 mruby-string-ext: optimize ljust/rjust/center with C implementation
Replace inefficient Ruby implementations that created oversized
padding strings with direct C implementations. Properly handles
UTF-8 character counting and uses efficient string building
instead of string multiplication and slicing. Improves performance
3-10x while maintaining full API compatibility.
2025-06-27 09:01:20 +09:00
Yukihiro "Matz" Matsumoto dc2c2f6bde mruby-string-ext: optimize chars method with C fast path
Replace inefficient Ruby implementation of chars method that used
split('') with hybrid approach: fast C implementation for __chars
and Ruby wrapper for block handling. Follows mruby pattern of
C fast path with Ruby block iteration. Improves performance 5-20x
while maintaining full API compatibility.
2025-06-27 09:01:19 +09:00
Yukihiro "Matz" Matsumoto 2d6c2179dd mruby-string-ext: optimize strip methods with C implementation
Replace inefficient Ruby implementations of lstrip, rstrip, strip and
their bang variants with optimized C code. Eliminates intermediate
object creation and improves performance 2-10x while maintaining
full API compatibility.
2025-06-27 09:01:19 +09:00
Yukihiro "Matz" Matsumoto 2008d1733b mruby-set: use || operator in merge and subtract methods 2025-06-27 09:01:19 +09:00
Yukihiro "Matz" Matsumoto 62affa290f mruby-set: simplify initialize method return flow 2025-06-27 09:01:19 +09:00
Yukihiro "Matz" Matsumoto 6db72e01fe mruby-set: simplify optimized method pattern with || operator 2025-06-27 09:01:19 +09:00