Yukihiro "Matz" Matsumoto
3a5c45f282
NEWS.md: update for recent changes
...
Add entries for language changes (case/in NoMatchingPatternError,
compound statement in tLPAREN_ARG), C API additions (mrb_bigint_p(),
RVALUE union), compiler optimizations (literal chunking), build
fixes (MSYS2), security fixes, and 26 merged pull requests.
Co-authored-by: Claude <noreply@anthropic.com >
2026-04-02 20:17:19 +09:00
Yukihiro "Matz" Matsumoto
ac9f7aedd2
Merge pull request #6767 from mruby/fix/lparen-arg-compstmt
2026-03-30 07:54:31 +09:00
Yukihiro "Matz" Matsumoto
919cbd8fea
mruby-compiler: allow compound statement in tLPAREN_ARG
...
Change the grammar rule for tLPAREN_ARG from accepting only a
single stmt to accepting compstmt. This allows compound
statements with semicolons inside parenthesized arguments when
the parenthesis is preceded by a space, e.g., `p (f1; f2)`.
This matches the behavior of CRuby 3.3+.
Fixes #6766 .
Co-authored-by: Claude <noreply@anthropic.com >
2026-03-30 07:06:30 +09:00
Yukihiro "Matz" Matsumoto
801eefeab6
Merge pull request #6765 from khasinski/fix-lazy-flat-map
2026-03-29 22:55:13 +09:00
Chris Hasiński
8f71887e46
Improve flat_map test descriptions for clarity
2026-03-28 23:14:46 +01:00
Chris Hasiński
3f52ef6cfc
Fix Lazy#flat_map to handle non-enumerable block return values
...
When the block passed to Lazy#flat_map returns a non-enumerable value
(e.g. an Integer), mruby raised NoMethodError because it unconditionally
called #each on the result. CRuby yields non-enumerable values directly.
Use respond_to?(:each) to match CRuby behavior: iterate enumerable
results, yield non-enumerable results as-is.
2026-03-28 22:59:11 +01:00
Yukihiro "Matz" Matsumoto
28c5b1b17b
Merge pull request #6763 from mruby/dependabot/github_actions/github-actions-dependencies-19ba90ca6e
2026-03-26 14:27:05 +09:00
dependabot[bot]
d50932c50f
build(deps): bump j178/prek-action
...
Bumps the github-actions-dependencies group with 1 update: [j178/prek-action](https://github.com/j178/prek-action ).
Updates `j178/prek-action` from 1 to 2
- [Release notes](https://github.com/j178/prek-action/releases )
- [Commits](https://github.com/j178/prek-action/compare/v1...v2 )
---
updated-dependencies:
- dependency-name: j178/prek-action
dependency-version: '2'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: github-actions-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-03-25 14:54:41 +00:00
Yukihiro "Matz" Matsumoto
b7e3743130
Merge pull request #6762 from mruby/fix-test-build-race
2026-03-25 15:49:46 +09:00
Yukihiro "Matz" Matsumoto
805e6dbc33
Merge pull request #6761 from mruby/fix-gc-unregister-leak
2026-03-25 15:44:44 +09:00
Yukihiro "Matz" Matsumoto
e8c5e7c0cd
mruby-test: write generated C files atomically to avoid race condition
...
With `rake -m`, the C compiler can start reading a partially-written
gem_test.c before generation completes. Write to a .tmp file first,
then rename to the final path.
Co-authored-by: Claude <noreply@anthropic.com >
2026-03-25 15:32:36 +09:00
Yukihiro "Matz" Matsumoto
ab249864cc
gc.c: remove all matching entries in mrb_gc_unregister()
...
Previously only the first match was removed, leaking duplicate
entries when the same object was registered multiple times.
Use two-pointer compaction for O(N) removal.
Fixes #6760 .
Co-authored-by: Claude <noreply@anthropic.com >
2026-03-25 15:29:27 +09:00
Yukihiro "Matz" Matsumoto
c2b588139f
Merge pull request #6758 from dearblue/vm
2026-03-25 15:17:02 +09:00
Yukihiro "Matz" Matsumoto
21dc829903
Merge pull request #6759 from dearblue/bigint
2026-03-25 15:15:49 +09:00
dearblue
6c4a8c09db
Define mrb_bigint_p() always.
...
Define the `mrb_bigint_p()` macro function, which returns false if `MRB_USE_BIGINT` is undefined.
2026-03-24 22:16:15 +09:00
dearblue
c52faebb7f
Don't assign the result of mrb_funcall() directly to regs
...
There are two reasons:
- If the mruby call stack is extended, the `ci` variable may become invalid.
- The C language does not specify the order in which the left-hand and right-hand sides of an assignment expression are evaluated.
Therefore, if the mruby data stack is extended, `ci->stack` may become invalid.
2026-03-24 21:25:46 +09:00
Yukihiro "Matz" Matsumoto
f61ab96689
Merge pull request #6756 from dearblue/array-ext
2026-03-24 15:04:58 +09:00
Yukihiro "Matz" Matsumoto
07a6c6e56b
Merge pull request #6757 from mruby/dependabot/pre_commit/pre-commit-hooks-ae77450b09
2026-03-24 09:30:46 +09:00
dependabot[bot]
45ebb3d0c8
build(deps): bump https://github.com/rubocop/rubocop
...
Bumps the pre-commit-hooks group with 1 update: [https://github.com/rubocop/rubocop ](https://github.com/rubocop/rubocop ).
Updates `https://github.com/rubocop/rubocop ` from v1.85.1 to 1.86.0
- [Release notes](https://github.com/rubocop/rubocop/releases )
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md )
- [Commits](https://github.com/rubocop/rubocop/compare/v1.85.1...v1.86.0 )
---
updated-dependencies:
- dependency-name: https://github.com/rubocop/rubocop
dependency-version: 1.86.0
dependency-type: direct:production
dependency-group: pre-commit-hooks
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-03-23 15:23:09 +00:00
dearblue
2135088ada
Avoid the impact of object modifications caused by calls to mrb_vm_exec()
...
Several methods defined in mruby-array-ext are written in C and may call `mrb_vm_exec()`.
If array objects are modified on the Ruby side, problems may arise in subsequent processing.
- Using objects that have been removed from the array and garbage collected
- Using pointers or array lengths that have become invalid due to changes to the array object
- Modifying the contents of a shared array object directly
ref: https://github.com/mruby/mruby/issues/6662
2026-03-22 23:05:37 +09:00
Yukihiro "Matz" Matsumoto
04f998238e
Merge pull request #6755 from leviongit/vm/karg/delete-return
2026-03-21 17:03:27 +09:00
Yukihiro "Matz" Matsumoto
affcbb000b
Merge pull request #6754 from leviongit/core/attr_accessor/nullary
2026-03-21 17:02:24 +09:00
Yukihiro "Matz" Matsumoto
ff5e6a2491
Merge pull request #6753 from dearblue/array.product
2026-03-21 16:57:49 +09:00
leviongit
e8d0750458
reload ci after mrb_hash_delete_key
2026-03-20 21:35:26 +01:00
leviongit
88e356e7da
remove redundant mrb_hash_get call
...
`mrb_hash_delete` returns the removed element (which is guaranteed to
exist due to the `mrb_hash_key_p` check), this prevents the hash from
being searched twice.
2026-03-20 21:20:18 +01:00
leviongit
95ece95e37
prefer marking the procs implementing attr_reader methods as noarg
...
this commit works on #6752 so it doesn't require a call to
`mrb_get_args`
2026-03-20 19:14:54 +01:00
dearblue
98d763603c
Further optimize Array#product
...
Replace `__product_group` method with `__product_generate` and `__product_next`.
This change eliminates the need for Ruby to perform internal state calculations, allowing it to simply receive the results.
2026-03-20 21:13:52 +09:00
Yukihiro "Matz" Matsumoto
01ce2f8c71
Merge pull request #6747 from katafrakt/handle-hash-default-arg
2026-03-20 16:44:27 +09:00
Yukihiro "Matz" Matsumoto
f08dede1d9
Merge pull request #6752 from khasinski/fix-attr-reader-arity
2026-03-20 16:40:45 +09:00
Yukihiro "Matz" Matsumoto
3bfe703f80
Merge pull request #6750 from dearblue/array.product
2026-03-20 10:24:10 +09:00
Yukihiro "Matz" Matsumoto
e82fa70004
Merge pull request #6749 from hasumikin/fix/microcontroller-profile
2026-03-20 10:22:32 +09:00
Yukihiro "Matz" Matsumoto
8d53f65b96
Merge pull request #6748 from jbampton/clean-up-workflows
2026-03-20 10:21:45 +09:00
Chris Hasiński
c0b1e87c09
Fix attr_reader-generated methods accepting extra arguments
...
attr_reader-generated getter methods silently ignored any arguments
passed to them. CRuby raises ArgumentError in this case.
Add mrb_get_args(mrb, "") to enforce zero arguments, matching CRuby.
2026-03-19 23:12:14 +01:00
dearblue
8441eaf633
Fixed "Out-of-bounds Read" and "Divide-by-Zero" in ary_product_group()
...
Reproduction:
- Out-of-bounds Read
```console
% build/host/bin/mruby -e '([nil] * 256).__product_group([[nil] * 256], 1 << 32, 256)'
zsh: segmentation fault (core dumped) build/host/bin/mruby -e
```
- Divide-by-Zero
```console
% build/host/bin/mruby -e '([nil] * 256).__product_group([[]], 1 << 32, 256)'
zsh: floating point exception (core dumped) build/host/bin/mruby -e '([nil] * 256).__product_group([[]], 1 << 32, 256)'
```
2026-03-19 23:11:06 +09:00
HASUMI Hitoshi
736a72cdc9
[skip ci] Update include/mrbconf.h
...
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-19 09:50:15 +09:00
HASUMI Hitoshi
5e9eed2d0c
Fix KHASH_DEFAULT_SIZE to KHASH_INITIAL_SIZE rename inconsistencies
...
Commit 250bf6edd renamed KHASH_DEFAULT_SIZE to KHASH_INITIAL_SIZE but
missed updating build_config files and documentation. Also restore the
default value in khash.h to 32, consistent with the documented default
and the profile hierarchy (MRB_CONSTRAINED_BASELINE_PROFILE reduces it
to 16).
2026-03-19 09:38:36 +09:00
John Bampton
80d84188fd
pre-commit bump Node.js
2026-03-18 17:57:33 +10:00
John Bampton
55ef8e1728
Update workflows
2026-03-18 17:57:05 +10:00
Paweł Świątkowski
13d9d770fc
Correctly handle empty hash as default named argument
...
```
def func(arg: {})
p arg
end
```
This used to work in earlier mruby versions, but broke somewhere recently.
2026-03-18 08:53:20 +01:00
Yukihiro "Matz" Matsumoto
a41eeaed33
Merge pull request #6735 from dearblue/presym
2026-03-16 21:55:22 +09:00
Yukihiro "Matz" Matsumoto
4ed4326dd5
Merge pull request #6746 from mruby/dependabot/pre_commit/pre-commit-hooks-6e50fbf5c1
2026-03-16 21:47:31 +09:00
dearblue
000acedc35
Prevent full recompilation without changes to presym file
...
Commit b9a1a1fb23 is a revert of commit 8df9a22a85 , differing only in the comment.
This means the issue from https://github.com/mruby/mruby/issues/6721 has reappeared.
The cause of https://github.com/mruby/mruby/issues/6721 , as stated in the commit message for commit 8df9a22a85 , is that each ".o" file has an indirect dependency on all ".pi" files through the presym file.
This patch therefore adds a proxy-like task `gensym:update:#{build.name}` between tasks.
Its purpose is to hide the direct dependency from ".o" files to the presym file from the rake system.
2026-03-14 17:14:37 +09:00
dependabot[bot]
14e98c60c3
build(deps): bump the pre-commit-hooks group across 1 directory with 8 updates
...
Bumps the pre-commit-hooks group with 8 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [https://github.com/gitleaks/gitleaks ](https://github.com/gitleaks/gitleaks ) | `v8.30.0` | `8.30.1` |
| [https://github.com/oxipng/oxipng ](https://github.com/oxipng/oxipng ) | `v10.0.0` | `10.1.0` |
| [https://github.com/Lucas-C/pre-commit-hooks ](https://github.com/Lucas-C/pre-commit-hooks ) | `v1.5.5` | `1.5.6` |
| [https://github.com/rhysd/actionlint ](https://github.com/rhysd/actionlint ) | `v1.7.9` | `1.7.11` |
| [https://github.com/codespell-project/codespell ](https://github.com/codespell-project/codespell ) | `v2.4.1` | `2.4.2` |
| [https://github.com/igorshubovych/markdownlint-cli ](https://github.com/igorshubovych/markdownlint-cli ) | `v0.46.0` | `0.48.0` |
| [https://github.com/rubocop/rubocop ](https://github.com/rubocop/rubocop ) | `v1.81.7` | `1.85.1` |
| [https://github.com/adrienverge/yamllint ](https://github.com/adrienverge/yamllint ) | `v1.37.1` | `1.38.0` |
Updates `https://github.com/gitleaks/gitleaks ` from v8.30.0 to 8.30.1
- [Release notes](https://github.com/gitleaks/gitleaks/releases )
- [Commits](https://github.com/gitleaks/gitleaks/compare/v8.30.0...v8.30.1 )
Updates `https://github.com/oxipng/oxipng ` from v10.0.0 to 10.1.0
- [Release notes](https://github.com/oxipng/oxipng/releases )
- [Changelog](https://github.com/oxipng/oxipng/blob/master/CHANGELOG.md )
- [Commits](https://github.com/oxipng/oxipng/compare/v10.0.0...v10.1.0 )
Updates `https://github.com/Lucas-C/pre-commit-hooks ` from v1.5.5 to 1.5.6
- [Release notes](https://github.com/Lucas-C/pre-commit-hooks/releases )
- [Commits](https://github.com/Lucas-C/pre-commit-hooks/compare/v1.5.5...v1.5.6 )
Updates `https://github.com/rhysd/actionlint ` from v1.7.9 to 1.7.11
- [Release notes](https://github.com/rhysd/actionlint/releases )
- [Changelog](https://github.com/rhysd/actionlint/blob/main/CHANGELOG.md )
- [Commits](https://github.com/rhysd/actionlint/compare/v1.7.9...v1.7.11 )
Updates `https://github.com/codespell-project/codespell ` from v2.4.1 to 2.4.2
- [Release notes](https://github.com/codespell-project/codespell/releases )
- [Commits](https://github.com/codespell-project/codespell/compare/v2.4.1...v2.4.2 )
Updates `https://github.com/igorshubovych/markdownlint-cli ` from v0.46.0 to 0.48.0
- [Release notes](https://github.com/igorshubovych/markdownlint-cli/releases )
- [Commits](https://github.com/igorshubovych/markdownlint-cli/compare/v0.46.0...v0.48.0 )
Updates `https://github.com/rubocop/rubocop ` from v1.81.7 to 1.85.1
- [Release notes](https://github.com/rubocop/rubocop/releases )
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md )
- [Commits](https://github.com/rubocop/rubocop/compare/v1.81.7...v1.85.1 )
Updates `https://github.com/adrienverge/yamllint ` from v1.37.1 to 1.38.0
- [Release notes](https://github.com/adrienverge/yamllint/releases )
- [Changelog](https://github.com/adrienverge/yamllint/blob/master/CHANGELOG.rst )
- [Commits](https://github.com/adrienverge/yamllint/compare/v1.37.1...v1.38.0 )
---
updated-dependencies:
- dependency-name: https://github.com/gitleaks/gitleaks
dependency-version: 8.30.1
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/oxipng/oxipng
dependency-version: 10.1.0
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/Lucas-C/pre-commit-hooks
dependency-version: 1.5.6
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/rhysd/actionlint
dependency-version: 1.7.11
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/codespell-project/codespell
dependency-version: 2.4.2
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/igorshubovych/markdownlint-cli
dependency-version: 0.48.0
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/rubocop/rubocop
dependency-version: 1.85.1
dependency-type: direct:production
dependency-group: pre-commit-hooks
- dependency-name: https://github.com/adrienverge/yamllint
dependency-version: 1.38.0
dependency-type: direct:production
dependency-group: pre-commit-hooks
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-03-13 14:57:23 +00:00
Yukihiro "Matz" Matsumoto
eb7d0b86d7
Merge pull request #6736 from jbampton/add-dependabot-pre-commit
2026-03-12 17:16:48 +09:00
John Bampton
9bdf998faa
Add pre-commit ecosystem to Dependabot
...
Group dependabot updates to reduce repo noise
Add descriptive group labels
https://github.blog/changelog/2026-03-10-dependabot-now-supports-pre-commit-hooks/
https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference#package-ecosystem-
2026-03-12 16:59:11 +10:00
Yukihiro "Matz" Matsumoto
457a50b485
Merge pull request #6744 from mruby/fix/case-in-no-match-error
2026-03-12 14:36:46 +09:00
Yukihiro "Matz" Matsumoto
143959b94b
doc: fix prettier formatting in markdown files
...
Co-authored-by: Claude <noreply@anthropic.com >
2026-03-12 14:33:37 +09:00
Yukihiro "Matz" Matsumoto
d8de35b635
codegen.c: raise NoMatchingPatternError in case/in without else
...
case/in without else clause now raises NoMatchingPatternError
when no pattern matches, matching CRuby behavior. Fixes #6741 .
Co-authored-by: Claude <noreply@anthropic.com >
2026-03-12 14:28:17 +09:00
Yukihiro "Matz" Matsumoto
b34b7206f9
Merge pull request #6738 from jbampton/add-manual-hooks-workflow
2026-03-12 14:20:02 +09:00
Yukihiro "Matz" Matsumoto
03d1f7d6ec
Merge pull request #6743 from mruby/fix/words-chunking
2026-03-12 14:17:38 +09:00