Compare commits

...

1189 Commits

Author SHA1 Message Date
mimaki 2a435caf79 Update version to 3.4.0RC2. 2025-03-17 16:31:36 +09:00
mimaki 8b65a296db Merge branch 'master' into stable 2025-03-17 15:52:25 +09:00
Yukihiro "Matz" Matsumoto 468c6f1901 doc/mruby3.4.md: add #6491 to the release note 2025-03-17 09:21:36 +09:00
Yukihiro "Matz" Matsumoto d1909320d9 mruby-compiler: fixed a bug in string literal merge; fix #6491 2025-03-17 09:17:38 +09:00
Yukihiro "Matz" Matsumoto a6848ca2cb pre-commit autoupdate 2025-03-15 16:34:18 +09:00
Yukihiro "Matz" Matsumoto eb455c19fe mruby-compiler: prohibit singleton methods for literals
We have checked `def (literal).m` style but not `def literal.m` style.
In addition, `NODE_INT` check is newly added.
2025-03-14 23:28:42 +09:00
Yukihiro "Matz" Matsumoto 8472fe0f13 doc/limitation.md: remove visibility note
We have implemented visibility in mruby 3.4
2025-03-13 22:46:23 +09:00
Yukihiro "Matz" Matsumoto 9c37098c15 Merge pull request #6490 from dearblue/string
Fixed `RSTR_SINGLE_BYTE_P()` return values to boolean
2025-03-13 10:57:49 +09:00
dearblue 609a5c23b2 Fixed RSTR_SINGLE_BYTE_P() return values to boolean
Incorrectly returned void type when `MRB_UTF8_STRING` definition is not present.
2025-03-12 22:01:37 +09:00
Yukihiro "Matz" Matsumoto 17d5aaa048 doc/mruby3.4.md: first draft of the mruby 3.4 release note 2025-03-12 14:51:58 +09:00
Yukihiro "Matz" Matsumoto 5bc00bf199 mruby-compiler: detect super without surrounding method; close #6271 2025-03-11 21:21:50 +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
mimaki a2841fd9a8 Update version to 3.4.0RC. 2025-03-10 14:42:59 +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 92b18d6a44 gc.c: fix re-using to reusing 2025-03-10 14:23:21 +09:00
Yukihiro "Matz" Matsumoto f4de205960 range.c (range_num_to_a): reduce integer to float conversion
For big numbers (especially integers close to MRB_INT_MAX), float
conversion may be lose precisions. So we try not to convert numbers, but
just compare.
2025-03-10 13:13:10 +09:00
Yukihiro "Matz" Matsumoto 76d3739a89 mruby-metaprog (mrb_obj_methods): should not retrieve obj->c directly
In some cases, `obj` may not be an object structure, but an immediate.
2025-03-10 11:40:48 +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 32200f1eb9 build_config/no-float.rb: test build for MRB_NO_FLOAT
mruby allows to disable floating point numbers. We have add a build
configuration to test mruby build without floating point numbers.
2025-03-09 17:14:46 +09:00
Yukihiro "Matz" Matsumoto f2c8b43d42 mruby-test: stop unused local variable warning 2025-03-09 16:43:28 +09:00
Yukihiro "Matz" Matsumoto 4ba0cac481 numeric.c (coerce_step_counter): move local variable definition
To avoid unused local variable warning.
2025-03-09 16:42:28 +09:00
Yukihiro "Matz" Matsumoto 2b76967724 Merge pull request #6487 from esotericpig/master
Add Emscripten toolchain & build_config
2025-03-09 14:28:30 +09:00
Yukihiro "Matz" Matsumoto 9a226c28bc hash.c: add arity check for Hash#default_proc (and Hash.new); fix #6484 2025-03-08 16:14:26 +09:00
Yukihiro "Matz" Matsumoto a7f3cfb711 hash.c: allow 'default_proc=nil' to clear default_proc; ref #6483 2025-03-08 15:49:26 +09:00
Yukihiro "Matz" Matsumoto 837f62f18a hash.c: should check type before setting default_proc; fix #6483 2025-03-08 12:34:25 +09:00
Yukihiro "Matz" Matsumoto fbaedfeaad test/hash.rb: remove Hash#freeze before Hash#rehash; ref #6485 2025-03-08 11:25:49 +09:00
Yukihiro "Matz" Matsumoto 87680d3ab2 hash.c (mrb_hash_rehash): call hash_modify before actual modify; fix #6485 2025-03-08 11:21:27 +09:00
Yukihiro "Matz" Matsumoto 213a262b20 hash.c (mrb_hash_compact): call hash_modify instead of mrb_check_frozen
Currently, hash_modify() only calls mrb_check_frozen, but we may add new
checks in the future; ref #6485
2025-03-08 11:15:37 +09:00
Yukihiro "Matz" Matsumoto 96113a2ed9 mruby-io: define File.absolute_path method; ref #6482 2025-03-08 11:12:12 +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
esotericpig bfc9742848 Add Emscripten toolchain & build_config 2025-03-07 12:39:54 -10:00
Yukihiro "Matz" Matsumoto 07b986f710 symbol.c (sym_inline_unpack): should not mix signedness 2025-03-07 17:55:20 +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 67e85ed296 vm.c (mrb_object_exec): update ci's target class by update function
To avoid breaking a Proc with env set.
2025-03-07 17:17:50 +09:00
Yukihiro "Matz" Matsumoto fb56fecf51 class.h: remove macros no longer used 2025-03-07 17:17:50 +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 02bf7fe08e symbol.c (sym_inline_pack): max inline symbol length is now 4 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 2309fa0353 AUTHORS: update entries [ci skip] 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 5e6ea6c5f9 vm.c: restore visibility when reopen class/module definition
Ideally, the default visibility should be stored in the scope. But for
the time being mruby stores the visibility in the class/module. As a
result, nesting class/module reopening or class_eval/module_eval could
cause incompatibility. We will try to fix them in the future.
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 18674c0237 test/module.rb: add visibility tests; ref #1835 2025-03-07 17:17:48 +09:00
Yukihiro "Matz" Matsumoto 384579fd21 test/module.rb: rename to pass the spell check 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 3f93254b02 mruby-metaprog: add actual test for Kernel#protected_methods 2025-03-07 17:17:47 +09:00
Yukihiro "Matz" Matsumoto 16db15d6fd mruby-metaprog: add actual test for Kernel#private_methods 2025-03-07 17:17:47 +09:00
Yukihiro "Matz" Matsumoto 2db1ad9ce3 mruby-metaprog/test: avoid potential name crash by Foo class 2025-03-07 17:17:47 +09:00
Yukihiro "Matz" Matsumoto 6f2409adf3 Revert "proc.h: define visibility flags for RProc"
This reverts commit 7948373c7d2a019b0eed6ca6dfcb4d6e503b75d8.
2025-03-07 17:17:47 +09:00
Yukihiro "Matz" Matsumoto b0db0bdd3a vm.c: add checks for visibility (private, protected); close #1835 2025-03-07 17:17:47 +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 1a026ba9aa pre-commit: autoupdate 2025-03-07 17:17:46 +09:00
Yukihiro "Matz" Matsumoto 29cb270ef4 proc.h: define visibility flags for RProc
Visibility status should be store in Procs (that represent scopes), not
classes. Since classes can be reopened or can be accessed recursively.
2025-03-07 17:17:46 +09:00
Yukihiro "Matz" Matsumoto c22f527bac symbol.c (SYMBOL_INLINE_P): fix the check condition
Symbol `:_` would break the assertion.
2025-03-07 17:17:46 +09:00
Yukihiro "Matz" Matsumoto 6a61cd9373 kernel.c: make #respond_to_missing? private 2025-03-07 17:17:46 +09:00
Yukihiro "Matz" Matsumoto 52403abcf8 mruby-binding: make Kernel#binding private 2025-03-07 17:17:45 +09:00
Yukihiro "Matz" Matsumoto e5e8dd11c0 mruby-rational: make Rational() private 2025-03-07 17:17:45 +09:00
Yukihiro "Matz" Matsumoto 2a991fb399 mruby-complex: make Complex() private 2025-03-07 17:17:45 +09:00
Yukihiro "Matz" Matsumoto 111fe4b3be mruby-compiler: generate OP_SSEND from Complex and Rational literals 2025-03-07 17:17:45 +09:00
Yukihiro "Matz" Matsumoto 4a0e80601f mruby-kernel-ext: make Kernel methods private
- fail
- caller
= __method__
- __callee__
- Integer
= Float
- String
- Array
- Hash
2025-03-07 17:17:45 +09:00
Yukihiro "Matz" Matsumoto 93e133548f mruby-eval: make #eval private 2025-03-07 17:17:44 +09:00
Yukihiro "Matz" Matsumoto d7a4275dd1 mruby-metaprog: make #global_variables, #local_variables private 2025-03-07 17:17:44 +09:00
Yukihiro "Matz" Matsumoto 95b30a38dc kernel.rb: make Kernel#loop private 2025-03-07 17:17:44 +09:00
Yukihiro "Matz" Matsumoto ff6149dea7 kernel.c: removed some Kernel singleton methods
Since virtually no one calls `Kernel.block_given?` but just
`block_given?`. For the cases `raise` is redefined (like Ruby/Tk),
`Kernel.raise` is kept.
2025-03-07 17:17:44 +09:00
Yukihiro "Matz" Matsumoto 3a56106d6c mruby-proc-ext: make #proc private 2025-03-07 17:17:43 +09:00
Yukihiro "Matz" Matsumoto efc03f60af proc.c: make #lambda private 2025-03-07 17:17:43 +09:00
Yukihiro "Matz" Matsumoto cc54865873 mruby-sleep: make #sleep (and #usleep) private 2025-03-07 17:17:43 +09:00
Yukihiro "Matz" Matsumoto f7142cd327 mruby-random: make Kernel#srand and #rand private 2025-03-07 17:17:43 +09:00
Yukihiro "Matz" Matsumoto 4f5cad6444 mruby-catch: make #catch and #throw private 2025-03-07 17:17:43 +09:00
Yukihiro "Matz" Matsumoto 6bb629e957 mruby-exit: make exit methods private 2025-03-07 17:17:42 +09:00
Yukihiro "Matz" Matsumoto 6f97c842d2 mruby-io: use ... for argument forwarding 2025-03-07 17:17:42 +09:00
Yukihiro "Matz" Matsumoto a736ddcbb7 mruby-io: make some methods private
- open
- print
- printf
- gets
2025-03-07 17:17:42 +09:00
Yukihiro "Matz" Matsumoto 37d3d34036 mruby-compiler: use OP_SSEND for backquote calls 2025-03-07 17:17:42 +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 d022a3ee68 mruby-eval/test: use #__send__ to call private #eval 2025-03-07 17:17:41 +09:00
Yukihiro "Matz" Matsumoto 23d5e04fdf mruby-proc-ext/test: fix wrong usage of mrb_module_function() 2025-03-07 17:17:41 +09:00
Yukihiro "Matz" Matsumoto 541cdf35eb 00kernel.rb: use #__send__ to skip private check 2025-03-07 17:17:41 +09:00
Yukihiro "Matz" Matsumoto 798fd7dbdf 00class.rb: use #__send__ to skip private check 2025-03-07 17:17:41 +09:00
Yukihiro "Matz" Matsumoto e8574b6298 mruby-struct/test: call #remove_const via #__send__ 2025-03-07 17:17:41 +09:00
Yukihiro "Matz" Matsumoto cce8f62b21 mruby-object-ext/test: call #remove_const via #__send__ 2025-03-07 17:17:40 +09:00
Yukihiro "Matz" Matsumoto 4d547b6cbb test/module.rb: call #remove_const via #__send__ to skip private check 2025-03-07 17:17:40 +09:00
Yukihiro "Matz" Matsumoto e0cb99aad4 test/module.rb: call #extend_object via #__send__ to skip private check 2025-03-07 17:17:40 +09:00
Yukihiro "Matz" Matsumoto 8a409feaad test/module.rb: call #prepend_features via #__send__ to skip private check 2025-03-07 17:17:40 +09:00
Yukihiro "Matz" Matsumoto 701a18deda test/module.rb: call #append_features via #__send__ to skip private check 2025-03-07 17:17:40 +09:00
Yukihiro "Matz" Matsumoto 7653bdd05e test/codegen.rb: call #remove_const via #__send__ to skip private check 2025-03-07 17:17:39 +09:00
Yukihiro "Matz" Matsumoto f82cd188b0 test/exception.rb: call #initialize via #__send__ to skip private check 2025-03-07 17:17:39 +09:00
Yukihiro "Matz" Matsumoto 214ae5aad3 test/array.rb: call #initialize via #__send__ to skip private check 2025-03-07 17:17:39 +09:00
Yukihiro "Matz" Matsumoto 7981865e18 test/string.rb: call #initialize via #__send__ to skip private check 2025-03-07 17:17:39 +09:00
Yukihiro "Matz" Matsumoto 4122cee9e4 class.c: implement attr_accessor in C 2025-03-07 17:17:39 +09:00
Yukihiro "Matz" Matsumoto 27828de749 kernel.c: make some methods private
- block_given?
- initialize_copy
- iterator?
- p
- print
- raise
- respond_to_missing?
2025-03-07 17:17:38 +09:00
Yukihiro "Matz" Matsumoto bfcc1e3c2c mruby-io: puts should print nothing for empty arrays 2025-03-07 17:17:38 +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 457aaa173b mruby-metaprog (mrb_mod_remove_method): stop calling method_removed()
The hook method should be called from mrb_remove_method().
2025-03-07 17:17:37 +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 4ea5510937 mruby-compiler (merge_op_string): fix #6477
If two merging strings are the same and registered at the bottom of the
pool, we should not remove the slot from the pool.
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 1ab8e4d27d mruby-toplevel-ext: make Main#include private 2025-03-07 17:17:35 +09:00
Yukihiro "Matz" Matsumoto 7f12e6648f AUTHORS: update entries [ci skip] 2025-03-07 17:17:35 +09:00
Yukihiro "Matz" Matsumoto 1e4a3f3e5c mruby-toplevel-ext: implement toplevel public/private/protected 2025-03-07 17:17:35 +09:00
Yukihiro "Matz" Matsumoto 235c1484d0 mruby-toplevel-ext: Directly include features to Object class 2025-03-07 17:17:35 +09:00
Yukihiro "Matz" Matsumoto 9e3e7b2cfe mruby-metaprog: add 3 new methods to retrieve instance method names
- public_instance_methods
- private_instance_methods
- protected_instance_methods
2025-03-07 17:17:34 +09:00
Yukihiro "Matz" Matsumoto 9229da10e4 mruby-metaprog: implement method list from a class (or an instance) 2025-03-07 17:17:34 +09:00
Yukihiro "Matz" Matsumoto a282f8bf2a mruby-metaprog: remove unnecessary enum 2025-03-07 17:17:34 +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
Yukihiro "Matz" Matsumoto 3a3e877ae5 codedump.c: update OP_DEF output
OP_DEF takes R(a) as a class to define a method, sym(b) as a method
name, and R(a+1) as a method body. So we added `(R(a+1))` in the output.
2025-03-07 17:17:34 +09:00
Yukihiro "Matz" Matsumoto 6442a012c8 symbol.c (SYMBOL_INLINE_P): inline symbol to occupy 26 bits in mrb_sym
It used to occupy 30 bits, but we need 2 more bits to keep method
visibility in the method tables.
2025-03-07 17:17:33 +09:00
Yukihiro "Matz" Matsumoto 3e6abfd21c symbol.c (sym_inline_pack): set pack_length_max to 4 2025-03-07 17:17:33 +09:00
Yukihiro "Matz" Matsumoto fc16f9dd13 Merge pull request #6482 from dearblue/absolute_path
Add `File.absolute_path?` method
2025-03-07 17:16:20 +09:00
dearblue c796729fa8 Add File.absolute_path? method 2025-03-05 22:23:49 +09:00
Yukihiro "Matz" Matsumoto 8f69fbbaf8 Merge pull request #6480 from mruby/dependabot/github_actions/super-linter/super-linter-7.3.0 2025-02-28 12:24:20 +09:00
dependabot[bot] 1d76e9f4f4 build(deps): bump super-linter/super-linter from 7.2.1 to 7.3.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 7.2.1 to 7.3.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v7.2.1...v7.3.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 14:28:50 +00:00
Yukihiro "Matz" Matsumoto 0e1a77e7d7 Merge pull request #6479 from dearblue/expand_path 2025-02-27 10:36:32 +09:00
Yukihiro "Matz" Matsumoto 30b0b41fb1 Merge pull request #6478 from dearblue/chars2bytes 2025-02-27 10:32:55 +09:00
dearblue f77ebfe102 Reimplementation of File.expand_path method
The reason for this is to fix the following problems

  - Even on non-Windows, drive letter recognition was still being handled.
  - On Windows, paths starting with a slash were not expanded correctly.
  - On Windows, relative paths containing drive letters behaved differently than in CRuby.

Due to reimplementation, the internal methods `File._concat_path`, `File._gethome` and `File._getwd` methods have been removed.
2025-02-26 21:55:25 +09:00
dearblue 437065997f Redefine some macros in mruby-io
To improve uniformity of names and definition locations.
2025-02-26 21:55:17 +09:00
dearblue 76fc6e9ace Fixed buffer overrun in function chars2bytes()
If `off` was greater than zero, the address pointed to by `e` exceeded the valid range of the buffer.
2025-02-26 21:22:37 +09:00
Yukihiro "Matz" Matsumoto 66606f71dd Merge pull request #6474 from dearblue/kwerr 2025-02-03 11:54:52 +09:00
Yukihiro "Matz" Matsumoto 623e953193 Merge pull request #6473 from dearblue/bigint 2025-02-03 08:28:54 +09:00
Yukihiro "Matz" Matsumoto 8c1915ec3b Merge pull request #6475 from dearblue/buildconf 2025-02-02 21:24:32 +09:00
dearblue d946c3e264 Don't include deleted mruby-print 2025-02-02 21:13:11 +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 3b1e3d930f Hide mpz_and() symbol 2025-02-02 16:59:28 +09:00
Yukihiro "Matz" Matsumoto 49396024b7 Merge pull request #6472 from dearblue/rational 2025-01-27 12:37:53 +09:00
Yukihiro "Matz" Matsumoto cb3b94346e mruby-complier (gen_call): remove duplicate MRB_OPSYM_2(); #6471 2025-01-27 12:36:14 +09:00
Yukihiro "Matz" Matsumoto 69024d9a36 mruby-compiler (gen_call): operator optimization with self; close #6471
If the left operand is `self`, the previous (reverted) change disabled
optimization with operators. This is sort of a hack, but it works.
2025-01-26 23:14:19 +09:00
dearblue 12e90896a5 Moved tests for Integer#quo
The `Rational` class is never defined during core testing.
2025-01-26 21:11:21 +09:00
Yukihiro "Matz" Matsumoto acddb3945b mruby-compiler (gen_call): adjust spacing 2025-01-26 20:08:01 +09:00
Yukihiro "Matz" Matsumoto 6731d59f06 Revert "mruby-compiler (gen_call): use OP_SSEND for self.foo() calls"
This reverts commit 583aa985c8f3117a833a38f0d27753a090503f17; #6471
2025-01-26 19:52:01 +09:00
Yukihiro "Matz" Matsumoto 171847a99a build_config/playstationportable.rb: remove obsolete mruby-print gem 2025-01-23 22:02:24 +09:00
Yukihiro "Matz" Matsumoto 37cff2ceea Merge pull request #6469 from dearblue/const-proc 2025-01-23 22:01:57 +09:00
Yukihiro "Matz" Matsumoto 9bab92e060 .git-blame-ignore-revs: ignore indentation fix commit; ref #6470 2025-01-22 14:10:30 +09:00
Yukihiro "Matz" Matsumoto f311a53995 Merge pull request #6470 from dearblue/psp 2025-01-22 13:58:18 +09:00
Yukihiro "Matz" Matsumoto 91a7bc53a6 .pre-commit-config.yml: pre-commit autoupdate 2025-01-21 13:07:44 +09:00
Yukihiro "Matz" Matsumoto 5ed4a772f3 array.c (mrb_ary_unshift_m): defer mrb_get_argv call 2025-01-21 13:07:44 +09:00
Yukihiro "Matz" Matsumoto 3b6325ba3c hash.c (mrb_hash_aset): use pre-assigned local variable 2025-01-21 13:07:44 +09:00
Yukihiro "Matz" Matsumoto 4ebe706496 Merge pull request #6468 from dearblue/hash 2025-01-21 10:29:47 +09:00
dearblue 90ab714fda Adjusting indentation 2025-01-20 22:51:36 +09:00
dearblue a981f5aed7 Add more const qualifier for RProc 2025-01-20 22:25:50 +09:00
dearblue 1e504bb16a Fixed missing changes to IB_FIND_BY_KEY() parameter names
This is a #6432 supplement.
2025-01-20 22:11:45 +09:00
Yukihiro "Matz" Matsumoto ab3abdf5aa print.c (mrb_print_m): need to copy argument array; fix #6467 2025-01-18 13:35:40 +09:00
Yukihiro "Matz" Matsumoto 6174541d82 mruby-encoding: move String#b to mruby-string-ext gem 2025-01-18 13:23:55 +09:00
Yukihiro "Matz" Matsumoto 583214f452 build_config: remove MRB_UTF8_STRING from full-core configurations
- host-debug
- ci/gcc-clang

Since it is automatically turned on by mruby-encoding.
2025-01-16 09:18:14 +09:00
Yukihiro "Matz" Matsumoto 351cd5aa46 mruby-string-ext: remove some methods moved to mruby-encoding
- String#valid_encoding?
- String#force_encoding
2025-01-16 09:12:09 +09:00
Yukihiro "Matz" Matsumoto 3b1c5d7397 mruby-string-ext: remove duplicated definition of String#b
When we use `mruby-encoding` gem as well.
2025-01-16 09:08:14 +09:00
Yukihiro "Matz" Matsumoto 0c01bf7ff0 mruby-string-ext: String#codepoints to support binary encoding 2025-01-16 09:06:19 +09:00
Yukihiro "Matz" Matsumoto 8395ffb5f8 mruby-string-ext: String#ord to support binary encoding 2025-01-16 09:00:44 +09:00
Yukihiro "Matz" Matsumoto 74bdae9e4c mruby-encoding: add Poorman's Encoding gem
The difference from CRuby's Encoding:

- Encoding is a module, instead of a class
- each Encoding (e.g. `Encoding::UTF_8) is a string instead of Encoding object
- only supports  `UTF-8` and `ASCII-8BIT` (and its alias `BINARY`)

Using this gem automatically turn on `MRB_UTF8_STRING` support.
2025-01-16 08:52:41 +09:00
Yukihiro "Matz" Matsumoto e45ea53773 print.c: update the header comment 2025-01-15 14:27:22 +09:00
Yukihiro "Matz" Matsumoto f9c1894087 print.c (printstrln): a new function to print string and newline 2025-01-15 09:19:34 +09:00
Yukihiro "Matz" Matsumoto 25bf1faa81 print.c: fixed link error from mrb_print_m with MRB_NO_STDIO; #6466 2025-01-15 09:12:36 +09:00
Yukihiro "Matz" Matsumoto 6c3143aa12 mrbgem/full-core.gembox: stop excluding mruby-print gem; #6466
Since the gem no longer exists.
2025-01-14 13:30:33 +09:00
Yukihiro "Matz" Matsumoto 89d83c27f3 mruby-print: remove the gem; ref #6466 2025-01-14 13:30:32 +09:00
Yukihiro "Matz" Matsumoto b9b505b5f2 kernel.c: define Kernel#print unless mruby-io is loaded; fix #6466
- In addition, merge mruby-print body in to print.c
2025-01-14 13:30:32 +09:00
Yukihiro "Matz" Matsumoto b623f5c149 mruby-io: define HAVE_MRUBY_IO_GEM if present; ref #6466 2025-01-14 13:24:16 +09:00
Yukihiro "Matz" Matsumoto 272f61a051 AUTHORS: update entries [ci skip] 2025-01-13 12:18:59 +09:00
Yukihiro "Matz" Matsumoto e47b4ca704 mruby-string-ext: new method String#force_encoding
It takes a string instead of Encoding object for simplicity
2025-01-12 23:13:28 +09:00
Yukihiro "Matz" Matsumoto 187f27b00b string.c (char_adjust): align arguments with char_backtrack
Also remove the unused argument.
2025-01-12 23:13:28 +09:00
Yukihiro "Matz" Matsumoto a67c8f9335 string.c: use byte index for a string with binary encoding 2025-01-12 23:13:28 +09:00
Yukihiro "Matz" Matsumoto d5fa9504ad mruby-string-ext (str_b): String#b should copy the receiver 2025-01-12 23:13:28 +09:00
Yukihiro "Matz" Matsumoto 6c530b8f48 mruby-string-ext (str_append_as_bytes): reimplement in C
To handle strings as byte sequences.
2025-01-12 23:13:27 +09:00
Yukihiro "Matz" Matsumoto c18cd60c4b string.h: remove unused flag unset macros 2025-01-12 23:13:27 +09:00
Yukihiro "Matz" Matsumoto 0098654e1f string.h: rename MRB_STR_EMBED_LEN_BITS (use plurality for bit width) 2025-01-12 23:13:26 +09:00
Yukihiro "Matz" Matsumoto 8c184d4566 string.h: move flag definitions for readability 2025-01-12 23:13:26 +09:00
Yukihiro "Matz" Matsumoto e75654a991 string.h (RSTR_SET_TYPE): simplify macro definition 2025-01-12 23:13:26 +09:00
Yukihiro "Matz" Matsumoto 0a5acc0303 string.c (str_unshare_buffer): renamed function for more intuitive name
The old name `str_modify_keep_ascii` does not describe the function
behavior. It was named so since it was separated from the function
`mrb_str_modify_keep_ascii`.
2025-01-12 23:13:25 +09:00
Yukihiro "Matz" Matsumoto 797c49bc0b Merge pull request #6465 from diamant3/add-psp-build 2025-01-12 23:10:06 +09:00
Diamond Rivero 7fa467eb40 Add initial playstation portable crossbuild 2025-01-11 08:28:06 +08: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 003e0fb330 mruby-print: disable the gem unless explicitly specified
mruby-print is the duplicate of part of mruby-io. You need it only when
limited I/O functionality required.
2025-01-06 13:57:23 +09:00
Yukihiro "Matz" Matsumoto ef88c3b726 kernel.c: move Kernel#p to kernel.c from mruby-print
It's easier to skip `p` in the debugger if it's implemented in C.
2025-01-06 13:57:23 +09:00
Yukihiro "Matz" Matsumoto 6f8bfed18e object.h: change gccolor type to unsigned int
I was uncomfortable with the combination of an integer with a size
specification (uint32_t) and a bit field.
2025-01-06 13:56: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 4582cc8579 string.c: rename type setting macro 2025-01-03 09:29:43 +09:00
Yukihiro "Matz" Matsumoto 04ab2be2f0 mruby-string-ext (str_ascii_only_p): simplify the flag update 2025-01-03 08:47:38 +09:00
Yukihiro "Matz" Matsumoto 5a7c944a52 mruby-string-ext (str_b): simplify the flag update 2025-01-03 08:46:04 +09:00
Yukihiro "Matz" Matsumoto 8c2c57c59b Merge pull request #6461 from dearblue/auto-release 2025-01-02 21:58:26 +09:00
Yukihiro "Matz" Matsumoto e35c027966 Merge pull request #6463 from dearblue/dirname 2025-01-02 21:58:01 +09:00
Yukihiro "Matz" Matsumoto 1c50d1885d Merge pull request #6462 from dearblue/mruby-io 2025-01-02 21:55:17 +09:00
Yukihiro "Matz" Matsumoto b0127f0cdd mruby-string-ext (str_b): add a new method String#b
The method makes the receiver binary-mode, but in mruby, which is
virtually no meaning.
2025-01-02 18:45:50 +09:00
dearblue 5c91014530 Add level argument to File.dirname
from Ruby-3.1
https://bugs.ruby-lang.org/issues/12194
2025-01-02 18:10:14 +09:00
dearblue ef11cd94e7 Reimplement the File.dirname method
The purpose is as follows:

  - Stop using `mrb_locale_from_utf8()`.
      - Because there is no corresponding `mrb_utf8_from_locale()`.
      - Because on Windows, for example, if the code page is 932 (CP932, likely ShiftJIS), it cannot be distinguished from the second byte 0x5c (\), and returns wrong results.
  - Stop using `dirname(3)`.
      - Because leading consecutive slashes are not truncated.
        For example, if `/////a/b` is given, CRuby returns `/a`, but mruby so far returns `/////a`.
      - Because the `path` argument cannot be passed in an immutable form.
  - Stop using `_splitpath()` in the Windows implementation.
      - Because there is no support for UNC paths with up to 32767 characters.
        ref. https://learn.microsoft.com/ja-jp/dotnet/standard/io/file-path-formats#unc-paths
      - Because modifying the result of paths terminated by a directory separator.
        Previously, for example, `C:/` would return `C:.` instead of `C:/`, and `a/b/` would return `a/b` instead of `a`.
2025-01-02 17:42:40 +09:00
dearblue 3b659f5320 Properly cast the return value of memchr() 2025-01-02 15:34:36 +09:00
dearblue af1e33c442 To create a release package file in draft
This is to allow final confirmation of the created release file.
Release files in draft form cannot be downloaded by the general public.
2025-01-01 20:24:56 +09:00
Yukihiro "Matz" Matsumoto 85df487e63 mruby-string-ext (append_as_bytes): new method introduced by CRuby 3.4
Since mruby does not have Encoding support, append_as_bytes works
exactly same as String#concat.
2025-01-01 16:05:00 +09:00
Yukihiro "Matz" Matsumoto 9f59d26c35 class.c: adjust space around the operator 2024-12-30 22:45:13 +09:00
Yukihiro "Matz" Matsumoto 59d1fcfa02 include/proc/h: add 2 new constants for the future 2024-12-29 18:04:40 +09:00
Yukihiro "Matz" Matsumoto d7559253de mruby-compiler: need to add proper type cast for C++ 2024-12-28 11:39:22 +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 32d11d86ff mruby-compiler (new_lit_str2): move declarations to the point needed 2024-12-26 09:58:01 +09:00
Yukihiro "Matz" Matsumoto 648495a4b3 mruby-compiler (mrb_prev_pc): remove unnecessary local variable 2024-12-25 12:40:33 +09:00
Yukihiro "Matz" Matsumoto 160935dc24 mruby-compiler (mrb_prev_pc): add assertion to ensure pc within iseq 2024-12-25 12:39:57 +09:00
Yukihiro "Matz" Matsumoto dbcb5b5a6d mruby-compiler (merge_pool_str): check whether merged string is in the pool 2024-12-25 12:39:34 +09:00
Yukihiro "Matz" Matsumoto 890a8362b6 mruby-compiler (new_lit_str2): fixed a bug in pool string equality check 2024-12-25 12:39:34 +09:00
Yukihiro "Matz" Matsumoto 6687bddba3 mruby-compiler (gen_addsub): merge 2 literal strings str + str
Unlike previous attempt, this change can merge sequence of plus
operations (e.g. `str + str + str`). Need more tests though.
2024-12-25 12:39:34 +09:00
Yukihiro "Matz" Matsumoto b44372599e mruby-compiler (codegen): combine literal str + str to one string 2024-12-25 12:39:34 +09:00
Yukihiro "Matz" Matsumoto 61f57b22dd Merge pull request #6459 from dearblue/FileTest 2024-12-25 00:04:11 +09:00
dearblue 7c69a37aa6 FileTest is a module
It has been incorrectly defined as a class.
2024-12-23 22:45:47 +09:00
Yukihiro "Matz" Matsumoto 6037e50298 test/hash: update tests to new hash format 2024-12-21 08:53:57 +09:00
Yukihiro "Matz" Matsumoto baeeb5e435 hash.c (mrb_hash_to_s): print :sym => val as sym: val
Ruby 3.4 changed the format of hash string representation. We follow.
2024-12-21 08:52:23 +09:00
Yukihiro "Matz" Matsumoto e31869fd91 mruby-fiber: rename fiber_init_fiber to init_fiber
Resolve confusing function names
2024-12-20 17:56:25 +09:00
Yukihiro "Matz" Matsumoto 583aa985c8 mruby-compiler (gen_call): use OP_SSEND for self.foo() calls 2024-12-20 10:05:09 +09:00
Yukihiro "Matz" Matsumoto aad7dce017 gc.c (mark_context_stack): use SET_NIL_VALUE macro to clear the stack 2024-12-19 16:20:46 +09:00
Yukihiro "Matz" Matsumoto c83bddd856 mruby-bigint (bint_new): avoid memcpy'ing NULL pointer
The second argument of memcpy() is declared to never be NULL. Clang ASAN
report this as an undefined behavior error.
2024-12-18 13:48:11 +09:00
Yukihiro "Matz" Matsumoto 18cc2cea41 mruby-compiler (codegen): loop info may be NULL (retry) 2024-12-17 10:41:23 +09:00
Yukihiro "Matz" Matsumoto a77b9b4bab mruby-compiler (codegen): loop info may be NULL (redo) 2024-12-17 10:41:23 +09:00
Yukihiro "Matz" Matsumoto f67939ff78 Merge pull request #6458 from mruby/dependabot/github_actions/super-linter/super-linter-7.2.1 2024-12-17 10:32:32 +09:00
dependabot[bot] 8099db94ff Bump super-linter/super-linter from 7.2.0 to 7.2.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 7.2.0 to 7.2.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v7.2.0...v7.2.1)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 14:23:58 +00:00
Yukihiro "Matz" Matsumoto 2f5c2d6b42 Revert "vm.c (OP_ENTER): clear all registers region in the stack"
This reverts commit 19385a8710.
The issue is covered by 1003a6.
2024-12-16 19:26:56 +09:00
Yukihiro "Matz" Matsumoto d1003a6f9a mruby-fiber (fiber_init_fiber): clear all of fiber stack allocated 2024-12-16 19:23:05 +09:00
Yukihiro "Matz" Matsumoto 19385a8710 vm.c (OP_ENTER): clear all registers region in the stack
To keep GC away from touching uninitialized values
2024-12-15 23:23:07 +09:00
Yukihiro "Matz" Matsumoto d13e6ff8c9 include/presym.h: MRB_GVSYM() for global variables is now available 2024-12-14 16:03:35 +09:00
Yukihiro "Matz" Matsumoto 46019f3871 Merge pull request #6444 from hoshiumiarata/tests_for_bigint 2024-12-13 17:57:16 +09:00
Hoshiumi Arata 03ed952600 Merge branch 'master' into tests_for_bigint 2024-12-13 17:31:54 +09:00
Yukihiro "Matz" Matsumoto b561abd46b Merge pull request #6457 from hoshiumiarata/fix_division_of_smallint_by_bigint 2024-12-13 14:23:52 +09:00
Hoshiumi Arata 6fb93ce6f7 mruby-bigint: fix bug with division of a small number by a bigint; fix #6456 2024-12-13 12:07:34 +09:00
Yukihiro "Matz" Matsumoto 917066647e Merge pull request #6450 from dearblue/io-pread-pwrite 2024-12-13 08:19:55 +09:00
dearblue ce1abfb2c9 Change MRB_WITH_IO_PREAD_PWRITE configuration name
Change to `MRB_USE_IO_PREAD_PWRITE` for consistency with mruby configuration macros.
Similarly, `MRB_WITHOUT_IO_PREAD_PWRITE` is changed to `MRB_NO_IO_PREAD_PWRITE`.

The previous names are available for compatibility but are deprecated.
2024-12-12 22:18:34 +09:00
Yukihiro "Matz" Matsumoto 29a2bc19a3 mruby-bigint (mpz_get_str): use UL suffix for mp_limb table 2024-12-12 17:15:02 +09:00
Hoshiumi Arata 3152402fa6 Merge branch 'master' into tests_for_bigint 2024-12-12 17:01:06 +09:00
Yukihiro "Matz" Matsumoto c495d08c5b mruby-io (mrb_file__gethome): add casts to stop type warnings 2024-12-12 16:13:56 +09:00
Yukihiro "Matz" Matsumoto 423c12e985 Merge pull request #6455 from hoshiumiarata/bigint_fix_div_rounding 2024-12-12 16:13:47 +09:00
Yukihiro "Matz" Matsumoto ceb1885121 Merge pull request #6454 from hoshiumiarata/fix_rhs_bigint_mod_and_divmod 2024-12-12 13:45:48 +09:00
Yukihiro "Matz" Matsumoto d8e6de28e9 mruby-bigint (mrb_bint_add_n): fixed a memory leak 2024-12-11 21:29:22 +09:00
Yukihiro "Matz" Matsumoto 8bd62ca311 mruby-bigint (mrb_bint_xor): fix a bug in bigint ^ int operation
Fix #6453; ref #6444
2024-12-11 21:29:21 +09:00
Yukihiro "Matz" Matsumoto b807c0a27d mruby-bigint (mpz_pow): combine mpz_init and mpz_set 2024-12-11 21:29:21 +09:00
Yukihiro "Matz" Matsumoto 8da0db545e mruby-bigint (mpz_get_str): reduce one division 2024-12-11 21:29:21 +09:00
Hoshiumi Arata 94a3a3eb6e mruby-bigint: fix rounding behavior in mpz_mdiv and mpz_mdivmod functions 2024-12-11 21:09:46 +09:00
Hoshiumi Arata 52e1ebe191 mruby-bigint: handle rhs bigint in int_mod and int_divmod functions 2024-12-11 20:58:03 +09:00
Yukihiro "Matz" Matsumoto 989c133c9f Merge pull request #6449 from dearblue/presym.2 2024-12-11 10:46:27 +09:00
Yukihiro "Matz" Matsumoto a77e917d78 Merge pull request #6448 from dearblue/presym.1 2024-12-11 10:08:22 +09:00
Yukihiro "Matz" Matsumoto 19cb0fc374 Merge pull request #6447 from dearblue/File.expand_path
Fixed `File.expand_path`
2024-12-10 13:54:46 +09:00
Hoshiumi Arata 7dfbbd1eaa Merge branch 'master' into tests_for_bigint 2024-12-09 22:38:32 +09:00
dearblue 27082d143c Using presym in the mruby-io/src/file_test.c file 2024-12-09 22:09:15 +09:00
dearblue 384db9054d Suppress presym in mruby/ext/io.h file
When defining macro constants for error classes in public header files, it is preferable to use `MRB_ERROR_SYM()`.
2024-12-09 22:05:01 +09:00
Yukihiro "Matz" Matsumoto 9af061a4ce mruby-bigint: fixed a bug in string conversion; ref #6444 2024-12-09 13:14:22 +09:00
Yukihiro "Matz" Matsumoto 6d2e7f50e2 mruby-bigint: compact mpz_add_int,mpz_sub_int calling conditions 2024-12-09 13:04:01 +09:00
Yukihiro "Matz" Matsumoto 441d4be0ad mruby-bigint: fixed a bug with bigint +/- mrb_int; close #6445 2024-12-08 23:45:25 +09:00
Yukihiro "Matz" Matsumoto 33841519a9 AUTHORS: update entries [ci skip] 2024-12-08 19:35:41 +09:00
Yukihiro "Matz" Matsumoto 7b0dcaaa34 Merge pull request #6446 from dearblue/win64 2024-12-08 19:35:27 +09:00
dearblue 88e3ce1b58 Fix File.expand_path for Windows
- The inner method `File._gethome` could be read as intending to use the `USERPROFILE` environment variable instead on Windows when the `HOME` environment variable is not available.
    In reality, however, this was not the case.
  - The result of `File.expand_path` should unify path separators with `/`, but it did not.
2024-12-08 10:43:20 +09:00
dearblue 06bb54d380 Improved File.expand_path test in `mruby-io
Since `mruby-io` does not depend on `mruby-env` even for test builds, it is impossible that `ENV` constants are defined.
Therefore, define `MRubyIOTestUtil::ENV_HOME` for alternative use.
2024-12-08 10:43:20 +09:00
dearblue 1326017d1d Omit the _WIN64 definition check
Checking the official MSVC documentation, if `_WIN64` is defined, then `_WIN32` is also defined.
https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros

I could not find any documentation on MinGW, but I assume it is not a problem.
2024-12-07 22:47:28 +09:00
Yukihiro "Matz" Matsumoto 1dfd3d9043 Merge pull request #6442 from dearblue/jmpuw 2024-12-06 23:43:31 +09:00
Yukihiro "Matz" Matsumoto ac6436556b Merge pull request #6440 from dearblue/redo
Fix `redo` keyword
2024-12-06 23:42:44 +09:00
Hoshiumi Arata 9a02daaca0 Merge branch 'master' into tests_for_bigint 2024-12-04 20:58:55 +09:00
Yukihiro "Matz" Matsumoto 16028442e6 Merge pull request #6443 from hoshiumiarata/node_negate_for_bigint 2024-12-04 20:50:22 +09:00
Hoshiumi Arata 21ccbf965e bigint: expand test cases for arithmetic operations 2024-12-04 18:34:21 +09:00
Hoshiumi Arata 3034b0847a codegen: fix NODE_NEGATE for bigints 2024-12-04 17:57:50 +09:00
dearblue 95e2f8e844 Fixed wrong range condition in OP_JMPUW
fixed #6441
2024-12-03 22:14:50 +09:00
Yukihiro "Matz" Matsumoto 4a99f28ec3 Revert "vm.c (cipush): small refactoring"
This reverts commit d6e23f3cdc.
Caused some memory crashes.
2024-12-03 16:48:48 +09:00
Yukihiro "Matz" Matsumoto 94a4b95b5d test/lang.rb: update compiled code in comments
- variable sized instructions
- new instruction names
- remove OP_ prefix as code dump does
2024-12-02 15:23:06 +09:00
Yukihiro "Matz" Matsumoto 77e08c9193 ops.h: rename OP_LOADI to OP_LOADI8
OP_LOADI stores an 8 bit integer to a register, so we renamed the
instruction name to describe the behavior more precisely, like
OP_LOADI16 and OP_LOADI32.
2024-12-01 19:16:54 +09:00
dearblue 9a67bdb6aa Fix redo keyword
Add `OP_NOP` to distinguish `retry` and jump targets while maintaining instruction compatibility.
Ideally, it might be preferable to separate them into `OP_REDO`.

fixed #6439
2024-12-01 11:40:17 +09:00
dearblue 939659e2db Allow redo from nested LOOP_BEGIN and LOOP_RESCUE 2024-12-01 11:34:10 +09:00
dearblue 01ea2c088d Add more tests for redo keyword 2024-12-01 11:33:23 +09:00
Yukihiro "Matz" Matsumoto d6e23f3cdc vm.c (cipush): small refactoring
- simplified if-statement
- rename local variable size to diff (means diff between cibase & ci).
2024-11-30 11:13:38 +09:00
Yukihiro "Matz" Matsumoto e05dbf7bbc mruby-compiler (mrb_irep_remove_lv): remove the function altogether
Recent changes make mrb_irep_remove_lv() used no longer.  Removing this
function would not make any compatibility issue, since it's an internal
function.
2024-11-29 17:09:44 +09:00
Yukihiro "Matz" Matsumoto 28d2dfbb11 mruby-bin-mrbc: use MRB_DUMP_NO_LVAR flag
Instead of `mrb_irep_remove_lv()` function.
2024-11-29 16:45:26 +09:00
Yukihiro "Matz" Matsumoto 3a6272d9e9 mruby-bin-strip: use MRB_DUMP_NO_LVAR flags
Instead of `mrb_irep_remove_lv()` function.
2024-11-29 16:41:27 +09:00
Yukihiro "Matz" Matsumoto 5b69185171 dump.c (mrb_dump_irep): skip lv section if MRB_DUMP_NO_LVAR is set 2024-11-29 16:29:18 +09:00
Yukihiro "Matz" Matsumoto bd5ece3a26 dump.h: remove obsolete flag DUMP_DEBUG_INFO 2024-11-29 07:39:26 +09:00
Yukihiro "Matz" Matsumoto 4751e385c3 dump.h: add new dump flag MRB_DUMP_NO_LVAR 2024-11-29 07:38:47 +09:00
Yukihiro "Matz" Matsumoto 673d71ffca dump.c (mrb_dump_irep): reorganize if-structure 2024-11-28 10:14:06 +09:00
Yukihiro "Matz" Matsumoto 8a25c424a4 dump.c: remove unnecessary braces around return 2024-11-28 04:54:20 +09:00
Yukihiro "Matz" Matsumoto b1091e7c64 dump.c: use post-decrements 2024-11-28 04:54:19 +09:00
Yukihiro "Matz" Matsumoto a5c6cb5afb Merge pull request #6434 from dearblue/doc/hier 2024-11-28 04:53:55 +09:00
dearblue 26f949e612 Added document "The mruby directory structure"
This text was translated from Japanese to English by https://www.deepl.com/ .
2024-11-27 23:04:23 +09:00
Yukihiro "Matz" Matsumoto 3505874f72 Merge pull request #6437 from jbampton/pre-commit-config-add-more-details 2024-11-27 14:40:38 +09:00
Yukihiro "Matz" Matsumoto 85eeeda0b3 Merge pull request #6438 from dearblue/task/install 2024-11-27 14:36:21 +09:00
dearblue c7ca1038d2 Remove unused MRuby::Build#list_install_excludes method
This method was added by commit 0ac755dbc8 (#6407).
It was added during the initial conception, but was ultimately no longer needed.
2024-11-26 22:05:47 +09:00
Yukihiro "Matz" Matsumoto c96f0cd265 mruby-compar-ext (clamp): found a bug by newly added test
Translate CRuby's logic (in C) to Ruby.
2024-11-26 17:40:10 +09:00
Yukihiro "Matz" Matsumoto ec68c6afd8 mruby-compar-ext: add test for Comparable#clamp 2024-11-26 17:40:09 +09:00
Yukihiro "Matz" Matsumoto a6267a4145 Merge pull request #6436 from dearblue/doc/index 2024-11-26 13:35:27 +09:00
John Bampton 7fb6fdd4e2 Add more details to the pre-commit config 2024-11-25 22:49:30 +10:00
dearblue f42a55d9e0 Make rake doc:update-index prettier friendly 2024-11-25 21:32:14 +09:00
Yukihiro "Matz" Matsumoto 3ececd4f1f mruby-catch: fixed typo 2024-11-25 16:51:46 +09:00
Yukihiro "Matz" Matsumoto 1c317cf79e mruby-catch (throw_m): small refactoring 2024-11-25 12:28:50 +09:00
Yukihiro "Matz" Matsumoto 79dda053a5 mruby-numeric-ext: add test for Integer#digits 2024-11-23 23:16:47 +09:00
Yukihiro "Matz" Matsumoto 781359a1d1 Merge pull request #6432 from dearblue/hash 2024-11-22 09:53:10 +09:00
dearblue fd97241cd6 Moving code in macro arguments out of macros
In `src/hash.c`, there are code blocks that are passed as macro arguments.
These code blocks are interpreted as part of the macro function, so breakpoints cannot be set in the debugger.
Also, the gcov command will aggregate them to the caller, and the code in the block will not be counted.

This patch will prevent them from being interpreted as part of a macro, and thus the aforementioned problems will no longer occur.
2024-11-21 22:52:29 +09:00
Yukihiro "Matz" Matsumoto 87bd5c7abc Merge pull request #6409 from jbampton/add-prettier-config 2024-11-21 14:01:41 +09:00
Yukihiro "Matz" Matsumoto 1e41c47ebf Merge pull request #6429 from hoshiumiarata/fix_num_params_as_hash_key 2024-11-21 11:47:00 +09:00
Yukihiro "Matz" Matsumoto 4a54b551e8 hash.c (ht_set): inline ht_set_without_ib_adjustment() 2024-11-21 07:59:11 +09:00
Yukihiro "Matz" Matsumoto 3ad85e6038 Merge pull request #6431 from dearblue/typo 2024-11-21 07:58:55 +09:00
dearblue de494796ac Fixed typo 2024-11-20 21:14:55 +09:00
John Bampton a7c947360e [CI] Add prettier to pre-commit
Add `.prettierignore` and the `.prettierrc` config file. Prettier is currently targeting the `JSON`, `Markdown` and `YAML` files in the mruby repo.

Additional file types can be targetted with prettier via additional community plugins.

https://prettier.io/docs/en/

You can see all the languages that are supported on the homepage:

https://prettier.io/

This PR references a few other issues and PRs

We did have prettier running with pre-commit before that method was removed from prettier.

https://github.com/mruby/mruby/pull/6292

https://github.com/mruby/mruby/issues/6291

https://github.com/mruby/mruby/issues/6138

https://github.com/mruby/mruby/pull/5490

Perhaps we could add more npm software to pre-commit in future using new the `local` repo approach.

https://pre-commit.com/#repository-local-hooks

The best part is that it runs with pre-commit on our local machines on `git commit` and also when running `pre-commit run --all-files` or for example when running `make check`.

There were also some minor fixes / style changes in the pre-commit config to standardize casing.

https://www.npmjs.com/package/prettier?activeTab=readme
2024-11-20 14:51:11 +10:00
Yukihiro "Matz" Matsumoto dc5566e560 mruby-bigint (int_fit_limb_p): fix the logic to check mrb_int size
`int_fit_limb_p()` checks if `mrb_int` fits in `mp_limb`. Previous logic
did not work well with negative integers.
2024-11-20 11:27:54 +09:00
Yukihiro "Matz" Matsumoto 33357d4f35 hash.c (ht_set_without_ib_adjustment): need to skip tombstone; #6421
If a tombstone (a deleted entry slot) is found in searching the entry,
it should be skipped, but we had added the new entry even if the entry
to be replaced might be found in the further search. #6414 and #6421
tried to rehash the table to remove tombstone. But rehashing consumes
memory. So for the time being, we just skip tombstones in the search.
Maybe we will add some heuristics to rehash when the table has too many
tombstones. close #6414
2024-11-20 10:52:39 +09:00
Yukihiro "Matz" Matsumoto 9ea6bda781 Merge pull request #6427 from dearblue/vm-recursive 2024-11-20 07:22:12 +09:00
Yukihiro "Matz" Matsumoto 4953dcd81f Merge pull request #6428 from hoshiumiarata/change_limits_of_addi_and_subi 2024-11-20 06:37:19 +09:00
Hoshiumi Arata 386cd771e7 Fix numbered parameters when used as hash keys 2024-11-20 00:31:44 +09:00
Hoshiumi Arata d5823623ed Change the limits of OP_ADDI and OP_SUBI from 0-127 to 0-255. 2024-11-19 23:36:22 +09:00
Yukihiro "Matz" Matsumoto 9546207047 Merge pull request #6426 from hoshiumiarata/coverage
Add GitHub Actions workflow for coverage reporting
2024-11-19 22:55:37 +09:00
dearblue 0337e0e0f1 Need to update ci variable after re-entry to VM
Some functions called by `mrb_vm_exec()` involve re-entry into the mruby VM.
If the `ci` variable is not updated after re-entry, use-after-free is caused.

This patch makes the following after-call fixes.

| called                  | might call methods
| ----------------------- | ----------------
| `mrb_ary_splat()`       | `#to_a`
| `hash_new_from_regs()`  | `#eql?` `#hash`
| `mrb_hash_delete_key()` | `#eql?` `#hash`
| `mrb_hash_get()`        | `#eql?` `#hash` `#default`
| `mrb_hash_key_p()`      | `#eql?` `#hash`
| `mrb_hash_merge()`      | `#eql?` `#hash`
| `mrb_hash_set()`        | `#eql?` `#hash`
| `mrb_range_new()`       | `#<=>`
2024-11-19 22:47:04 +09:00
Hoshiumi Arata 0947dd64d0 Update coverage workflow to use Clang 18 for compilation 2024-11-19 18:24:40 +09:00
Hoshiumi Arata abca6549d8 Update coverage workflow to use Clang for compilation 2024-11-19 18:12:57 +09:00
Hoshiumi Arata 593cda570f Update retention days for coverage report in GitHub Actions workflow 2024-11-19 18:11:08 +09:00
Yukihiro "Matz" Matsumoto dbb1d2342f Merge pull request #6425 from mruby/dependabot/github_actions/super-linter/super-linter-7.2.0 2024-11-19 06:41:07 +09:00
Hoshiumi Arata 1fbcd4a39b Fix lint errors 2024-11-19 00:06:37 +09:00
Hoshiumi Arata f7b2ec1408 Fix formatting of coverage report in GitHub Actions workflow 2024-11-19 00:00:49 +09:00
Hoshiumi Arata 7cf5e9b0af Refactor coverage report generation in GitHub Actions workflow 2024-11-18 23:56:55 +09:00
dependabot[bot] cc76dda8a5 Bump super-linter/super-linter from 7.1.0 to 7.2.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 14:45:49 +00:00
Hoshiumi Arata fbcc6cf255 Update coverage workflow to trigger on pull requests 2024-11-18 23:29:17 +09:00
Hoshiumi Arata 6028be193c Add GitHub Actions workflow for coverage reporting 2024-11-18 23:19:28 +09:00
Yukihiro "Matz" Matsumoto b437b1da24 Merge pull request #6424 from MaxFork/max-add-check_command 2024-11-18 23:15:40 +09:00
Max Base f6106f62c7 Update Makefile - Add check_command 2024-11-17 14:43:21 +03:30
Yukihiro "Matz" Matsumoto f27bc6ab32 Merge pull request #6423 from dearblue/task/test 2024-11-17 07:52:50 +09:00
Yukihiro "Matz" Matsumoto 6663f1072c Merge pull request #6422 from dearblue/hash 2024-11-17 00:05:20 +09:00
dearblue cf91cbf090 Adding a serialized test task
Under normal circumstances, `rake -m test` will parallelize not only the build task, but also the test task.
With this patch, `rake -m test:run:serial` will parallelize the build tasks, but the test tasks will be done one by one in sequence.

The name of the task to be added is as follows:

| tasks to be added     | corresponding exist tasks
| --------------------- | ----------------
| `test:run:serial`     | `test:run`
| `test:run:serial:bin` | `test:run:bin`
| `test:run:serial:lib` | `test:run:lib`
2024-11-16 21:21:51 +09:00
dearblue 9501c3f58c Add annotations for function names defined in the preprocessor 2024-11-16 20:50:49 +09:00
Yukihiro "Matz" Matsumoto 013bcb9221 Merge pull request #6420 from jbampton/patch-2 2024-11-16 04:52:15 +09:00
Yukihiro "Matz" Matsumoto 628f057482 Merge pull request #6419 from hoshiumiarata/fix_numparams_in_lambda 2024-11-15 16:17:03 +09:00
Yukihiro "Matz" Matsumoto e0d9bce8b6 Merge pull request #6415 from hoshiumiarata/fix_numbered_parameters_in_singleton 2024-11-15 16:10:34 +09:00
Yukihiro "Matz" Matsumoto a00267c802 Merge pull request #6417 from hoshiumiarata/fix_email_lint 2024-11-15 16:03:41 +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 a109599d53 vm.c (prepare_missing): add receiver's class in superclass calls 2024-11-15 15:15:08 +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
John Bampton d506ed08da Update .github/labeler.yml 2024-11-13 23:46:22 +10:00
John Bampton 33ba77fb00 Update labeler.yml: add label for the tools directory 2024-11-13 23:39:51 +10:00
Hoshiumi Arata 9fe2a5c46a parser: setup numbered parameters in new_lambda and adjust dump_prefix offset 2024-11-13 22:19:27 +09:00
Hoshiumi Arata 3be0e6b24f Update mlc_config.json to ignore mailto links in linting 2024-11-13 20:45:28 +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
Hoshiumi Arata cc2ec53807 parser: support numbered parameters when used as a singleton 2024-11-13 00:22:49 +09:00
Yukihiro "Matz" Matsumoto 13acf12df5 test/t/vformat.rb: fix encoding error; should have been UTF-8 2024-11-11 23:52:58 +09:00
Yukihiro "Matz" Matsumoto 5387b74be7 hash.c (mrb_hash_to_s): put spaces around =>
CRuby 3.4 puts spaces around `=>` since for example `{:a!=>2}` can be
confusing where to separate tokens.  mruby should follow the behavior.

Many tests in `test/t` directory assumed no spaces around `=>`, so we
needed to fix them too.
2024-11-11 11:07:43 +09:00
Yukihiro "Matz" Matsumoto d2eb2bcacc Update AUTHORS [ci skip] 2024-11-11 11:07:42 +09:00
Yukihiro "Matz" Matsumoto 1d88398d94 Merge pull request #6413 from dearblue/doc/index 2024-11-11 09:45:14 +09:00
Yukihiro "Matz" Matsumoto d4cb111d14 Merge pull request #6412 from dearblue/OP_RETURN_BLK
Distinguish the call frame of the generator with `OP_RETURN_BLK`
2024-11-10 23:10:27 +09:00
dearblue 6291b55bba Add links to documentation in README.md
The documentation table is generated by the `rake doc:update-index` command.
The following conditions must be met for links to be added to the documentation table.

  - The file must be placed under the `doc/` directory
  - The file must have the extension `.md`
  - The file must be written at the top of the file with `<! -- summary: ANY-TEXT -->`
2024-11-10 22:39:14 +09:00
dearblue c654123561 Distinguish the call frame of the generator with OP_RETURN_BLK
When multiple identical proc objects are placed on the call stack, it is not possible to distinguish where to `return`.
Therefore, use env object comparisons to do this.

fixed #6411
2024-11-10 18:39:00 +09:00
Yukihiro "Matz" Matsumoto 90764b10fd Merge pull request #6410 from dearblue/msvc 2024-11-07 14:12:18 +09:00
dearblue ff9c03fde4 Put #include <stdlib.h> in parse.y
ref. #6388
2024-11-06 22:29:29 +09:00
Yukihiro "Matz" Matsumoto fcab6d2769 Merge pull request #6408 from dearblue/c++ 2024-11-06 13:31:42 +09:00
dearblue a92b97ff45 Improve compliance with C++ standards
- Avoid "Designated initializer"
    C++20 is required for C++.
  - Avoid "Compound literals"
    Not available for C++.
2024-11-05 22:07:53 +09:00
Yukihiro "Matz" Matsumoto ee7919e658 Merge pull request #6407 from dearblue/install/libmruby_core 2024-11-05 13:10:44 +09:00
Yukihiro "Matz" Matsumoto 521766009b Merge pull request #6405 from ArtSin/io_read-fix-mrb_raisef-arg 2024-11-05 13:08:42 +09:00
Yukihiro "Matz" Matsumoto fed631c21b mruby-bigint (mrb_bint_sub_n): avoid allocating mpz_z 2024-11-05 13:03:54 +09:00
Yukihiro "Matz" Matsumoto 6085ffb968 mruby-bigint (mrb_bint_add_n): avoid allocating mpz_z 2024-11-05 12:22:10 +09:00
Yukihiro "Matz" Matsumoto ef18bd86a6 mruby-bigint (mpz_sub_int): avoid allocating mpz_t for mrb_int 2024-11-05 11:52:22 +09:00
Yukihiro "Matz" Matsumoto fe12e840f3 mruby-bigint (mpz_add_int): move the function definition
To prepare `mpz_sub_int` update.
2024-11-05 11:52:22 +09:00
dearblue 0ac755dbc8 Allow to exclude specific files in rake install
Introduce the `MRuby::Build#install_excludes` attribute.
This attribute is an array to which you add strings, regular expressions, and proc objects that will serve as filters to exclude.

This feature was inspired by @hoshiumiarata's comment.
https://github.com/mruby/mruby/issues/6352#issuecomment-2426721517
2024-11-04 20:44:13 +09:00
ArtSin 0afc7ae13b io_read: use %i instead of %d in call to mrb_raisef
`length` is `mrb_int`, not `int`.
2024-11-04 13:56:46 +04:00
Yukihiro "Matz" Matsumoto 48455756d2 Merge pull request #6399 from jbampton/patch-2 2024-11-03 07:21:26 +09:00
John Bampton 903baddb03 Add macOS 15 to the build
macOS 15 (Sequoia) is now available as a public beta in GitHub Actions

https://github.com/actions/runner-images/issues/10686

https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md
2024-11-02 12:50:17 +10:00
Yukihiro "Matz" Matsumoto 16ae9e6ed9 Merge pull request #6397 from wataash/boxno-set-value 2024-11-01 11:11:39 +09:00
Wataru Ashihara b1d299f88b boxing_no.h: rename BOXNIX_SET_VALUE -> BOXNO_SET_VALUE
boxing_nix.h was renamed to boxing_no.h on
https://github.com/mruby/mruby/commit/df4c298e3b280b11add8502f1602cefc246655dd
2024-10-31 16:01:05 +09:00
Yukihiro "Matz" Matsumoto 3885e14049 mruby-rational: explicitly add return for error cases too 2024-10-31 14:06:10 +09:00
Yukihiro "Matz" Matsumoto 19d3620965 mruby-bigint (mrb_bint_powm): stop a warning for no return 2024-10-31 14:06:10 +09:00
Yukihiro "Matz" Matsumoto 49525fa207 mempool.c: renamed from pool.c
To avoid confusion with pools in irep, we renamed region-based memory
manager from pool to mempool.

- rename pool.c to mempool.c
- separate mempool.h
- rename all mrb_pool to mrb_mempool

So if someone is using pool.c functions (I suppose no one does though),
they need to rename all `mrb_pool` to `mrb_mempool` and include
`mruby/mempool.h` header at the top.
2024-10-31 14:06:10 +09:00
Yukihiro "Matz" Matsumoto 62ef5db13e irep.h: rename mrb_pool_value to mrb_irep_pool
mrb_pool_value is a structure that represents a value in the irep
literal pool and is unrelated to mrb_pool, which performs region-based
memory management. It has been renamed mrb_irep_pool to avoid confusion.
2024-10-29 20:34:53 +09:00
Yukihiro "Matz" Matsumoto 2436b32f1f irep.h: reformat comments 2024-10-29 20:34:52 +09:00
Yukihiro "Matz" Matsumoto 6ad6b6c6c1 Merge pull request #6396 from vickash/milkvduo 2024-10-28 10:42:51 +09:00
vickash 8fbc809614 milkvduo: update GPIO gem url 2024-10-27 17:37:33 -04:00
Yukihiro "Matz" Matsumoto cda7b56d65 Merge pull request #6395 from dearblue/to_proc 2024-10-27 21:14:48 +09:00
dearblue a7a81aa761 Storing method-id inside Symbol#to_proc
When called in combination with a method like `*_eval` or `*_exec` that switches self, `__send__` was passed an object that was not necessarily a symbol as the method name.

This problem was discovered during the #6389 correction process.
2024-10-27 10:41:51 +09:00
Yukihiro "Matz" Matsumoto 38487f2100 Merge pull request #6393 from dearblue/mrb_object_exec 2024-10-26 07:51:55 +09:00
dearblue 94290b9bb8 Follow-up to #6391
The #6392 has been merged, so the call to `mrb_yield_with_class()` is no longer needed.
2024-10-25 21:11:07 +09:00
Yukihiro "Matz" Matsumoto ba69f36d6d Merge pull request #6392 from dearblue/mrb_exec_irep 2024-10-25 07:12:05 +09:00
Yukihiro "Matz" Matsumoto 49b9db24b2 Merge pull request #6391 from dearblue/instance_exec 2024-10-25 07:09:44 +09:00
dearblue 8d64788cbf Fix argument forwarding in mrb_exec_irep()
C to Ruby calls using `mrb_exec_irep()` were not forwarding arguments.

There was also a problem in setting the target class and method ID, which is also fixed.

This issue was discovered during the work to fix #6389.
2024-10-24 22:33:18 +09:00
dearblue a196d8a5f3 Fixed also argument forwarding in class_exec
Pointed out by @matz.
https://github.com/mruby/mruby/pull/6391#issuecomment-2433662139
2024-10-24 22:05:59 +09:00
dearblue f9151e0bd9 Fixed argument forwarding in instance_exec
However, on C, there is no easy way to pass keyword arguments.
Therefore, when called `Kernel#instance_exec` on C, keyword arguments are converted to positional arguments.
This is a limitation of current mruby.

fixed #6389
2024-10-24 21:20:46 +09:00
Yukihiro "Matz" Matsumoto f245943aed mruby-bigint (mrb_bint_powm): fixed bugs in type casting 2024-10-24 07:21:12 +09:00
Yukihiro "Matz" Matsumoto 0b96f7f2f7 mruby-bigint (mrb_bint_to_s): add uzero_p() check 2024-10-24 07:20:24 +09:00
Yukihiro "Matz" Matsumoto c5565a37ac mruby-bigint: add checks for divided by zero by sizes and contents 2024-10-24 07:18:34 +09:00
Yukihiro "Matz" Matsumoto 5e9593e285 mruby-bigint (udiv): add assertion for divided by zero 2024-10-24 07:16:32 +09:00
Yukihiro "Matz" Matsumoto 3d3aa92649 Merge pull request #6390 from dearblue/mrb_gc_free_gv 2024-10-23 10:03:16 +09:00
dearblue be9431a9ef Fix use-after-free by mrb_gc_unregistor()
Calling `mrb_gc_unregistor()` from `mrb_data_type::dfree` caused a use-after-free deep inside `mrb_close()`.
The impetus to investigate was <https://github.com/mruby/mruby/pull/6342#pullrequestreview-2292747530>.

Currently, when `mrb_close()` is called, all objects are destroyed first.
The process is done heap page by heap page, and when all objects belonging to a heap page are destroyed, the heap page is released.
If the next heap page contains `RData` objects, the `mrb_gc_unregistor()` function may be called from the `mrb_data_type::dfree` function.
At this time, the `mrb_gc_unregistor()` function gets an array object from a Ruby global variable.
If the array object belongs to a freed heap page, use-after-free is established by referencing this array object.

About the fixes.

First of all, there is the fact that the `mrb_gv_get()` function returns `nil` if `mrb->globals` is `NULL`.
Therefore, before destroying all objects, free `mrb->globals` and set `mrb->globals` to `NULL` at the same time.
Now the `mrb_gv_get()` function will return `nil` to the calling `mrb_gc_unregistor()` function and `mrb_gc_unregistor()` will do nothing more.

ref. https://github.com/mruby/mruby/issues/4618
2024-10-22 22:57:49 +09:00
Yukihiro "Matz" Matsumoto b95ca53e5c mruby-compiler: revert ce2fdb7; close #6388
The commit was to stop warnings from Visual C but unexpectedly caused
compilation errors on some configuration.
2024-10-22 14:46:12 +09:00
Yukihiro "Matz" Matsumoto 51fd065722 mruby-compiler (parser_yylex): skip sign if bigint starts with +
To reserve memory (1 byte) and avoid error (fixed by 11cff8f).
2024-10-22 14:45:48 +09:00
Yukihiro "Matz" Matsumoto 11cff8fa7d mruby-bigint (mpz_init_set_str): should skip + in the string
When the string starts with `+` it should not cause error silently. It
might cause serious error afterwards.
2024-10-22 14:44:51 +09:00
Yukihiro "Matz" Matsumoto f2908031c4 Merge pull request #6387 from dearblue/gc-unregister.1 2024-10-21 10:56:49 +09:00
Yukihiro "Matz" Matsumoto f6fbfdfcf0 Merge pull request #6386 from dearblue/gc-unregister 2024-10-21 10:55:38 +09:00
Yukihiro "Matz" Matsumoto df0fc6f3a8 Merge pull request #6385 from dearblue/gc-register.1 2024-10-21 10:49:37 +09:00
Yukihiro "Matz" Matsumoto c317659b8f Merge pull request #6382 from dearblue/gc-register 2024-10-21 10:48:46 +09:00
Yukihiro "Matz" Matsumoto 1f5ba7e01d vm.c (OP_STRCAT): mrb_str_concat may call VM recursively
And recursive calls may reallocate call-info stack.
2024-10-20 19:46:23 +09:00
Yukihiro "Matz" Matsumoto d8e6987e4c Merge pull request #6358 from jbampton/add-latest-ubuntu-to-build 2024-10-19 02:17:59 -04:00
Yukihiro "Matz" Matsumoto 56fc329633 Merge pull request #6383 from jbampton/remove-macos-12 2024-10-19 00:28:25 -04:00
Yukihiro "Matz" Matsumoto f3257c448b mruby-bigint (mrb_bint_powm): should call mpz_clear() on exceptions 2024-10-19 13:09:03 +09:00
Yukihiro "Matz" Matsumoto e4d2f343fe mruby-bigint (mrb_bint_neg): move the function to group bit operations 2024-10-19 12:47:06 +09:00
Yukihiro "Matz" Matsumoto ee13b9e67b mruby-bigint: fix mrb_int optimization bugs for and, or, xor
If the operand is a small integer, those functions tried to reduce
bigint allocations, but we had some bugs in them. We removed those
imperfect optimization altogether.
2024-10-19 12:45:04 +09:00
dearblue 2ec2437d23 Small improvements for mrb_gc_unregister()
`ARY_PTR()` and `ARY_LEN()` avoid using them in a loop if the array is not changed, since they involve branching.
2024-10-19 11:10:10 +09:00
dearblue 1dcc2cac03 Avoid calling mrb_gv_set() from mrb_gc_unregister()
Should simply be ignored for the possibility of being called from `RData::dfree`.
2024-10-19 11:08:32 +09:00
dearblue b28d53bda9 Small improvements for mrb_gc_register()
The `mrb_nil_p()` used in conditional expressions is semantically included in `!mrb_array_p()`.
2024-10-19 10:59:21 +09:00
Yukihiro "Matz" Matsumoto 2430eaba13 mruby-bigint (mrb_bint_powm): fixed memory leak 2024-10-19 07:32:06 +09:00
Yukihiro "Matz" Matsumoto 001d5fcc3f mruby-bigint (mpz_get_str): get b2 by table lookup
The `b2` is the power of `base` no bigger than DIG_BASE.
2024-10-19 07:32:05 +09:00
Yukihiro "Matz" Matsumoto 4aa87acfc9 mruby-bigint (mpz_set_uint64): adjust reallocation size for uint64
The uint64_t value may fit in `mp_limb*n` where n is 1..4.
2024-10-19 07:32:05 +09:00
John Bampton 86e969a406 Remove macOS 12 from the build
The macOS 12 runner image will be removed by December 3rd, 2024.
2024-10-19 00:18:19 +10:00
dearblue 13512aba91 Make array objects invisible in mrb_gc_register()
Once the class is set, objects can be referenced and manipulated from the Ruby side by using `ObjectSpace.each_object`.
Also, currently `mrb_gc_unregister()` assumes that the element is a non-immediate object.
However, `mrb_gc_unregister()` does not read or write to the address, so there was no problem.
2024-10-18 22:29:23 +09:00
Yukihiro "Matz" Matsumoto c3be2568ea Merge pull request #6005 from jbampton/build-and-test-on-macos-13 2024-10-17 23:28:03 -04:00
Yukihiro "Matz" Matsumoto 5e6d382782 mruby-bigint (mpz_set_uint64): fixed a bug in for loop
Found double increments in a loop. Since no one called mpz_set_int64()
in the real code, we could not find this bug for long time.
2024-10-18 12:27:02 +09:00
Yukihiro "Matz" Matsumoto fe42f1d047 mruby-bigint (mpz_set_int): simplify using early return 2024-10-18 12:27:02 +09:00
Yukihiro "Matz" Matsumoto a5c0b2114a mruby-bigint (mrb_bint_2comp): need to initialize mpz_t 2024-10-18 12:27:02 +09:00
Yukihiro "Matz" Matsumoto c8a73515e9 Merge pull request #6381 from 513ry/iss6380 2024-10-17 22:00:56 -04:00
siery 1a426e245f part 2: Fix indentation to include break after function return type 2024-10-17 22:26:20 +02:00
siery 7d694df717 Fix indentation to include break after function return type 2024-10-17 21:11:11 +02:00
John Bampton d387e89ae2 Build and test on macOS 13
https://github.com/actions/runner-images#available-images
2024-10-17 22:33:59 +10:00
Yukihiro "Matz" Matsumoto 63f3ff4ac5 Merge pull request #6379 from jbampton/add-pre-commit-hook-gitleaks 2024-10-17 02:40:28 -04:00
Yukihiro "Matz" Matsumoto b4ab4cd7cf Merge branch 'master' into add-pre-commit-hook-gitleaks 2024-10-17 02:33:23 -04:00
Yukihiro "Matz" Matsumoto f1863163a8 mruby-bigint (uzero_p): avoid signed and unsigned comparison in loop 2024-10-16 16:33:43 +09:00
Yukihiro "Matz" Matsumoto 84d17f2c44 array.c (mrb_ary_clear): remove unnecessary function 2024-10-16 16:33:42 +09:00
Yukihiro "Matz" Matsumoto 389740e1d2 Merge pull request #6377 from jbampton/add-pre-commit-hook-oxipng 2024-10-16 03:34:12 -04:00
Yukihiro "Matz" Matsumoto 62c8951787 Merge pull request #6378 from jbampton/add-pre-commit-hook-format-json 2024-10-16 03:25:58 -04:00
John Bampton 42d3eb4b60 Add pre-commit hook gitleaks to detect and prevent hardcoded secrets
https://github.com/gitleaks/gitleaks

Adding another check/test to our pre-commit framework.

gitleaks is a popular tool that helps with security.

Removes the gitleaks check from the Super-Linter.

So now we can run gitleaks with pre-commit on `git commit`
2024-10-16 04:20:49 +10:00
John Bampton e0a9a06c77 Add pre-commit hook pretty-format-json
https://github.com/pre-commit/pre-commit-hooks?tab=readme-ov-file#pretty-format-json

From the official pre-commit team a minor feature to add.

We have one JSON file at `.github/linters/mlc_config.json`.
2024-10-16 03:56:19 +10:00
John Bampton 83040c50e7 Add pre-commit hook oxipng for lossless PNG compression
Oxipng is a multithreaded lossless PNG/APNG compression optimizer.

Lossless compression is a class of data compression that allows the original data to be perfectly reconstructed from the compressed data with no loss of information.

https://en.wikipedia.org/wiki/Lossless_compression

https://github.com/shssoichiro/oxipng?tab=readme-ov-file#git-integration-via-pre-commit

Oxipng is a multithreaded PNG optimizer written in Rust

https://pre-commit.com/index.html#rust

"pre-commit will bootstrap rust if it is not present."
2024-10-16 03:10:16 +10:00
Yukihiro "Matz" Matsumoto bbce194609 Merge pull request #6374 from jbampton/add-hooks-upgrade-pre-commit 2024-10-15 08:43:54 -04:00
Yukihiro "Matz" Matsumoto 7b5608e78a mruby-rational: refactor float to rational conversion
- the function `float_decode_internal` was removed
- simplified `rational_new_f()`
- do not need to call `ldexp`
- allocate less bigint objects
2024-10-15 21:10:11 +09:00
Yukihiro "Matz" Matsumoto 51b11a6919 mruby-rational: add comments
We used `mrb_bint_mul(mrb, n, ONE)` to normalize `n`. The code confused
ChatGPT that could not read the intention.
2024-10-15 21:10:10 +09:00
Yukihiro "Matz" Matsumoto 8cfc1a4581 variable.c: fix int and mrb_bool confusion 2024-10-15 21:10:10 +09:00
Yukihiro "Matz" Matsumoto 540bd54ed3 variable.c (iv_rehash): name magic number 4 as IV_INITIAL_SIZE 2024-10-15 21:10:10 +09:00
Yukihiro "Matz" Matsumoto 06f45f8635 mruby-compiler (codegen): detect too-deep nesting error; fix #6270 2024-10-15 21:10:10 +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
Yukihiro "Matz" Matsumoto b5801cd730 mruby-bigint (mrb_bint_new_int64): fixed a bug on the 32bit platforms 2024-10-11 14:19:33 +09:00
Yukihiro "Matz" Matsumoto 2d565d30cb Merge pull request #6376 from 513ry/master 2024-10-11 01:18:02 -04:00
siery c8203b2d52 Fix typo 2024-10-11 05:08:46 +02:00
Yukihiro "Matz" Matsumoto e29f3d64b2 mruby-compiler: stop malloc/free warnings from Visual Studio build 2024-10-11 09:10:44 +09:00
Yukihiro "Matz" Matsumoto 32a527ad6d readfloat.c: fix float to int assignment 2024-10-11 08:45:27 +09:00
Yukihiro "Matz" Matsumoto 763c9cba03 mruby-rational (int_lshift): add cast to stop overflow warning 2024-10-11 08:44:12 +09:00
Yukihiro "Matz" Matsumoto f4fdf25bb0 mruby-bigint (mrb_bint_new_int64): wrong return value 2024-10-11 08:41:51 +09:00
Yukihiro "Matz" Matsumoto 39a5d2a9d8 Merge pull request #6375 from jbampton/fix-grammar 2024-10-10 19:36:49 -04:00
John Bampton 6f97cf10e9 docs: fix grammar 2024-10-11 04:07:58 +10:00
John Bampton 95f58d8a98 Upgrade pre-commit min version; add hook; pre-commit autoupdate
https://github.com/pre-commit/pre-commit-hooks/releases/tag/v5.0.0

pre-commit-hooks now requires pre-commit>=3.2.0

https://github.com/pre-commit/pre-commit-hooks?tab=readme-ov-file#check-illegal-windows-names

https://pre-commit.com/#pre-commit-autoupdate

refs pre-commit/pre-commit#2808

https://pre-commit.com/#top_level-default_stages
2024-10-11 03:32:16 +10:00
Yukihiro "Matz" Matsumoto 6d4de2496c mruby-bigint: remove unused macros; ref #6371 2024-10-10 23:14:27 +09:00
Yukihiro "Matz" Matsumoto e21055604c mruby-bigint: separate mpz and bint functions; ref #6371
The pull-request #6371 was tight integration of mpz and bint functions.
The mpz functions take `struct RBigint*` instead of `mpz_t*`. It
decrease maintainability, in my opinion. This commit initializes `mpz_t`
from `struct RBigint*` in bint functions, so that we can keep separation
of function roles.
2024-10-10 23:04:04 +09:00
Yukihiro "Matz" Matsumoto c6dbaf702e Merge branch 'bigint-embed'; #6371 2024-10-10 23:02:10 +09:00
Yukihiro "Matz" Matsumoto 12b97ceb78 fixup! Merge branch 'bigint-embed' of https://github.com/dearblue/mruby into bigint-embed 2024-10-10 22:57:32 +09:00
Yukihiro "Matz" Matsumoto bda2fa39d2 Merge branch 'bigint-embed' of https://github.com/dearblue/mruby into bigint-embed 2024-10-10 22:31:55 +09:00
Yukihiro "Matz" Matsumoto 453e9eabf0 mruby-rational (rat_add_b): might have called rational_new_b with int
`rational_new_b` should be called with bigint objects.
2024-10-10 07:55:51 +09:00
Yukihiro "Matz" Matsumoto 5a40f6710b Update AUTHORS [ci skip] 2024-10-09 22:56:45 +09:00
Yukihiro "Matz" Matsumoto b56ad8fdee mruby-bigint: improve mpz_mul_int() and mpz_add_int()
Both functions are only called from mpz_init_set_str(). We can assume

- mpz_t is modifiable
- mpz_t is positive
- n is positive and small (n <= 36)

Those new definitions consume less memory and are slightly faster.
2024-10-08 16:09:46 +09:00
Yukihiro "Matz" Matsumoto 3b06ad4737 mruby-bigint (mpz_mul): cancel Karatsuba algorithm
We tried many times to implement the Karatsuba method to improve the
performance of multiplication of large multi-precision integers. But it
did not speed up in all cases due to the cost of memory allocation.  We
decided to go back to the basic multiplication method.

If anyone wants to take on the challenge of improving the performance of
multiplication, we welcome it.
2024-10-08 16:02:19 +09:00
John Bampton f13a4bfe65 gha: add Ubuntu 24.04 to the build
Remove Ubuntu 20.04
2024-10-08 16:23:49 +10:00
Yukihiro "Matz" Matsumoto 7e6f8685a3 Merge pull request #6373 from vickash/milkvduo 2024-10-06 20:30:10 -04:00
Yukihiro "Matz" Matsumoto 77fb1b1b65 mruby-bigint (mul_karatsuba): use byte-wise addition to combine 2024-10-07 07:28:24 +09:00
vickash e99f605458 milkv config: Add directive for board variant, and optional wiringX mrbgem 2024-10-06 12:27:12 -04:00
dearblue 6366f1cbb9 Update mrbgems/mruby-bigint/core/bigint.h
Co-authored-by: John Bampton <jbampton@users.noreply.github.com>
2024-10-06 23:03:03 +09:00
vickash 115a739059 milkv config: forgot to remove "-L" in linker paths taken from official Makefile 2024-10-06 09:54:41 -04:00
dearblue 009a79b5c9 Embedding in RBigint objects
Integers up to 3 words long will no longer allocate heap space.
2024-10-06 22:28:22 +09:00
vickash d2878ef47f Comment out test-inline-struct in milv_duo config 2024-10-06 08:33:21 -04:00
vickash 491b7685db Add build config for Milk-V Duo (RISC-V Linux) board 2024-10-06 00:26:07 -04:00
Yukihiro "Matz" Matsumoto 40c7febca8 mruby-bigint (uadd): remove redundant trim() 2024-10-05 15:08:16 +09:00
Yukihiro "Matz" Matsumoto be9da7199b mruby-bigint (mul_karatsuba) improve performance
Unnecessary mpz_t u0u1 and v0v1 are removed.
2024-10-05 10:57:42 +09:00
Yukihiro "Matz" Matsumoto 8faf78f1b8 mruby-method: singleton_method() should search in superclasses
[ruby-bugs:20620](https://bugs.ruby-lang.org/issues/20620)
2024-10-04 21:37:49 +09:00
Yukihiro "Matz" Matsumoto 32aed6ad8c mruby-bigint: increase KARATSUBA_THREASHOLD to 512
Since Karatsuba algorithm is far heavier than the basic multiplication,
we have increased KARATSUBA_THREASHOLD and decreased MAX_RECURSION_DEPTH.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto 6820da1526 mruby-bigint (mpz_abs): use zero_p() 2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto fd8d3a8d70 mruby-bigint: use zero() to make mpz_t zero. 2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto 6274f8de43 mruby-bigint (mpz_sub): avoid data copy
Since mpz_sub() calls mpz_add() with opposite sign, refer same data from
the original, instead of copying whole data.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto 363754b5d1 mruby-bigint (uzero_p): check from the top, not bottom
For most of the case, the first non-zero value would be found earlier
when search starts from the top.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto fcc1832efc mruby-bigint (mul_karatsuba): avoid copying operand u and v 2024-09-30 18:32:26 +09:00
Yukihiro "Matz" Matsumoto 0023cbdb3d mruby-bigint (mpz_mul): use Karatsuba algorithm to improve performance 2024-09-28 05:26:40 +09:00
Yukihiro "Matz" Matsumoto 1348daa683 vm.c: save offset in a local variable in OP_BLKPUSH 2024-09-27 16:31:13 +09:00
Yukihiro "Matz" Matsumoto b94be7de5a gc.c (mark_context): no need to mark ci->blk; ref #5791
Since the passed block is referenced from the stack after the last
commit.
2024-09-26 02:57:57 +09:00
Yukihiro "Matz" Matsumoto 9c5812a463 mruby-compier: keep stack reference to passed block after modifying &b
To mark `MRB_PROC_ORPHAN` we need to keep track of passed block, even
after the assignment to the block argument. And `yield` should use the
original block; #5786, #5791, #6369
2024-09-26 02:48:16 +09:00
Yukihiro "Matz" Matsumoto d6fa7772a0 mruby.h (mrb_method_t): avoid unnamed union
It caused errors in the pedantic-mode of GCC.
2024-09-26 00:07:03 +09:00
Yukihiro "Matz" Matsumoto 204928120b vm.c (cipop): fix improper code to check if env is reclaimed; fix #6369
The callinfo refers blk since #5786 but not marked at the time. Later we
added reclamation check by #5791 but its repeated heap scans decrease
the performance drastically in some cases. So the original @dearblue's
solution should be taken

Probably we need to always keep the original block at the bottom of
arguments. And the explicit block argument should be a normal local
variable. We will investigate it later.
2024-09-25 14:12:50 +09:00
Yukihiro "Matz" Matsumoto 12264e33e5 Merge pull request #6361 from jbampton/add-pre-commit-hook-shellcheck 2024-09-24 09:44:25 +09:00
Yukihiro "Matz" Matsumoto abc4ccf763 Merge pull request #6368 from jbampton/add-pre-commit-hook-check-json 2024-09-24 09:40:39 +09:00
Yukihiro "Matz" Matsumoto 05e3c5831d Merge pull request #6367 from jbampton/fix-spelling 2024-09-24 07:16:55 +09:00
John Bampton 2adf60320d Add pre-commit hook check-json
https://github.com/pre-commit/pre-commit-hooks?tab=readme-ov-file#check-json

Adds another check/test to our pre-commit framework for checking JSON files

We have one JSON file at `.github/linters/mlc_config.json`
2024-09-24 00:47:27 +10:00
John Bampton e12da35645 Fix spelling 2024-09-24 00:14:24 +10:00
Yukihiro "Matz" Matsumoto 919a689517 Merge pull request #6363 from dearblue/mrb_type 2024-09-23 14:49:55 +09:00
Yukihiro "Matz" Matsumoto 17acf23914 readfloat.c: we don't need long double for mruby; fix #6365
`mrb_read_float()` function does not raise ERANGE (unlike `strtod()`)
so we don't need high precision double for calculation.
2024-09-23 08:11:23 +09:00
Yukihiro "Matz" Matsumoto ecd42ab3e9 Merge pull request #6360 from jbampton/add-actionslint-to-pre-commit 2024-09-22 20:21:44 +09:00
Yukihiro "Matz" Matsumoto 1b875a925c Merge pull request #6364 from jbampton/fix-spelling 2024-09-22 20:19:06 +09:00
John Bampton b974b944af docs: fix spelling 2024-09-22 12:16:23 +10:00
dearblue 1f933c21e3 Revert "Perform pseudo binary search with mrb_type()"
This reverts commit e76bebe836 (#6309).

Because it crashes limited to gcc13 -O3.
ref. #6358.

Also, benchmark tests have shown that revert tends to be preferable in this time.
2024-09-22 10:51:12 +09:00
John Bampton 6fe57ae44e Add pre-commit hook shellcheck-py to check syntax of shell scripts
https://github.com/shellcheck-py/shellcheck-py

https://www.shellcheck.net/

https://github.com/koalaman/shellcheck

Remove bash/shell checking from the Super-Linter
2024-09-22 10:18:21 +10:00
John Bampton 6d749e92ed Add pre-commit hook actionlint
Validate GitHub Actions with pre-commit.

Remove the Super-Linter GitHub Actions check.

It is more useful to run "actionlint" with pre-commit
since the hooks run on our local machines on git commit.

We also run pre-commit on GitHub.

Whereas the Super-Linter tests only run on GitHub.

https://github.com/rhysd/actionlint/blob/main/docs/usage.md#pre-commit
2024-09-22 08:51:42 +10:00
Yukihiro "Matz" Matsumoto bd668e4c9d readfloat.c: new implementation of mrb_read_float(); ref #6187
The new version gives more accurate values for decimal number
representation that are not divisible in binary representations, for
example `0.3`.

The function uses `long double` for precision. Please report if `long
double` causes problems on any platform (especially microcontrollers).
Ref #6182
2024-09-21 02:47:42 +09:00
Yukihiro "Matz" Matsumoto c162f8f709 Merge pull request #6356 from dearblue/get-args-splat 2024-09-21 00:03:38 +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
Yukihiro "Matz" Matsumoto f6caf0d788 mruby-bigint (mrb_init_set_str): reduce mpz_t allocations 2024-09-19 20:52:11 +09:00
Yukihiro "Matz" Matsumoto e3ff54fda3 vm.c (mrb_vm_exec): unify declaration and initialization of variables 2024-09-18 22:32:35 +09:00
Yukihiro "Matz" Matsumoto d1d010a03a array.c (mrb_ary_delete): array index should be mrb_int 2024-09-17 12:07:39 +09:00
Yukihiro "Matz" Matsumoto ba8ee7b895 mruby-socket (inet_pton): need to initialize loop variable 2024-09-17 12:05:46 +09:00
Yukihiro "Matz" Matsumoto 4b500eb971 Merge pull request #6340 from dearblue/array-cmp 2024-09-17 11:29:41 +09:00
Yukihiro "Matz" Matsumoto b8a6752570 Merge pull request #6354 from dabroz/dabroz-patch-1 2024-09-17 11:00:49 +09:00
Tomasz Pędraszewski 78ee1529d6 Update AUTHORS 2024-09-17 00:01:02 +02:00
Yukihiro "Matz" Matsumoto de6955b1b0 vm.c (mrb_vm_run): merge declaration and initialization 2024-09-16 17:50:13 +09:00
Yukihiro "Matz" Matsumoto fddc7650ca numeric.c (int_ceil): should rename mrb_bint_add_d to mrb_bint_add_n 2024-09-15 04:00:52 +09:00
Yukihiro "Matz" Matsumoto afefb5261b mruby-rational (rat_sub_b): avoid normalization of big integers 2024-09-15 03:04:32 +09:00
Yukihiro "Matz" Matsumoto bdbf8536a7 mruby-bigint: rename add_d and sub_d to add_n and sub_n respectively
`_n` suffix represents `no_normalize`.
2024-09-15 03:02:41 +09:00
Yukihiro "Matz" Matsumoto 50225acec4 mruby-rational (rat_mul_b): should not normalize multiplication results 2024-09-15 02:50:57 +09:00
Yukihiro "Matz" Matsumoto 3ce96e5c4d Merge pull request #6353 from dearblue/array-delete 2024-09-14 06:11:54 +09:00
dearblue 0955539cf9 Fix use-after-free in mrb_ary_delete()
`mrb_equal()` may call `obj.==` method internally.
Therefore, using an unupdated pointer and length after `mrb_equal()` could result in a read/write to an invalid address.

Fresh properties must always be obtained regardless of the result of `mrb_equal()`.
Also, `ary_modify()` must be called each time before writing.

ref. #6339
2024-09-13 21:44:56 +09:00
Yukihiro "Matz" Matsumoto 6e44c0bc91 vm.c (argnum_error): merge declaration and initialization 2024-09-13 07:27:17 +09:00
Yukihiro "Matz" Matsumoto 704ad87150 Merge pull request #6338 from dearblue/proc-align 2024-09-12 06:43:42 +09:00
Yukihiro "Matz" Matsumoto ee9b1381ec Merge pull request #6347 from leviongit/fixes/yield-kw-codegen
codegen.c,parse.y: remove flattening of `yield` arguments; fix #6346
2024-09-12 06:39:27 +09:00
Yukihiro "Matz" Matsumoto 413b005801 Merge pull request #6349 from dearblue/dir-test 2024-09-11 07:12:31 +09:00
Yukihiro "Matz" Matsumoto a38dd0c988 Merge pull request #6350 from dearblue/io-filepath 2024-09-11 07:10:45 +09:00
Yukihiro "Matz" Matsumoto 9aee23b056 Merge pull request #6351 from dearblue/io-arena 2024-09-11 07:09:11 +09:00
Yukihiro "Matz" Matsumoto 06db87e758 Merge pull request #6348 from dearblue/warnings 2024-09-10 22:11:14 +09:00
dearblue 9cb42438e1 Remove unnecessary mrb_gc_arena_restore()
When a function defined as a method returns, there is no need to call `mrb_gc_arena_restore()` immediately before it.
2024-09-10 21:45:44 +09:00
dearblue 33cf729a39 Fixed character encoding conversion function mismatch 2024-09-10 21:34:05 +09:00
dearblue 3aa9a5ee68 Perform GC before deleting directories
In some environments, the test will fail because the directory in use cannot be deleted.
This problem was encountered when building 32-bit binary with mingw32 on FreeBSD and running on wine.
2024-09-10 21:17:10 +09:00
dearblue 8b495cdfda Cancel the warning disablement
Suppress warnings for 0-length sequences is not required.

By commit f1a02dff58, it was introduced.
By commit 24939723d7, pseudo-variable length arrays are now used and the warning suppression is no longer needed.
By commit e8841fbf58, moved the intervening code.
2024-09-10 21:07:43 +09:00
Yukihiro "Matz" Matsumoto da4cfbf89c mruby-array-ext: add a new method Array#fetch_values 2024-09-10 10:22:34 +09:00
leviongit 87801ed5f1 codegen.c,parse.y: remove flattening of yield arguments; fix #6346
this commit changes the parse tree of the `yield` node, allowing for
proper keyword argument generation
2024-09-09 10:06:31 +02:00
Yukihiro "Matz" Matsumoto 0972c84773 array.c (mrb_ary_delete): protect return value; fix #6339
The C local variable is not protected from GC, so we use the function
mrb_gc_protect() to keep the value. We also keep the arena position by
mrb_gc_arena_save(), then restoring the position for every new return
value, to minimize arena size.

Small cosmetic changes (pre-increment to post-increment) are also made
in this commit.
2024-09-09 14:57:32 +09:00
Yukihiro "Matz" Matsumoto 1c4514964e AUTHORS: update entries [ci skip] 2024-09-09 09:55:30 +09:00
Yukihiro "Matz" Matsumoto 2d871fb1ef vm.c (catch_handler_find): merge declaration and initialization 2024-09-09 07:10:50 +09:00
Yukihiro "Matz" Matsumoto a3aff8f437 vm.c (mrb_yield_cont): merge declaration and initialization 2024-09-07 08:36:02 +09:00
Yukihiro "Matz" Matsumoto 1f9fa06119 array.c: no need to assert if blk is a Proc; ref #6344
Since `blk` always comes from `mrb_get_args`, it should always be either
`nil` or a Proc.
2024-09-05 15:26:09 +09:00
Yukihiro "Matz" Matsumoto 3ca3849f54 Merge pull request #6344 from leviongit/array/yield 2024-09-05 15:23:01 +09:00
leviongit 020cfa9283 prefer using mrb_yield to call block arguments 2024-09-04 20:44:51 +02:00
Yukihiro "Matz" Matsumoto 4671459e73 Merge pull request #6343 from mruby/dependabot/bundler/yard-0.9.37 2024-09-05 00:10:42 +09:00
dependabot[bot] c3615be2ac build(deps): bump yard from 0.9.36 to 0.9.37
Bumps [yard](https://github.com/lsegal/yard) from 0.9.36 to 0.9.37.
- [Release notes](https://github.com/lsegal/yard/releases)
- [Changelog](https://github.com/lsegal/yard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lsegal/yard/compare/v0.9.36...v0.9.37)

---
updated-dependencies:
- dependency-name: yard
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-04 14:52:41 +00:00
Yukihiro "Matz" Matsumoto 649162624f Merge pull request #6341 from dearblue/restore-arena 2024-09-04 09:39:41 +09:00
dearblue e476d9a344 Need to restore the GC arena after some function calls
When calling `mrb_equal()` or `mrb_funcall()` family functions, the GC arena should be restored if the loop is repeated by a non-immediate return value.

In my opinion, restoring the GC arena is unnecessary when a non-immediate (true) value causes the function to return (e.g. the `mrb_ary_index_m()` function).

The patch does not take into account the case of recursive calls and may be incomplete.
2024-09-03 21:29:06 +09:00
dearblue 29496c9931 Fix use-after-free for Array#<=>
The `mrb_ary_cmp()` function calls `mrb_cmp()` for comparison, but `mrb_cmp()` may call the `obj.<=>` method internally.
If a user-defined `<=>` method is called and the array object under comparison is expanded or reduced, a reference to an invalid address may subsequently be made.
2024-09-03 21:25:31 +09:00
Yukihiro "Matz" Matsumoto 1d12097bae mruby-io (mrb_file__gethome): allow avoiding getpwnam(3); ref #5358
You have to define `MRB_IO_NO_PWNAM` to skip calling getpwname(3).
2024-09-03 15:27:29 +09:00
Yukihiro "Matz" Matsumoto 96cf9ba230 vm.c (mrb_yield_with_class): merge declaration and initialization 2024-09-03 11:58:20 +09:00
Yukihiro "Matz" Matsumoto 4062069679 gc.c (gc_arena_keep): revert 2 commits regarding arena allocation; #6329
We assumed there's no need for gc_arena_keep() when MRB_GC_FIXED_ARENA
is set.  But it turned out that gc_protect() still can cause use-after-free
with fixed arena.

Revert "gc.c (gc_protect): should not call gc_arena_keep twice from allocation"

This reverts commit 28ece4ed8b.

Revert "gc.c (gc_arena_keep): reorganized for MRB_GC_FIXED_ARENA; ref #6329"

This reverts commit 33dd623a02.
2024-09-02 23:00:09 +09:00
Yukihiro "Matz" Matsumoto 6c4dbe8584 vm.c (eval_under): unify declaration and initialization of variables 2024-09-02 11:52:32 +09:00
Yukihiro "Matz" Matsumoto f2d9995984 Merge pull request #6332 from dearblue/mruby-compiler 2024-09-01 22:45:07 +09:00
Yukihiro "Matz" Matsumoto 472f699ee6 vm.c (mrb_f_send): unify declaration and initialization of variables 2024-09-01 22:29:46 +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 56c3d748fb Merge pull request #6335 from dearblue/OP_RETURN 2024-08-30 10:53:58 +09:00
Yukihiro "Matz" Matsumoto fa62129fdc Merge pull request #6337 from mruby/dependabot/github_actions/super-linter/super-linter-7.1.0 2024-08-29 09:55:03 +09:00
dependabot[bot] 45bb0973fd build(deps): bump super-linter/super-linter from 7.0.0 to 7.1.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v7.0.0...v7.1.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-28 14:08:55 +00:00
Yukihiro "Matz" Matsumoto 6de3009606 Merge pull request #6328 from dearblue/env-obj_free 2024-08-28 16:40:04 +09:00
Yukihiro "Matz" Matsumoto 4a71d4604e mruby-rational: add typecast to check if a value is fit in mrb_int 2024-08-27 22:48:40 +09:00
Yukihiro "Matz" Matsumoto 540d976f7f array.c (sort_cmp): mrb_cmp() may return -2 for errors 2024-08-27 22:36:24 +09:00
dearblue 7ec5d47a91 Add return_ci in CHECKPOINT_MAIN() of OP_RETURN
For role clarity, distinguish between `ci` and `return_ci`.
2024-08-27 21:39:09 +09:00
Yukihiro "Matz" Matsumoto 28ece4ed8b gc.c (gc_protect): should not call gc_arena_keep twice from allocation 2024-08-27 11:03:14 +09:00
Yukihiro "Matz" Matsumoto ef5ae1c629 Merge pull request #6333 from dearblue/heap_p 2024-08-26 05:49:49 +09:00
Yukihiro "Matz" Matsumoto 33dd623a02 gc.c (gc_arena_keep): reorganized for MRB_GC_FIXED_ARENA; ref #6329 2024-08-26 05:47:28 +09:00
Yukihiro "Matz" Matsumoto 1a322449aa Merge pull request #6331 from dearblue/test-gcarena 2024-08-26 05:47:48 +09:00
Yukihiro "Matz" Matsumoto b9c93673f9 Merge pull request #6329 from dearblue/mrb_obj_alloc 2024-08-26 05:40:12 +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
dearblue 98fdfe1037 Reduce the number of branch instructions in the heap_p()
As far as `gcc -S` for several CPU architectures has confirmed, it reduces the number of branch instructions by one.
2024-08-25 20:35:41 +09:00
dearblue cfe410f466 Must not depend on the “host” build to generate mruby-compiler/core/y.tab.c
“mruby-compiler” should be able to generate `y.tab.c` files through a separate build configuration if it is not added to the ‘host’ build.
In the example above, the “host/mrbc” build should generate the `y.tab.c` file.
2024-08-25 11:17:56 +09:00
dearblue 79d7ac5f7e Restore the GC arena with tests.
This was the unintentional catalyst for finding the problem in #6329, but it is preferable to add a test if necessary.
2024-08-25 11:08:40 +09:00
dearblue 1c5839fb01 Fix use-after-free in mrb_obj_alloc()
When GC occurs during the expansion of the GC arena by `gc_protect()` in `mrb_obj_alloc()`, the object page just allocated by `add_heap()` is released.
Therefore, as soon as control returns from `gc_protect()`, there is a possibility of illegal writing or reading to the address just released.

This issue was discovered during the investigation of #6326.
2024-08-25 10:55:15 +09:00
Yukihiro "Matz" Matsumoto a2db222422 Merge pull request #6330 from dearblue/mrb_env_unshare 2024-08-24 21:47:44 +09:00
dearblue 13571402d2 Add a precondition to call mrb_env_unshare().
The following assertions can be added to omit the `if` block

  - env object must be non-null
  - env object must be in a shared state with the stack

The current caller is believed to satisfy the condition.
2024-08-24 17:30:54 +09:00
dearblue 22b1ac9070 Fix use-after-free in obj_free() for env objects
A reference to an invalid address might occur in `is_dead()` of `obj_free()` called from `incremental_sweep_phase()`.
This would happen if the heap page was freed ahead of time in the same `incremental_sweep_phase()`.

fixed #6326
2024-08-24 16:46:27 +09:00
Yukihiro "Matz" Matsumoto 204b81c563 mruby-bin-mirb: fix the issue on macOS; #6327 2024-08-24 07:13:45 +09:00
Yukihiro "Matz" Matsumoto 7ba95e2f5e Merge pull request #6327 from juchem/master 2024-08-23 22:33:44 +09:00
Yukihiro "Matz" Matsumoto f35000f2a9 array.c (sort_cmp): comparing objects may be freed by GC; #6326
If comparing function (block or `<=>`) modifies the sorting array and GC
happens after the modification, objects passed to comparison may be
freed by GC.
2024-08-23 22:29:45 +09:00
Marcelo Juchem a6eb3e5c27 fix ncurses linking issues
The build configuration for `mruby` assumes only the `ncurses` library
needs to be linked because `tinfo` is implicitly pulled in.

In environments where ncurses is available only as a static library,
`tinfo` needs to be linked explicitly (needed for functions like
`tputs`.

This patch fixes that by linking `tinfo` if available.

It also fixes the build for environments where only the `ncursesw`
version of the library (including wide character support) is present,
while still giving preference to the `ncurses` version (without wide
character support).
2024-08-22 14:11:48 -05:00
Yukihiro "Matz" Matsumoto 58c70834d9 array.c (srot_cmp): need modify check after mrb_cmp as well; #6326
mrb_cmp() may also modify the sorting array internally.
2024-08-22 07:49:16 +09:00
Yukihiro "Matz" Matsumoto 4ea6d74d83 mruby-rational: introduce the constants ONE and ZERO 2024-08-21 18:38:51 +09:00
Yukihiro "Matz" Matsumoto 752ebe6b7f array.c (mrb_ary_sort_bang): check if array is modified in blocks
This address at least part of #6326. CRuby copied the array internally,
but mruby avoid copying to reserve memory.
2024-08-21 18:31:46 +09:00
Yukihiro "Matz" Matsumoto 4b9f567821 vm.c (exec_irep): unify declaration and initialization 2024-08-20 12:49:45 +09:00
Yukihiro "Matz" Matsumoto 98440e095f vm.c (mrb_ci_nregs): unify declaration and initialization 2024-08-20 10:39:12 +09:00
Yukihiro "Matz" Matsumoto 166262243a benchmark/bm_so_mandelbrot.rb: add new benchmark 2024-08-18 23:11:29 +09:00
Yukihiro "Matz" Matsumoto 39b9a1a06a mruby-rational (rational_new): fix compilation condition 2024-08-17 16:29:51 +09:00
Yukihiro "Matz" Matsumoto 44908e5cba mruby-rational: support bigint numerators & denominators 2024-08-16 15:12:03 +09:00
Yukihiro "Matz" Matsumoto 92f476d8fa mruby-bigint (mpz_set): trim destination mpz_t 2024-08-16 07:32:05 +09:00
Yukihiro "Matz" Matsumoto 479259b4e1 Merge pull request #6324 from dearblue/localjump_error 2024-08-16 06:22:32 +09:00
Yukihiro "Matz" Matsumoto b202d00219 Merge pull request #6325 from mruby/dependabot/github_actions/super-linter/super-linter-7.0.0 2024-08-16 06:19:16 +09:00
dependabot[bot] f3b24009e6 build(deps): bump super-linter/super-linter from 6.9.0 to 7.0.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.9.0 to 7.0.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.9.0...v7.0.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-15 14:34:20 +00:00
Yukihiro "Matz" Matsumoto a4225709ef Merge pull request #6323 from mruby/dependabot/github_actions/super-linter/super-linter-6.9.0 2024-08-15 12:15:17 +09:00
dearblue 9d0617f27b Remove localjump_error()
Suppress heap allocation for strings.
2024-08-15 10:27:53 +09:00
Yukihiro "Matz" Matsumoto dfe2dbcde6 class.c (init_copy): need to copy float numbers in some cases
If `MRB_BOXING_WORD` and `MRB_WORDBOXING_NO_FLOAT_TRANCATE` is defined,
float numbers are packed in the heap object. We need to copy them
explicitly.
2024-08-15 09:57:56 +09:00
dependabot[bot] eb6d7afd7e build(deps): bump super-linter/super-linter from 6.8.0 to 6.9.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.8.0 to 6.9.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.8.0...v6.9.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-14 14:56:30 +00:00
Yukihiro "Matz" Matsumoto e9c4486e27 mruby-bigint: add fast path to mrb_bint_mul() & mrb_bint_div() 2024-08-14 22:36:47 +09:00
Yukihiro "Matz" Matsumoto 16f5000794 Merge pull request #6320 from dearblue/OP_BREAK 2024-08-14 18:02:34 +09:00
Yukihiro "Matz" Matsumoto 6e5a493ff3 mruby-bigint (mrb_bint_new_float): add fast path for FIXABLE_FLOAT 2024-08-14 16:11:27 +09:00
Yukihiro "Matz" Matsumoto 92302df49d Merge pull request #6322 from hoshiumiarata/fix_mrb_ro_data_p 2024-08-13 17:50:35 +09:00
Hoshiumi Arata da54da1923 Fix mrb_ro_data_p on Intel Mac 2024-08-13 17:27:08 +09:00
Yukihiro "Matz" Matsumoto 1e503f902d Merge pull request #6321 from dearblue/lib-warnings 2024-08-13 11:48:21 +09:00
Yukihiro "Matz" Matsumoto c853dc4090 vm.c (funcall): move va_list declaration right before va_start() 2024-08-12 22:57:05 +09:00
dearblue 79f4a67268 Avoid warnings in lib/**/*.rb
```console
% find -s lib -type f -name '*.rb' -exec ruby -cw {} \;
lib/mruby/build/command.rb:320: warning: `+' after local variable or literal is interpreted as binary operator
lib/mruby/build/command.rb:320: warning: even though it seems like unary operator
Syntax OK
Syntax OK
Syntax OK
Syntax OK
Syntax OK
lib/mruby/gem.rb:469: warning: `&' interpreted as argument prefix
Syntax OK
Syntax OK
Syntax OK
Syntax OK
```
2024-08-12 21:06:31 +09:00
dearblue 682583a609 Shrinking the code in OP_BREAK and OP_RETURN_BLK
- Can refer directly to `proc->e.env` after `MRB_PROC_ENV_P()`.
  - Can omit `MRB_ENV_ONSTACK_P()` since `mrb->c` is never NULL and can be directly compared to `env->cxt`.
  - Can avoid `goto` by putting the code block that raises the `LocalJumpError` at the end.
2024-08-12 20:54:55 +09:00
Yukihiro "Matz" Matsumoto 22eb7e87af vm.c (uvenv): move declaration to initialization 2024-08-11 23:45:40 +09:00
Yukihiro "Matz" Matsumoto 7ca60a0964 vm.c (stack_extend_alloc): move variable declaration to initialization 2024-08-10 21:57:51 +09:00
Yukihiro "Matz" Matsumoto 56a82009aa Revert "The lex_state after literals should be EXPR_ENDARG."; fix #6298
This reverts commit e98823f189.
2024-08-10 19:17:49 +09:00
Yukihiro "Matz" Matsumoto a267dfd76b vm.c (OP_CLASS,OP_MODULE): combine declarations with initializers 2024-08-08 06:11:52 +09:00
Yukihiro "Matz" Matsumoto 22ec76f46c vm.c (OP_RANGE_INC): remove unnecessary local variable 2024-08-08 06:10:35 +09:00
Yukihiro "Matz" Matsumoto 320c757186 Merge pull request #6318 from dearblue/shrink-vm-vars
Shrink variables in `mrb_vm_exec()`
2024-08-06 12:21:36 +09:00
Yukihiro "Matz" Matsumoto aad2aacf25 range.c (mrb_get_values_at): support bigint too 2024-08-05 16:35:41 +09:00
Yukihiro "Matz" Matsumoto 6da2e60edc mruby-bigint (mpz_get_str): avoid malloc when base is a power of 2 2024-08-05 10:43:47 +09:00
Yukihiro "Matz" Matsumoto 0e6ef15b0f AUTHORS: update entries [ci skip] 2024-08-04 23:19:25 +09:00
Yukihiro "Matz" Matsumoto e8bb03da40 numeric.rb (step): iterate over integers even if end is a float
It used to check all `start`, `end` and `step`. If either of them are
float number, `#step` iterated over float number. Now we don't check the
type of `end` argument.
2024-08-03 13:35:09 +09:00
Yukihiro "Matz" Matsumoto 6d6e26661d gc.c: remove unnecessary argument from add_gray_list() 2024-08-02 21:14:58 +09:00
Yukihiro "Matz" Matsumoto 3324773f56 gc.c (mrb_gc_register): protect obj from GC during execution
Because `mrb_ary_new()` and `mrb_ary_push()` can cause GC; fix #6317
2024-08-02 04:52:11 +09:00
Yukihiro "Matz" Matsumoto 16fe4b2701 Merge pull request #6319 from mruby/dependabot/github_actions/super-linter/super-linter-6.8.0 2024-08-02 04:47:42 +09:00
dependabot[bot] 7db4cfd5cd build(deps): bump super-linter/super-linter from 6.7.0 to 6.8.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.7.0 to 6.8.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.7.0...v6.8.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-01 14:32:11 +00:00
Yukihiro "Matz" Matsumoto aa06432776 mruby-array-ext: index should be within mrb_int range
Type check is done by `__to_int` method.
2024-08-01 07:34:20 +09:00
dearblue 822e3fdfd7 Remove pool and syms variables in mrb_vm_exec()
Can be referenced by traversing through the `irep` pointer.
2024-07-31 22:27:04 +09:00
dearblue f2a139a616 Avoid assignments to pc and proc parameters in mrb_vm_exec()
Introduce the `ci` variable instead and refer to it indirectly.
2024-07-31 22:27:04 +09:00
Yukihiro "Matz" Matsumoto a668e6d81e Merge pull request #6310 from dearblue/ci-extend 2024-07-31 11:09:23 +09:00
Yukihiro "Matz" Matsumoto eca59ad9ac Merge pull request #6312 from dearblue/OP_RETURN 2024-07-30 12:04:01 +09:00
Yukihiro "Matz" Matsumoto 3c5baac5c5 mruby-sprintf: fix a bug with negative octals
Leading octal digit may be 1, 3, 7 unlike binary or hexadecimal.
2024-07-30 11:33:18 +09:00
Yukihiro "Matz" Matsumoto ab95e042ca mruby-bigint (mrb_bint_xor): add fast path with fixnums 2024-07-29 16:44:54 +09:00
Yukihiro "Matz" Matsumoto b706c89c41 mruby-bigint (mrb_bint_2comp): fix assertion 2024-07-29 16:44:54 +09:00
Yukihiro "Matz" Matsumoto bf7f14341d mruby-bigint (mrb_bint_or): add fast path with fixnums 2024-07-29 15:47:19 +09:00
Yukihiro "Matz" Matsumoto dcf7adeeb7 mruby-bigint: use zero_p() 2024-07-29 15:43:22 +09:00
Yukihiro "Matz" Matsumoto 196c2bd0b9 mruby-bigint (mrb_bint_add): add type cast to stop warnings in C++ 2024-07-28 23:29:54 +09:00
Yukihiro "Matz" Matsumoto 081cd0627f mruby-bigint (mrb_bint_hash): need to get hash from all digits 2024-07-27 18:54:50 +09:00
Yukihiro "Matz" Matsumoto 203a89a3f2 mruby-bigint (zero_p): define a new predicate to check if mpz_t is 0 2024-07-27 18:54:50 +09:00
Yukihiro "Matz" Matsumoto 234a2b10fb mruby-bigint (mpz_neg): no need to check x != y 2024-07-27 18:54:50 +09:00
Yukihiro "Matz" Matsumoto 811637e99f mruby-bigint (mrb_bint_2comp): inline mpz_2comp 2024-07-27 18:54:49 +09:00
Yukihiro "Matz" Matsumoto c218894af9 mruby-bigint: use mp_limb instead of uint32_t
Because mp_limb may be uint16_t on some platforms.
2024-07-27 18:54:48 +09:00
Yukihiro "Matz" Matsumoto a50a2ce148 .gitingore: add entries (.cache, gmon.out, perf.data) 2024-07-27 18:53:55 +09:00
Yukihiro "Matz" Matsumoto 2247e4f355 mruby-bigint (mpz_xor): simplify the code 2024-07-27 18:53:36 +09:00
Yukihiro "Matz" Matsumoto b573a8430f mruby-bigint (mpz_or): simplify the code 2024-07-27 18:50:09 +09:00
Yukihiro "Matz" Matsumoto dea1cc18a6 mruby-bigint (mpz_and): simplify the code 2024-07-27 18:48:01 +09:00
Yukihiro "Matz" Matsumoto bf081c3d3d mruby-bigint (mrb_bint_and): further optimization for bint & int 2024-07-25 17:46:36 +09:00
Yukihiro "Matz" Matsumoto 99c078bb6b mruby-bigint (mrb_bint_2comp): simplify using mpz_2comp() 2024-07-25 16:18:49 +09:00
Yukihiro "Matz" Matsumoto 3d69412ea5 mruby-bigint: Distinguish uzero_p(x) and x->sn == 0
The latter is a check for integers that have been set up (and disclosed to the
outer world), while the former is a check for integers that are being worked on.
2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto 93653dfd4c mruby-bigint (uzero_p): add fast path 2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto 4ee7c8e021 mruby-bigint: rename uzero to uzero_p
Since uzero() is a predicate, and zero() is a function to assign zero to
mpz_t, it's confusion. Rename predicate uzero() to uzero_p() to follow
mruby naming convention.
2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto 88536ebe30 mruby-bigint (mpz_xor): support bit-wise xor with negative numbers; #6314 2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto ee2eb6c87e mruby-bigint (mpz_or): support bit-wise or with negative numbers; #6314 2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto 69a80c94b9 mruby-bigint (mpz_and): support bit-wise and with negative numbers
Negative integers are virtually considered as 2's compliment of the
absolute value of the corresponding number. It means `-1` is considered
as infinite sequence of `1` toward msb side. ref #6314
2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto e3a459d5b9 mruby-bigint (mrb_bint_and): optimize bint & fixnum operation; ref #6314 2024-07-25 16:18:48 +09:00
Yukihiro "Matz" Matsumoto c16aba9280 mruby-bigint: remove special handling of Float in bitwise operations
CRuby raises TypeError with float numbers as operands; ref #6314
2024-07-25 16:18:47 +09:00
Yukihiro "Matz" Matsumoto 81a9eef591 Merge pull request #6313 from hoshiumiarata/fix_typo_in_opcode_doc 2024-07-24 12:28:52 +09:00
Yukihiro "Matz" Matsumoto b4ffddebdf Merge pull request #6314 from hoshiumiarata/optimize_int_even 2024-07-24 08:11:43 +09:00
Hoshiumi Arata 612941dcbc Add test code for even?/odd? 2024-07-23 21:09:17 +09:00
Hoshiumi Arata 80502b30fb Optimize even?/odd? for big integers 2024-07-23 21:05:10 +09:00
Hoshiumi Arata 35571df7ea Update opcode.md: fix wrong column number 2024-07-23 20:25:22 +09:00
Yukihiro "Matz" Matsumoto bb4a8c2410 Merge pull request #6311 from dearblue/OP_SEND 2024-07-23 11:04:20 +09:00
Yukihiro "Matz" Matsumoto 6a03647fc0 Merge pull request #6309 from dearblue/mrb_type 2024-07-23 07:26:04 +09:00
Yukihiro "Matz" Matsumoto d2878138d9 mruby-numeric-ext: implement Integer#even? and Integer#odd? 2024-07-23 07:23:13 +09:00
Yukihiro "Matz" Matsumoto 9d709164dc Merge pull request #6308 from dearblue/vm-catch 2024-07-22 16:29:56 +09:00
Yukihiro "Matz" Matsumoto f3b570f33a mruby-enumerator: add test for Enumerable#chunk_while 2024-07-22 13:52:12 +09:00
dearblue e93226f402 Doubling the call stack when extending it
Previously it was "approximately double".
2024-07-21 21:58:18 +09:00
dearblue 748af76ed2 Omit error checking at OP_RETURN, OP_RETURN_BLK and OP_BREAK
Clearing errors at the beginning of `mrb_vm_exec()` essentially keeps the mruby VM in a non-error state.

For consistency, functions such as `mrb_funcall()` check for errors when control returns from a C function as a method.
In the case of a tail call, it should return to `mrb_vm_exec()` afterwards, so error checking is performed there.

Instructions issued while `mrb->exc` is non-null should be limited to `OP_EXCEPT`, the jump target of the catch handler table.
2024-07-21 21:58:18 +09:00
dearblue ce847c1aa9 Added fast-path for positional arguments less than 15 in OP_SEND 2024-07-21 21:58:18 +09:00
dearblue e76bebe836 Perform pseudo binary search with mrb_type() 2024-07-21 21:58:18 +09:00
dearblue 45007888f5 Assume that MRB_CATCH() has mrb->exc set
The caller of `MRB_EXC_THROW()` must be preconfigured.
2024-07-21 21:58:18 +09:00
Yukihiro "Matz" Matsumoto dcbe2e3eb3 mruby-enumerator: add Enumerable#chunk_while 2024-07-21 20:29:27 +09:00
Yukihiro "Matz" Matsumoto 7d8fc3b35f Merge pull request #6305 from dearblue/method_missing
Protect keyword arguments in `prepare_missing()`
2024-07-20 22:04:50 +09:00
dearblue 890dda79d0 Protect keyword arguments in prepare_missing()
Previously, keyword arguments were lost if no positional arguments were passed.

Fixed #6304
2024-07-20 16:25:11 +09:00
Yukihiro "Matz" Matsumoto 3ec6038505 Merge pull request #6299 from mruby/dependabot/github_actions/super-linter/super-linter-6.7.0
build(deps): bump super-linter/super-linter from 6.6.0 to 6.7.0
2024-07-20 15:25:20 +09:00
dependabot[bot] 6c4ea4cd10 build(deps): bump super-linter/super-linter from 6.6.0 to 6.7.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.6.0 to 6.7.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.6.0...v6.7.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-20 06:16:03 +00:00
Yukihiro "Matz" Matsumoto 9326c514c5 mruby-enum-ext: add Enumerable#each_entry test 2024-07-20 14:20:15 +09:00
Pete Kinnecom 509590c18d Method missing kwargs test failure:
Fail: Method#call with undefined method -- only kwargs (mrbgems: mruby-method)
 - Assertion[6]
    NoMethodError exception expected, not
    Class: <TypeError>
    Message: <Array cannot be converted to Hash>
 - Assertion[9]
    Expected: {:kwarg1=>:val1, :kwarg2=>:val2}
      Actual: [:foo]
2024-07-19 20:37:40 +00:00
Yukihiro "Matz" Matsumoto c539256b43 mruby-enum-ext: add Enumerable#each_entry 2024-07-19 23:29:45 +09:00
Yukihiro "Matz" Matsumoto 313c5a31ac test/hash.rb: add tests for Hash#assoc and Hash#rassoc 2024-07-18 15:09:49 +09:00
Yukihiro "Matz" Matsumoto 398e669bbf hash.c: add Hash#assoc and Hash#rassoc 2024-07-18 15:06:31 +09:00
Yukihiro "Matz" Matsumoto 1fc8c20723 Merge pull request #6303 from hasumikin/fix/return-value-of-String_aset
mrb_str_aset_m() should return replace instead of str
2024-07-17 09:49:34 +09:00
Yukihiro "Matz" Matsumoto cd8582a011 hash.c: define Hash#to_hash 2024-07-17 09:46:46 +09:00
Yukihiro "Matz" Matsumoto 45078d9a49 mruby-string-ext: fixed typo (casecmp! -> casecmp?) 2024-07-17 02:25:49 +09:00
HASUMI Hitoshi cc16afb7f3 mrb_str_aset_m() should return replace instead of str
`string[]=(idx, replace)` should return `replace`.

## Actual (wrong)

```
string.[]=(idx, replace) → string
string.[]=(idx, len, replace) → string
```

## Expected

```
string.[]=(idx, replace) → replace
string.[]=(idx, len, replace) → replace
```

## Sidenote

As of the current mruby-compiler, `(string[idx] = 'X')` creates not only "CALL_NODE" but also "ASGN_NODE" and "OP_MOVE", overriding the wrong return value.
On the other hand, `string.[]=(idx, 'X')` creates only "CALL_NODE", exposing the wrong return value.

If my new mruby-compiler2, leveraging Prism, took the place of official compiler, `(string[idx] = 'X')` and `string.[]=(idx, 'X')` would be going to generate the same VM code without "OP_MOVE".
So I paranoidly added tests.

FYI: You can find how the new mruby-compiler2's AST and VM code look like in mruby/c's issue (mruby/c had the same bug): https://github.com/mrubyc/mrubyc/pull/210
2024-07-16 18:55:26 +09:00
Yukihiro "Matz" Matsumoto ac8846dbce numeric.c: add Numeric#fdiv 2024-07-15 22:16:52 +09:00
Yukihiro "Matz" Matsumoto 301242c822 numeric.c (int_fdiv): add Integer#fdiv and Float#fdiv 2024-07-15 22:16:52 +09:00
Yukihiro "Matz" Matsumoto 4faab0581e Merge pull request #6302 from auroranockert/minor-mrb-str-init-cleanup
Minor cleanup in mrb_str_init
2024-07-15 21:38:48 +09:00
Yukihiro "Matz" Matsumoto ca28e639c6 mruby-numeric-ext: move allbits?, anybits?, nobits? to Integer class 2024-07-15 21:35:42 +09:00
Yukihiro "Matz" Matsumoto 3f5138a6ac mruby-numeric-ext: implement Numeric#integer? method 2024-07-15 21:35:42 +09:00
Yukihiro "Matz" Matsumoto 1a8df40392 mruby-enum-ext: add Array#sort_by! method 2024-07-15 21:35:42 +09:00
Yukihiro "Matz" Matsumoto fcab7ef377 numeric.c (int_div): fixed a bug regarding bigint / non-integer
Non-integer means Complex or Rational.
2024-07-15 21:35:42 +09:00
Yukihiro "Matz" Matsumoto bcba0bc674 Merge pull request #6300 from jbampton/fix-spelling
Fix spelling
2024-07-15 21:35:43 +09:00
Aurora Nockert a871e4908f Minor cleanup in mrb_str_init
mrb_str_new was essentially manually inlined here, and I think it is a bit easier to follow if we just call the function instead.
2024-07-13 15:38:14 +02:00
John Bampton de8a6fe787 Fix spelling 2024-07-13 00:21:53 +10:00
Yukihiro "Matz" Matsumoto c75f7587bc mruby-numeric-ext: add call-seq reference for Integer#size 2024-07-10 14:56:13 +09:00
Yukihiro "Matz" Matsumoto ee296f024b mruby-numeric-ext: add Integer#size method
Although CRuby uses clz() for the biggest word, mruby bigint only counts
number of digit words.
2024-07-10 14:50:54 +09:00
Yukihiro "Matz" Matsumoto a77bc25a5f mruby-sprintf: support dots expression of negative integer format
For specifiers assume unsigned integers, negative numbers show dots (..)
to indicate virtual infinite 1s at the MSB side of 2's compliment.
2024-07-09 11:13:55 +09:00
Yukihiro "Matz" Matsumoto 80fec16cb6 mruby-sprintf: inline sign_bits() function 2024-07-09 10:48:07 +09:00
Yukihiro "Matz" Matsumoto d249c2e939 mruby-sprintf: separate filling high bits and converting negatives 2024-07-09 10:40:46 +09:00
Yukihiro "Matz" Matsumoto 2488375a35 mruby-bigint (mpz_mod): move mpz_init() to avoid memory leak 2024-07-09 08:00:23 +09:00
Yukihiro "Matz" Matsumoto 0ea1549faa mruby-sprintf: reorder functions
In addition, internal function `mrb_str_format()` is made `static`.
2024-07-06 08:45:19 +09:00
Yukihiro "Matz" Matsumoto bd502f6d7b mruby-sprintf: support Big integers for %d etc. 2024-07-04 22:51:14 +09:00
Yukihiro "Matz" Matsumoto f1a04dae3e mruby-enum-ext (sort_by): avoid copying the receiver
When the receiver is an Array.
2024-07-03 07:31:32 +09:00
Yukihiro "Matz" Matsumoto 7c7ee5c244 array.c: implement Array#delete method in C 2024-07-02 11:45:20 +09:00
Yukihiro "Matz" Matsumoto b9cb9b9bbe Merge pull request #6295 from dearblue/revert-6282
Revert "Delegate the care of a directly given block from `cipop()` to `cipush()`"
2024-07-02 11:45:13 +09:00
dearblue ad576f1e75 Revert "Delegate the care of a directly given block from cipop() to cipush()"
This reverts commit ad2e626e7a.

Because of the changes made by #6282, the following code caused a problem.

```ruby
b = proc { break "BAD!" }
p self.tap { b.call }
# (expected)    => break from proc-closure (LocalJumpError)
# (after #6282) => "BAD!"
```

I revived the `mrb_callinfo::blk` field to fix this, but it did not overcome the following problem.

```ruby
def m(&b); b = b.clone; GC.start; b.call; end
p m { break "OK!" }
# (expected)    => "OK!"
# (revived blk) => break from proc-closure (LocalJumpError)
```
2024-06-30 21:01:45 +09:00
Yukihiro "Matz" Matsumoto 73337133f7 Merge pull request #6294 from auroranockert/optimise-obj-iv-p
Optimise `mrb_iv_get`
2024-06-30 18:25:43 +09:00
Yukihiro "Matz" Matsumoto 72bf46de22 array.c (mrb_ary_cmp): fixed wrong type casting 2024-06-30 18:19:52 +09:00
Yukihiro "Matz" Matsumoto eee83ed7af array.c: implement Array#index and Array#rindex in C
No need to override Array#index in mruby-array-ext. We can call
`to_enum` from C implemented methods.
2024-06-29 15:03:12 +09:00
Yukihiro "Matz" Matsumoto dd808a0be4 array.c: implement Array#<=> in C 2024-06-29 15:03:12 +09:00
Yukihiro "Matz" Matsumoto 8cffa04def array.c: implement Array#== and Array#eql? in C
It seems OK to call comparison from C method from measurement.
2024-06-29 08:32:06 +09:00
Yukihiro "Matz" Matsumoto 5b8de8d616 Array.c (mrb_ary_init): implement Array#initialize in C 2024-06-28 08:56:41 +09:00
Aurora Nockert 646c37ecda Add a fast-path for mrb_type
By adding a fast-path where we ignore boxed types we can gain a pretty substantial speedup of mrb_iv_get, making it about 25% faster during a standard optcarrot benchmark run.

NOTE: It is just mrb_iv_get that is that much faster, the whole benchmark seems to be about 3-5% faster with word boxing.
2024-06-27 22:46:13 +02:00
Aurora Nockert 27f972b048 Reorder mrb_vtype
This allows the compiler to optimise the case in obj_iv_p into a range check. There does not seem to be any other very hot uses of this index and it grants a pretty big gain on optcarrot.
2024-06-27 22:46:13 +02:00
Yukihiro "Matz" Matsumoto f709847bde numeric.c (cmpnum): skip mrb_as_float() if possible 2024-06-27 10:02:06 +09:00
Yukihiro "Matz" Matsumoto 5b27469d19 numeric.c (mrb_cmp): check the first argument if it's int or float
To avoid the cost of `mrb_type(obj1)`.
2024-06-27 09:24:34 +09:00
Yukihiro "Matz" Matsumoto ac1e4a2d58 numeric.c (cmpnum): handle the case where both arguments are fixnum first
To avoid the cost of `mrb_type(v2)`.
2024-06-27 08:55:28 +09:00
Yukihiro "Matz" Matsumoto b8f968b4a3 numeric.c (mrb_cmp): no need to check respond_to?(:<=>)
Because every object responds to `<=>`.
2024-06-27 08:48:11 +09:00
Yukihiro "Matz" Matsumoto 5bd63d6232 array.c: replace sort! method implementation
- use heap sort (O(1)) instead of merge sort (O(n)) for better space
  complexity.

- method implemented in C for better performance

As a result, simple sorting now consumes far less memory and is faster.
Since it's implemented in C, fiber context switching is not allowed from
comparison, but we consider the risk is minimal (no one switches context
in the comparison, right?)
2024-06-26 11:28:56 +09:00
Yukihiro "Matz" Matsumoto b521d0816f numeric.c (cmpnum): restrict comparison between Numeric objects 2024-06-25 14:36:56 +09:00
Yukihiro "Matz" Matsumoto bb2733e9a2 numeric.c (cmpnum): rafactoring
- separate `MRB_NO_FLOAT` case
- use `mrb_as_float()` as much as possible
2024-06-24 09:34:13 +09:00
Yukihiro "Matz" Matsumoto a0d4c63f9a Merge pull request #6293 from dearblue/doc/opcode.md
Changed the instruction table in `opcode.md`
2024-06-23 20:14:51 +09:00
dearblue f4f3a061be Changed the instruction table in opcode.md
- Added the index number corresponding to the instruction code.
  - Omitted trailing `|` from table elements.
    The table elements in GitHub Flavored Markdown can't wrap wherever wanted.
    And trying to align the end of it tends to make the whole thing longer.
2024-06-22 23:21:43 +09:00
Yukihiro "Matz" Matsumoto 54e99197bd Revert "tools/lrama: apply ruby/lrama#442"
This reverts commit fb9fbc8498.

The fix in the upstream still causes syntax error in C++.
2024-06-22 13:34:46 +09:00
Yukihiro "Matz" Matsumoto eab6bddffe Merge pull request #6292 from jbampton/pre-commit-autoupdate
markdownlint --fix; remove prettier; pre-commit autoupdate; fix spelling
2024-06-21 14:33:44 +09:00
Yukihiro "Matz" Matsumoto d4c65d7ab1 AUTHORS: update entries [ci skip] 2024-06-21 13:01:38 +09:00
Yukihiro "Matz" Matsumoto c592e7b70d string.c: small refactoring 2024-06-21 10:11:32 +09:00
Yukihiro "Matz" Matsumoto fb9fbc8498 tools/lrama: apply ruby/lrama#442 2024-06-21 08:12:27 +09:00
John Bampton 88e2eb0188 Fix spelling 2024-06-21 08:14:17 +10:00
John Bampton 06becc3495 pre-commit autoupdate 2024-06-21 08:14:17 +10:00
John Bampton bbb0dddc7e Remove prettier from pre-commit 2024-06-21 08:14:17 +10:00
John Bampton ac74c90b30 Run markdownlint --fix 2024-06-21 06:53:42 +10:00
Yukihiro "Matz" Matsumoto 73c3970ea1 numeric.c: fix spacing in a comment 2024-06-19 09:25:19 +09:00
Yukihiro "Matz" Matsumoto b8396aec33 numeric.c (cmpnum): fix a bug in float-bigint comparison
Should have used bigint to float conversion.
2024-06-19 09:25:19 +09:00
Yukihiro "Matz" Matsumoto 0f2d12a005 numeric.c (cmpnum): reduce else nesting 2024-06-18 01:50:49 +09:00
Yukihiro "Matz" Matsumoto 75de002058 mruby-complex: provide Complex#<=> in Ruby 2024-06-17 08:14:27 +09:00
Yukihiro "Matz" Matsumoto 3b9aec90dd mruby-rational: define <=> method in Ruby, not in C 2024-06-17 08:02:42 +09:00
Yukihiro "Matz" Matsumoto 36eff3ec59 mruby-rational/test: remove UserDefinedNumeric tests
Since they checks the behavior different from CRuby.
2024-06-17 07:57:54 +09:00
Yukihiro "Matz" Matsumoto d1592ba9f9 numeric.c (cmpnum): use mrb_as_int() instead of mrb_integer() 2024-06-17 07:51:25 +09:00
Yukihiro "Matz" Matsumoto b44dc1c0b9 mruby-rational: use presym for initialization 2024-06-14 06:17:20 +09:00
Yukihiro "Matz" Matsumoto 0e045a52f6 mruby-complex: use presym for initialization 2024-06-14 06:15:34 +09:00
Yukihiro "Matz" Matsumoto 921a54ef33 mruby-socket/socket.rb: done some small refactoring 2024-06-14 06:14:27 +09:00
Yukihiro "Matz" Matsumoto 39d577799f mruby-socket: use presym for initialization 2024-06-14 06:14:07 +09:00
Yukihiro "Matz" Matsumoto 7be10097a0 mruby-io: use presym for initialization 2024-06-14 02:00:17 +09:00
Yukihiro "Matz" Matsumoto db8d43090a mruby-struct: use presym for initialization 2024-06-14 01:59:30 +09:00
Yukihiro "Matz" Matsumoto 8bd66a9358 mruby-data: use presym for initialization 2024-06-14 01:59:10 +09:00
Yukihiro "Matz" Matsumoto d5fd3338a4 mruby-method: use presym for initialization 2024-06-14 01:46:22 +09:00
Yukihiro "Matz" Matsumoto 71a4e5f3ff mruby-proc-ext: use presym for initialization 2024-06-14 01:45:58 +09:00
Yukihiro "Matz" Matsumoto 2b4591fe68 mruby-proc-binding: use presym for initialization 2024-06-14 01:45:23 +09:00
Yukihiro "Matz" Matsumoto 9fbdf78380 mruby-binding: use presym for initialization 2024-06-14 01:44:49 +09:00
Yukihiro "Matz" Matsumoto d1e49f7121 mruby-metaprog: use presym for initialization 2024-06-14 01:43:57 +09:00
Yukihiro "Matz" Matsumoto c32a94d878 mruby-string-ext: use presym for initialization 2024-06-14 01:43:03 +09:00
Yukihiro "Matz" Matsumoto 513908d77f mruby-range-ext: use presym for initialization 2024-06-14 01:42:30 +09:00
Yukihiro "Matz" Matsumoto 4104837ba1 mruby-hash-ext: use presym for initialization 2024-06-14 01:41:55 +09:00
Yukihiro "Matz" Matsumoto cfd90a65f7 mruby-array-ext: use presym for initialization 2024-06-14 01:41:06 +09:00
Yukihiro "Matz" Matsumoto 574f9f0d39 mruby-class_ext: use presym for initialization 2024-06-14 00:37:05 +09:00
Yukihiro "Matz" Matsumoto 6361f6d661 mruby-numeric-ext: use presym for initialization 2024-06-14 00:35:44 +09:00
Yukihiro "Matz" Matsumoto d94916bf15 mruby-kernel-ext: use presym for initialization 2024-06-14 00:34:07 +09:00
Yukihiro "Matz" Matsumoto e1a62a581f mruby-object-ext: use presym for initialization 2024-06-14 00:33:18 +09:00
Yukihiro "Matz" Matsumoto c99b8d7d3b mruby-fiber: use presym for initialization 2024-06-14 00:32:07 +09:00
Yukihiro "Matz" Matsumoto bf8e19f7da mruby-sleep: use presym for initialization 2024-06-14 00:30:32 +09:00
Yukihiro "Matz" Matsumoto 0eb616e3bd mruby-symbol-ext: use presym for initialization 2024-06-14 00:28:33 +09:00
Yukihiro "Matz" Matsumoto 3628d093f4 mruby-dir: use presym for initialization 2024-06-14 00:27:13 +09:00
Yukihiro "Matz" Matsumoto 6535f6d159 mruby-eval: use presym for initialization 2024-06-14 00:26:22 +09:00
Yukihiro "Matz" Matsumoto 9c060b425c mruby-errno: use presym for initialization 2024-06-14 00:25:26 +09:00
Yukihiro "Matz" Matsumoto e4c2423f6e mruby-catch: use presym for initialization 2024-06-14 00:23:11 +09:00
Yukihiro "Matz" Matsumoto 6bcaeb5a93 mruby-pack: use presym for initialization 2024-06-14 00:19:21 +09:00
Yukihiro "Matz" Matsumoto f3c2373c6f mruby-print: use presym for initialization 2024-06-14 00:18:22 +09:00
Yukihiro "Matz" Matsumoto c94ae288d5 mruby-time: use presym for initialization 2024-06-14 00:16:21 +09:00
Yukihiro "Matz" Matsumoto 8f184a356b mruby-random: use presym for initialization 2024-06-14 00:15:25 +09:00
Yukihiro "Matz" Matsumoto 3141b9424c mruby-compiler/y.tab.c: it will be generated by Lrama from parse.y
No longer need to bundle in the repository.
2024-06-10 15:34:16 +09:00
Yukihiro "Matz" Matsumoto 933e966fab tools/lrama: update template to stop C++ compiler error 2024-06-10 15:23:53 +09:00
Yukihiro "Matz" Matsumoto fbe21a0321 tools/lrama: bundle Lrama 0.6.9 (copied from CRuby source) 2024-06-10 14:26:26 +09:00
Yukihiro "Matz" Matsumoto d6da2d4760 mruby-compiler: use @1 in parse.y to enable YYLTYPE
This change itself does nothing good, but it is a preparation for the
future Bison to Lrama migration. As of 0.6.9, Lrama has a compatibility
issue for grammar files without `@n`.
2024-06-10 08:23:36 +09:00
Yukihiro "Matz" Matsumoto 473206c5d8 class.c: adjust local variable declarations with initialization 2024-06-10 08:23:36 +09:00
Yukihiro "Matz" Matsumoto b6b74b3a5b Merge pull request #6290 from dearblue/libdir
Allow to change the output directory name of the `libmruby` file
2024-06-10 08:22:52 +09:00
dearblue 0fcf54b47d Allow to change the output directory name of the libmruby file
Add the `MRuby::Build#libdir_name` accessor and the `MRUBY_SYSTEM_LIBDIR_NAME` environment variable.

Resolved #6240
2024-06-09 22:49:46 +09:00
Yukihiro "Matz" Matsumoto 43b3536803 Merge pull request #6288 from dearblue/closing
Detach `env` of ci explicitly on atexit
2024-06-09 19:40:21 +09:00
Yukihiro "Matz" Matsumoto b60cd351a1 Merge pull request #6289 from dearblue/orphan-block
Simplify `OP_RETURN_BLK` and `OP_BREAK
2024-06-08 23:51:48 +09:00
dearblue f48ac7469b Simplify OP_RETURN_BLK and `OP_BREAK
- There was some unnecessary complexity in `OP_BREAK` introduced in commit ad2e626 (#6282).
  - Since `mrb->c` is never NULL, there is no need to check it with `MRB_ENV_ONSTACK_P()` beforehand.
2024-06-08 13:46:28 +09:00
dearblue bd596153f1 Detach env of ci explicitly on atexit
Supplement to commit 177debacc5 (#6276).

If the ci is incomplete, the previous method may cause the application to crash because `env->stack` points to an invalid address when expanding the data stack.
Since the ci is in an abnormal state, control it by putting `NULL` in `env->stack`.

If the ci is fine and top-level, detach `env` as usual with `mrb_env_unshare()`.
2024-06-06 21:35:24 +09:00
Yukihiro "Matz" Matsumoto 8c1e12263e Merge pull request #6287 from mruby/dependabot/github_actions/super-linter/super-linter-6.6.0
build(deps): bump super-linter/super-linter from 6.5.1 to 6.6.0
2024-06-05 21:26:23 +09:00
Yukihiro "Matz" Matsumoto 889af10090 mruby-compiler: prohibit dynamic assignment to constants; #3521
Along with some declaration adjustments to minimize `y.tab.c` diff.
2024-06-05 18:56:11 +09:00
dependabot[bot] bc930d68ab build(deps): bump super-linter/super-linter from 6.5.1 to 6.6.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.5.1 to 6.6.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.5.1...v6.6.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-04 14:49:19 +00:00
Yukihiro "Matz" Matsumoto 5072358276 vm.c: remove unnecessary type cast to blk; ref #6282 2024-06-03 19:45:53 +09:00
Yukihiro "Matz" Matsumoto dcdd94c04c Merge pull request #6282 from dearblue/orphan-block
Delegate the care of a directly given block from `cipop()` to `cipush()`
2024-06-02 22:02:58 +09:00
Yukihiro "Matz" Matsumoto 95dcc52e16 Merge pull request #6283 from dearblue/env
Simplify `uvenv()`
2024-06-01 22:51:02 +09:00
dearblue d0b06446f2 Simplify uvenv()
The part removed in this patch was introduced by commit c7c9543bed.

The current mechanism should be able to trace from block objects created by `eval` to higher level blocks without any problems.
2024-06-01 20:36:22 +09:00
Yukihiro "Matz" Matsumoto 00a874cff6 Merge pull request #6281 from dearblue/binding
Fixes local variables in `mruby-binding`.
2024-05-31 22:56:04 +09:00
Yukihiro "Matz" Matsumoto 8d79cfdc83 Merge pull request #6280 from dearblue/env
Remove `MRB_ENV_CLOSED` flag
2024-05-31 22:50:56 +09:00
Yukihiro "Matz" Matsumoto 7b9b0997e0 string.c: adjust local variable declarations 2024-05-31 22:49:25 +09:00
dearblue ad2e626e7a Delegate the care of a directly given block from cipop() to cipush()
Outlines:
  - Removed `mrb_callinfo::blk`
  - Added `mrb_callinfo::flags`
  - Added `MRB_CI_COMPANION_BLOCK` flag
2024-05-31 22:03:15 +09:00
dearblue e82b36035e Fixes local variables in mruby-binding.
There are two issues to be fixed:
  - `mrb_irep` could leak if `mrb_calloc()` encountered an out-of-memory exception
  - `mrb_proc_merge_lvar()` allocated one extra variable name.

`irep->lv` can always refer to only one less range than `irep->nlocals`.
Also, when `mrb_proc_merge_lvar()` extends `irep->lv`, `mrb_realloc()` with `NULL` has the same behavior as `mrb_malloc()`.
2024-05-30 21:25:30 +09:00
dearblue 7ab6386cc6 Remove MRB_ENV_CLOSED flag
Set `env->cxt` to `NULL` when it is detached from the call frame.
In other words, we can determine if `env->cxt` is `NULL` or not.

Also, `mruby-binding` had been setting `env->cxt` unnecessarily, so this has been fixed.
2024-05-30 21:09:49 +09:00
Yukihiro "Matz" Matsumoto 0a11af74f4 Merge pull request #6279 from kou/windows-lean-and-mean-include
Include headers for malloc() explicitly; fix #6277
2024-05-29 14:37:10 +09:00
Sutou Kouhei c258ead85b Include headers for malloc() explicitly; fix #6277
We need to include stdlib.h and malloc.h to use malloc()/free() but
they aren't included in src/string.c with WIN32_LEAN_AND_MEAN. It
generates build time warnings.

We can solve this by including stdlib.h and malloc.h explicitly.
2024-05-29 09:45:36 +09:00
Yukihiro "Matz" Matsumoto f1dec3959f mruby-range-ext (range_size): raise TypeError if not iterable
According ruby/ruby#8663, `Range#size` behavior has changed.
2024-05-28 15:30:08 +09:00
Yukihiro "Matz" Matsumoto f2dc44215c Merge pull request #6276 from dearblue/closing
Always run `atexit` on the top-level call frame
2024-05-27 12:40:52 +09:00
Yukihiro "Matz" Matsumoto bf244d65db Merge pull request #6275 from dearblue/binding.eval
Fixed `Binding#eval` that failed to assign to the same variable
2024-05-27 08:49:14 +09:00
dearblue 177debacc5 Always run atexit on the top-level call frame
In the following example, the fiber context and call stack may be in an incomplete state.
  - In case another thread running mruby is terminated abnormally
  - In case of a global jump that is out of management by mruby
2024-05-26 21:17:00 +09:00
Yukihiro "Matz" Matsumoto d03394fbc4 mruby-os-memsize: adjust local variable declarations 2024-05-26 18:01:15 +09:00
Yukihiro "Matz" Matsumoto 681bcdbcd3 mruby-bigint: adjust local variable declarations 2024-05-26 07:38:34 +09:00
dearblue 75b0d06c41 Fixed Binding#eval that failed to assign to the same variable
In `Binding#eval`, two times parsing is executed.
The problem found in this case was caused by not passing an upper block to hold variables of the binding object during the first parsing.

The problem was uncovered by <https://github.com/mruby/mruby/discussions/6274>.
2024-05-25 21:55:02 +09:00
Yukihiro "Matz" Matsumoto 20cf58d1d3 Merge pull request #6273 from dearblue/closing
Improvements to `mrb_protect_atexit()`
2024-05-25 16:48:56 +09:00
Yukihiro "Matz" Matsumoto d415a45a33 AUTHORS: update entries [ci skip] 2024-05-25 16:47:08 +09:00
Yukihiro "Matz" Matsumoto 10bc15c23e mruby-class-ext: adjust variable declarations 2024-05-25 16:41:24 +09:00
Yukihiro "Matz" Matsumoto 292f7ef0ce mruby-proc-ext (mrb_proc_parameters): adjust variable declarations 2024-05-25 16:39:32 +09:00
Yukihiro "Matz" Matsumoto 89c70aeea0 mruby-range-ext: move local variable declarations to minimize scope 2024-05-25 16:39:32 +09:00
Yukihiro "Matz" Matsumoto 7c2be58e2a mruby-rational (rational_pow): fix wrong power calculation
`a/b ** -n` can be calculated by `b/a ** n` for correctness.
2024-05-25 16:39:32 +09:00
Yukihiro "Matz" Matsumoto d148bf8c0b mruby-rational: adjust local variable declarations with initialization 2024-05-25 16:39:32 +09:00
Yukihiro "Matz" Matsumoto 68e093729b string.c: refactor bit operation (e.g. SWAR)
To generate a bit mask of `0x8080...` of the word size, we prepare
`MASK01` which is `0x0101...` and multiply masking word (e.g., `0x80).
2024-05-25 16:39:32 +09:00
Yukihiro "Matz" Matsumoto bff68cbf17 mruby-socket (inet_ntop): refactor addrinfo loop 2024-05-25 16:39:31 +09:00
Yukihiro "Matz" Matsumoto 4e824048c0 mruby-socket: adjust local variable declarations 2024-05-25 16:39:31 +09:00
Yukihiro "Matz" Matsumoto bd7efbe75f string.c: check if the index points character boundary; fix #6267 2024-05-25 16:39:31 +09:00
dearblue b12ea17d0b Improvements to mrb_protect_atexit()
- Initialize the GC arena each time `atexit` is called.
  - To reduce the overhead of `MRB_TRY()`, an internal loop is also performed.
2024-05-25 10:48:16 +09:00
Yukihiro "Matz" Matsumoto f2e1cf2d3c Merge pull request #6272 from mruby/dependabot/github_actions/super-linter/super-linter-6.5.1
build(deps): bump super-linter/super-linter from 6.5.0 to 6.5.1
2024-05-25 07:57:55 +09:00
dependabot[bot] ccc34c37b9 build(deps): bump super-linter/super-linter from 6.5.0 to 6.5.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.5.0 to 6.5.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.5.0...v6.5.1)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-24 14:22:15 +00:00
Yukihiro "Matz" Matsumoto 86f620822f Merge pull request #6269 from mruby/dependabot/github_actions/super-linter/super-linter-6.5.0
build(deps): bump super-linter/super-linter from 6.4.1 to 6.5.0
2024-05-16 07:09:41 +09:00
Yukihiro "Matz" Matsumoto c635456f16 mruby-dir: fix indentation 2024-05-16 07:06:59 +09:00
dependabot[bot] e36f0fd266 build(deps): bump super-linter/super-linter from 6.4.1 to 6.5.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.4.1 to 6.5.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.4.1...v6.5.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-15 14:28:17 +00:00
Yukihiro "Matz" Matsumoto 156c7ecae3 Merge pull request #6266 from dearblue/array-delete
Passes the nonexistent key as a block argument in `Array#delete`
2024-05-14 09:49:36 +09:00
Yukihiro "Matz" Matsumoto 7865593823 mruby-dir: enumerating methods should return enumerators; #6265 2024-05-14 09:42:38 +09:00
Yukihiro "Matz" Matsumoto dd552cee13 Merge pull request #6265 from dearblue/dir-children
Fixes `Dir.children` and `Dir.each_child`
2024-05-14 09:32:51 +09:00
Yukihiro "Matz" Matsumoto 169114666a mruby-io: fix Win32 declaration bugs 2024-05-14 01:34:43 +09:00
Yukihiro "Matz" Matsumoto a147b2c149 Merge pull request #6264 from dearblue/to_enum
Must pass keyword arguments for `Kernel#to_enum`
2024-05-14 01:28:14 +09:00
Yukihiro "Matz" Matsumoto 37e7c071c2 mruby-io: adjust local variable declarations 2024-05-14 01:22:04 +09:00
Yukihiro "Matz" Matsumoto ae6e5b7b5e mruby-method: adjust local variable declaration place 2024-05-13 23:37:21 +09:00
Yukihiro "Matz" Matsumoto 7dee66c5db mruby-fiber: adjust local variable declaration places 2024-05-12 20:34:25 +09:00
dearblue f0cd35c78b Passes the nonexistent key as a block argument in Array#delete
```ruby
a = %w(R G B A)
p a.delete("Y") { _1 }
# BEFORE => nil (same for mruby 3.3)
# AFTER  => "Y" (same for CRuby)
```
2024-05-10 22:46:11 +09:00
dearblue c753ca33d0 Add test for Array#delete 2024-05-10 22:35:13 +09:00
dearblue 12030b3f41 Fixes Dir.children and Dir.each_child
The two methods exclude "." and "..".
2024-05-10 21:54:59 +09:00
dearblue a06e2484e6 Must pass keyword arguments for Kernel#to_enum 2024-05-10 21:50:51 +09:00
Yukihiro "Matz" Matsumoto dcee404ebb mruby-hash-ext: use NONE.equal?() for NONE comparison; ref #6262 2024-05-10 20:40:11 +09:00
Yukihiro "Matz" Matsumoto 4d7ad4863f mruby-enumerator: use NONE.equal?() for NONE comparison; ref #6262 2024-05-10 20:40:11 +09:00
Yukihiro "Matz" Matsumoto 1f80b875c4 mruby-enum-ext: use NONE.equal?() for NONE comparison; ref #6262 2024-05-10 20:40:11 +09:00
Yukihiro "Matz" Matsumoto db30b0636f mruby-array-ext: use NONE.equal?() for NONE comparison; fix #6262
The equal (`==`) method of the comparison target might be redefined
(the root cause of #6262), and not supposed to be compared with NONE.
To reduce chance for the problem, we use `NONE.equal?()` for comparison.
2024-05-10 20:37:01 +09:00
Yukihiro "Matz" Matsumoto 058a4ab5c6 Merge pull request #6263 from leviongit:array/delete
fix: `Array#delete` mistakingly calling block even if not passed
2024-05-10 12:11:53 +09:00
leviongit 67df0aca67 fix: Array#delete mistakingly calling block even if not passed 2024-05-09 14:33:23 +02:00
Yukihiro "Matz" Matsumoto 19d9f48f7d mruby-sleep: update MIT license URL 2024-05-09 17:08:27 +09:00
Yukihiro "Matz" Matsumoto aac9e4cf0d Merge pull request #6261 from leviongit/range/to_a
fix: `to_a` integer ranges with `begin > end` failing
2024-05-09 17:07:51 +09:00
leviongit fff07ca182 fix: to_a integer ranges with begin > end failing
example of failure:
```rb
(-1..-4).to_a
```

expected result:
```rb
(-1..-4).to_a
```
2024-05-08 23:10:28 +02:00
Yukihiro "Matz" Matsumoto 06480f7147 mruby-string-ext: move local variable declarations 2024-05-08 11:29:20 +09:00
Yukihiro "Matz" Matsumoto cf785a6133 mruby-random: move variable declarations to initialization 2024-05-07 17:57:41 +09:00
Yukihiro "Matz" Matsumoto f975794f19 Merge pull request #6260 from dearblue/mrb_vm_exec-exception
Remove `exc_caught` from `mrb_vm_exec()`
2024-05-06 22:55:07 +09:00
dearblue dea5c9e1dc Remove exc_caught from mrb_vm_exec()
Only go to exception handling if `mrb->exc` is non-null.

This may cause some compatibility problems, but I doubt that it is necessary to maintain that compatibility.
Here is how I see the incompatibility with the change at this time:
  - If `mrb->exc` is non-null and `mrb_vm_exec()` is called, an exception will be thrown immediately.
  - If `MRB_THROW()` is used while `mrb->exc` is `NULL`, it will not go to exception handling.
2024-05-05 21:30:18 +09:00
Yukihiro "Matz" Matsumoto 1e61a875ed mruby-data: adjust local variable declarations 2024-05-05 18:56:20 +09:00
Yukihiro "Matz" Matsumoto 0a61a9a76f mruby-struct: adjust local variable declarations 2024-05-05 18:55:42 +09:00
Yukihiro "Matz" Matsumoto c548943a2b mruby-symbol-ext: adjust local variable declarations 2024-05-04 08:30:53 +09:00
Yukihiro "Matz" Matsumoto 86b1c8ff87 string.c (utf8_strlen): add assertion utf8_len <= byte_len 2024-05-03 07:50:40 +09:00
Yukihiro "Matz" Matsumoto aea3e7aedd mruby-sprintf: raise ArgumentError for % at the bottom 2024-05-03 07:46:45 +09:00
Yukihiro "Matz" Matsumoto 4801a424a3 mruby-time: adjust local variable declarations 2024-05-02 19:55:29 +09:00
Yukihiro "Matz" Matsumoto c5314a29b7 mruby-test: move declarations in driver.c and vformat.c 2024-05-01 13:24:32 +09:00
Yukihiro "Matz" Matsumoto 2c8cde2ba7 codedump.c: move variable declarations to initialization place 2024-04-30 22:17:22 +09:00
Yukihiro "Matz" Matsumoto fa213a2d89 string.c (search_nonascii): prevent buffer overrun; ref #6255 2024-04-29 16:35:08 +09:00
Yukihiro "Matz" Matsumoto 714ef4c4fd string.c (mrb_utf8_strlen): handle invalid UTF-8 sequence; fix #6255
Previous SWAR version assumes valid UTF-8 to count number of code points
in the string, but we need to handle invalid sequence as well. We now
use `search_nonascii` to skip counting single byte characters for
performance. The new version is even faster than SWAR version (probably
because `search_nonascii` uses SSE2 on Intel compatible CPU (which I use).
2024-04-29 15:37:22 +09:00
Yukihiro "Matz" Matsumoto c9ae8df2c2 error.c: move variable declaration to initialization 2024-04-29 14:42:49 +09:00
Yukihiro "Matz" Matsumoto 7cea1cd035 Merge pull request #6256 from dearblue/doc/mrb_top_run
Update documentation for `mrb_top_run()`
2024-04-27 14:57:03 +09:00
Yukihiro "Matz" Matsumoto 09896099ee Merge pull request #6257 from jethrodaniel/tiny-mrbconf-doc-updates
fix some mrbconf.md typos
2024-04-27 14:41:50 +09:00
Mark Delk b99536f1fc rm unneeded MRB_NO_GEMS doc addition 2024-04-26 23:33:16 -05:00
Mark Delk f78eab7c3f fix some typos, mention MRB_NO_GEMS 2024-04-26 19:54:07 -05:00
Yukihiro "Matz" Matsumoto 598dca7a08 debug.c: move local variable declarations to initialization place 2024-04-27 08:40:36 +09:00
dearblue a0526418ce Update documentation for mrb_top_run()
Also, add explanations for the `mrb_load_irep()` and `mrb_load_string()` families, which are indirect calls to `mrb_top_run()`.
2024-04-26 22:05:45 +09:00
Yukihiro "Matz" Matsumoto 7edbff8c83 Merge pull request #6253 from dearblue/fiber-sweep
Allow recycling fibers by GC if not referenced directly
2024-04-25 11:34:08 +09:00
Yukihiro "Matz" Matsumoto 22518b5b78 Merge pull request #6244 from dearblue/mrb_vm_run
Revise scope of role of `mrb_vm_run()`
2024-04-24 08:45:29 +09:00
dearblue f1c9260ada Allow recycling fibers by GC if not referenced directly
The patch assumes that `struct REnv::cxt` only performs checks with the `OP_BREAK` and `OP_RETURN_BLK` instructions, and does not reference the entity.
Therefore, by changing to a weak reference, it is possible to collect fibers that are no longer directly referenced while in the suspended state.

However, we need to detach the living env objects that remain in the call stack of the fiber.
So, in effect, it involves a revert of following commits.
  - commit a3365d8b3f
  - commit 57ffa1c150

Examples of the effects of change are shown below.
Note that it was built with `rake MRUBY_CONFIG=host-debug`.

```ruby
f = Fiber.new { (x, y, z) = "X", "Y", "Z"; Fiber.yield -> { [x, y, z] } }
g = f.resume
GC.start
p ObjectSpace.memsize_of_all
# => 59532
g.call
# => ["X", "Y", "Z"]
f = nil
GC.start
ObjectSpace.memsize_of_all
# BEFORE => 59532
# AFTER  => 58044
g.call
# => ["X", "Y", "Z"]
```
2024-04-23 22:30:32 +09:00
dearblue c8c7d1ab23 Don't mrb_realloc_simple() call mrb_full_gc() in the sweep phase
`mrb_env_unshare()` calls `mrb_realloc_simple()` and follows `mrb_full_gc()` to avoid an infinite loop where `mrb_env_unshare()` is called again.
This does not occur at this time, but may occur in subsequent patches.
2024-04-23 22:25:54 +09:00
Yukihiro "Matz" Matsumoto 85120d524a Merge pull request #6250 from jbampton/fix-spelling
Fix spelling
2024-04-23 00:21:59 +09:00
Yukihiro "Matz" Matsumoto 3d32bc11ef Merge pull request #6252 from mruby/dependabot/github_actions/super-linter/super-linter-6.4.1
build(deps): bump super-linter/super-linter from 6.4.0 to 6.4.1
2024-04-23 00:20:28 +09:00
Yukihiro "Matz" Matsumoto 2e4dc20673 Merge pull request #6251 from jbampton/clean-up-root-move-codeowners
Clean up root move `CODEOWNERS` to `.github` directory
2024-04-23 00:18:03 +09:00
dependabot[bot] 2fc2c20155 build(deps): bump super-linter/super-linter from 6.4.0 to 6.4.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.4.0 to 6.4.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.4.0...v6.4.1)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-22 14:37:45 +00:00
John Bampton 5c39e39b8a Clean up root move CODEOWNERS to .github directory
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-file-location
2024-04-22 20:41:41 +10:00
John Bampton 67c5ced277 Fix spelling 2024-04-22 18:00:27 +10:00
Yukihiro "Matz" Matsumoto ca29aa81bd Merge pull request #6247 from jbampton/clean-up-dockerignore
Clean up the `.dockerignore` file
2024-04-22 09:49:52 +09:00
Yukihiro "Matz" Matsumoto 34c8e8253a Merge pull request #6249 from jbampton/fix-grammar
Fix grammar in `src/vm.c`; `catched` -> `caught`
2024-04-22 09:49:19 +09:00
Yukihiro "Matz" Matsumoto 9c2fa6239e Merge pull request #6248 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2024-04-22 09:47:53 +09:00
Yukihiro "Matz" Matsumoto 87b756086f Merge pull request #6246 from jbampton/fix-spelling
Fix typo in `test/t/hash.rb`
2024-04-22 09:47:22 +09:00
Yukihiro "Matz" Matsumoto 5661cf6939 Merge pull request #6245 from jbampton/gha-label-more-files
gha: add labels to more files
2024-04-22 09:46:58 +09:00
John Bampton f9c2ea2f11 Fix grammar in src/vm.c; catched -> caught
Saying 'catched' instead of 'caught' is a grammatical error
2024-04-22 00:01:21 +10:00
John Bampton fef91724cb pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2024-04-21 23:21:46 +10:00
John Bampton 7e8ec85f6b Clean up the .dockerignore file 2024-04-21 22:46:19 +10:00
John Bampton 983a13f342 Fix typo in test/t/hash.rb 2024-04-21 22:21:57 +10:00
John Bampton b71092d440 gha: add labels to more files 2024-04-21 21:32:03 +10:00
dearblue 5aa20f41ef Revise scope of role of mrb_vm_run()
`mrb_vm_run()` is,
  - It does not change the fiber context.
  - When control is returned, only one ci prepared by the caller is popped.
    If the ci equals cibase when called, the ci position does not change.

related commits:
  - commit 4e84bdb507
  - commit 34dd258c63
  - commit ebd6636a1e
  - commit c6736357a7
  - commit 23a4e7149d
  - commit 31a961acf1
2024-04-21 13:30:24 +09:00
Yukihiro "Matz" Matsumoto ad476c3684 Merge pull request #6243 from dearblue/base64 2024-04-21 08:25:56 +09:00
dearblue 6c2f570d79 Fixed base64 decoding in mruby-pack
Previously `\x80` was incorrectly mapped to `0`.

```ruby
"\x80\x80\x80\x80".unpack("m*")
# before => "\x00\x00\x00"
# after  => ""
```

The reason is that the C string terminator is placed in `base64_dec_tab[128]` and the array length is obtained by `sizeof`.
Therefore, the length of `base64_dec_tab[]` is strictly specified and replaced with element-by-element initialization.

Also, similar changes are made to `base64chars[]`.
2024-04-20 09:56:08 +09:00
Yukihiro "Matz" Matsumoto 4a27a18807 dump.c: adjust local variable declarations 2024-04-20 09:54:55 +09:00
Yukihiro "Matz" Matsumoto c445723fa4 enum.c: adjust local variable declaration 2024-04-19 16:20:36 +09:00
Yukihiro "Matz" Matsumoto 8350106896 etc.c: adjust local variable initializations 2024-04-18 15:49:19 +09:00
Yukihiro "Matz" Matsumoto ca26f41b57 mruby-sprintf: remove unnecessary assignment 2024-04-18 15:48:45 +09:00
Yukihiro "Matz" Matsumoto e52b608ed9 Merge pull request #6241 from mruby/dependabot/github_actions/super-linter/super-linter-6.4.0
build(deps): bump super-linter/super-linter from 6.3.1 to 6.4.0
2024-04-18 07:53:16 +09:00
dependabot[bot] e2f7c5daff build(deps): bump super-linter/super-linter from 6.3.1 to 6.4.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.3.1 to 6.4.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.3.1...v6.4.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-17 14:28:32 +00:00
Yukihiro "Matz" Matsumoto c01899a8d3 Merge pull request #6235 from leviongit/array/delete
fix `Array#delete` always firing the block when deleting `nil`
2024-04-16 07:35:59 +09:00
Yukihiro "Matz" Matsumoto aec67dcd17 Merge pull request #6237 from dearblue/env-strict
Stricter env objects to attach to ci
2024-04-15 13:59:32 +09:00
Yukihiro "Matz" Matsumoto 93c02e96d5 Merge pull request #6238 from dearblue/init-stack
Minimize zero initialization of the stack
2024-04-15 13:59:14 +09:00
Yukihiro "Matz" Matsumoto c183e12d68 Merge pull request #6236 from leviongit/array/filters
unify the code for filter methods (and speed up `#reject!`)
2024-04-15 00:05:12 +09:00
Yukihiro "Matz" Matsumoto bc8b76a7a5 cdump.c: adjust local variable declarations 2024-04-15 00:01:11 +09:00
dearblue a4b57aa47b Minimize zero initialization of the stack 2024-04-13 22:22:39 +09:00
dearblue e3d51497cf Stricter env objects to attach to ci
- Don't create multiple envs on one ci.
  - Don't share a env to different ci.
  - Don't attach a closed env to any ci.

Changes in `envadjust()` can be simplified with those guarantees.
2024-04-13 22:13:04 +09:00
Yukihiro "Matz" Matsumoto 3174488851 backtrace.c: remove uninitialized local variable declaration 2024-04-13 16:17:47 +09:00
leviongit 81bb520919 unify the code for filter methods (and speed up #reject!)
the worst case for `Array#reject!` (i.e. a proc always returning `true`)
is at least 5x worse than the worst case for `Array#select!` (proc
always returning `false`)

this commit unifies these implementations and inlines the (effective)
call of `#select!` in `#keep_if` and `#reject!` in `#delete_if`
2024-04-13 08:53:32 +02:00
leviongit bb78c2cbc9 reimplement Array#delete with a helper method 2024-04-13 07:41:00 +02:00
leviongit 312d49c59f reimplement Array#delete in ruby 2024-04-13 07:21:51 +02:00
leviongit c04afb9e99 revert moving Array#delete to c 2024-04-13 06:52:37 +02:00
leviongit d46e9a9480 fix shared array mistake 2024-04-12 18:12:51 +02:00
leviongit 14bd875d70 fix Array#delete
reimplement `Array#delete` in c, fixing `ary.delete(nil, &blk)` firing the block regardless of removal

minimal reproduction:
```rb
ary = [nil]
ret = ary.delete(nil) { "not deleted?" }
```
2024-04-12 17:30:03 +02:00
Yukihiro "Matz" Matsumoto f30e8240d2 array.c: adjust local variable declarations 2024-04-12 18:07:51 +09:00
Yukihiro "Matz" Matsumoto d761561be3 Merge pull request #6233 from dearblue/fiber-end-free
Free stack memory at end of fiber
2024-04-11 23:31:54 +09:00
Yukihiro "Matz" Matsumoto 1c021a5c3a hash.c (obj_eql): simplify the expression 2024-04-11 15:39:45 +09:00
Yukihiro "Matz" Matsumoto 492d8331e1 mruby-io/ext/io.h: reorder struct mrb_io to reduce the size; #6231
The `sizeof(struct mrb_io)` is reduced from 32 bytes to 24 bytes on
x86_64-linux.
2024-04-10 13:35:03 +09:00
Yukihiro "Matz" Matsumoto 0ad669eb80 Merge pull request #6231 from Asmod4n/add_close_fd_to_io
Add a way to let other gems handle closing of fds in mruby-io
2024-04-10 13:29:20 +09:00
Yukihiro "Matz" Matsumoto 6c4f5a34cc Revert "object.c (mrb_eql): avoid mrb_funcall_argv() when possible"
This reverts commit bc012deef9.
Ref #6168
2024-04-10 13:28:28 +09:00
dearblue f3b393272c Free stack memory at end of fiber
Immediately frees the call stack and data stack at the end of a non-root fiber.
If the env object needs to be detached, the data stack is reused through `mrb_realloc()`.

Previously, it was not necessary to take into account that `c->cibase` could be `NULL`.
Note that this is no longer the case due to this patch.
In fact, changes to "mruby-fiber" are now required.
2024-04-09 21:13:32 +09:00
Yukihiro "Matz" Matsumoto 7403cb57ac AUTHORS: update entries [ci skip]
From now on, we exclude merge commits (add `--no-merges` option to
`git shortlog` command in the counting script) to count contribution
fairly.
2024-04-09 08:03:50 +09:00
Yukihiro "Matz" Matsumoto 3ce5f3acbc Merge pull request #6232 from dearblue/free-env
Fold the code for freeing `env`
2024-04-08 23:37:24 +09:00
Yukihiro "Matz" Matsumoto 6eeb06795f Merge pull request #6230 from dearblue/fiber-err-switch
Fix status of fiber after switched by exception raised
2024-04-08 23:37:09 +09:00
Yukihiro "Matz" Matsumoto f3f7df0da0 vm.c: update ci after switching context
0614a1 removed too much `ci` updates, as @dearblue pointed out.
2024-04-08 08:38:23 +09:00
Asmod4n 96b5cd757d Add a way to let other gems handle closing of FDs 2024-04-07 13:46:11 +02:00
dearblue 1a9282914e Fold the code for freeing env
Also, `e->stack = NULL` is not needed.
This is because "use-after-free" can be detected with `MRB_DEBUG` + `MRB_GC_STRESS`.
2024-04-07 20:45:10 +09:00
dearblue 4956584ff1 Fix status of fiber after switched by exception raised
The state of a fiber switched due to an exception occurrence was incorrectly set to "Suspended".

```ruby
Fiber.new {
  begin
    Fiber.new { 0 / 0 }.resume
  rescue
    p Fiber.current
    # before  => #<Fiber:0x159f61e43ce0 fiber.rb:1 (suspended by resuming)>
    # after   => #<Fiber:0x159f61e43ce0 fiber.rb:1 (resumed)>
  end
}.resume
```
2024-04-07 20:08:12 +09:00
dearblue 307812ff20 Revert "env referred from top-level callinfo should not be unshared; fix #4019"
This reverts commit 72581696d3.

The #4012 that may have been the trigger for issue #4019 was later reverted by #4039 due to issue #4021.
2024-04-06 08:59:51 +09:00
Yukihiro "Matz" Matsumoto d503d9b113 Merge pull request #6229 from mruby/dependabot/bundler/rake-13.2.1
build(deps): bump rake from 13.2.0 to 13.2.1
2024-04-06 08:51:07 +09:00
dependabot[bot] b174ea5847 build(deps): bump rake from 13.2.0 to 13.2.1
Bumps [rake](https://github.com/ruby/rake) from 13.2.0 to 13.2.1.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.2.0...v13.2.1)

---
updated-dependencies:
- dependency-name: rake
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-05 14:52:46 +00:00
Yukihiro "Matz" Matsumoto 47642f70cb Merge pull request #6227 from leviongit/array/shuffle_b
fix: `Array#shuffle(!)` result distribution
2024-04-05 08:33:04 +09:00
Yukihiro "Matz" Matsumoto 88792e0d9a Merge pull request #6226 from mruby/dependabot/github_actions/super-linter/super-linter-6.3.1
build(deps): bump super-linter/super-linter from 6.3.0 to 6.3.1
2024-04-05 08:19:12 +09:00
leviongit ad62d7809e fix: Array#shuffle(!) result distribution 2024-04-04 20:36:44 +02:00
dependabot[bot] e610322a47 build(deps): bump super-linter/super-linter from 6.3.0 to 6.3.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.3.0...v6.3.1)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-04 14:33:40 +00:00
Yukihiro "Matz" Matsumoto d3e4450917 Merge pull request #6225 from dearblue/revert-3991
Revert "Adjust environment when `mrb_exec_irep` happened."
2024-04-04 08:19:57 +09:00
Yukihiro "Matz" Matsumoto d8a3406132 Merge pull request #6224 from dearblue/orphan-env
`mrb_env_unshare()` to break the link to fiber
2024-04-04 08:19:08 +09:00
Yukihiro "Matz" Matsumoto c42f4e1d2c Merge pull request #6191 from leviongit/sym-eql
Speed up symbol equality comparison
2024-04-04 07:35:54 +09:00
dearblue 28d31262e5 Revert "Adjust environment when mrb_exec_irep happened."
This reverts commit 26e436e247.

After investigation, it is possible to revert by commit e89cc9b9fa.

The build configuration file used in the investigation is shown below.

```ruby
MRuby::Build.new do |conf|
  toolchain :clang

  enable_debug
  enable_bintest
  enable_test

  cc.command = "clang18"
  linker.command = "clang18"

  [cc, cxx].each { |c| c.defines << "MRB_GC_STRESS" }
  [cc, cxx, linker].each { |cmd| cmd.flags << %w(-fsanitize=address) }

  gem github: "iij/mruby-dir"       # rev: "89dceefa1250fb1ae868d4cb52498e9e24293cd1"
  gem github: "iij/mruby-env"       # rev: "056ae324451ef16a50c7887e117f0ea30921b71b"
  gem github: "iij/mruby-errno"     # rev: "b4415207ff6ea62360619c89a1cff83259dc4db0"
  gem github: "iij/mruby-require"   # rev: "f0634d785e5cbb73cd7d118ee36deff499e4181e"
  gem github: "iij/mruby-tempfile"  # rev: "9b883438547020dae328e34c8a2fe736171cd0ab"
end
```

Since the `rake` command needs to be from the past, we used the Ruby 2.6 version.
2024-04-03 22:04:25 +09:00
dearblue 96d56debc7 mrb_env_unshare() to break the link to fiber
Currently `e->cxt` is used exclusively to check for `break` / `return` availability.
In other words, there is no need to maintain a reference to a fiber that has reached its end.
2024-04-03 21:54:53 +09:00
Yukihiro "Matz" Matsumoto 88004e44af Merge pull request #6223 from mruby/dependabot/bundler/rake-13.2.0
build(deps): bump rake from 13.1.0 to 13.2.0
2024-04-03 08:15:45 +09:00
dependabot[bot] bb7370b59a build(deps): bump rake from 13.1.0 to 13.2.0
Bumps [rake](https://github.com/ruby/rake) from 13.1.0 to 13.2.0.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.1.0...v13.2.0)

---
updated-dependencies:
- dependency-name: rake
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-02 14:38:41 +00:00
Yukihiro "Matz" Matsumoto aa28f48c3b string.c (search_nonascii): simplify fallback implementation by SWAR 2024-04-02 19:50:13 +09:00
Yukihiro "Matz" Matsumoto 898d1ff11e proc.h: simplify method macros; ref #6220
- MRB_METHOD_CFUNC_P: reduce ternary; use logical-or instead
- MRB_METHOD_CFUNC: assume MRB_METHOD_CFUNC_P check before call
2024-04-01 07:33:28 +09:00
Yukihiro "Matz" Matsumoto 4982999e07 Merge pull request #6221 from dearblue/arrange-each_backtrace
Arranging `each_backtrace()`
2024-03-31 21:44:56 +09:00
Yukihiro "Matz" Matsumoto 586ce04cee Merge pull request #6222 from dearblue/sync-regs
Need to synchronize `dbg->regs` after VM call in `mrdb`
2024-03-31 21:41:16 +09:00
Yukihiro "Matz" Matsumoto 423026353d Merge pull request #6220 from dearblue/methodcache
Reorganize `mrb_cache_entry` and `mrb_method_t` types
2024-03-31 21:36:19 +09:00
dearblue 8dfebe8d12 Need to synchronize dbg->regs after VM call in mrdb
VM inrush could invalidate addresses stored in `dbg->regs` by `stack_extend()`.
2024-03-31 11:53:09 +09:00
dearblue 9b8b864be1 Arranging each_backtrace()
Highlights are:
  - `Integrate the blocks `if (!ci->proc || MRB_PROC_CFUNC_P(ci->proc))` and `if (loc.irep == NULL)`.
  - Folding some other conditionals.
  - Assertions ensure that procs are not aliases.
2024-03-31 09:53:16 +09:00
Yukihiro "Matz" Matsumoto 2fbd49903b LEGAL: update memsearch_swar description 2024-03-30 23:06:03 +09:00
Yukihiro "Matz" Matsumoto cbb31e6a7c string.c (mrb_utf8_strlen): use SWAR technique for performance 2024-03-30 22:50:12 +09:00
dearblue 328eb71e52 Reorganize mrb_cache_entry and mrb_method_t types
The purpose is to remove the `mid` field from the `mrb_cache_entry` structure.
The resulting RAM requirement for the method cache is reduced from 5 words per entry to 4 words per entry for 32-bit CPUs.

The relevant changes are as follows:

  - Removed `MRB_USE_METHOD_T_STRUCT`.

    The `mrb_method_t` type is now always defined as a structure.

  - Include method IDs in `mrb_method_t`

    Change the `flags` member to `uint32_t`.
    The bitstring structure should be the same as the keys of the `mt` table in `class.c`.

I believe the impact on API compatibility with previous versions is minimal.
2024-03-30 18:19:26 +09:00
Yukihiro "Matz" Matsumoto 61b1a4db8e Merge pull request #6219 from dearblue/fixed-to-out
Avoid assigning a fixed value in the loop
2024-03-29 23:55:05 +09:00
Yukihiro "Matz" Matsumoto 27061e4d58 Merge pull request #6216 from dearblue/shared-class-iv
Shared empty `iv_tbl` of module
2024-03-29 23:12:32 +09:00
dearblue 3d91ae28f5 Avoid assigning a fixed value in the loop 2024-03-29 22:26:46 +09:00
Yukihiro "Matz" Matsumoto f0614a1e0c vm.c: remove unnecessary update of ci local variable 2024-03-29 21:22:37 +09:00
Yukihiro "Matz" Matsumoto f54ff74f9b vm.c: add volatile to a variable across setjmp/longjmp 2024-03-29 21:22:37 +09:00
Yukihiro "Matz" Matsumoto c54bf673a9 vm.c: remove unused initializations 2024-03-29 21:22:36 +09:00
Yukihiro "Matz" Matsumoto 5b133e42cc Merge pull request #6217 from dearblue/mrb_istruct_size
Strict declaration for `mrb_istruct_size()`
2024-03-28 15:29:25 +09:00
dearblue 1c1c67b878 Strict declaration for mrb_istruct_size()
In C, `void` is required if there are no parameters.
2024-03-27 22:01:18 +09:00
dearblue f1c0752ab8 Shared empty iv_tbl of module
This will be a partial merge of #5317 with the following changes.

- Remove `iclass->iv_c` since `iclass->iv_c` is equivalent to `iclass->c`.
- `class_iv_ptr()` returns a single pointer instead of a double pointer.
2024-03-27 21:39:32 +09:00
Yukihiro "Matz" Matsumoto ef94bfc2e6 proc.c (closure_setup): fix NULL check logic
It used to check ci to be non NULL in line 37, but we silently assumed
ci was not NULL in the `else` clause too. So instead of checking NULL,
we add assertion. This incomplete check was found by clang-tidy.
2024-03-26 14:00:00 +09:00
Yukihiro "Matz" Matsumoto b42b8480d1 vm.c: adjust spacing 2024-03-26 14:00:00 +09:00
Yukihiro "Matz" Matsumoto a97c27358e class.c (prepare_name_common): remove unnecessary pointer update 2024-03-26 14:00:00 +09:00
Yukihiro "Matz" Matsumoto 07f9f9b4be gc.c (mrb_alloca): add const modifier 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 87b358a342 Including header files in include/* by <> 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 0786b24528 proc.h: stop including khash.h which is no longer used
Instead, we need to include <string.h> explicitly.
2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 81e8617d02 mruby-metaprog: explicitly include khash.h which was included from proc.h 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto a8977f713d class.c,variable.c: use mrb_int_hash_func instead of kh_ version 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 96fa3461f0 mruby.h: move integer hash function from khash.h 2024-03-26 13:59:58 +09:00
Yukihiro "Matz" Matsumoto 3ccc98fa32 Merge pull request #6215 from mruby/dependabot/bundler/rake-13.1.0
build(deps): bump rake from 13.0.6 to 13.1.0
2024-03-26 12:05:29 +09:00
dependabot[bot] 86155d8ab4 build(deps): bump rake from 13.0.6 to 13.1.0
Bumps [rake](https://github.com/ruby/rake) from 13.0.6 to 13.1.0.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.0.6...v13.1.0)

---
updated-dependencies:
- dependency-name: rake
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-26 02:12:45 +00:00
Yukihiro "Matz" Matsumoto a7aa7a8772 Merge pull request #6205 from jbampton/gha-label-more-files
GitHub labeler: label more files
2024-03-26 11:12:40 +09:00
Yukihiro "Matz" Matsumoto 24c60895cd Merge pull request #6214 from jbampton/add-more-comments
Improve the `pre-commit` and `.github` YAML files
2024-03-26 11:12:06 +09:00
Yukihiro "Matz" Matsumoto 4cdbddb3b0 Merge pull request #6213 from jbampton/add-pre-commit-hook-destroyed-symlinks
Add `pre-commit` hook `destroyed-symlinks`
2024-03-26 11:11:06 +09:00
John Bampton e26d33caf5 GitHub labeler: label more files
These are some of the config files for the linters/tests that run
2024-03-24 04:36:09 +10:00
John Bampton cc6d25dc29 Improve the pre-commit and .github YAML files 2024-03-23 22:46:19 +10:00
John Bampton 2e9f79409a Add pre-commit hook destroyed-symlinks
https://github.com/pre-commit/pre-commit-hooks?tab=readme-ov-file#destroyed-symlinks

Another check or test we can have
2024-03-23 20:46:11 +10:00
Yukihiro "Matz" Matsumoto a810b9bca8 mruby-compiler/codegen.c: stop too aggressive optimization; fix #6210
The old code assumes unary minus (`-@`) does not cause any side effect
(including errors). Considering the code like `-nil; nil`, the
assumption was too aggressive.
2024-03-19 13:38:05 +09:00
Yukihiro "Matz" Matsumoto 7404fab8fb Merge pull request #6211 from jbampton/clean-up-git-ignore
Minor `.gitignore` clean up; order entries
2024-03-19 13:13:38 +09:00
John Bampton 0541713b6b Minor .gitignore clean up; order entries 2024-03-19 12:51:37 +10:00
Yukihiro "Matz" Matsumoto 07fd080321 Merge pull request #6208 from jbampton/clean-up-the-pre-commit-config
Clean up the `pre-commit` config
2024-03-18 14:57:32 +09:00
Yukihiro "Matz" Matsumoto 35cf1abd4e Merge pull request #6209 from jbampton/clean-up-gitignore
Minor `.gitignore` clean up
2024-03-17 23:57:33 +09:00
John Bampton 7ac2773a84 Minor .gitignore clean up 2024-03-16 20:40:49 +10:00
John Bampton f18d8888ba Clean up the pre-commit config
Removal of unneeded files / file types

Clean up the repo root folder by moving `codespell.txt`
2024-03-16 20:03:21 +10:00
Yukihiro "Matz" Matsumoto 4da5d025d3 Merge pull request #6206 from dearblue/table-expansion
Simplify expansion of mt and iv a bit
2024-03-16 08:17:42 +09:00
Yukihiro "Matz" Matsumoto eb57432d03 Bump yard from 0.9.28 to 0.9.36 2024-03-15 23:52:00 +09:00
Yukihiro "Matz" Matsumoto 53c38db2fc Merge pull request #6200 from jbampton/super-linter-validate-dockerfile
super-linter: validate the `Dockerfile` with `hadolint`
2024-03-15 23:38:22 +09:00
Yukihiro "Matz" Matsumoto b913824d47 range.c (mrb_gc_mark_range): return size
If not initialized, size is zero, otherwise two.
2024-03-15 23:36:30 +09:00
dearblue 227ebb9daa Simplify expansion of mt and iv a bit 2024-03-14 22:12:35 +09:00
Yukihiro "Matz" Matsumoto f13daee2f5 class.c (mrb_gc_mark_mt_size) unify with mrb_gc_mark_mt 2024-03-14 11:58:00 +09:00
Yukihiro "Matz" Matsumoto 2cb3f1d9e5 hash.c (mrb_gc_mark_hash_size): unify with mrb_gc_mark_hash 2024-03-14 11:52:25 +09:00
Yukihiro "Matz" Matsumoto 63900814b9 variable.c (mrb_gc_mark_iv_size): unify the function with mrb_gc_mark_iv 2024-03-14 11:49:47 +09:00
Yukihiro "Matz" Matsumoto e8525df576 gc.c (gc_gray_counts): unify the function with gc_mark_children
Avoid traversing object repeatedly.
2024-03-14 11:44:06 +09:00
Yukihiro "Matz" Matsumoto 2b597c596c Merge pull request #6180 from jbampton/super-linter-validate-github-actions
super-linter: set `VALIDATE_GITHUB_ACTIONS` to `true`
2024-03-13 10:14:49 +09:00
John Bampton 107b6f7d30 super-linter: set VALIDATE_GITHUB_ACTIONS to true
Flag to enable the linting process of the GitHub Actions.

Another check or test we can have.

https://github.com/super-linter/super-linter?tab=readme-ov-file#configure-super-linter

Lint shell script. Tested with ShellCheck

https://www.shellcheck.net/
2024-03-13 10:37:40 +10:00
Yukihiro "Matz" Matsumoto 9bbefd3979 Merge pull request #6204 from jbampton/editorconfig-clean-up
Clean up the `.editorconfig` file
2024-03-13 09:08:59 +09:00
Yukihiro "Matz" Matsumoto 31d85c20db Merge pull request #6202 from jbampton/clean-yardoc-folder
Remove the `.yardoc` folder with `rake doc:clean:api`
2024-03-13 09:08:07 +09:00
Yukihiro "Matz" Matsumoto ea7c067bd0 Merge pull request #6201 from jbampton/standardize-rake-doc-error-message
tasks/doc.rake: standardize the `rake doc` error messages
2024-03-13 09:07:24 +09:00
Yukihiro "Matz" Matsumoto aa247d3e14 Merge pull request #6199 from jbampton/configure-pre-commit
pre-commit: fix the arguments syntax
2024-03-13 09:06:17 +09:00
Yukihiro "Matz" Matsumoto faf76b6b7f Merge pull request #6198 from mruby/dependabot/github_actions/softprops/action-gh-release-2
build(deps): bump softprops/action-gh-release from 1 to 2
2024-03-12 08:22:37 +09:00
Yukihiro "Matz" Matsumoto 168eb8c267 readint.c (mrb_read_int): narrow scope of a local variable 2024-03-12 08:21:27 +09:00
John Bampton 774ee3c760 Clean up the .editorconfig file 2024-03-12 08:41:33 +10:00
John Bampton 5895e8ebeb Remove the .yardoc folder with rake doc:clean:api 2024-03-12 06:43:35 +10:00
John Bampton d2206cd359 tasks/doc.rake: standardize the rake doc error messages 2024-03-12 05:30:54 +10:00
John Bampton e266ea760f super-linter: validate the Dockerfile with hadolint
https://github.com/super-linter/super-linter?tab=readme-ov-file#configure-super-linter

https://github.com/hadolint/hadolint

https://github.com/hadolint/hadolint?tab=readme-ov-file#configure

https://github.com/hadolint/hadolint/wiki/DL3042
2024-03-12 04:40:27 +10:00
John Bampton 3b3f8b1196 pre-commit: fix the arguments syntax
https://github.com/igorshubovych/markdownlint-cli?tab=readme-ov-file#use-with-pre-commit

https://yamllint.readthedocs.io/en/stable/integration.html#integration-with-pre-commit
2024-03-12 01:55:21 +10:00
dependabot[bot] c56e61ebbd build(deps): bump softprops/action-gh-release from 1 to 2
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 14:43:56 +00:00
Yukihiro "Matz" Matsumoto db8368fa86 numeric.c: remove bit operations methods from Float class; #6197
mruby used to use float numbers for overflown integers before we
implemented big integers. Now we don't need bit operations for float
numbers anymore. Also removed tests for shift operations for float
numbers.
2024-03-11 11:44:41 +09:00
Yukihiro "Matz" Matsumoto 39e3db20af Merge pull request #6197 from niyarin/fix/call-flo_xor
Fix int_xor to call flo_xor.
2024-03-11 11:44:17 +09:00
Yukihiro "Matz" Matsumoto 95765c8193 mruby-time: mrb_time_at is an API function; close #6195
5265e35 was wrong. Should not remove `mrb_` prefix from the function.
2024-03-11 09:48:32 +09:00
niyarin af8e772b9e Fix int_xor to call flo_xor. 2024-03-10 12:13:34 +09:00
leviongit deb133c8ef use a type-check macro instead of mrb_type comparison 2024-03-09 13:56:21 +01:00
leviongit d1b3198109 remove redundant function definition 2024-03-09 13:41:58 +01:00
Yukihiro "Matz" Matsumoto 44edd3438b gc.c: remove unused local variable; ref #6194 2024-03-09 14:29:42 +09:00
Yukihiro "Matz" Matsumoto 4b312bdb2f debug.c: narrow scope of local variables 2024-03-09 14:29:42 +09:00
Yukihiro "Matz" Matsumoto 678bdd2c4b cdump.c (sym_operator_name): narrow scope of local variables 2024-03-09 14:29:42 +09:00
Yukihiro "Matz" Matsumoto 3699f013ac Merge pull request #6193 from dearblue/c-epilogue-assert
Fix wrong assertion in `OP_SENDB`.
2024-03-09 13:23:33 +09:00
Yukihiro "Matz" Matsumoto f1f022bd1a Merge pull request #6194 from dearblue/count-closures
Simplify the calculation of the number of closures in `MRB_TT_FIBER`
2024-03-09 13:22:47 +09:00
Yukihiro "Matz" Matsumoto 6c73defb26 Merge pull request #6192 from dearblue/OP_STOP
Fix `OP_STOP` with exception
2024-03-09 13:21:13 +09:00
dearblue cb36398d30 Simplify the calculation of the number of closures in MRB_TT_FIBER 2024-03-08 22:06:08 +09:00
dearblue 9616971c70 Fix wrong assertion in OP_SENDB.
Assertions were failing on exit if started with `mrb_fiber_resume()`.

The bug that caused it was introduced by commit 42308c42b5 (#6106).
The bug was moved by commit 990e18ad59.
2024-03-08 21:56:00 +09:00
dearblue 4380773666 Fix OP_STOP with exception
Previously, `mrb->exc` would remain replaced by a `break` object if a rewind operation was performed during the processing of a `OP_STOP` instruction.
This problem has existed since #5060, when it was introduced in mruby-3.0.

However, as of mruby-3.0, a manual or third-party generator is required to cause the `OP_STOP` instruction to be issued.
Therefore, it is believed that this has not had an impact until now.
2024-03-08 21:50:46 +09:00
leviongit af06d54843 Speed up symbol equality comparison 2024-03-07 16:22:35 +01:00
Yukihiro "Matz" Matsumoto 9257a61b39 Merge pull request #6137 from dearblue/fiber-unreachable
Remove unreachable blocks in `OP_RETURN`
2024-03-07 16:13:56 +09:00
Yukihiro "Matz" Matsumoto a8694bdefb Merge pull request #6184 from dearblue/L_STOP
Remove the `L_STOP` label
2024-03-06 18:02:34 +09:00
Yukihiro "Matz" Matsumoto 01373a9db0 Merge pull request #6188 from mruby/dependabot/github_actions/super-linter/super-linter-6.3.0
build(deps): bump super-linter/super-linter from 6.2.0 to 6.3.0
2024-03-06 18:01:05 +09:00
Yukihiro "Matz" Matsumoto 130ec9cd90 backtrace.c (mrb_unpack_backtrace): need no NULL check 2024-03-05 12:24:49 +09:00
Yukihiro "Matz" Matsumoto 0ca4ab886f AUTHORS: update entries [ci skip] 2024-03-04 13:01:21 +09:00
Yukihiro "Matz" Matsumoto 439a895f46 symbol.c: use post increment if possible (just style matter) 2024-03-04 13:01:21 +09:00
Yukihiro "Matz" Matsumoto d840274805 symbol.c: narrow scope of local variables 2024-03-04 13:01:20 +09:00
Yukihiro "Matz" Matsumoto aa0cb370a8 kernel.c (mrb_obj_is_instance_of): add const qualifier 2024-03-04 13:01:20 +09:00
Yukihiro "Matz" Matsumoto b023017a0d Merge pull request #6190 from jbampton/label-more-files
Pull Request Labeler: Add labels to more files
2024-03-04 13:01:04 +09:00
Yukihiro "Matz" Matsumoto 861bf778b5 Merge pull request #6189 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2024-03-04 12:59:42 +09:00
John Bampton 6dd3f27634 Pull Request Labeler: Add labels to more files 2024-03-02 13:51:09 +10:00
John Bampton fc13411c61 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2024-03-02 13:37:00 +10:00
dependabot[bot] 7864112f96 build(deps): bump super-linter/super-linter from 6.2.0 to 6.3.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.2.0...v6.3.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-29 14:35:04 +00:00
Yukihiro "Matz" Matsumoto b0d11ddb4e error.c (mrb_sys_fail): narrow scope of local variables 2024-02-29 19:14:19 +09:00
Yukihiro "Matz" Matsumoto a0d10c0384 pool.c (mrb_pool_close): narrow scope of a local variable 2024-02-29 19:14:19 +09:00
Yukihiro "Matz" Matsumoto 371b13a32e dump.c: inline loop variables (with small refactoring) 2024-02-29 19:14:18 +09:00
Yukihiro "Matz" Matsumoto 099d01c751 class.c (mrb_mod_module_function): narrow scope of local variables 2024-02-29 19:14:18 +09:00
Yukihiro "Matz" Matsumoto 11d7c74e50 Merge pull request #6185 from dearblue/keep_context
Added `mrb_callinfo::u.keep_context` for clarity
2024-02-29 19:13:59 +09:00
Yukihiro "Matz" Matsumoto 0673563968 Merge pull request #6186 from dearblue/check-env.cxt
Omit NULL check of `e->cxt` in `OP_RETURN_BLK`
2024-02-25 23:46:16 +09:00
Yukihiro "Matz" Matsumoto ab94f6533d Revert "gha: add macOS 14 to the build"
This reverts commit 9b9cbd77b0.
2024-02-24 23:31:28 +09:00
Yukihiro "Matz" Matsumoto 8130bbc479 string.c (mrb_str_len_to_dbl): should return zero for invalid string
We should not use uninitialized value; fix #6183
2024-02-24 23:03:15 +09:00
dearblue e94eef6f98 Omit NULL check of e->cxt in OP_RETURN_BLK
Since `mrb->c` is never `NULL`, there is no need to check it beforehand.
2024-02-24 21:38:51 +09:00
dearblue ce8b2d4973 Added mrb_callinfo::u.keep_context for clarity 2024-02-24 21:32:11 +09:00
dearblue c7af3d48e3 Remove the L_STOP label
The post-processing of the jump source is decided, and it is more natural to deploy it on the spot.
2024-02-24 18:23:33 +09:00
Yukihiro "Matz" Matsumoto 6248e9c2ef Merge pull request #6155 from dearblue/jmpbuf_id
Removed `mrb_jmpbuf_id` for C++ exceptions
2024-02-23 23:51:45 +09:00
Yukihiro "Matz" Matsumoto 72f956d3e0 readfloat.c: remove unused local variable 2024-02-22 10:40:24 +09:00
Yukihiro "Matz" Matsumoto 643d91d566 Merge pull request #6181 from mruby/dependabot/github_actions/super-linter/super-linter-6.2.0
build(deps): bump super-linter/super-linter from 6.1.1 to 6.2.0
2024-02-22 10:32:22 +09:00
dependabot[bot] d4eb58c824 build(deps): bump super-linter/super-linter from 6.1.1 to 6.2.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.1.1 to 6.2.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.1.1...v6.2.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-21 14:50:07 +00:00
Yukihiro "Matz" Matsumoto 49f8c9be5b Merge pull request #6177 from jbampton/test-on-macOS14
gha: add macOS 14 to the build
2024-02-20 12:16:47 +09:00
Yukihiro "Matz" Matsumoto 88c7e14d24 Merge pull request #6179 from jbampton/link-check-ignore-links
pre-commit: add `markdown-link-check` config and ignore links
2024-02-20 12:15:51 +09:00
Yukihiro "Matz" Matsumoto dde8b37331 Merge pull request #6178 from jbampton/super-linter-validate-gitleaks
super-linter: set `VALIDATE_GITLEAKS` to `true`
2024-02-20 12:15:13 +09:00
John Bampton 8772592fa2 pre-commit: add markdown-link-check config and ignore links
https://github.com/tcort/markdown-link-check?tab=readme-ov-file#config-file-format
2024-02-20 12:28:16 +10:00
John Bampton ae8419dba7 super-linter: set VALIDATE_GITLEAKS to true
Flag to enable the linting process of the secrets.

Just another check or test we can have.

Set VALIDATE_ALL_CODEBASE: true

https://github.com/super-linter/super-linter?tab=readme-ov-file#configure-super-linter
2024-02-20 12:11:19 +10:00
John Bampton 6f8ae1cbb3 Update .github/workflows/build.yml 2024-02-20 11:07:47 +10:00
John Bampton 9b9cbd77b0 gha: add macOS 14 to the build
https://github.com/actions/runner-images?tab=readme-ov-file#available-images
2024-02-20 10:58:00 +10:00
Yukihiro "Matz" Matsumoto 2f77f2b525 Merge pull request #6133 from dearblue/auto-release
Create source code packages by adding release tags
2024-02-19 22:20:43 +09:00
Yukihiro "Matz" Matsumoto 9e9545b1a6 Merge pull request #6176 from dearblue/alias-proc
Stop assuming alias proc in `CI_PROC_SET()`
2024-02-18 22:13:30 +09:00
Yukihiro "Matz" Matsumoto 1bb93e74a0 Merge pull request #6175 from dearblue/mrb_vm_run-cond
Corrected strange conditional in `mrb_vm_run()`
2024-02-18 22:11:45 +09:00
dearblue f5cce68ba6 Stop assuming alias proc in CI_PROC_SET()
Resolving alias proc should be done by the caller of `CI_PROC_SET()`.
The same applies to `mrb_vm_ci_proc_set()`.
2024-02-18 21:09:45 +09:00
dearblue 2c66d34a7e Corrected strange conditional in mrb_vm_run()
This was introduced in commit 365c151df0.
I should have checked env first.
2024-02-18 18:18:21 +09:00
Yukihiro "Matz" Matsumoto 10de08fa4e Merge pull request #6174 from dearblue/mruby-config-dir
Fix `MRUBY_PACKAGE_DIR` in `mruby-config.bat`
2024-02-17 23:21:01 +09:00
dearblue 06e791e1d7 Fix MRUBY_PACKAGE_DIR in mruby-config.bat
Previously, the correct directory could not be obtained in some environments.
Therefore, changed the method to leave an element indicating the parent directory.

fix #6156
2024-02-17 11:14:57 +09:00
Yukihiro "Matz" Matsumoto 4855e50cbe Merge pull request #6172 from mruby/dependabot/github_actions/super-linter/super-linter-6.1.1
build(deps): bump super-linter/super-linter from 6.0.0 to 6.1.1
2024-02-16 08:14:18 +09:00
Yukihiro "Matz" Matsumoto 7d199b7256 src/error.h: remove unused header 2024-02-16 08:10:53 +09:00
Yukihiro "Matz" Matsumoto a1be05e79f src/opcode.h: remove unused header 2024-02-16 08:09:58 +09:00
dependabot[bot] aebc951533 build(deps): bump super-linter/super-linter from 6.0.0 to 6.1.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 6.0.0 to 6.1.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v6.0.0...v6.1.1)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-15 14:43:54 +00:00
Yukihiro "Matz" Matsumoto c37e76ec75 Merge pull request #6171 from buty4649/add-enumrable-lazy-grep_v
Add Enumerable::Lazy#grep_v to mruby-enum-lazy
2024-02-15 15:49:30 +09:00
buty4649 031476a853 mruby-enum-lazy: add grep_v method 2024-02-15 14:55:38 +09:00
Yukihiro "Matz" Matsumoto 3eeeb8fabf string.c (memsearch_swar): skip a local variable 2024-02-15 14:01:49 +09:00
Yukihiro "Matz" Matsumoto 55ca34c31b backtrace.c (mrb_print_backtrace): skip a local variable 2024-02-15 14:01:48 +09:00
Yukihiro "Matz" Matsumoto c3f8227c6d mruby.h: adjust comment offset [ci skip] 2024-02-15 14:01:48 +09:00
Yukihiro "Matz" Matsumoto 9e1ed100ce Merge pull request #6169 from mruby/stable
Merge mruby 3.3.0
2024-02-15 14:01:28 +09:00
mimaki 94062b4356 Merge branch 'master' into stable 2024-02-14 19:01:59 +09:00
mimaki 32279e4128 Update version and release date. (mruby 3.3.0 (2024-02-14)) 2024-02-14 13:25:11 +09:00
Yukihiro "Matz" Matsumoto 06466fd2e0 Merge branch 'dearblue-doc/mruby3.3.md' 2024-02-14 09:29:54 +09:00
Yukihiro "Matz" Matsumoto 9c840a68e2 string.c (memsearch_swar): boundary check by the latest position 2024-02-13 22:36:03 +09:00
Yukihiro "Matz" Matsumoto 6810423da1 backtrace.c (mrb_print_backtrace): avoid backtrace to array conversion
Made print_backtrace() to support both array form and packed backtrace
form, so that we can avoid allocating an array.
2024-02-13 16:18:14 +09:00
Yukihiro "Matz" Matsumoto 441de05376 error.h: use RBasic instead of RObject for generic objects
RObject is type for objects with instance variables. For generic
objects, use RBasic.
2024-02-13 11:05:27 +09:00
Yukihiro "Matz" Matsumoto f285420653 backtrace.c (decode_location): decode packed backtrace location on demand. 2024-02-13 00:07:54 +09:00
Yukihiro "Matz" Matsumoto a3da9c1da3 AUTHORS: update entries [ci skip] 2024-02-12 00:02:35 +09:00
Yukihiro "Matz" Matsumoto d2af9da799 Merge branch 'dearblue-doc/mruby3.3.md' 2024-02-10 17:08:57 +09:00
Yukihiro "Matz" Matsumoto 01ff7fbf0a Update mruby3.3.md 2024-02-10 17:05:55 +09:00
Yukihiro "Matz" Matsumoto 2d2693d823 Merge branch 'doc/mruby3.3.md' of https://github.com/dearblue/mruby into dearblue-doc/mruby3.3.md 2024-02-10 16:49:56 +09:00
Yukihiro "Matz" Matsumoto abcad36bae string.c (memsearch_swar): fixed a buffer overflow 2024-02-09 19:09:01 +09:00
Yukihiro "Matz" Matsumoto 868aeaf48c string.c (memsearch_swar): fixed a buffer overflow 2024-02-09 18:52:44 +09:00
Yukihiro "Matz" Matsumoto 874f1e0138 backtrace.c (copy_location): rename some function and arguments 2024-02-08 23:41:22 +09:00
Yukihiro "Matz" Matsumoto 432caf0670 backtrace.c (pack_backtrace): refactor the function that called once 2024-02-08 23:22:48 +09:00
Yukihiro "Matz" Matsumoto 60919807e5 backtrace.c (each_backtrace): make return type to size_t 2024-02-07 17:34:33 +09:00
Yukihiro "Matz" Matsumoto 0a11215452 backtrace.c (packed_backtrace): avoid calling each_backtrace() twice
Since the length of the backtrace is at most `ciidx + 1` we can avoid
the first call of each_backtrace().
2024-02-07 17:32:58 +09:00
Yukihiro "Matz" Matsumoto b67cea4442 backtrace.c (pack_backtrace_i): avoid infinite loop; ref #6161
When irep->refcnt reaches UINT16_MAX, mrb_irep_incref() raises
exception but the function pack_backtrace_i() is called from
mrb_exc_raise() thus causes the infinite loop problem. So this is a
hack-ish workaround by making irep reference to NULL if refcnt reaches
the maximum count. Probably we will address this issue again to make it
better.
2024-02-07 17:30:11 +09:00
Yukihiro "Matz" Matsumoto b8e4c4b6ba Merge pull request #6166 from dearblue/mrb_heap_page
Stop pseudo flexible array in `mrb_heap_page`
2024-02-05 21:45:04 +09:00
Yukihiro "Matz" Matsumoto 32fb0c04ee Merge pull request #6165 from dearblue/RVALUE
Reduce `RVALUE` related pointer casts.
2024-02-05 21:42:51 +09:00
Yukihiro "Matz" Matsumoto 5f699e797d Merge pull request #6167 from dearblue/obj_free
Change the `end` parameter of `obj_free()` to a boolean type
2024-02-05 21:42:41 +09:00
Yukihiro "Matz" Matsumoto 0fe95d6c81 mruby-pack (mrb_pack_pack): avoid integer overflow
`int` (32bit integer) may be too small on 64bit platforms.
2024-02-05 21:28:11 +09:00
dearblue 8f14785f10 Stop pseudo flexible array in mrb_heap_page
For reference, the flexible array was introduced by commit 3ab2f9371e (#2997).
Subsequently changed for compatibility with C++ by commit 24939723d7 (#5596).
2024-02-04 21:55:54 +09:00
dearblue 84fbe63457 Change the end parameter of obj_free() to a boolean type
The caller is a boolean value from the first.
2024-02-04 21:55:54 +09:00
dearblue dde5fe3a60 Reduce RVALUE related pointer casts. 2024-02-04 21:55:53 +09:00
Yukihiro "Matz" Matsumoto f04a729dc9 gc.c (obj_free): check if irep is NULL before mrb_irep_decref(); #6161 2024-02-04 17:06:05 +09:00
Yukihiro "Matz" Matsumoto 2f63b49542 backtrace.c: use mrb_irep references instead of struct RProc
To reduce GC burden (no mark needed). We use `mrb_irep_incref()` and
`mrb_irep_decref()` instead to track irep memory usage; ref #6161
2024-02-04 16:48:42 +09:00
Yukihiro "Matz" Matsumoto 4dfadb4f9f Merge pull request #6159 from dearblue/debug/irep-free
Allow to detect use-after-free after `mrb_irep_free()` for debugging
2024-02-04 16:26:03 +09:00
Yukihiro "Matz" Matsumoto 0abc36f761 Merge pull request #6161 from dearblue/backtrace
Fixed use-after-free by backtrace object
2024-02-03 23:39:58 +09:00
Yukihiro "Matz" Matsumoto 9524d8e199 Merge pull request #6164 from jbampton/remove-ERROR_ON_MISSING_EXEC_BIT
super-linter: remove `ERROR_ON_MISSING_EXEC_BIT` check
2024-02-03 00:25:35 +09:00
John Bampton 8e04e76325 super-linter: remove ERROR_ON_MISSING_EXEC_BIT check
https://github.com/super-linter/super-linter/releases/tag/v6.0.0

https://github.com/super-linter/super-linter/pull/5120
2024-02-02 15:51:18 +10:00
Yukihiro "Matz" Matsumoto 08c422c7ee numeric.c (cmpnum): support fixnum cmp bignum; fix #6163 2024-02-02 14:18:57 +09:00
Yukihiro "Matz" Matsumoto 4762689f93 Merge pull request #6153 from dearblue/gem-list
Make `MRuby::Gems::List#{each,<<}` method return `self`
2024-02-02 08:19:44 +09:00
Yukihiro "Matz" Matsumoto fd04ffc2f6 Merge pull request #6144 from jbampton/add-hook-detect-aws-credentials
pre-commit: add hook `detect-aws-credentials`
2024-02-02 08:15:38 +09:00
Yukihiro "Matz" Matsumoto 6e09555749 Merge pull request #6150 from dearblue/itself
Introduce `mrb_obj_itself()`
2024-02-01 16:15:42 +09:00
Yukihiro "Matz" Matsumoto 24aad706e1 Merge pull request #6162 from mruby/dependabot/github_actions/super-linter/super-linter-6.0.0
build(deps): bump super-linter/super-linter from 5.7.2 to 6.0.0
2024-02-01 16:02:45 +09:00
dependabot[bot] a0bcf63bd5 build(deps): bump super-linter/super-linter from 5.7.2 to 6.0.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.7.2 to 6.0.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.7.2...v6.0.0)

---
updated-dependencies:
- dependency-name: super-linter/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-31 14:23:26 +00:00
dearblue 9543cfa7ee Fixed use-after-free by backtrace object
The `MRB_TT_BACKTRACE` object has been added for the purpose.

Previously, "use-after-free" could occur because the reference count in `backtrace_location::irep` was not incremented.

fixed #6160
2024-01-31 22:17:16 +09:00
Yukihiro "Matz" Matsumoto cac698fe88 string.c (memsearch_swar): changed the function name
For your information, SWAR stands for SIMD within a register.
2024-01-31 21:37:39 +09:00
Yukihiro "Matz" Matsumoto f8527f0670 string.c (mrb_memsearch_ss): update a comment regarding alignment issue 2024-01-31 21:36:05 +09:00
Yukihiro "Matz" Matsumoto d8144aef78 string.c: remove a comment regarding unsigned char* 2024-01-31 21:34:54 +09:00
Yukihiro "Matz" Matsumoto 363f795432 string.c: remove unnecessary type casts
We don't need `unsigned` for string pointers.
2024-01-31 15:06:04 +09:00
Yukihiro "Matz" Matsumoto e61a2881a7 string.c (mrb_memsearch_ss): fix potential buffer overflow; fix #6158
- stop using `bigint*`
- stop integer pointer dereferences
- use `memcpy` to integer variables
- add reminder search for shorter patterns
2024-01-31 07:48:24 +09:00
Yukihiro "Matz" Matsumoto 219cfd63e1 string.c (mrb_memsearch_ss): update integer prefixes (LLU -> ULL) 2024-01-31 07:42:52 +09:00
Yukihiro "Matz" Matsumoto 6ba65ea0f0 string.c (mrb_memsearch_ss): update comment 2024-01-31 01:54:37 +09:00
Yukihiro "Matz" Matsumoto 44a5882bc2 string.c (mrb_memsearch_ss): remove useless alignment adjustment
Ref #6158
2024-01-31 01:27:10 +09:00
Yukihiro "Matz" Matsumoto be5448fd16 string.c (mrb_memsearch): refactor m==1 (use memchr) case 2024-01-31 01:17:12 +09:00
Yukihiro "Matz" Matsumoto d8e1aed646 string.c (search_nonascii): need not to check n>3 on 32bit platforms 2024-01-30 12:35:56 +09:00
dearblue 60dd6b5586 Allow to detect use-after-free after mrb_irep_free() for debugging
Write invalid value to `irep` if `MRB_DEBUG` is defined by `MRuby::Build#enable_debug`.
2024-01-29 21:32:04 +09:00
Yukihiro "Matz" Matsumoto 0e1125c3af Merge pull request #6152 from dearblue/io-error
Retrieving the IO exception class with presym
2024-01-27 15:10:29 +09:00
Yukihiro "Matz" Matsumoto fefebf7a77 Merge pull request #6151 from dearblue/eval-init
Refer to `mrb->module_class` directly in `mrb_mruby_eval_gem_init()`
2024-01-27 15:09:30 +09:00
Yukihiro "Matz" Matsumoto e859b430cc fixup! string.c (search_nonascii): add faster search using SSE2 2024-01-27 11:59:29 +09:00
Yukihiro "Matz" Matsumoto dee1ded7b5 string.c (mrb_memsearch_ss): support bigendians 2024-01-27 06:23:16 +09:00
Yukihiro "Matz" Matsumoto 06d9a54760 string.c (mrb_memsearch): remove simple search and quick search
Since mrb_memsearch_ss() is fast enough for most of the cases, we try to
simplify the code.
2024-01-27 06:22:55 +09:00
Yukihiro "Matz" Matsumoto 2943ca2685 string.c (mrb_memsearch_ss): faster integer-wise substring search
The function is based on @WojciechMula's code from the repository
https://github.com/WojciechMula/sse4-strstr.git Since it's licensed
under 2 clause BSD, we updated LEGAL file too.
2024-01-27 06:16:33 +09:00
Yukihiro "Matz" Matsumoto 08cd281200 string.c (search_nonascii): skip alignment adjustment for some CPUs
Some CPUs (e.g. x86) allow unaligned access to the memory.
2024-01-26 08:22:33 +09:00
Yukihiro "Matz" Matsumoto 68ab95ea57 string.c (mrb_memsearch): take char* instead of void*
Avoid useless `void*`.
2024-01-25 22:32:31 +09:00
Yukihiro "Matz" Matsumoto cf0cd6785c string.c: rename MRB_QS_SHORT_STRING_LENGTH
The new name is MRB_SEARCH_SHORT_STRING_LENGTH since it's no longer used
in the mrb_memsearch_qs(). FYI, 'qs' stands for 'quick search'.
2024-01-23 23:28:45 +09:00
Yukihiro "Matz" Matsumoto fb2ebcde7c string.c (search_nonascii): add faster search using SSE2 2024-01-23 23:28:45 +09:00
Yukihiro "Matz" Matsumoto 4108b85c62 string.c (search_nonascii): faster search using integer match
If you define `SIMPLE_SEARCH_NONASCII`, you can use old, naive
implementation of search_nonascii(). You may want to use the old one for
code size constraint for example.
2024-01-23 23:28:45 +09:00
Yukihiro "Matz" Matsumoto f41593f55a Merge pull request #6154 from dearblue/int_to_str 2024-01-23 21:59:14 +09:00
Yukihiro "Matz" Matsumoto 18bdcbe536 Merge pull request #6145 from hoshiumiarata/enum_chunk
Enumerable#chunk implementation
2024-01-23 08:58:19 +09:00
星湖新 ab21813100 Move Enumerable#chunk to mruby-enumerator 2024-01-22 18:31:28 +09:00
星湖新 d001974439 Revert "Enumerable#chunk implementation"
This reverts commit ebf86a24b0.
2024-01-22 18:26:01 +09:00
Yukihiro "Matz" Matsumoto 5431575d11 Merge pull request #6148 from buty4649/add-enumerable-grep_v
Add Enumerable#grep_v to mruby-enum-ext
2024-01-21 18:51:11 +09:00
dearblue c112e83b5d Removed mrb_jmpbuf_id for C++ exceptions
Use stack variable addresses as identifiers instead of global variable values.
Since the stack variable address is uniquely determined within the call, there is no need to maintain a global variable.
2024-01-21 13:14:41 +09:00
dearblue bf2db1ed2b Check mrb_bigint_p() before mrb_integer() 2024-01-21 10:59:06 +09:00
Yukihiro "Matz" Matsumoto 028c53d667 Merge pull request #6149 from dearblue/rational.new
Remove unnecessary `Rational._new` method
2024-01-20 23:28:38 +09:00
Yukihiro "Matz" Matsumoto 888dd230dd Merge pull request #6147 from dearblue/memsearch
Fixed buffer overflow in `mrb_memsearch()`
2024-01-20 23:25:34 +09:00
Yukihiro "Matz" Matsumoto 12483c8393 Merge pull request #6146 from mruby/dependabot/github_actions/actions/cache-4
build(deps): bump actions/cache from 3 to 4
2024-01-20 23:24:40 +09:00
dearblue 464ac4581e Make MRuby::Gems::List#{each,<<} method return self
Returning internal objects is undesirable.
2024-01-20 22:49:31 +09:00
dearblue 5caf8e14cf Retrieving the IO exception class with presym 2024-01-20 22:33:43 +09:00
dearblue 82312467d0 Refer to mrb->module_class directly in mrb_mruby_eval_gem_init() 2024-01-20 22:20:20 +09:00
dearblue 3111990089 Introduce mrb_obj_itself()
Some method definitions were changed to use this function.
2024-01-20 22:07:29 +09:00
dearblue 35375257f6 Remove unnecessary Rational._new method 2024-01-20 21:52:49 +09:00
buty4649 97203729a9 Add Enumerable#grep_v to mruby-enum-ext 2024-01-20 11:47:37 +09:00
dearblue 772f13520c Fixed buffer overflow in mrb_memsearch() 2024-01-20 09:44:47 +09:00
Yukihiro "Matz" Matsumoto f13101124c string.c: add cast to remove warnings 2024-01-19 18:24:34 +09:00
Yukihiro "Matz" Matsumoto 69cf074778 string.c (mrb_memsearch): move simple search from mrb_memsearch_qs() 2024-01-19 15:21:43 +09:00
dependabot[bot] 1e9d69f896 build(deps): bump actions/cache from 3 to 4
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-18 14:59:43 +00:00
Yukihiro "Matz" Matsumoto 6f0c34e04e mruby-string-ext: implement String#ascii_only? method 2024-01-18 22:53:46 +09:00
Yukihiro "Matz" Matsumoto 57fd0edaa7 mruby.h: rename ASCII flag to SINGLE_BYTE
This flag means all the characters in the string can be represented by a
single byte, i.e., the string does not contain any multi-byte character.
Those characters are likely ASCII characters, but may be a part of broken
UTF-8 sequence, so the term 'ASCII' is not sufficient.
2024-01-18 22:50:39 +09:00
Yukihiro "Matz" Matsumoto 5b76d2cbbe string.h: RSTR_ASCII_P(s) should always be true for non-UTF8 mode 2024-01-16 17:38:51 +09:00
Yukihiro "Matz" Matsumoto 6c2ed55077 mruby-bin-mruby: remove unused assignments 2024-01-16 12:28:32 +09:00
Yukihiro "Matz" Matsumoto 0e079fe946 mruby-bin-mruby: reduce the scope of a loop variable i 2024-01-15 23:04:18 +09:00
Yukihiro "Matz" Matsumoto 9298dfb927 mruby-bin-mruby: reduce the scope of a local variable c 2024-01-15 23:03:34 +09:00
Yukihiro "Matz" Matsumoto 90fac46751 mruby-bin-mruby: remove unnecessary condition 2024-01-15 23:00:46 +09:00
Yukihiro "Matz" Matsumoto 4f8fd23f7a mruby-string-ext (str_uminus): remove wrong document
In mruby, deduplication of strings is not implemented (yet), so we have
to remove the description from `String#-@` document.
2024-01-13 23:00:13 +09:00
Yukihiro "Matz" Matsumoto c53d9a33fc mruby-string-ext (mrb_valid_enc_p): simplify the code
By using `mrb_utf8len` directly. If `len == 1` and `ch >= 0x80`, the
character should be an invalid character.
2024-01-13 22:48:16 +09:00
星湖新 ebf86a24b0 Enumerable#chunk implementation 2024-01-13 17:36:02 +09:00
Yukihiro "Matz" Matsumoto fb8bc1954b string.c: improve performance of chars2bytes/bytes2chars; ref #6143 2024-01-11 18:23:50 +09:00
Yukihiro "Matz" Matsumoto f646228dbe string.c (str_index_str_by_char): simplify using str_index_str()
Instead of its own version of quick search, now we use str_index_str()
and adjust character position. This change makes searching 4 times
faster in some cases; ref #6143
2024-01-11 12:23:06 +09:00
Yukihiro "Matz" Matsumoto e42f3b36f9 string.c (chars2bytes): simplify the condition to detect break 2024-01-11 11:49:49 +09:00
John Bampton f8f3ff10fa pre-commit: add hook detect-aws-credentials
https://github.com/pre-commit/pre-commit-hooks#detect-aws-credentials

Another check or test we can have.

"--allow-missing-credentials - Allow hook to pass when no credentials are detected."
2024-01-11 03:18:15 +10:00
dearblue 514c926e97 Update the mruby3.3.md file
- Remove items changed by mruby 3.2.
  - The commit hash or pull request number will be written along with the changes.
  - Add some items.
2024-01-10 23:00:10 +09:00
Yukihiro "Matz" Matsumoto 787439455c string.c: remove the macro BYTES_ALIGN_CHECK which is no longer used 2024-01-10 17:31:04 +09:00
Yukihiro "Matz" Matsumoto c2f148e15d string.c (mrb_memsearch_qs): reduce the scope of local variables 2024-01-10 16:21:39 +09:00
Yukihiro "Matz" Matsumoto 31f2d93657 string.c (bytes2chars): skip calling mrb_utf8len() if possible
If (ch < 0x80) the length of the character (in bytes) should be 1, so we
don't have to call mrb_utf8len().
2024-01-10 15:36:07 +09:00
Yukihiro "Matz" Matsumoto 4c859e754d string.c (bytes2chars): skip scanning if the string is ASCII only 2024-01-10 14:40:39 +09:00
Yukihiro "Matz" Matsumoto df0a5e838d string.c (chars2bytes): use early return 2024-01-10 12:41:28 +09:00
Yukihiro "Matz" Matsumoto e39e4ea26d string.c (chars2bytes): small refactoring 2024-01-10 11:09:47 +09:00
Yukihiro "Matz" Matsumoto 1d243bc58b string.c (bytes2chars): takes a string object instead of char* 2024-01-10 10:53:26 +09:00
Yukihiro "Matz" Matsumoto 59a1d74937 string.c: inline str_range_to_bytes 2024-01-09 18:22:38 +09:00
Yukihiro "Matz" Matsumoto 9135f0991b string.c: avoid RSTRING_CHAR_LEN() if possible
Current code scan the string twice (once from RSTRING_CHAR_LEN, and once
from chars2bytes), but those scans are not necessary. Just point the end
of the string.
2024-01-09 11:44:12 +09:00
Yukihiro "Matz" Matsumoto f3ebef1172 mruby-string (chars2bytes): reduce the scope of local variables 2024-01-09 11:00:44 +09:00
Yukihiro "Matz" Matsumoto f1d01a6107 string.c (mrb_utf8len): should return 1 for invalid chars; ref #6143 2024-01-09 10:39:03 +09:00
Yukihiro "Matz" Matsumoto 64a4bf0e28 string.c: avoid infinite loop; fix #6143
`mrb_utf8len` returns 0 for invalid characters.
2024-01-09 10:37:52 +09:00
Yukihiro "Matz" Matsumoto a5e83075d4 string.c: reduce the scope of a local variable 2024-01-09 08:22:26 +09:00
Yukihiro "Matz" Matsumoto af3482d562 mruby-math: use erfc(x) instead of 1.0 - erf(x) 2024-01-09 08:01:28 +09:00
Yukihiro "Matz" Matsumoto 51c4c4716a mruby-math: use log1p(x) instead of log(1.0+x) 2024-01-09 07:59:42 +09:00
Yukihiro "Matz" Matsumoto 8a2e88390b mruby-math: reduce the scope of a local variable 2024-01-09 07:47:57 +09:00
Yukihiro "Matz" Matsumoto c1fc3219db mruby-math: fix spacing 2024-01-08 23:18:57 +09:00
Yukihiro "Matz" Matsumoto 05e9fa34af mruby-random: rename a conflicting local variable 2024-01-08 19:12:55 +09:00
Yukihiro "Matz" Matsumoto 27c2f9ac38 mruby-random (mrb_ary_sample): reduce the scope of loop variables 2024-01-08 07:23:03 +09:00
Yukihiro "Matz" Matsumoto 2cf6f7f5c7 mruby-rational: move misplaced #ifndef MRB_NO_FLOAT 2024-01-08 07:19:30 +09:00
Yukihiro "Matz" Matsumoto be3b93ecb9 array.c (ary_expand_capa): rename a conflicting local variable 2024-01-06 14:33:50 +09:00
Yukihiro "Matz" Matsumoto d47f1b4df3 array.c (ary_expand_capa): remove unnecessary condition check 2024-01-06 14:32:54 +09:00
Yukihiro "Matz" Matsumoto 2eeb19a5ed mruby-kernel-ext (mrb_f_caller): remove unnecessary condition check 2024-01-06 14:31:32 +09:00
Yukihiro "Matz" Matsumoto b06fdb4bfa mruby-io/file.c: reduce the scope of local variables 2024-01-06 08:30:56 +09:00
Yukihiro "Matz" Matsumoto e1b6501183 mruby-io: fix local variable initialization redundancy 2024-01-05 13:03:33 +09:00
Yukihiro "Matz" Matsumoto f1b8d38eb5 mruby-io: narrow a local variable scope 2024-01-05 13:02:39 +09:00
Yukihiro "Matz" Matsumoto 20dd737a4a mruby-io (io_s_popen): remove fflush(stdin)
Flushing input I/O should be useless.
2024-01-05 13:00:55 +09:00
Yukihiro "Matz" Matsumoto 9ee7d955e3 mruby-metaprog: narrow the scope of a local variable 2024-01-04 11:18:14 +09:00
Yukihiro "Matz" Matsumoto 2ce5c52726 mruby-errno (mrb_sce_sys_fail): remove redundant assignment 2024-01-04 10:08:22 +09:00
Yukihiro "Matz" Matsumoto 7861422cbe mruby-fiber (fiber_switch): reduce the scope of local variables 2024-01-03 16:07:15 +09:00
Yukihiro "Matz" Matsumoto 93bda0d27f mruby-fiber (fiber_init_fiber): rename conflicting local variables 2024-01-03 16:05:46 +09:00
Yukihiro "Matz" Matsumoto f0ab79b195 Merge pull request #6136 from dearblue/fiber-fix
Fixed when combined `mrb_fiber_resume()` and `Fiber#transfer`
2024-01-03 07:33:48 +09:00
Yukihiro "Matz" Matsumoto 5257fe4333 mruby-bigint (mrb_bint_new_float): narrow the scope of variable 'f' 2024-01-03 07:23:55 +09:00
Yukihiro "Matz" Matsumoto d632085b5b mruby-bigint (udiv): narrow the scope of loop variable 'i' 2024-01-03 07:23:55 +09:00
Yukihiro "Matz" Matsumoto d944a079a3 mruby-numeric-ext (int_digits): avoid variable name override 2024-01-03 07:23:55 +09:00
Yukihiro "Matz" Matsumoto e71e1bc50e mruby-hash-ext: reduce the scope of the loop variable i 2024-01-03 07:23:55 +09:00
Yukihiro "Matz" Matsumoto 17b2ec643e Merge pull request #6140 from jbampton/actions-label-more-files
actions: label more files for build
2024-01-03 07:23:39 +09:00
dearblue 519a2cbd59 Fixed when combined mrb_fiber_resume() and Fiber#transfer
For example, the following code was crashing.

```c
#include <mruby.h>
#include <mruby/compile.h>
#include <mruby/proc.h>

int
main(int argc, char *argv[])
{
  mrb_state *mrb = mrb_open();

  mrb_value fiber = mrb_load_string(mrb, "Fiber.new { Fiber.new { 12345.6789 }.transfer }");
  mrb_value res = mrb_fiber_resume(mrb, fiber, 0, NULL);
  mrb_p(mrb, res);

  mrb_close(mrb);

  return 0;
}
```
2024-01-02 21:34:44 +09:00
John Bampton e471399044 actions: label more files for build 2024-01-01 17:19:53 +10:00
Yukihiro "Matz" Matsumoto d7a2174519 Merge pull request #6139 from jbampton/fix-prettier-hook
Fix `pre-commit` failure from `prettier`
2024-01-01 15:46:41 +09:00
Yukihiro "Matz" Matsumoto a406e008d1 Merge branch 'master' into fix-prettier-hook 2024-01-01 15:29:08 +09:00
John Bampton 19d0ea803d Fix pre-commit failure from prettier 2023-12-31 21:57:58 +10:00
dearblue 8322c441ee Remove unreachable blocks in OP_RETURN
When `mrb->c->prev` is non `NULL` and `mrb->c->noexec` is false, switching source fiber should suspend with `Fiber#resume`.
In this case, the condition `mrb->c->ci == mrb->c->cibase` is not satisfied.
2023-12-31 14:49:59 +09:00
Yukihiro "Matz" Matsumoto 8094ac27d7 NEWS: add mruby3.3 changes description 2023-12-31 00:43:02 +09:00
Yukihiro "Matz" Matsumoto 39f48d732a mruby-pack: update README.md
'X' and '@' directives are not listed
2023-12-30 16:02:20 +09:00
Yukihiro "Matz" Matsumoto 56b67f8613 mruby-pack (u64tostr): reimplement the function
- direct conversion of single digit numbers
- remove unnecessary update of `line` variable
- simplify the body according to the assertion
2023-12-30 15:35:55 +09:00
Yukihiro "Matz" Matsumoto 8cbd4638f4 mruby-pack (u64tostr): len should always be positive
Add `mrb_assert()` instead of just skipping the function.
2023-12-30 15:33:57 +09:00
Yukihiro "Matz" Matsumoto 1871ff14db mruby-pack (pack_unpack): skip continuous extraction from unpack1
Ref #6134
2023-12-30 15:31:44 +09:00
Yukihiro "Matz" Matsumoto 7765c23f69 mruby-pack (pack_hex): the scope of variables a and b can be reduced 2023-12-30 15:12:17 +09:00
Yukihiro "Matz" Matsumoto fca2bbdcca mruby-pack (unpack_str): the scope of the variable cp can be reduced 2023-12-30 15:12:10 +09:00
dearblue 9d4931cd1b Create source code packages by adding release tags
According to the [GitHub blog](https://github.blog/2023-02-21-update-on-the-future-stability-of-source-code-archives-and-hashes/), files by `git archive` are not guaranteed to have checksum persistence.
It is also stated that the archive file at this time is stable in bytes, but that this may change in the future.
2023-12-29 17:50:33 +09:00
Yukihiro "Matz" Matsumoto 159687bef3 mruby-pack: add tests for unpack1 method; ref #6134 2023-12-29 15:05:16 +09:00
KOBAYASHI Shuji 98d091436d Reduce memory usage of instance variable table
## Implementation Summary

* Only keys and only values of hash table are contiguous to eliminate
  structure padding.
* Change upper limit of `iv_tbl` size to `UINT16_MAX` (it seems to be
  acceptable in mruby because the total number of classes/modules
  immediately after starting Redmine is 20,000 or less).
* `iv_tbl*` point hash buckets directly.

## Benchmark Summary

Only the results of typical situations on 64-bit Word-boxing are present
here. For more detailed information, including consideration, see below
report (although most of the body is written in Japanese).

* https://shuujii.github.io/mruby-iv-benchmark

### Memory Usage

Lower value is better.

| iv_tbl Size |    Baseline    |       New      |   Factor   |
|------------:|---------------:|---------------:|-----------:|
|           4 |            88B |            52B |   0.59091x |
|          30 |           536B |           388B |   0.72388x |
|         100 |          2072B |          1540B |   0.74324x |
|         200 |          4120B |          3076B |   0.74660x |

Although not mentioned in the above report, the memory usage of `mrbtest`
(full-core gembox) is as follows in the result by Valgrind.

* Baseline: 108,086 allocs, 16,313,122 bytes allocated
* New:       94,273 allocs, 15,875,214 bytes allocated

### Performance

Higher value is better.

#### `mrb_obj_iv_set`

| iv_tbl Size |    Baseline    |       New      |   Factor   |
|------------:|---------------:|---------------:|-----------:|
|           4 |  88.63003M i/s |  92.60611M i/s |   1.04486x |
|          30 |  32.97066M i/s |  25.25095M i/s |   0.76586x |
|         100 |  16.33224M i/s |  22.74998M i/s |   1.39295x |
|         200 |   5.64484M i/s |   6.79949M i/s |   1.20455x |

#### `mrb_obj_iv_get`

| iv_tbl Size |    Baseline    |      New       |   Factor   |
|------------:|---------------:|---------------:|-----------:|
|           4 | 217.58391M i/s | 237.59912M i/s |   1.09199x |
|          30 | 139.56195M i/s | 160.49470M i/s |   1.14999x |
|         100 | 143.09716M i/s | 190.95047M i/s |   1.33441x |
|         200 |  89.75291M i/s | 134.78717M i/s |   1.50176x |

### Binary Size

Lower value is better.

|    File     |    Baseline    |      New       |   Factor   |
|:------------|---------------:|---------------:|-----------:|
| mruby       |       697,520B |       697,520B |   1.00000x |
| libmruby.a  |     1,046,570B |     1,046,682B |   0.99989x |

## Note

The address in `struct RObject::iv` may change after initialization because
`iv_tbl*` points directly to hash buckets. Therefore, the address cannot be
copied and shared when include/prepend. So, when sharing `iv_tbl`, refer to
it via the sharing source class. As a result, the following bug have also
been fixed.

* [An `iv_tbl` is not shared when a class includes or prepends an empty module](https://gist.github.com/shuujii/0ac23fa24b0c55b2c602b534d81e4a95)
2021-02-03 23:16:09 +09:00
355 changed files with 20924 additions and 21684 deletions
+6 -6
View File
@@ -1,14 +1,14 @@
.DS_Store
.idea
.vscode
.yardoc
*.bak
*.iml
*.ipr
*.swp
*.tmp
/.yardoc
/bin
/build
/doc/api
/doc/capi
bin
build
doc/api
doc/capi
node_modules
-4
View File
@@ -28,7 +28,3 @@ indent_style = tab
[*.bat]
end_of_line = crlf
#max_line_length = 80
#[*.{yaml,yml}]
#[*.md]
+2
View File
@@ -4,3 +4,5 @@
61e8a540869c57ebddac53cf9d243db407d57fff
# reindent parse.y
650ffb9d8410e1ae2206890ef6e2a8643c600454
# reindent build_config/playstationportable.rb
90ab714fda6825c4e951d47d7e6ecff033dd14e3
View File
+1 -3
View File
@@ -1,12 +1,10 @@
# Basic set up
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates
version: 2
updates:
# Maintain dependencies for Ruby
- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "daily"
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
+28
View File
@@ -1,3 +1,4 @@
# https://github.com/actions/labeler
benchmark:
- any:
- changed-files:
@@ -7,11 +8,21 @@ build:
- any:
- changed-files:
- any-glob-to-any-file:
- Dockerfile
- Doxyfile
- Makefile
- Rakefile
- appveyor.yml
- build_config.rb
- build_config/**/*
- docker-compose.yml
- lib/**/*
- minirake
- tasks/**/*
- .dockerignore
- .pre-commit-config.yaml
- .travis.yml
- .yardopts
core:
- any:
- changed-files:
@@ -38,6 +49,18 @@ github:
- changed-files:
- any-glob-to-any-file:
- .github/**/*
miscellaneous:
- any:
- changed-files:
- any-glob-to-any-file:
- .editorconfig
- .git-blame-ignore-revs
- .gitattributes
- .gitignore
- AUTHORS
- Gemfile
- Gemfile.lock
- mruby-source.gemspec
mrbgems:
- any:
- changed-files:
@@ -48,3 +71,8 @@ oss-fuzz:
- changed-files:
- any-glob-to-any-file:
- oss-fuzz/**/*
tools:
- any:
- changed-files:
- any-glob-to-any-file:
- tools/**/*
+4
View File
@@ -0,0 +1,4 @@
failure-threshold: info
ignored:
- DL3008 # https://github.com/hadolint/hadolint/wiki/DL3008
- DL3013 # https://github.com/hadolint/hadolint/wiki/DL3013
+4
View File
@@ -1,4 +1,5 @@
# https://github.com/DavidAnson/markdownlint#rules--aliases
# https://github.com/igorshubovych/markdownlint-cli
# markdownlint -c .github/linters/.markdown-lint.yml .
# MD001 heading-increment/header-increment - Heading levels should only increment by one level at a time
@@ -19,6 +20,9 @@ MD025: false
# MD026 no-trailing-punctuation - Trailing punctuation in heading
MD026: false
# MD029/ol-prefix Ordered list item prefix
MD029: false
# MD033/no-inline-html - Inline HTML
MD033: false
+10
View File
@@ -0,0 +1,10 @@
{
"ignorePatterns": [
{
"pattern": "^https://github.com/mruby/mruby/commit/"
},
{
"pattern": "^mailto:"
}
]
}
+7 -5
View File
@@ -1,3 +1,4 @@
# https://github.com/actions/runner-images#available-images
name: Build & Test
on: [push, pull_request]
@@ -15,11 +16,12 @@ jobs:
max-parallel: 8
matrix:
include:
- {os: ubuntu-24.04, cc: gcc, cxx: g++}
- {os: ubuntu-24.04, cc: clang, cxx: clang++}
- {os: ubuntu-22.04, cc: gcc, cxx: g++}
- {os: ubuntu-22.04, cc: clang, cxx: clang++}
- {os: ubuntu-20.04, cc: gcc, cxx: g++}
- {os: ubuntu-20.04, cc: clang, cxx: clang++}
- {os: macos-latest, cc: clang, cxx: clang++}
- {os: macos-15, cc: clang, cxx: clang++}
- {os: macos-14, cc: clang, cxx: clang++}
- {os: windows-latest, cc: gcc, cxx: g++, altname: "mingw-gcc"}
env:
MRUBY_CONFIG: ci/gcc-clang
@@ -34,7 +36,7 @@ jobs:
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
run: rake -m test:build && rake test:run
run: rake -m test:run:serial
Windows-VC:
runs-on: windows-2022
@@ -50,4 +52,4 @@ jobs:
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
rake -m test:build && rake test:run
rake -m test:run:serial
+41
View File
@@ -0,0 +1,41 @@
name: Coverage
on: [push, pull_request]
jobs:
coverage:
name: Coverage
runs-on: ubuntu-24.04
env:
MRUBY_CONFIG: ci/gcc-clang
CC: clang-18
CXX: clang++-18
LD: clang-18
CFLAGS: -O0 -g --coverage
CXXFLAGS: -O0 -g --coverage
LDFLAGS: --coverage
steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
- name: Ruby version
run: ruby -v
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
run: rake test
- name: Install gcovr
run: pip install gcovr
- name: Generate coverage report
run: |
{
echo "# Coverage report"
echo \`\`\`
gcovr --gcov-executable "llvm-cov-18 gcov" -e ".*_test.c" -e ".*/test/.*" -s --html-details -o coverage/ build
echo \`\`\`
} > "$GITHUB_STEP_SUMMARY"
- name: Upload coverage report
uses: actions/upload-artifact@v4
with:
name: coverage-${{ github.sha }}
path: coverage/
retention-days: 3
+2 -2
View File
@@ -18,8 +18,8 @@ jobs:
python -m pip install --upgrade pip
pip install pre-commit
- name: Set PY
run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
- uses: actions/cache@v3
run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> "$GITHUB_ENV"
- uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
+46
View File
@@ -0,0 +1,46 @@
name: Release Builds
on:
push:
tags:
- "*.*.*"
permissions: read-all
jobs:
source:
name: Source Code Releasing
if: ${{ github.repository == 'mruby/mruby' }}
permissions:
contents: write
runs-on: ubuntu-22.04
timeout-minutes: 10
strategy:
fail-fast: false
steps:
- name: "Checkout ${{ github.ref_name }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
- name: Builds
id: builds
run: |
tagname="$GITHUB_REF_NAME"
packagename="mruby-$tagname"
destdir=packages
mkdir -p "$destdir"
git archive --format zip --prefix "$packagename/" -o "$destdir/$packagename.zip" "$GITHUB_REF"
git archive --format tar.gz --prefix "$packagename/" -o "$destdir/$packagename.tar.gz" "$GITHUB_REF"
gunzip -c "$destdir/$packagename.tar.gz" | xz > "$destdir/$packagename.tar.xz"
(
cd "$destdir" || exit
sha256sum -- * > .sha256
mv .sha256 "$packagename.sha256"
)
- name: Release
uses: softprops/action-gh-release@v2
with:
draft: true
prerelease: ${{ contains(github.ref_name, '-rc') }}
body_path: NEWS
files: packages/*
+4 -5
View File
@@ -10,7 +10,7 @@ jobs:
build:
permissions:
contents: read # for actions/checkout to fetch code
statuses: write # for github/super-linter/slim to mark status of each linter run
statuses: write # for super-linter/super-linter/slim to mark status of each linter run
name: Lint Code Base
runs-on: ubuntu-latest
steps:
@@ -20,13 +20,12 @@ jobs:
# Full git history is needed to get a proper list of changed files within `super-linter`
fetch-depth: 0
- name: Lint Code Base
uses: super-linter/super-linter/slim@v5.7.2
uses: super-linter/super-linter/slim@v7.3.0
env:
ERROR_ON_MISSING_EXEC_BIT: true
VALIDATE_BASH: true
# VALIDATE_BASH_EXEC: true
VALIDATE_DOCKERFILE_HADOLINT: true
# VALIDATE_EDITORCONFIG: true
# VALIDATE_SHELL_SHFMT: true
DEFAULT_BRANCH: master
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VALIDATE_ALL_CODEBASE: false
VALIDATE_ALL_CODEBASE: true
+13 -9
View File
@@ -13,24 +13,28 @@
*.tmp
*~
.DS_Store
.cache
.ccls*
.ccmalloc
.git
.svn
.vscode
.yardoc
/.git
/benchmark/**/*.dat
/benchmark/*.pdf
/benchmark/*.png
/bin
/build
/doc/api
/doc/capi
/mruby-source-*.gem
benchmark/**/*.dat
benchmark/*.pdf
benchmark/*.png
bin
build
doc/api
doc/capi
compile_commands.json
compile_flags.txt
cscope.files
cscope.out
gmon.out
mruby-source-*.gem
node_modules
perf.data*
tags
!Gemfile.lock
y.tab.c
+68 -28
View File
@@ -1,84 +1,124 @@
---
default_stages: [commit, push]
# https://pre-commit.com/
default_stages: [pre-commit, pre-push]
default_language_version:
# force all unspecified Python hooks to run python3
python: python3
minimum_pre_commit_version: "2.18.1"
node: 22.2.0
minimum_pre_commit_version: "3.2.0"
repos:
- repo: meta
hooks:
- id: identity
name: run identity check
- id: check-hooks-apply
name: check hooks apply to the repository
- repo: local
hooks:
- id: prettier
name: run prettier
description: format files with prettier
entry: prettier --write .
files: \.(json|md|ya?ml)$
language: node
additional_dependencies: ["prettier@3.3.3"]
- repo: https://github.com/gitleaks/gitleaks
rev: v8.24.0
hooks:
- id: gitleaks
name: detect hardcoded secrets
- repo: https://github.com/shssoichiro/oxipng
rev: v9.1.4
hooks:
- id: oxipng
name: run oxipng
args: ["-o", "4", "--strip", "safe", "--alpha"]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v5.0.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
- id: check-executables-have-shebangs
exclude: ^test/t/lang\.rb$
- id: check-illegal-windows-names
- id: pretty-format-json
args: [--autofix, --no-sort-keys]
- id: check-json
- id: check-merge-conflict
- id: check-shebang-scripts-are-executable
- id: check-vcs-permalinks
- id: check-yaml
- id: destroyed-symlinks
- id: detect-aws-credentials
args: [--allow-missing-credentials]
- id: detect-private-key
- id: end-of-file-fixer
- id: file-contents-sorter
args: [--unique]
files: ^codespell\.txt$
files: ^\.github/linters/codespell\.txt$
- id: fix-byte-order-marker
- id: forbid-submodules
- id: mixed-line-ending
- id: trailing-whitespace
- repo: https://github.com/Lucas-C/pre-commit-hooks
rev: v1.5.4
rev: v1.5.5
hooks:
- id: forbid-tabs
exclude: Makefile$|Makefile\..+$|makefile$|\.mk$
name: no-tabs checker
exclude: Makefile$
- id: remove-tabs
name: tabs remover
args: [--whitespaces-count, "2"]
exclude: Makefile$|Makefile\..+$|makefile$|\.mk$
exclude: Makefile$
- repo: https://github.com/rhysd/actionlint
rev: v1.7.7
hooks:
- id: actionlint
name: run actionlint
description: lint GitHub Actions workflow files
- repo: https://github.com/codespell-project/codespell
rev: v2.2.6
rev: v2.4.1
hooks:
- id: codespell
name: Run codespell
name: run codespell
description: Check spelling with codespell
entry: codespell --ignore-words=codespell.txt
args: [--ignore-words=.github/linters/codespell.txt]
- repo: https://github.com/jumanjihouse/pre-commit-hooks
rev: 3.0.0
hooks:
- id: script-must-not-have-extension
name: Local policy is to exclude extension from all shell files
name: run script-must-not-have-extension
description: local policy is to exclude extension from all shell files
types: [shell]
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v4.0.0-alpha.8
hooks:
- id: prettier
exclude: ^doc/internal/opcode\.md$
- repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.38.0
rev: v0.44.0
hooks:
- id: markdownlint
name: Run markdownlint
name: run markdownlint
description: Checks the style of Markdown files
entry: markdownlint -c .github/linters/.markdown-lint.yml .
args: [--config=.github/linters/.markdown-lint.yml]
types: [markdown]
files: \.(md|mdown|markdown)$
files: \.md$
- repo: https://github.com/tcort/markdown-link-check
rev: v3.11.2
rev: v3.13.7
hooks:
- id: markdown-link-check
name: Run markdown-link-check
name: run markdown-link-check
description: Checks hyperlinks in Markdown files
args: [-q]
args: [--config=.github/linters/mlc_config.json, -q]
types: [markdown]
files: \.(md|mdown|markdown)$
files: \.md$
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0.1
hooks:
- id: shellcheck
name: run shellcheck
- repo: https://github.com/adrienverge/yamllint
rev: v1.33.0
rev: v1.36.0
hooks:
- id: yamllint
name: Run yamllint
name: run yamllint
description: Check YAML files with yamllint
entry: yamllint --strict -c .github/linters/.yaml-lint.yml
args: [--strict, -c=.github/linters/.yaml-lint.yml]
types: [yaml]
files: \.(yaml|yml)$
files: \.ya?ml$
+4
View File
@@ -0,0 +1,4 @@
# Ignore artifacts:
build
coverage
doc/internal/opcode.md
+1 -1
View File
@@ -8,4 +8,4 @@ env:
- MRUBY_CONFIG=ci/gcc-clang
script:
- rake -m test:build && rake test:run
- rake -m test:run:serial
+45 -33
View File
@@ -1,91 +1,93 @@
# Authors of mruby (mruby developers)
## The List of Contributors sorted by number of commits (as of 2023-12-28 67cb987)
## The List of Contributors sorted by number of commits (as of 2025-03-01 8ba2ed6)
9477 Yukihiro "Matz" Matsumoto (@matz)*
586 KOBAYASHI Shuji (@shuujii)
533 dearblue (@dearblue)*
378 Daniel Bovensiepen (@bovi)*
346 Takeshi Watanabe (@take-cheeze)*
334 Masaki Muranaka (@monaka)
328 Tomoyuki Sahara (@tsahara)*
6083 Yukihiro "Matz" Matsumoto (@matz)*
673 dearblue (@dearblue)*
587 KOBAYASHI Shuji (@shuujii)
353 Daniel Bovensiepen (@bovi)*
345 Takeshi Watanabe (@take-cheeze)*
333 Masaki Muranaka (@monaka)
234 Jun Hiroe (@suzukaze)
228 Tomoyuki Sahara (@tsahara)*
220 Cremno (@cremno)*
219 John Bampton (@jbampton)
209 Yuki Kurihara (@ksss)+
166 John Bampton (@jbampton)
151 Yasuhiro Matsumoto (@mattn)*
144 Yasuhiro Matsumoto (@mattn)*
113 Carson McDonald (@carsonmcdonald)
103 Tomasz Dąbrowski (@dabroz)*
84 Akira Yumiyama (@akiray03)*
84 skandhas (@skandhas)
81 Hiroshi Mimaki (@mimaki)*
104 Tomasz Pędraszewski (@dabroz)*
83 Akira Yumiyama (@akiray03)*
83 skandhas (@skandhas)
80 Masamitsu MURASE (@masamitsu-murase)
74 Yuichiro MASUI (@masuidrive)
71 Tatsuhiko Kubo (@cubicdaiya)*
65 Yuichiro Kaneko (@yui-knk)+
64 Paolo Bosetti (@pbosetti)*
71 Yuichiro MASUI (@masuidrive)
69 Hiroshi Mimaki (@mimaki)*
62 Yuichiro Kaneko (@yui-knk)+
59 Kurebayashi, Takahiro (@crimsonwoods)*
56 h2so5 (@h2so5)
52 Ralph Desir (@Mav7)*
48 Paolo Bosetti (@pbosetti)*
45 Rory O'Connell (@RoryO)*
42 fleuria (@flaneur2020)
40 Christopher Aue (@christopheraue)
40 Seba Gamboa (@sagmor)
39 Kouhei Sutou (@kou)*
38 Koji Yoshioka (@kyab)*+
38 Kouhei Sutou (@kou)*
32 Masayoshi Takahashi (@takahashim)+
31 MATSUMOTO Ryosuke (@matsumotory)*
30 Nobuyoshi Nakada (@nobu)
26 Julian Aron Prenner (@furunkel)*
24 Ryan Scott (@ryan-scott-dev)*
26 Hoshiumi Arata (@hoshiumiarata)*
25 Julian Aron Prenner (@furunkel)*
22 Clayton Smith (@clayton-shopify)
22 Uchio Kondo (@udzura)*
22 Zachary Scott (@zzak)*
22 mirichi (@mirichi)
21 Jared Breeden (@jbreeden)*
21 Ryan Lopopolo (@lopopolo)
20 Ryan Scott (@ryan-scott-dev)*
19 Bouke van der Bijl (@bouk)
19 Felix Jones (@felixjones)*
19 Hidetaka Takano (@TJ-Hidetaka-Takano)
19 Jared Breeden (@jbreeden)*
19 go kikuta (@gkta)*
18 Corey Powell (@IceDragon200)
18 Hidetaka Takano (@TJ-Hidetaka-Takano)
18 Jon Maken (@jonforums)+
18 Mitchell Blank Jr (@mitchblank)*
18 mirichi (@mirichi)
17 Mitchell Blank Jr (@mitchblank)*
16 bggd (@bggd)
16 kano4 (@kano4)
15 Felix Jones (@felixjones)*
14 Blaž Hrastnik (@archseer)*
14 Jose Narvaez (@goyox86)
14 Kazuki Tsujimoto (@k-tsj)
14 Tadashi FUKUZAWA (@FUKUZAWA-Tadashi)+
14 fn ⌃ ⌥ (@FnControlOption)
14 leviongit (@leviongit)
13 Jose Narvaez (@goyox86)
13 Patrick Hogan (@pbhogan)
12 Akira Kuroda (@akuroda)
12 Kouki Ooyatsu (kaishuu0123)*
12 NAKAMURA Usaku (@unak)*
12 RIZAL Reckordp (@Reckordp)+
12 Ray Chason (@chasonr)*
12 Takashi Sawanaka (@sdottaka)*
12 Ukrainskiy Sergey (@ukrainskiysergey)
12 Xuejie "Rafael" Xiao (@xxuejie)*
11 Julien Ammous (@schmurfy)
11 Kazuho Oku (@kazuho)
11 RIZAL Reckordp (@Reckordp)+
11 Seeker (@SeekingMeaning)
11 YAMAMOTO Masaya (pandax381)
11 takkaw (@takkaw)
10 Miura Hideki (@miura1729)
10 Narihiro Nakamura (@authorNari)
10 YAMAMOTO Masaya (pandax381)
10 Yuichi Nishiwaki (@nyuichi)
9 Akira Mitsui (@murasesyuka)*
9 Frank Celler (@fceller)
9 Tatsuya Matsumoto (@tmash06)*
8 Takashi Sogabe (@sogabe)
8 Wataru Ashihara (@wataash)*
7 Bhargava Shastry (@bshastry)*
7 Kouichi Nakanishi (@keizo042)
7 Rubyist (@expeditiousRubyist)
7 SiZiOUS (@sizious)
7 Simon Génier (@simon-shopify)
7 Terence Lee (@hone)
7 Wataru Ashihara (@wataash)*
7 roco (@rystyle)*
6 Akito Mochizuki (@ak-mochi)
6 Beoran (@beoran)
@@ -111,9 +113,11 @@
5 Yurie Yamane (@yurie)+
5 dreamedge (@dreamedge)
5 nkshigeru (@nkshigeru)
5 vickash (@vickash)
5 xuejianqing (@joans321)
4 Dante Catalfamo (@dantecatalfamo)
4 Goro Kikuchi (@gorogit)
4 HASUMI Hitoshi (@hasumikin)
4 Herwin Weststrate (@herwinw)
4 Horimoto Yasuhiro (@komainu8)
4 Jon Moss (@maclover7)
@@ -130,21 +134,22 @@
4 kurodash (@kurodash)*
4 wanabe (@wanabe)*
3 Anton Davydov (@davydovanton)
3 Aurora Nockert (@auroranockert)
3 Carlo Prelz (@asfluido)*
3 Daniel K. Sierpiński (@513ry)+
3 David Turnbull (@AE9RB)
3 Franck Verrot (@franckverrot)
3 HASUMI Hitoshi (@hasumikin)
3 J. Mutua (@katmutua)+
3 Jan Berdajs (@mrbrdo)
3 Jonas Minnberg (@sasq64)
3 Joseph McCullough (@joequery)
3 Mark Delk (@jethrodaniel)
3 Mark McCurry (@fundamental)
3 Nobuhiro Iwamatsu (@iwamatsu)
3 Per Lundberg (@perlun)*
3 Rob Fors (@robfors)*
3 Robert Rowe (@CaptainJet)
3 Sebastián Katzer (@katzer)*
3 Shouji Kuboyama (@Shokuji)*
3 Shuta Kimura (@kimushu)+
3 TERAJIMA, Motoyuki (@trmmy)
3 Taichi AOKI (@aoki1980taichi)
@@ -184,15 +189,16 @@
2 Russel Hunter Yukawa (@rhykw)+
2 Ryunosuke SATO (@tricknotes)
2 Santa Zhang (@santazhang)
2 Satoru Naba (@snaba)+
2 Serg Podtynnyi (@shtirlic)
2 Shannen Saez (@shancat)
2 Shouji Kuboyama (@Shokuji)*
2 SouthWolf (@southwolf)
2 TJ Singleton (@tjsingleton)
2 Taiyo Mizuhashi (@taiyoslime)+
2 Tomás Pollak (@tomas)*
2 Yutaka HARA (@yhara)*+
2 Zhang Xiaohui (@hifoolno)
2 buty4649 (@buty4649)
2 icm7216 (@icm7216)
1 A-Sat (@asatou)+
1 Abinoam Praxedes Marques Junior (@abinoam)
@@ -206,6 +212,7 @@
1 Colin MacKenzie IV (@sinisterchipmunk)
1 Daehyub Kim (@lateau)
1 Daniel Varga (@vargad)
1 Diamond Rivero (@diamant3)
1 Edgar Boda-Majer (@eboda)
1 Fangrui Song (@MaskRay)
1 Flavio Medeiros (@flaviommedeiros)
@@ -242,10 +249,11 @@
1 Lukas Elmer (@lukaselmer)
1 Lukas Stabe (@Ahti)
1 M.Naruoka (@fenrir-naru)
1 Mark Delk (@jethrodaniel)
1 Marcelo Juchem (@juchem)
1 Martin Bosslet (@emboss)+
1 Masahiko Sawada (@MasahikoSawada)
1 Matt Aimonetti (@mattetti)
1 Max Base (@MaxFork)
1 Maxim Abramchuk (@MaximAbramchuck)
1 Megumi Tomita (@tomykaira)+
1 Mitchell Hashimoto (@mitchellh)
@@ -257,6 +265,7 @@
1 Patrick Ellis (@pje)
1 Patrick Pokatilo (@SHyx0rmZ)
1 Pavel Evstigneev (@Paxa)+
1 Pete Kinnecom (@petekinnecom)
1 Prayag Verma (@pra85)
1 Ranmocy (@ranmocy)
1 Robert McNally (@wolfmcnally)
@@ -265,9 +274,11 @@
1 SAkira a.k.a. Akira Suzuki (@sakisakira)
1 Santiago Rodriguez (@sanrodari)
1 Satoh, Hiroh (@cho45)+
1 Satoru Naba (@snaba)+
1 Sayed Abdelhaleem (@visualsayed)
1 Sergey Ukrainskiy (@ukrainskiysergey)
1 Shugo Maeda (@shugo)
1 Sinkevich Artem (@ArtSin)
1 Sorah Fukumori (@sorah)
1 Stephen Jothen (@sjothen)
1 Stuart Hinson (@stuarth)
@@ -298,6 +309,7 @@
1 liyuray (@liyuray)
1 lucas dicioccio (@lucasdicioccio)
1 n4o847 (@n4o847)
1 niyarin (@niyarin)
1 robert (@R-obert)
1 sbsoftware (@sbsoftware)
1 ssmallkirby (@smallkirby)
+1 -1
View File
@@ -120,7 +120,7 @@ can use the `-f` flag:
## Spell Checking
We are using `pre-commit` to run [codespell](https://github.com/codespell-project/codespell)
to check code for common misspellings. We have a small custom dictionary file [codespell.txt](codespell.txt).
to check code for common misspellings. We have a small custom dictionary file [codespell.txt](.github/linters/codespell.txt).
## Coding conventions
+1 -1
View File
@@ -8,6 +8,6 @@ WORKDIR /app
COPY Gemfile Gemfile.lock .pre-commit-config.yaml ./
RUN bundle install && pip3 install pre-commit && git init . && pre-commit install-hooks
RUN bundle install && pip3 install --no-cache-dir pre-commit && git init . && pre-commit install-hooks
COPY . .
+1 -1
View File
@@ -48,7 +48,7 @@ PROJECT_NAME = mruby
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 3.2.0
PROJECT_NUMBER = 3.3.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
+2 -4
View File
@@ -2,10 +2,8 @@ GEM
remote: https://rubygems.org/
specs:
coderay (1.1.3)
rake (13.0.6)
webrick (1.7.0)
yard (0.9.28)
webrick (~> 1.7.0)
rake (13.2.1)
yard (0.9.37)
yard-coderay (0.1.0)
coderay
yard
+28 -6
View File
@@ -4,17 +4,39 @@ LEGAL NOTICE INFORMATION
All the files in this distribution are covered under the MIT license
(see the file LICENSE) except some files mentioned below:
- src/readfloat.c: public domain by Yasuhiro Matsumoto (@mattn)
- src/string.c (memsearch_swar): 2 clause BSD license code by Wojciech Muła (@WojciechMula)
- src/fmt_fp.c: public domain by Dave Hylands (@dhylands)
- mrbgems/mruby-dir/src/Win/dirent.c: MIT-like license by Kevlin Henney
[src/readfloat.c]
[src/string.c]
The implementation of mrb_memsearch_ss() is taken from
https://github.com/WojciechMula/sse4-strstr.git
strtod implementation.
author: Yasuhiro Matsumoto (@mattn)
license: public domain
Copyright (c) 2008-2016, Wojciech Muła
All rights reserved.
The original code can be found in https://github.com/mattn/strtod
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[src/fmt_fp.c]
+34 -13
View File
@@ -1,35 +1,56 @@
# mruby is using Rake (https://ruby.github.io/rake/) as a build tool.
RAKE = rake
DOCKER_COMPOSE = docker-compose
PRE_COMMIT = pre-commit
all :
define check_command
@command -v $(1) >/dev/null 2>&1 || { \
echo "Error: $(1) is not installed or not in PATH."; \
exit 1; \
}
endef
all : check_rake
$(RAKE)
.PHONY : all
test : all
test : check_rake all
$(RAKE) test
.PHONY : test
clean :
clean : check_rake
$(RAKE) clean
.PHONY : clean
check :
pre-commit run --all-files
check : check_pre_commit
$(PRE_COMMIT) run --all-files
.PHONY : check
checkinstall :
pre-commit install
checkinstall : check_pre_commit
$(PRE_COMMIT) install
.PHONY : checkinstall
checkupdate :
pre-commit autoupdate
checkupdate : check_pre_commit
$(PRE_COMMIT) autoupdate
.PHONY : checkupdate
composecheck :
docker-compose -p mruby run test pre-commit run --all-files
composecheck : check_docker_compose check_pre_commit
$(DOCKER_COMPOSE) -p mruby run test $(PRE_COMMIT) run --all-files
.PHONY : composecheck
composetest :
docker-compose -p mruby run test
composetest : check_docker_compose
$(DOCKER_COMPOSE) -p mruby run test
.PHONY : composetest
check_rake:
$(call check_command, $(RAKE))
.PHONY : check_rake
check_docker_compose:
$(call check_command, $(DOCKER_COMPOSE))
.PHONY : check_docker_compose
check_pre_commit:
$(call check_command, $(PRE_COMMIT))
.PHONY : check_pre_commit
+122 -26
View File
@@ -3,91 +3,187 @@ NEWS
# User visible changes in `mruby3.3` from `mruby3.2`
"**_NOTE_**:" are changes to be aware of.
# The language
- aliases work properly with `super`
- `callee` method work differently with aliases in mruby
- define `Kernel#respond_to_missing?` method
- aliases work properly with `super` ([2ad3f0e](https://github.com/mruby/mruby/commit/2ad3f0e))
- `callee` method work differently with aliases in mruby ([f2dc76e](https://github.com/mruby/mruby/commit/f2dc76e))
- define `Kernel#respond_to_missing?` method ([347586e](https://github.com/mruby/mruby/commit/347586e))
- `_inspect` method (`inspect` with recursive check) is removed
- `__printstr` method is removed; use `print` instead
([e2bbf75](https://github.com/mruby/mruby/commit/e2bbf75), [5cb0c74](https://github.com/mruby/mruby/commit/5cb0c74), [113565a](https://github.com/mruby/mruby/commit/113565a),
[0713f2a](https://github.com/mruby/mruby/commit/0713f2a), [6ae6b63](https://github.com/mruby/mruby/commit/6ae6b63), [fc9fffc](https://github.com/mruby/mruby/commit/fc9fffc))
- `__printstr__` method is removed; use `print` instead
([acecee0](https://github.com/mruby/mruby/commit/acecee0), [192e6e3](https://github.com/mruby/mruby/commit/192e6e3))
- New method `String#bytesplice` ([5274647](https://github.com/mruby/mruby/commit/5274647), [a2e2e83](https://github.com/mruby/mruby/commit/a2e2e83))
- Allow `return` in blocks to cross C boundaries ([#6125](https://github.com/mruby/mruby/pull/6125))
# Configuration
- mruby can be built using Docker now. Try `docker-compose build` for example.
- New Platform: Nintendo Wii
- Improved Platforms: Android, Dreamcast
- mruby can be built using Docker now. Try `docker-compose build` for example. ([#5961](https://github.com/mruby/mruby/pull/5961))
- New Platform: DJGPP (MS-DOS) ([#6022](https://github.com/mruby/mruby/pull/6022))
- New Platform: Nintendo Wii ([#6086](https://github.com/mruby/mruby/pull/6086))
- Improved Platform: Android ([#6013](https://github.com/mruby/mruby/pull/6013))
- Improved Platform: Dreamcast ([#6130](https://github.com/mruby/mruby/pull/6130))
- Allow tests to be disabled for specific gems; warn about disabled tests ([#6012](https://github.com/mruby/mruby/pull/6012))
- Replace `MRB_NO_DIRECT_THREADING` with `MRB_USE_VM_SWITCH_DISPATCH` ([#5902](https://github.com/mruby/mruby/pull/5902))
# mruby memory API
- `mrb_default_allocf` can be overridden by the application
- `mrb_open_allocf` will be deprecated
- `mrb_default_allocf` can be overridden by the application ([34c5d96](https://github.com/mruby/mruby/commit/34c5d96))
- `mrb_open_allocf` will be deprecated ([cfee5c2](https://github.com/mruby/mruby/commit/cfee5c2))
# mruby VM and bytecode
# Changes in C API
- [#5870](https://github.com/mruby/mruby/issues/5870) Use OP_LOADINEG instead of OP_LOADI
- add new error handling API functions ([8c8bbd9](https://github.com/mruby/mruby/commit/8c8bbd9))
- Add `mrb_vm_ci_env_clear()` function with `MRB_API` ([#5945](https://github.com/mruby/mruby/pull/5945))
- a new function `mrb_check_frozen_value()` ([ccdf75c](https://github.com/mruby/mruby/commit/ccdf75c))
- avoid formatting in `mrb_bug()` ([82a48bd](https://github.com/mruby/mruby/commit/82a48bd)) <br>
**_NOTE_**: If you are using it, you must give a simple string or replace it with a call to `mrb_raise()` series.
- stop using `mrbc_` prefix for compiler context ([c5e3cbe](https://github.com/mruby/mruby/commit/c5e3cbe)) <br>
The same names are provided as before, but we recommend replacing them.
- Allow `Class#allocate` to be prohibited
([#5979](https://github.com/mruby/mruby/pull/5979), [#6122](https://github.com/mruby/mruby/pull/6122), [#6123](https://github.com/mruby/mruby/pull/6123)) <br>
To disable `#allocate`, use `MRB_UNDEF_ALLOCATOR()`.
This is also automatically applied when the subclass is created, but to explicitly allow it, use `MRB_DEFINE_ALLOCATOR()`.
# Changes in mrbgems
- mruby-bin-config: new options --cxx,--cxxflags,--as,--asflags,--objc,--objcflags
- mruby-binding-eval (merged with mruby-eval) #5989
- mruby-binding: renamed from mruby-binding-core
- mruby-enumerator: remove internal attribute methods obj, args, kwd, meth, fib.
- mruby-fiber: Add a new mrb_fiber_new() with MRB_API
- mruby-fiber: Allows calling `Fiber#resume` from C
- mruby-fiber: `Fiber#to_s` format changed
- mruby-io: Add "x" mode option for IO.open
- mruby-method: `Method#to_s` format changed
- mruby-pack: support new directives j,J,b,B
- mruby-range-ext: new method `Range#overlap?`
- mruby-string-ext: Add `String#valid_encoding?` method
- **default.gembox**: Add mruby debugger mrdb (`mruby-bin-debugger`) ([#5966](https://github.com/mruby/mruby/pull/5966))
- **mruby-bin-config**: new options `--cxx`, `--cxxflags`, `--as`, `--asflags`, `--objc`, `--objcflags` ([#6054](https://github.com/mruby/mruby/pull/6054))
- **mruby-binding**: renamed from `mruby-binding-core` of mruby3.2 ([11af5db](https://github.com/mruby/mruby/commit/11af5db)) <br>
**_NOTE_**: If using `mruby-binding-core` of mruby 3.2, replace it with `mruby-binding`.
- **mruby-binding**: implemented `Binding#initialize_copy` method ([#5517](https://github.com/mruby/mruby/pull/5517))
- **mruby-binding**: `Kernel#binding` responds only to calls from Ruby ([#5981](https://github.com/mruby/mruby/pull/5981))
- **mruby-compar-ext**: Comparable#clamp to accept nil as arguments ([836bebc](https://github.com/mruby/mruby/commit/836bebc))
- **mruby-compiler**: add print name for identifier tokens ([d7b2e3a](https://github.com/mruby/mruby/commit/d7b2e3a))
- **mruby-data**: allow empty Data ([927a9df](https://github.com/mruby/mruby/commit/927a9df))
- **mruby-enumerator**: remove internal attribute methods `obj`, `args`, `kwd`, `meth`, `fib`. ([735fa24](https://github.com/mruby/mruby/commit/735fa24))
- **mruby-enumerator**: add Enumerator#size ([861f8bd](https://github.com/mruby/mruby/commit/861f8bd))
- **mruby-eval**: merged `mruby-binding` of mruby3.2 ([501b22a](https://github.com/mruby/mruby/commit/501b22a), [#5989](https://github.com/mruby/mruby/pull/5989)) <br>
**_NOTE_**: If using `mruby-binding` of mruby 3.2, replace it with `mruby-eval`.
- **mruby-fiber**: Add a new `mrb_fiber_new()` with `MRB_API` ([#6097](https://github.com/mruby/mruby/pull/6097))
- **mruby-fiber**: Allows calling `Fiber#resume` from C ([#6106](https://github.com/mruby/mruby/pull/6106))
- **mruby-fiber**: `Fiber#to_s` format changed ([#6105](https://github.com/mruby/mruby/pull/6105))
- **mruby-io**: add File#atime and File#ctime ([321cfe9](https://github.com/mruby/mruby/commit/321cfe9))
- **mruby-io**: Add "x" mode option for `IO.open` ([#6081](https://github.com/mruby/mruby/pull/6081))
- **mruby-io**: File.new should not take blocks ([53de964](https://github.com/mruby/mruby/commit/53de964))
- **mruby-method**: `Method#to_s` format changed ([f5bc82f](https://github.com/mruby/mruby/commit/f5bc82f), [02f189c](https://github.com/mruby/mruby/commit/02f189c))
- **mruby-numeric-ext**: `int.pow(n,m)` to take bigint as exponential ([d482eab](https://github.com/mruby/mruby/commit/d482eab))
- **mruby-pack**: support new directives `j`, `J`, `b`, `B`, `#`
([2a1e3a5](https://github.com/mruby/mruby/commit/2a1e3a5), [e7021f1](https://github.com/mruby/mruby/commit/e7021f1), [e17f325](https://github.com/mruby/mruby/commit/e17f325))
- **mruby-range-ext**: new method `Range#overlap?` ([384d0e2](https://github.com/mruby/mruby/commit/384d0e2))
- **mruby-string-ext**: Add `String#valid_encoding?` method ([eabe2d9](https://github.com/mruby/mruby/commit/eabe2d9))
- **mruby-struct**: allow empty Struct when a name is not given ([c212ede](https://github.com/mruby/mruby/commit/c212ede))
- **mruby-time**: should allow year before 1900 ([e5de08b](https://github.com/mruby/mruby/commit/e5de08b))
- **mruby-time**: support bigint to time_t if necessary ([7096d27](https://github.com/mruby/mruby/commit/7096d27))
- **mruby-time**: need to handle negative time_t ([b064d7e](https://github.com/mruby/mruby/commit/b064d7e))
# Changes in build system
- Extended `rake install` task ([#5928](https://github.com/mruby/mruby/pull/5928)) <br>
**_NOTE_**: Due to this impact, executable files in the `mruby/bin/` directory by default are now symbolic links (batch files on Windows).
If previously relied on those executables, should be replaced with direct references to the entity created under the build directory (e.g. `mruby/build/host/bin/`).
- Encode and decode escape characters for presym ([#6011](https://github.com/mruby/mruby/pull/6011))
- Rakefile: remove default build target directories in `deep_clean` ([#6032](https://github.com/mruby/mruby/pull/6032), [1e38569](https://github.com/mruby/mruby/commit/1e38569))
# Other breaking changes
- `mrb_f_raise()` is now an internal function
([#5923](https://github.com/mruby/mruby/pull/5923), [#6070](https://github.com/mruby/mruby/pull/6070))
- `mrb_make_exception()` is now an internal function with different parameters
([431f83e](https://github.com/mruby/mruby/commit/431f83e), [78137f3](https://github.com/mruby/mruby/commit/78137f3))
- The `File#path` method no longer uses the `#to_path` method for implicit conversion
([d86c4a7](https://github.com/mruby/mruby/commit/d86c4a7))
- stop mrb isolation for each test file ([a20fbe5](https://github.com/mruby/mruby/commit/a20fbe5))
- RBreak remembers the CI location ([#6103](https://github.com/mruby/mruby/pull/6103))
# Bugs Fixed
- [#5712](https://github.com/mruby/mruby/issues/5712) No "make install"
- [#5724](https://github.com/mruby/mruby/issues/5724) Rational#** is missing
- [#5724](https://github.com/mruby/mruby/issues/5724) Rational#\*\* is missing
- [#5725](https://github.com/mruby/mruby/issues/5725) weird const_missing exceptions in mrblib code
- [#5789](https://github.com/mruby/mruby/issues/5789) No memory release of backtrace information due to stack error
- [#5932](https://github.com/mruby/mruby/issues/5932) How to create a block using the C API? mrb_yield keeps crashing!
- [#5943](https://github.com/mruby/mruby/issues/5943) TCPSocket#write is failed
- [#5944](https://github.com/mruby/mruby/issues/5944) Behavior of calling method with a hash variable
- [#5946](https://github.com/mruby/mruby/pull/5946) Don't switch constant search path from modules to Object
- [#5949](https://github.com/mruby/mruby/issues/5949) Caller appears to report wrong line when block passed and brackets omitted
- [0906cd7](https://github.com/mruby/mruby/commit/0906cd7) numeric.c: fix rounding function issues with big numbers
- [#5974](https://github.com/mruby/mruby/issues/5974) Invalid escape sequences in gem_init.c on windows
- [#5975](https://github.com/mruby/mruby/issues/5975) Equals comparison fails on extreme ends of 64-bit integers
- [#5985](https://github.com/mruby/mruby/issues/5985) Sign extension with OP_LOADI32 in get_int_operand()
- [#5986](https://github.com/mruby/mruby/issues/5986) Fix bugs in String#bytesplice
- [#5987](https://github.com/mruby/mruby/issues/5987) ~(-1 << 64) is incorrect
- [#5991](https://github.com/mruby/mruby/issues/5991) 'gets' method not working in mruby-3.2.0
- [#5994](https://github.com/mruby/mruby/pull/5994) fix typo in mrbgems/mruby-io/src/io.c
- [#5995](https://github.com/mruby/mruby/issues/5995) One seemingly unnecessary parameter is passed in the block parameters
- [#6008](https://github.com/mruby/mruby/pull/6008) Make "bintest" independent of directory
- [b47c8b7](https://github.com/mruby/mruby/commit/b47c8b7) gc.c (clear_all_old): fix a generational GC bug
- [#6029](https://github.com/mruby/mruby/issues/6029) mruby build fails under mrbgems directory
- [a264965](https://github.com/mruby/mruby/commit/a264965) mruby-os-memsize/memsize.c: fix irep size calculation
- [3310e10](https://github.com/mruby/mruby/commit/3310e10) mruby-test/mrbgem.rake: fix mrb_state handling bug
- [#6041](https://github.com/mruby/mruby/issues/6041) GC Performance may have degraded
- [#6044](https://github.com/mruby/mruby/issues/6044) Generated presym/table.h contains invalid characters
- [#6051](https://github.com/mruby/mruby/issues/6051) Null pointer dereference in mrb_addrinfo_unix_path
- [#6052](https://github.com/mruby/mruby/issues/6052) Null pointer dereference while handling the Proc class
- [#6055](https://github.com/mruby/mruby/pull/6055) Fix libmruby name for VisualC++
- [#6060](https://github.com/mruby/mruby/issues/6060) SEGFAULT Issue Related to Fiber Usage in ngx_mruby Development
- [#6061](https://github.com/mruby/mruby/issues/6061) Performance issue in String#codepoints
- [#6064](https://github.com/mruby/mruby/issues/6064) MRUBY_PACKAGE_DIR does not always have a value.
- [#6065](https://github.com/mruby/mruby/issues/6065) Null pointer dereference while handling the Proc class
- [#6066](https://github.com/mruby/mruby/issues/6066) Null pointer dereference involving Struct.new()
- [#6067](https://github.com/mruby/mruby/issues/6067) Null pointer dereference in mrb_string_value_cstr
- [#6068](https://github.com/mruby/mruby/issues/6068) Stack overflow in mrb_vm_exec
- [#6076](https://github.com/mruby/mruby/pull/6076) Fixed unwinding block that could point to invalid PC
- [#6084](https://github.com/mruby/mruby/issues/6084) Incorrect symbolic sinks in binary built on Linux
- [#6087](https://github.com/mruby/mruby/issues/6087) 'Remote branch HEAD not found in upstream origin' error on build
- [#6089](https://github.com/mruby/mruby/issues/6089) binding.eval() handles def expressions differently from CRuby
- [#6098](https://github.com/mruby/mruby/issues/6098) Fails to call superclass of wrapped method
- [#6099](https://github.com/mruby/mruby/issues/6099) `ensure` section is not executed if the function exits via a return in a proc
- [#6108](https://github.com/mruby/mruby/issues/6108) VM crashes with break
- [#6118](https://github.com/mruby/mruby/pull/6118) Fixed IO#read with buf
- [#6120](https://github.com/mruby/mruby/pull/6120) Set EBADF if check_file_descriptor() fails
- [#6126](https://github.com/mruby/mruby/pull/6126) Fixed return value of `OP_RETURN_BLK` called directly under C function
- [#6134](https://github.com/mruby/mruby/issues/6134) String#unpack1 returns an array instead of a single string
- [#6136](https://github.com/mruby/mruby/pull/6136) Fixed when combined `mrb_fiber_resume()` and `Fiber#transfer`
# Pull Requests (User Visible Ones)
- [#5870](https://github.com/mruby/mruby/pull/5870) Use OP_LOADINEG instead of OP_LOADI
- [#5517](https://github.com/mruby/mruby/pull/5517) Fixed local variables not separated between copied binding objects
- [#5902](https://github.com/mruby/mruby/pull/5902) Replace `MRB_NO_DIRECT_THREADING` with `MRB_USE_VM_SWITCH_DISPATCH`
- [#5923](https://github.com/mruby/mruby/pull/5923) Demotion `mrb_f_raise()` from `MRB_API`
- [#5928](https://github.com/mruby/mruby/pull/5928) Improved `rake install`
- [#5945](https://github.com/mruby/mruby/pull/5945) Avoid exposure for `REnv` objects
- [#5946](https://github.com/mruby/mruby/pull/5946) Don't switch constant search path from modules to Object
- [#5966](https://github.com/mruby/mruby/pull/5966) Update default.gembox add mruby debugger mrdb
- [#5979](https://github.com/mruby/mruby/pull/5979) Allow Class#allocate to be prohibited
- [#5981](https://github.com/mruby/mruby/pull/5981) `Kernel#binding` responds only to calls from Ruby
- [#5989](https://github.com/mruby/mruby/pull/5989) Integrate mruby-binding-eval into mruby-eval
- [#5961](https://github.com/mruby/mruby/pull/5961) Add Docker to build and run all mruby tests. Run pre-commit and generate YARD docs with Docker
- [#5994](https://github.com/mruby/mruby/pull/5994) fix typo in mrbgems/mruby-io/src/io.c
- [#6008](https://github.com/mruby/mruby/pull/6008) Make "bintest" independent of directory
- [#6009](https://github.com/mruby/mruby/pull/6009) Avoid adding <MRUBY_ROOT>/bintest which does not exist
- [#6011](https://github.com/mruby/mruby/pull/6011) Encode and decode escape characters for presym
- [#6012](https://github.com/mruby/mruby/pull/6012) Allow tests to be disabled for specific gems; warn about disabled tests
- [#6013](https://github.com/mruby/mruby/pull/6013) Fix Android toolchain
- [#6022](https://github.com/mruby/mruby/pull/6022) Build configuration for MS-DOS and DJGPP
- [#6032](https://github.com/mruby/mruby/pull/6032) Rake: update task clean to remove bin and build folders
- [#6045](https://github.com/mruby/mruby/pull/6045) Fixes escape sequence bug and enhancements in Presym scanning
- [#6054](https://github.com/mruby/mruby/pull/6054) Extends `bin/mruby-config`
- [#6055](https://github.com/mruby/mruby/pull/6055) Fix libmruby name for VisualC++
- [#6070](https://github.com/mruby/mruby/pull/6070) Demotion mrb_f_raise() in kernel.c from MRB_API too
- [#6076](https://github.com/mruby/mruby/pull/6076) Fixed unwinding block that could point to invalid PC
- [#6081](https://github.com/mruby/mruby/pull/6081) Add "x" mode option for IO.open
- [#6086](https://github.com/mruby/mruby/pull/6086) Add build config for Nintendo Wii
- [#6097](https://github.com/mruby/mruby/pull/6097) Add a new mrb_fiber_new() with MRB_API
- [#6103](https://github.com/mruby/mruby/pull/6103) RBreak remembers the CI location
- [#6105](https://github.com/mruby/mruby/pull/6105) Implement `Fiber#to_s` method
- [#6106](https://github.com/mruby/mruby/pull/6106) Ease fiber limitations
- [#6118](https://github.com/mruby/mruby/pull/6118) Fixed IO#read with buf
- [#6120](https://github.com/mruby/mruby/pull/6120) Set EBADF if check_file_descriptor() fails
- [#6122](https://github.com/mruby/mruby/pull/6122) Prohibit `Class#allocate` in a different way
- [#6123](https://github.com/mruby/mruby/pull/6123) Inherit `MRB_FL_UNDEF_ALLOCATE` in subclasses
- [#6125](https://github.com/mruby/mruby/pull/6125) Allow `OP_RETURN_BLK` to cross C boundaries
- [#6126](https://github.com/mruby/mruby/pull/6126) Fixed return value of `OP_RETURN_BLK` called directly under C function
- [#6130](https://github.com/mruby/mruby/pull/6130) `dreamcast_shelf build config`: complete overhaul
- [#6136](https://github.com/mruby/mruby/pull/6136) Fixed when combined `mrb_fiber_resume()` and `Fiber#transfer`
+26 -2
View File
@@ -30,11 +30,11 @@ of the Ministry of Economy, Trade and Industry of Japan.
## How to get mruby
To get mruby, you can download the stable version 3.2.0 from the official mruby
To get mruby, you can download the stable version 3.3.0 from the official mruby
GitHub repository or clone the trunk of the mruby source tree with the "git
clone" command. You can also install and compile mruby using [ruby-install](https://github.com/postmodern/ruby-install), [ruby-build](https://github.com/rbenv/ruby-build) or [rvm](https://github.com/rvm/rvm).
The release candidate version 3.3.0 of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/archive/3.3.0-rc2.zip](https://github.com/mruby/mruby/archive/3.3.0-rc2.zip)
The release candidate version 3.4.0 of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/archive/3.4.0-rc2.zip](https://github.com/mruby/mruby/archive/3.4.0-rc2.zip)
The latest development version of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/zipball/master](https://github.com/mruby/mruby/zipball/master)
@@ -87,6 +87,30 @@ extensions in C and/or Ruby. For a guide on how to use mrbgems, consult the
[mrbgems.md](doc/guides/mrbgems.md) file, and for example code, refer to the
[examples/mrbgems/](examples/mrbgems) folder.
## Index of Document
<!--
This section is generated by `rake doc:update-index`.
All manual changes will get lost.
-->
<!-- BEGIN OF MRUBY DOCUMENT INDEX -->
- [About the Limitations of mruby](doc/limitations.md)
- [About the Compile](doc/guides/compile.md)
- [About the Debugger with the `mrdb` Command](doc/guides/debugger.md)
- [About GC Arena](doc/guides/gc-arena-howto.md)
- [About the mruby directory structure](doc/guides/hier.md)
- [About Linking with `libmruby`](doc/guides/link.md)
- [About Memory Allocator Customization](doc/guides/memory.md)
- [About Build-time Configurations](doc/guides/mrbconf.md)
- [About the Build-time Library Manager](doc/guides/mrbgems.md)
- [About the Symbols](doc/guides/symbol.md)
- [Internal Implementation / About Value Boxing](doc/internal/boxing.md)
- [Internal Implementation / About mruby Virtual Machine Instructions](doc/internal/opcode.md)
<!-- END OF MRUBY DOCUMENT INDEX -->
## License
mruby is released under the [MIT License](LICENSE).
+9 -10
View File
@@ -4,39 +4,39 @@ shallow_clone: true
environment:
matrix:
- job_name: Visual Studio 2022 64bit
- job_name: Visual Studio 2022 64-bit
visualcpp: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat
appveyor_build_worker_image: Visual Studio 2022
- job_name: Visual Studio 2019 64bit
- job_name: Visual Studio 2019 64-bit
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat
appveyor_build_worker_image: Visual Studio 2019
- job_name: Visual Studio 2019 32bit
- job_name: Visual Studio 2019 32-bit
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat
appveyor_build_worker_image: Visual Studio 2019
- job_name: Visual Studio 2017 64bit
- job_name: Visual Studio 2017 64-bit
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat
appveyor_build_worker_image: Visual Studio 2017
- job_name: Visual Studio 2017 32bit
- job_name: Visual Studio 2017 32-bit
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat
appveyor_build_worker_image: Visual Studio 2017
- job_name: Visual Studio 2015 64bit
- job_name: Visual Studio 2015 64-bit
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
appveyor_build_worker_image: Visual Studio 2015
machine: x86_amd64
- job_name: Visual Studio 2015 32bit
- job_name: Visual Studio 2015 32-bit
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
appveyor_build_worker_image: Visual Studio 2015
machine: x86
init:
- call "%visualcpp%" %machine%
# For using RubyInstaller's Ruby 2.6 64bit
# For using RubyInstaller's Ruby 2.6 64-bit
# 2.6 is the highest supported Ruby version across all historical
# Visual Studio AppVeyor images. Ruby 2.7 is only on the 2019 image.
- set PATH=C:\Ruby26-x64\bin;%PATH%
@@ -44,5 +44,4 @@ init:
build_script:
- set MRUBY_CONFIG=ci/msvc
- rake -m test:build
- rake test:run
- rake -m test:run:serial
+57
View File
@@ -0,0 +1,57 @@
# The Computer Language Benchmarks Game
# http://shootout.alioth.debian.org/
#
# contributed by Karl von Laudermann
# modified by Jeremy Echols
size = 600 # ARGV[0].to_i
puts "P4\n#{size} #{size}"
ITER = 49 # Iterations - 1 for easy for..in looping
LIMIT_SQUARED = 4.0 # Presquared limit
byte_acc = 0
bit_num = 0
count_size = size - 1 # Precomputed size for easy for..in looping
# For..in loops are faster than .upto, .downto, .times, etc.
for y in 0..count_size
for x in 0..count_size
zr = 0.0
zi = 0.0
cr = (2.0*x/size)-1.5
ci = (2.0*y/size)-1.0
escape = false
# To make use of the for..in code, we use a dummy variable,
# like one would in C
for dummy in 0..ITER
tr = zr*zr - zi*zi + cr
ti = 2*zr*zi + ci
zr, zi = tr, ti
if (zr*zr+zi*zi) > LIMIT_SQUARED
escape = true
break
end
end
byte_acc = (byte_acc << 1) | (escape ? 0b0 : 0b1)
bit_num += 1
# Code is very similar for these cases, but using separate blocks
# ensures we skip the shifting when it's unnecessary, which is most cases.
if (bit_num == 8)
print byte_acc.chr
byte_acc = 0
bit_num = 0
elsif (x == count_size)
byte_acc <<= (8 - bit_num)
print byte_acc.chr
byte_acc = 0
bit_num = 0
end
end
end
-1
View File
@@ -60,7 +60,6 @@ MRuby::CrossBuild.new("ArduinoDue") do |conf|
conf.disable_cxx_exception
#gems from core
conf.gem :core => "mruby-print"
conf.gem :core => "mruby-math"
conf.gem :core => "mruby-enum-ext"
-1
View File
@@ -56,7 +56,6 @@ MRuby::CrossBuild.new("Galileo") do |conf|
#official mrbgems
conf.gem :core => "mruby-sprintf"
conf.gem :core => "mruby-print"
conf.gem :core => "mruby-math"
conf.gem :core => "mruby-time"
conf.gem :core => "mruby-struct"
-1
View File
@@ -50,7 +50,6 @@ MRuby::CrossBuild.new("RX630") do |conf|
#gems from core
conf.gem :core => "mruby-sprintf"
conf.gem :core => "mruby-print"
conf.gem :core => "mruby-math"
conf.gem :core => "mruby-enum-ext"
conf.gem :core => "mruby-numeric-ext"
-1
View File
@@ -56,7 +56,6 @@ MRuby::CrossBuild.new("chipKITMax32") do |conf|
conf.disable_cxx_exception
#gems from core
conf.gem :core => "mruby-print"
conf.gem :core => "mruby-math"
conf.gem :core => "mruby-enum-ext"
+3 -3
View File
@@ -6,7 +6,7 @@ MRuby::Build.new('full-debug') do |conf|
# include all core GEMs
conf.gembox 'full-core'
conf.cc.defines += %w(MRB_GC_STRESS MRB_USE_DEBUG_HOOK MRB_UTF8_STRING)
conf.cc.defines += %w(MRB_GC_STRESS MRB_USE_DEBUG_HOOK)
conf.enable_test
end
@@ -18,7 +18,7 @@ MRuby::Build.new do |conf|
conf.gembox 'full-core'
conf.gem :core => 'mruby-bin-debugger'
conf.compilers.each do |c|
c.defines += %w(MRB_GC_FIXED_ARENA MRB_UTF8_STRING)
c.defines += %w(MRB_GC_FIXED_ARENA)
end
conf.enable_bintest
conf.enable_test
@@ -30,7 +30,7 @@ MRuby::Build.new('cxx_abi') do |conf|
conf.gembox 'full-core'
conf.cc.flags += %w(-fpermissive -std=gnu++03)
conf.compilers.each do |c|
c.defines += %w(MRB_GC_FIXED_ARENA MRB_UTF8_STRING)
c.defines += %w(MRB_GC_FIXED_ARENA)
end
conf.enable_test
+3
View File
@@ -73,6 +73,9 @@ MRuby::Build.new do |conf|
# file separator
# conf.file_separator = '/'
# change library directory name from the default "lib" if necessary
# conf.libdir_name = 'lib64'
# Turn on `enable_debug` for better debugging
# conf.enable_debug
conf.enable_bintest
-1
View File
@@ -77,7 +77,6 @@ MRuby::CrossBuild.new("dreamcast") do |conf|
conf.gem :core => "mruby-error"
conf.gem :core => "mruby-exit"
conf.gem :core => "mruby-os-memsize"
conf.gem :core => "mruby-print"
conf.gem :core => "mruby-proc-binding"
conf.gem :core => "mruby-sleep"
end
+12
View File
@@ -0,0 +1,12 @@
# Make sure to add these compile options:
# build/emscripten-cxx/host-bin/mruby-config --cxxflags
#
# Make sure to add these link options:
# build/emscripten-cxx/host-bin/mruby-config --ldflags --libs
MRuby::CrossBuild.new('emscripten-cxx') do |conf|
conf.toolchain :emscripten
conf.gembox 'default'
conf.enable_cxx_abi
end
+10
View File
@@ -0,0 +1,10 @@
# Make sure to add these compile options:
# build/emscripten/host-bin/mruby-config --cflags
#
# Make sure to add these link options:
# build/emscripten/host-bin/mruby-config --ldflags --libs
MRuby::CrossBuild.new('emscripten') do |conf|
conf.toolchain :emscripten
conf.gembox 'default'
end
-1
View File
@@ -47,7 +47,6 @@ MRuby::CrossBuild.new("gameboyadvance") do |conf|
conf.gem core: "mruby-metaprog"
conf.gem core: "mruby-pack"
conf.gem core: "mruby-sprintf"
conf.gem core: "mruby-print"
conf.gem core: "mruby-math"
conf.gem core: "mruby-time"
conf.gem core: "mruby-struct"
+1 -1
View File
@@ -8,7 +8,7 @@ MRuby::Build.new('host') do |conf|
conf.gembox 'full-core'
# C compiler settings
conf.cc.defines = %w(MRB_USE_DEBUG_HOOK MRB_NO_BOXING MRB_UTF8_STRING)
conf.cc.defines = %w(MRB_USE_DEBUG_HOOK MRB_NO_BOXING)
# Generate mruby debugger command (require mruby-eval)
conf.gem :core => "mruby-bin-debugger"
+2 -3
View File
@@ -15,13 +15,13 @@ MRuby::CrossBuild.new("i586-pc-msdosdjgpp") do |conf|
conf.cc do |cc|
cc.command = DJGPP_PATH ? File.join(DJGPP_PATH, GCC) : GCC
cc.defines << 'MRB_WITHOUT_IO_PREAD_PWRITE'
cc.defines << 'MRB_NO_IO_PREAD_PWRITE'
cc.defines << 'MRB_UTF8_STRING'
end
conf.cxx do |cxx|
cxx.command = DJGPP_PATH ? File.join(DJGPP_PATH, GXX) : GXX
cxx.defines << 'MRB_WITHOUT_IO_PREAD_PWRITE'
cxx.defines << 'MRB_NO_IO_PREAD_PWRITE'
cxx.defines << 'MRB_UTF8_STRING'
end
@@ -42,7 +42,6 @@ MRuby::CrossBuild.new("i586-pc-msdosdjgpp") do |conf|
conf.gem :core => 'mruby-io' # stdlib-io.gembox <- default.gembox
# No socket support in DJGPP
# conf.gem :core => 'mruby-socket' # stdlib-io.gembox <- default.gembox
conf.gem :core => 'mruby-print' # stdlib-io.gembox <- default.gembox
conf.gem :core => 'mruby-errno' # stdlib-io.gembox <- default.gembox
conf.gem :core => 'mruby-dir' # stdlib-io.gembox <- default.gembox
+106
View File
@@ -0,0 +1,106 @@
# Cross Compiling configuration for Milk-V Duo.
# To build (on Ubuntu 24.04): rake MRUBY_CONFIG=build_config/milkv_duo.rb
#
# Requires: https://github.com/milkv-duo/duo-sdk
#
MRuby::CrossBuild.new("milkv_duo") do |conf|
# Set this string to match your board: milkv_duo, milkv_duo256m, milkv_duos
MILKV_DUO_VARIANT = "milkv_duo256m"
# Expect duo-sdk directory is same level as (next to) mruby top-level directory.
SDK_BASE = File.expand_path("../../../", File.expand_path(__FILE__)) + "/duo-sdk"
TOOLCHAIN_BASE = "#{SDK_BASE}/riscv64-linux-musl-x86_64"
SYSROOT = "#{SDK_BASE}/rootfs"
toolchain :gcc
# C compiler settings
conf.cc do |cc|
cc.command = "#{TOOLCHAIN_BASE}/bin/riscv64-unknown-linux-musl-gcc"
cc.include_paths << "#{TOOLCHAIN_BASE}/lib/gcc/riscv64-unknown-linux/musl/10.2.0/include-fixed"
cc.include_paths << "#{TOOLCHAIN_BASE}/lib/gcc/riscv64-unknown-linux/musl/10.2.0/include"
cc.include_paths << "#{TOOLCHAIN_BASE}/riscv64-unknown-linux/include"
cc.include_paths << "#{TOOLCHAIN_BASE}/include"
cc.include_paths << "#{SYSROOT}/usr/include"
cc.flags << ["-mcpu=c906fdv", "-march=rv64imafdcv0p7xthead", "-mcmodel=medany", "-mabi=lp64d"]
cc.flags << ["-D_LARGEFILE_SOURCE", "-D_LARGEFILE64_SOURCE", "-D_FILE_OFFSET_BITS=64"]
cc.flags << ["-Wl,--copy-dt-needed-entries", "-Wl,-lc,-lgcc_s,-lwiringx"]
cc.defines << "MILKV_DUO_VARIANT=_#{MILKV_DUO_VARIANT}"
end
# Linker settings
conf.linker do |linker|
linker.command = cc.command
linker.library_paths << ["#{SYSROOT}/lib", "#{SYSROOT}/usr/lib"]
linker.flags = cc.flags
end
# Archiver settings
conf.archiver do |archiver|
archiver.command = "#{TOOLCHAIN_BASE}/bin/riscv64-unknown-linux-musl-gcc-ar"
end
# Do not build executable test
conf.build_mrbtest_lib_only
# Disable C++ exception
conf.disable_cxx_exception
# All standard gems.
conf.gem 'mrbgems/mruby-array-ext/'
conf.gem 'mrbgems/mruby-bigint/'
conf.gem 'mrbgems/mruby-bin-config/'
conf.gem 'mrbgems/mruby-bin-debugger/'
conf.gem 'mrbgems/mruby-bin-mirb/'
conf.gem 'mrbgems/mruby-bin-mrbc/'
conf.gem 'mrbgems/mruby-bin-mruby/'
conf.gem 'mrbgems/mruby-bin-strip/'
conf.gem 'mrbgems/mruby-binding/'
conf.gem 'mrbgems/mruby-catch/'
conf.gem 'mrbgems/mruby-class-ext/'
conf.gem 'mrbgems/mruby-cmath/'
conf.gem 'mrbgems/mruby-compar-ext/'
conf.gem 'mrbgems/mruby-compiler/'
conf.gem 'mrbgems/mruby-complex/'
conf.gem 'mrbgems/mruby-data/'
conf.gem 'mrbgems/mruby-dir/'
conf.gem 'mrbgems/mruby-enum-chain/'
conf.gem 'mrbgems/mruby-enum-ext/'
conf.gem 'mrbgems/mruby-enum-lazy/'
conf.gem 'mrbgems/mruby-enumerator/'
conf.gem 'mrbgems/mruby-errno/'
conf.gem 'mrbgems/mruby-error/'
conf.gem 'mrbgems/mruby-eval/'
conf.gem 'mrbgems/mruby-exit/'
conf.gem 'mrbgems/mruby-fiber/'
conf.gem 'mrbgems/mruby-hash-ext/'
conf.gem 'mrbgems/mruby-io/'
conf.gem 'mrbgems/mruby-kernel-ext/'
conf.gem 'mrbgems/mruby-math/'
conf.gem 'mrbgems/mruby-metaprog/'
conf.gem 'mrbgems/mruby-method/'
conf.gem 'mrbgems/mruby-numeric-ext/'
conf.gem 'mrbgems/mruby-object-ext/'
conf.gem 'mrbgems/mruby-objectspace/'
conf.gem 'mrbgems/mruby-os-memsize/'
conf.gem 'mrbgems/mruby-pack/'
conf.gem 'mrbgems/mruby-proc-binding/'
conf.gem 'mrbgems/mruby-proc-ext/'
conf.gem 'mrbgems/mruby-random/'
conf.gem 'mrbgems/mruby-range-ext/'
conf.gem 'mrbgems/mruby-rational/'
conf.gem 'mrbgems/mruby-set/'
conf.gem 'mrbgems/mruby-sleep/'
conf.gem 'mrbgems/mruby-socket/'
conf.gem 'mrbgems/mruby-sprintf/'
conf.gem 'mrbgems/mruby-string-ext/'
conf.gem 'mrbgems/mruby-struct/'
conf.gem 'mrbgems/mruby-symbol-ext/'
# conf.gem 'mrbgems/mruby-test-inline-struct/'
# conf.gem 'mrbgems/mruby-test/'
conf.gem 'mrbgems/mruby-time/'
conf.gem 'mrbgems/mruby-toplevel-ext/'
# GPIO, ADC, PWM, I2C and SPI support for Milk-V Duo
# conf.gem :github => 'denko-rb/mruby-milkv-duo'
end
-1
View File
@@ -76,7 +76,6 @@ MRuby::CrossBuild.new("wii") do |conf|
conf.gem 'mrbgems/mruby-objectspace/'
conf.gem 'mrbgems/mruby-os-memsize/'
conf.gem 'mrbgems/mruby-pack/'
conf.gem 'mrbgems/mruby-print/'
conf.gem 'mrbgems/mruby-proc-binding/'
conf.gem 'mrbgems/mruby-proc-ext/'
conf.gem 'mrbgems/mruby-random/'
+17
View File
@@ -0,0 +1,17 @@
# Define cross build settings
MRuby::CrossBuild.new('no-float') do |conf|
conf.toolchain
# Add configuration
conf.compilers.each do |c|
c.defines << "MRB_NO_FLOAT"
end
conf.gem :core => "mruby-bin-mruby"
conf.test_runner.command = 'env'
conf.enable_debug
# conf.enable_bintest
conf.enable_test
end
+78
View File
@@ -0,0 +1,78 @@
# Cross Compiling configuration for the Sony PlayStation Portable.
# This configuration requires toolchain from https://github.com/pspdev
MRuby::CrossBuild.new("playstationportable") do |conf|
toolchain :gcc
PSPDEV_PATH = "#{ENV['PSPDEV']}"
BIN_PATH = "#{PSPDEV_PATH}/bin"
# C compiler
conf.cc do |cc|
cc.command = "#{BIN_PATH}/psp-gcc"
cc.flags << ["-O2", "-D_PSP_FW_VERSION=600"]
cc.include_paths << ["#{PSPDEV_PATH}/psp/include", "#{PSPDEV_PATH}/psp/sdk/include"]
cc.compile_options = %(%{flags} -o "%{outfile}" -c "%{infile}")
end
# C++ compiler
conf.cxx do |cxx|
cxx.command = "#{BIN_PATH}/psp-g++"
cxx.include_paths = conf.cc.include_paths.dup
cxx.flags = conf.cc.flags.dup
cxx.flags << %w[-fno-rtti -fno-exceptions]
cxx.defines = conf.cc.defines.dup
cxx.compile_options = conf.cc.compile_options.dup
end
# Linker
conf.linker do |linker|
linker.command = "#{BIN_PATH}/psp-gcc"
linker.flags << ["-Wl,-zmax-page-size=128"]
end
# No executables
conf.bins = []
# Do not build executable test
conf.build_mrbtest_lib_only
# Gems from core
conf.gem :core => "mruby-metaprog"
conf.gem :core => "mruby-pack"
conf.gem :core => "mruby-sprintf"
conf.gem :core => "mruby-math"
conf.gem :core => "mruby-time"
conf.gem :core => "mruby-struct"
conf.gem :core => "mruby-compar-ext"
conf.gem :core => "mruby-enum-ext"
conf.gem :core => "mruby-string-ext"
conf.gem :core => "mruby-numeric-ext"
conf.gem :core => "mruby-array-ext"
conf.gem :core => "mruby-hash-ext"
conf.gem :core => "mruby-range-ext"
conf.gem :core => "mruby-proc-ext"
conf.gem :core => "mruby-symbol-ext"
conf.gem :core => "mruby-random"
conf.gem :core => "mruby-object-ext"
conf.gem :core => "mruby-objectspace"
conf.gem :core => "mruby-fiber"
conf.gem :core => "mruby-enumerator"
conf.gem :core => "mruby-enum-lazy"
conf.gem :core => "mruby-toplevel-ext"
conf.gem :core => "mruby-kernel-ext"
conf.gem :core => "mruby-class-ext"
conf.gem :core => "mruby-compiler"
conf.gem :core => "mruby-binding"
conf.gem :core => "mruby-catch"
conf.gem :core => "mruby-enum-chain"
conf.gem :core => "mruby-errno"
conf.gem :core => "mruby-error"
conf.gem :core => "mruby-exit"
conf.gem :core => "mruby-os-memsize"
conf.gem :core => "mruby-proc-binding"
conf.gem :core => "mruby-sleep"
conf.gem :core => "mruby-io"
conf.gem :core => "mruby-dir"
#conf.gem :core => "mruby-socket" unsupported
end
+59
View File
@@ -1,3 +1,5 @@
<!-- summary: About the Compile -->
# Compile
mruby uses Rake to compile and cross-compile all libraries and
@@ -117,6 +119,36 @@ set the character via `conf.file_separator`.
conf.file_separator = '/'
```
### Name of library directory
In some environments, the `libmruby.a` file requires a different directory name than `lib`.
You can be changed to any name by the `conf.libdir_name` accessor.
```ruby
conf.libdir_name = 'lib64'
```
Alternatively, it can be changed via the environment variable `MRUBY_SYSTEM_LIBDIR_NAME` when
the `rake` command is run.
```console
$ export MRUBY_SYSTEM_LIBDIR_NAME=lib64
$ rake clean all
```
NOTES:
- This environment variable `MRUBY_SYSTEM_LIBDIR_NAME` does not affect `MRuby::CrossBuild`.
In other words, if you want to change it for `MRuby::CrossBuild`, you must set it with `MRuby::CrossBuild#libdir_name=`.
- If you want to switch this environment variable `MRUBY_SYSTEM_LIBDIR_NAME`, you must do `rake clean`.
A bad usage example is shown below.
```console
$ rake clean all
$ rake MRUBY_SYSTEM_LIBDIR_NAME=lib64 install
```
### C Compiler
Configuration of the C compiler binary, flags and include paths.
@@ -607,6 +639,33 @@ To summarize:
- For a build target other than "host", the default value of `MRuby::Build#install_prefix` is `<PREFIX>/mruby/<build-name>`.
- If the environment variable `DESTDIR` is set, the actual write directory is `<DESTDIR>/<MRuby::Build#install_prefix>`.
### Excluded files
In some cases there are files that you do not want to install.
In such cases, add a file path filter to the array object `MRuby::Build#install_excludes` to exclude them.
The following is an object that can be defined as a file path filter.
The `path` variable that appears is a relative path based on `MRuby::Build#build_dir`.
- string objects: files matched by `string.match?(path)` are excluded.
- regexp object: files matched by `regexp.match?(path)` are excluded.
- proc object: files which return true with `proc.call(path)` are excluded.
```ruby
# exclude bin/mrbc
conf.install_excludes << exefile("bin/mrbc")
# exclude all files under lib/ directory
conf.install_excludes << %r(^lib/)
# exclude bin/mrbtest, but in this case it is recommended to use string instead of proc
conf.install_excludes << proc { |path|
path == exefile("bin/mrbtest")
}
```
By default, it contains only a proc object to exclude `libmruby_core`.
## Tips
- If you see compilation troubles, try `rake clean` first.
+3 -1
View File
@@ -1,3 +1,5 @@
<!-- summary: About the Debugger with the `mrdb` Command -->
# How to Use the mruby Debugger
copyright (c) 2014 Specified Non-Profit Corporation mruby Forum
@@ -38,7 +40,7 @@ To confirm mrdb was installed properly, run mrdb with the `--version` option:
```bash
$ mrdb --version
mruby 3.2.0 (2023-02-24)
mruby 3.3.0 (2024-02-14)
```
## 2.2 Basic Operation
+2
View File
@@ -1,3 +1,5 @@
<!-- summary: About GC Arena -->
# How to use `mrb_gc_arena_save()`/`mrb_gc_arena_restore()`/`mrb_gc_protect()`
_This is an English translation of [Matz's blog post][matz blog post]
+62
View File
@@ -0,0 +1,62 @@
<!-- summary: About the mruby directory structure -->
# The mruby directory structure
```text
+- 💎 mruby/ The top directory of mruby.
|
+- 📁 .github/ GitHub configuration files for mruby project management.
|
+- 📁 benchmark/ Benchmarking files for mruby.
|
+- 📁 bin/ Links to temporary executables after build. Auto-created.
|
+- 📁 build/ Default build output destination for mruby. Auto-created.
| |
| +- 📁 repos/ The git clone destination directory for GEMs that depend on the build configuration.
| |
| +- 📁 host/ The "host" build output directory.
|
+- 📁 build_config/ Build configuration files for various environments.
|
+- 📁 doc/ Documentation for mruby.
| |
| +- 📁 guides/ Documentation for general users.
| |
| +- 📁 internal/ Documentation for internal implementations for developers.
|
+- 📁 examples/ Examples of mruby usages.
| |
| +- 📁 mrbgems/ Examples for creating custom GEM for mruby.
|
+- 📁 include/ C header files required when using mruby.
|
+- 📁 lib/ Ruby scripts used for building mruby.
|
+- 📁 mrbgems/ A library collection of features not provided by mruby core only.
| | See doc/guides/mrbgems.md file
| |
| +- 📁 mruby-*/ The directory of each GEMs.
| |
| +- 📃 *.gembox A collection of GEMs grouped by features and purposes.
|
+- 📁 mrblib/ The core Ruby scripts that makes up the main body of mruby.
|
+- 📁 oss-fuzz/ Source code for The fuzzing-test.
| See https://github.com/google/oss-fuzz
|
+- 📁 src/ The core C source code that makes up the main body of mruby.
|
+- 📁 tasks/ Rake tasks at build-time.
| |
| +- 📁 toolchains/ Definitions for the compiler, linker, archiver, etc. for each toolchain.
|
+- 📁 test/ Ruby scripts needed for testing mruby.
| |
| +- 📁 t/ mruby test cases.
|
+- 📁 tools/ External programs used for the mruby project.
|
+- 📁 lrama/ LALR parser generator as an alternative to bison.
Import from https://github.com/ruby/lrama
```
+2
View File
@@ -1,3 +1,5 @@
<!-- summary: About Linking with `libmruby` -->
# Linking `libmruby` to your application
You have two ways to link `libmruby` to your application.
+2
View File
@@ -1,3 +1,5 @@
<!-- summary: About Memory Allocator Customization -->
# Memory Allocation
There are three methods to customize memory allocation in mruby.
+6 -10
View File
@@ -1,3 +1,5 @@
<!-- summary: About Build-time Configurations -->
# mruby configuration macros
## The configuration file
@@ -105,7 +107,7 @@ end
`MRB_GC_TURN_OFF_GENERATIONAL`
- When defined turns generational GC by default.
- When defined turns generational GC off by default.
`MRB_GC_FIXED_ARENA`
@@ -121,7 +123,7 @@ end
`MRB_HEAP_PAGE_SIZE`
- Defines value is `1024`.
- Default value is `1024`.
- Specifies number of `RBasic` per each heap page.
- To calculate the number of bytes per heap page, it is "(size of management data per heap page) + (size per object) \* `MRB_HEAP_PAGE_SIZE`".
In mruby 3.1.0, the "size of management data per heap page" is 6 words, also "size per object" is 6 words.
@@ -197,7 +199,7 @@ end
`MRB_MALLOC_TRIM`
- call malloc_trim(0) for each mrb_full_gc() call
- call `malloc_trim(0)` for each `mrb_full_gc()` call
`MRB_UTF8_STRING`
@@ -211,7 +213,7 @@ end
`MRB_ARY_LENGTH_MAX`
- The maximum length of strings (default 1MB)
- The maximum length of arrays (default 1MB)
- set this value to zero to skip the check
`MRB_FUNCALL_ARGC_MAX`
@@ -236,12 +238,6 @@ end
- Ignored if `MRB_NO_METHOD_CACHE` is defined.
- Need to be the power of 2.
`MRB_USE_METHOD_T_STRUCT`
- Use C struct to represent `mrb_method_t`
- No `MRB_USE_METHOD_T_STRUCT` requires highest 2 bits of function pointers to be zero
- Define this macro on machines that use higher bits of pointers
`MRB_USE_ALL_SYMBOLS`
- Make it available `Symbol.all_symbols` in `mrbgems/mruby-symbol-ext`
+2
View File
@@ -1,3 +1,5 @@
<!-- summary: About the Build-time Library Manager -->
# mrbgems
mrbgems is a library manager to integrate C and Ruby extensions in an easy and
+3
View File
@@ -1,3 +1,5 @@
<!-- summary: About the Symbols -->
# Symbols
Symbols in `mruby` C source code is represented by `mrb_sym` which is alias of
@@ -61,6 +63,7 @@ header.
- `MRB_SYM_B(xor)` //=> xor! (Method with Bang)
- `MRB_SYM_Q(xor)` //=> xor? (Method with Question mark)
- `MRB_SYM_E(xor)` //=> xor= (Method with Equal)
- `MRB_GVSYM(xor)` //=> $xor (Global Variable)
- `MRB_CVSYM(xor)` //=> @@xor (Class Variable)
- `MRB_IVSYM(xor)` //=> @xor (Instance Variable)
- `MRB_OPSYM(xor)` //=> ^ (Operator)
+3 -1
View File
@@ -1,3 +1,5 @@
<!-- summary: About Value Boxing -->
# Boxing
The mruby objects and data are represented by C data type `mrb_value`. There are three options how to pack the data values in the `mrb_value`.
@@ -29,7 +31,7 @@ If you need full precision for floating-point numbers, define `MRB_WORDBOX_NO_FL
## NaN Boxing
NaN boxing packs the Ruby data in a floating-point numbers, which represent NaN (Not a Number) values. Under IEEE753 definitions every value that exponent is all set are considered as NaN. That means NaN can represent `2^51` values. NaN boxing is a teaching to pack the values in those NaN representation. In theory, 64 bit pointers are too big to fit in NaN, but practically most OS use only 48 bits at most for pointers (except for some OS e.g. Solaris).
NaN boxing packs the Ruby data in a floating-point numbers, which represent NaN (Not a Number) values. Under IEEE753 definitions every value that exponent is all set are considered as NaN. That means NaN can represent `2^51` values. NaN boxing is a teaching to pack the values in those NaN representation. In theory, 64-bit pointers are too big to fit in NaN, but practically most OS use only 48 bits at most for pointers (except for some OS e.g. Solaris).
The NaN boxing packing bit patterns are like following:
+111 -109
View File
@@ -1,3 +1,5 @@
<!-- summary: About mruby Virtual Machine Instructions -->
# The new bytecode
We will reimplement the VM to use 8bit instruction code. By
@@ -12,7 +14,7 @@ have 106 instructions. Instructions can take 0 to 3 operands.
## operands
The size of operands can be either 8bits, 16bits or 24bits.
In the table.1 below, the second field describes the size
In the table.1 below, the third field describes the size
of operands.
- B: 8bit
@@ -26,111 +28,111 @@ See also `OP_EXT1`, `OP_EXT2` and `OP_EXT3`.
## table.1 Instruction Table
| Instruction Name | Operand type | Semantics |
|--------------------|----------------|------------------------------------------------------------|
| `OP_NOP` | `-` | `no operation` |
| `OP_MOVE` | `BB` | `R(a) = R(b)` |
| `OP_LOADL` | `BB` | `R(a) = Pool(b)` |
| `OP_LOADI` | `BB` | `R(a) = mrb_int(b)` |
| `OP_LOADINEG` | `BB` | `R(a) = mrb_int(-b)` |
| `OP_LOADI__1` | `B` | `R(a) = mrb_int(-1)` |
| `OP_LOADI_0` | `B` | `R(a) = mrb_int(0)` |
| `OP_LOADI_1` | `B` | `R(a) = mrb_int(1)` |
| `OP_LOADI_2` | `B` | `R(a) = mrb_int(2)` |
| `OP_LOADI_3` | `B` | `R(a) = mrb_int(3)` |
| `OP_LOADI_4` | `B` | `R(a) = mrb_int(4)` |
| `OP_LOADI_5` | `B` | `R(a) = mrb_int(5)` |
| `OP_LOADI_6` | `B` | `R(a) = mrb_int(6)` |
| `OP_LOADI_7` | `B` | `R(a) = mrb_int(7)` |
| `OP_LOADI16` | `BS` | `R(a) = mrb_int(b)` |
| `OP_LOADI32` | `BSS` | `R(a) = mrb_int((b<<16)+c)` |
| `OP_LOADSYM` | `BB` | `R(a) = Syms(b)` |
| `OP_LOADNIL` | `B` | `R(a) = nil` |
| `OP_LOADSELF` | `B` | `R(a) = self` |
| `OP_LOADT` | `B` | `R(a) = true` |
| `OP_LOADF` | `B` | `R(a) = false` |
| `OP_GETGV` | `BB` | `R(a) = getglobal(Syms(b))` |
| `OP_SETGV` | `BB` | `setglobal(Syms(b), R(a))` |
| `OP_GETSV` | `BB` | `R(a) = Special[Syms(b)]` |
| `OP_SETSV` | `BB` | `Special[Syms(b)] = R(a)` |
| `OP_GETIV` | `BB` | `R(a) = ivget(Syms(b))` |
| `OP_SETIV` | `BB` | `ivset(Syms(b),R(a))` |
| `OP_GETCV` | `BB` | `R(a) = cvget(Syms(b))` |
| `OP_SETCV` | `BB` | `cvset(Syms(b),R(a))` |
| `OP_GETCONST` | `BB` | `R(a) = constget(Syms(b))` |
| `OP_SETCONST` | `BB` | `constset(Syms(b),R(a))` |
| `OP_GETMCNST` | `BB` | `R(a) = R(a)::Syms(b)` |
| `OP_SETMCNST` | `BB` | `R(a+1)::Syms(b) = R(a)` |
| `OP_GETUPVAR` | `BBB` | `R(a) = uvget(b,c)` |
| `OP_SETUPVAR` | `BBB` | `uvset(b,c,R(a))` |
| `OP_GETIDX` | `B` | `R(a) = R(a)[R(a+1)]` |
| `OP_SETIDX` | `B` | `R(a)[R(a+1)] = R(a+2)` |
| `OP_JMP` | `S` | `pc+=a` |
| `OP_JMPIF` | `BS` | `if R(a) pc+=b` |
| `OP_JMPNOT` | `BS` | `if !R(a) pc+=b` |
| `OP_JMPNIL` | `BS` | `if R(a)==nil pc+=b` |
| `OP_JMPUW` | `S` | `unwind_and_jump_to(a)` |
| `OP_EXCEPT` | `B` | `R(a) = exc` |
| `OP_RESCUE` | `BB` | `R(b) = R(a).isa?(R(b))` |
| `OP_RAISEIF` | `B` | `raise(R(a)) if R(a)` |
| `OP_SSEND` | `BBB` | `R(a) = self.send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..) (c=n\|k<<4)` |
| `OP_SSENDB` | `BBB` | `R(a) = self.send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..,&R(a+n+2k+1))` |
| `OP_SEND` | `BBB` | `R(a) = R(a).send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..) (c=n\|k<<4)` |
| `OP_SENDB` | `BBB` | `R(a) = R(a).send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..,&R(a+n+2k+1))` |
| `OP_CALL` | `-` | `self.call(*, **, &) (But overlay the current call frame; tailcall)` |
| `OP_SUPER` | `BB` | `R(a) = super(R(a+1),... ,R(a+b+1))` |
| `OP_ARGARY` | `BS` | `R(a) = argument array (16=m5:r1:m5:d1:lv4)` |
| `OP_ENTER` | `W` | `arg setup according to flags (23=m5:o5:r1:m5:k5:d1:b1)` |
| `OP_KEY_P` | `BB` | `R(a) = kdict.key?(Syms(b))` |
| `OP_KEYEND` | `-` | `raise unless kdict.empty?` |
| `OP_KARG` | `BB` | `R(a) = kdict[Syms(b)]; kdict.delete(Syms(b))` |
| `OP_RETURN` | `B` | `return R(a) (normal)` |
| `OP_RETURN_BLK` | `B` | `return R(a) (in-block return)` |
| `OP_BREAK` | `B` | `break R(a)` |
| `OP_BLKPUSH` | `BS` | `R(a) = block (16=m5:r1:m5:d1:lv4)` |
| `OP_ADD` | `B` | `R(a) = R(a)+R(a+1)` |
| `OP_ADDI` | `BB` | `R(a) = R(a)+mrb_int(b)` |
| `OP_SUB` | `B` | `R(a) = R(a)-R(a+1)` |
| `OP_SUBI` | `BB` | `R(a) = R(a)-mrb_int(b)` |
| `OP_MUL` | `B` | `R(a) = R(a)*R(a+1)` |
| `OP_DIV` | `B` | `R(a) = R(a)/R(a+1)` |
| `OP_EQ` | `B` | `R(a) = R(a)==R(a+1)` |
| `OP_LT` | `B` | `R(a) = R(a)<R(a+1)` |
| `OP_LE` | `B` | `R(a) = R(a)<=R(a+1)` |
| `OP_GT` | `B` | `R(a) = R(a)>R(a+1)` |
| `OP_GE` | `B` | `R(a) = R(a)>=R(a+1)` |
| `OP_ARRAY` | `BB` | `R(a) = ary_new(R(a),R(a+1)..R(a+b))` |
| `OP_ARRAY2` | `BBB` | `R(a) = ary_new(R(b),R(b+1)..R(b+c))` |
| `OP_ARYCAT` | `B` | `ary_cat(R(a),R(a+1))` |
| `OP_ARYPUSH` | `BB` | `ary_push(R(a),R(a+1)..R(a+b))` |
| `OP_ARYSPLAT` | `B` | `R(a) = ary_splat(R(a))` |
| `OP_AREF` | `BBB` | `R(a) = R(b)[c]` |
| `OP_ASET` | `BBB` | `R(b)[c] = R(a)` |
| `OP_APOST` | `BBB` | `*R(a),R(a+1)..R(a+c) = R(a)[b..]` |
| `OP_INTERN` | `B` | `R(a) = intern(R(a))` |
| `OP_SYMBOL` | `BB` | `R(a) = intern(Pool(b))` |
| `OP_STRING` | `BB` | `R(a) = str_dup(Pool(b))` |
| `OP_STRCAT` | `B` | `str_cat(R(a),R(a+1))` |
| `OP_HASH` | `BB` | `R(a) = hash_new(R(a),R(a+1)..R(a+b*2-1))` |
| `OP_HASHADD` | `BB` | `hash_push(R(a),R(a+1)..R(a+b*2))` |
| `OP_HASHCAT` | `B` | `R(a) = hash_cat(R(a),R(a+1))` |
| `OP_LAMBDA` | `BB` | `R(a) = lambda(Irep(b),OP_L_LAMBDA)` |
| `OP_BLOCK` | `BB` | `R(a) = lambda(Irep(b),OP_L_BLOCK)` |
| `OP_METHOD` | `BB` | `R(a) = lambda(Irep(b),OP_L_METHOD)` |
| `OP_RANGE_INC` | `B` | `R(a) = range_new(R(a),R(a+1),FALSE)` |
| `OP_RANGE_EXC` | `B` | `R(a) = range_new(R(a),R(a+1),TRUE)` |
| `OP_OCLASS` | `B` | `R(a) = ::Object` |
| `OP_CLASS` | `BB` | `R(a) = newclass(R(a),Syms(b),R(a+1))` |
| `OP_MODULE` | `BB` | `R(a) = newmodule(R(a),Syms(b))` |
| `OP_EXEC` | `BB` | `R(a) = blockexec(R(a),Irep(b))` |
| `OP_DEF` | `BB` | `R(a).newmethod(Syms(b),R(a+1)); R(a) = Syms(b)` |
| `OP_ALIAS` | `BB` | `alias_method(target_class,Syms(a),Syms(b))` |
| `OP_UNDEF` | `B` | `undef_method(target_class,Syms(a))` |
| `OP_SCLASS` | `B` | `R(a) = R(a).singleton_class` |
| `OP_TCLASS` | `B` | `R(a) = target_class` |
| `OP_DEBUG` | `BBB` | `print a,b,c` |
| `OP_ERR` | `B` | `raise(LocalJumpError, Pool(a))` |
| `OP_EXT1` | `-` | `make 1st operand (a) 16bit` |
| `OP_EXT2` | `-` | `make 2nd operand (b) 16bit` |
| `OP_EXT3` | `-` | `make 1st and 2nd operands 16bit` |
| `OP_STOP` | `-` | `stop VM` |
| No. | Instruction Name | Operand type | Semantics
| --: | ---------------- | ------------ | ---------------
| 0 | `OP_NOP` | `-` | `no operation`
| 1 | `OP_MOVE` | `BB` | `R(a) = R(b)`
| 2 | `OP_LOADL` | `BB` | `R(a) = Pool(b)`
| 3 | `OP_LOADI8` | `BB` | `R(a) = mrb_int(b)`
| 4 | `OP_LOADINEG` | `BB` | `R(a) = mrb_int(-b)`
| 5 | `OP_LOADI__1` | `B` | `R(a) = mrb_int(-1)`
| 6 | `OP_LOADI_0` | `B` | `R(a) = mrb_int(0)`
| 7 | `OP_LOADI_1` | `B` | `R(a) = mrb_int(1)`
| 8 | `OP_LOADI_2` | `B` | `R(a) = mrb_int(2)`
| 9 | `OP_LOADI_3` | `B` | `R(a) = mrb_int(3)`
| 10 | `OP_LOADI_4` | `B` | `R(a) = mrb_int(4)`
| 11 | `OP_LOADI_5` | `B` | `R(a) = mrb_int(5)`
| 12 | `OP_LOADI_6` | `B` | `R(a) = mrb_int(6)`
| 13 | `OP_LOADI_7` | `B` | `R(a) = mrb_int(7)`
| 14 | `OP_LOADI16` | `BS` | `R(a) = mrb_int(b)`
| 15 | `OP_LOADI32` | `BSS` | `R(a) = mrb_int((b<<16)+c)`
| 16 | `OP_LOADSYM` | `BB` | `R(a) = Syms(b)`
| 17 | `OP_LOADNIL` | `B` | `R(a) = nil`
| 18 | `OP_LOADSELF` | `B` | `R(a) = self`
| 19 | `OP_LOADT` | `B` | `R(a) = true`
| 20 | `OP_LOADF` | `B` | `R(a) = false`
| 21 | `OP_GETGV` | `BB` | `R(a) = getglobal(Syms(b))`
| 22 | `OP_SETGV` | `BB` | `setglobal(Syms(b), R(a))`
| 23 | `OP_GETSV` | `BB` | `R(a) = Special[Syms(b)]`
| 24 | `OP_SETSV` | `BB` | `Special[Syms(b)] = R(a)`
| 25 | `OP_GETIV` | `BB` | `R(a) = ivget(Syms(b))`
| 26 | `OP_SETIV` | `BB` | `ivset(Syms(b),R(a))`
| 27 | `OP_GETCV` | `BB` | `R(a) = cvget(Syms(b))`
| 28 | `OP_SETCV` | `BB` | `cvset(Syms(b),R(a))`
| 29 | `OP_GETCONST` | `BB` | `R(a) = constget(Syms(b))`
| 30 | `OP_SETCONST` | `BB` | `constset(Syms(b),R(a))`
| 31 | `OP_GETMCNST` | `BB` | `R(a) = R(a)::Syms(b)`
| 32 | `OP_SETMCNST` | `BB` | `R(a+1)::Syms(b) = R(a)`
| 33 | `OP_GETUPVAR` | `BBB` | `R(a) = uvget(b,c)`
| 34 | `OP_SETUPVAR` | `BBB` | `uvset(b,c,R(a))`
| 35 | `OP_GETIDX` | `B` | `R(a) = R(a)[R(a+1)]`
| 36 | `OP_SETIDX` | `B` | `R(a)[R(a+1)] = R(a+2)`
| 37 | `OP_JMP` | `S` | `pc+=a`
| 38 | `OP_JMPIF` | `BS` | `if R(a) pc+=b`
| 39 | `OP_JMPNOT` | `BS` | `if !R(a) pc+=b`
| 40 | `OP_JMPNIL` | `BS` | `if R(a)==nil pc+=b`
| 41 | `OP_JMPUW` | `S` | `unwind_and_jump_to(a)`
| 42 | `OP_EXCEPT` | `B` | `R(a) = exc`
| 43 | `OP_RESCUE` | `BB` | `R(b) = R(a).isa?(R(b))`
| 44 | `OP_RAISEIF` | `B` | `raise(R(a)) if R(a)`
| 45 | `OP_SSEND` | `BBB` | `R(a) = self.send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..) (c=n\|k<<4)`
| 46 | `OP_SSENDB` | `BBB` | `R(a) = self.send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..,&R(a+n+2k+1))`
| 47 | `OP_SEND` | `BBB` | `R(a) = R(a).send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..) (c=n\|k<<4)`
| 48 | `OP_SENDB` | `BBB` | `R(a) = R(a).send(Syms(b),R(a+1)..,R(a+n+1):R(a+n+2)..,&R(a+n+2k+1))`
| 49 | `OP_CALL` | `-` | `self.call(*, **, &) (But overlay the current call frame; tailcall)`
| 50 | `OP_SUPER` | `BB` | `R(a) = super(R(a+1),... ,R(a+b+1))`
| 51 | `OP_ARGARY` | `BS` | `R(a) = argument array (16=m5:r1:m5:d1:lv4)`
| 52 | `OP_ENTER` | `W` | `arg setup according to flags (23=m5:o5:r1:m5:k5:d1:b1)`
| 53 | `OP_KEY_P` | `BB` | `R(a) = kdict.key?(Syms(b))`
| 54 | `OP_KEYEND` | `-` | `raise unless kdict.empty?`
| 55 | `OP_KARG` | `BB` | `R(a) = kdict[Syms(b)]; kdict.delete(Syms(b))`
| 56 | `OP_RETURN` | `B` | `return R(a) (normal)`
| 57 | `OP_RETURN_BLK` | `B` | `return R(a) (in-block return)`
| 58 | `OP_BREAK` | `B` | `break R(a)`
| 59 | `OP_BLKPUSH` | `BS` | `R(a) = block (16=m5:r1:m5:d1:lv4)`
| 60 | `OP_ADD` | `B` | `R(a) = R(a)+R(a+1)`
| 61 | `OP_ADDI` | `BB` | `R(a) = R(a)+mrb_int(b)`
| 62 | `OP_SUB` | `B` | `R(a) = R(a)-R(a+1)`
| 63 | `OP_SUBI` | `BB` | `R(a) = R(a)-mrb_int(b)`
| 64 | `OP_MUL` | `B` | `R(a) = R(a)*R(a+1)`
| 65 | `OP_DIV` | `B` | `R(a) = R(a)/R(a+1)`
| 66 | `OP_EQ` | `B` | `R(a) = R(a)==R(a+1)`
| 67 | `OP_LT` | `B` | `R(a) = R(a)<R(a+1)`
| 68 | `OP_LE` | `B` | `R(a) = R(a)<=R(a+1)`
| 69 | `OP_GT` | `B` | `R(a) = R(a)>R(a+1)`
| 70 | `OP_GE` | `B` | `R(a) = R(a)>=R(a+1)`
| 71 | `OP_ARRAY` | `BB` | `R(a) = ary_new(R(a),R(a+1)..R(a+b))`
| 72 | `OP_ARRAY2` | `BBB` | `R(a) = ary_new(R(b),R(b+1)..R(b+c))`
| 73 | `OP_ARYCAT` | `B` | `ary_cat(R(a),R(a+1))`
| 74 | `OP_ARYPUSH` | `BB` | `ary_push(R(a),R(a+1)..R(a+b))`
| 75 | `OP_ARYSPLAT` | `B` | `R(a) = ary_splat(R(a))`
| 76 | `OP_AREF` | `BBB` | `R(a) = R(b)[c]`
| 77 | `OP_ASET` | `BBB` | `R(b)[c] = R(a)`
| 78 | `OP_APOST` | `BBB` | `*R(a),R(a+1)..R(a+c) = R(a)[b..]`
| 79 | `OP_INTERN` | `B` | `R(a) = intern(R(a))`
| 80 | `OP_SYMBOL` | `BB` | `R(a) = intern(Pool(b))`
| 81 | `OP_STRING` | `BB` | `R(a) = str_dup(Pool(b))`
| 82 | `OP_STRCAT` | `B` | `str_cat(R(a),R(a+1))`
| 83 | `OP_HASH` | `BB` | `R(a) = hash_new(R(a),R(a+1)..R(a+b*2-1))`
| 84 | `OP_HASHADD` | `BB` | `hash_push(R(a),R(a+1)..R(a+b*2))`
| 85 | `OP_HASHCAT` | `B` | `R(a) = hash_cat(R(a),R(a+1))`
| 86 | `OP_LAMBDA` | `BB` | `R(a) = lambda(Irep(b),OP_L_LAMBDA)`
| 87 | `OP_BLOCK` | `BB` | `R(a) = lambda(Irep(b),OP_L_BLOCK)`
| 88 | `OP_METHOD` | `BB` | `R(a) = lambda(Irep(b),OP_L_METHOD)`
| 89 | `OP_RANGE_INC` | `B` | `R(a) = range_new(R(a),R(a+1),FALSE)`
| 90 | `OP_RANGE_EXC` | `B` | `R(a) = range_new(R(a),R(a+1),TRUE)`
| 91 | `OP_OCLASS` | `B` | `R(a) = ::Object`
| 92 | `OP_CLASS` | `BB` | `R(a) = newclass(R(a),Syms(b),R(a+1))`
| 93 | `OP_MODULE` | `BB` | `R(a) = newmodule(R(a),Syms(b))`
| 94 | `OP_EXEC` | `BB` | `R(a) = blockexec(R(a),Irep(b))`
| 95 | `OP_DEF` | `BB` | `R(a).newmethod(Syms(b),R(a+1)); R(a) = Syms(b)`
| 96 | `OP_ALIAS` | `BB` | `alias_method(target_class,Syms(a),Syms(b))`
| 97 | `OP_UNDEF` | `B` | `undef_method(target_class,Syms(a))`
| 98 | `OP_SCLASS` | `B` | `R(a) = R(a).singleton_class`
| 99 | `OP_TCLASS` | `B` | `R(a) = target_class`
| 100 | `OP_DEBUG` | `BBB` | `print a,b,c`
| 101 | `OP_ERR` | `B` | `raise(LocalJumpError, Pool(a))`
| 102 | `OP_EXT1` | `-` | `make 1st operand (a) 16bit`
| 103 | `OP_EXT2` | `-` | `make 2nd operand (b) 16bit`
| 104 | `OP_EXT3` | `-` | `make 1st and 2nd operands 16bit`
| 105 | `OP_STOP` | `-` | `stop VM`
+2 -69
View File
@@ -1,3 +1,5 @@
<!-- summary: About the Limitations of mruby -->
# Limitations and Differences
The philosophy of mruby is to be a lightweight implementation of
@@ -70,75 +72,6 @@ p Liste.new "foobar"
`ArgumentError` is raised.
## Method visibility
For simplicity reasons no method visibility (public/private/protected) is
supported. Those methods are defined, but they are dummy methods.
```ruby
class VisibleTest
def public_method; end
private
def private_method; end
end
p VisibleTest.new.respond_to?(:private_method, false)
p VisibleTest.new.respond_to?(:private_method, true)
```
#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
```
false
true
```
#### mruby [3.1.0 (2022-05-12)]
```
true
true
```
### Visibility Declaration
The declaration form of following visibility methods are not implemented.
- `public`
- `private`
- `protected`
- `module_function`
Especially, `module_function` method is not dummy, but no declaration form.
```ruby
module TestModule
module_function
def test_func
p 'test_func called'
end
test_func
end
p 'ok'
```
#### Ruby [ruby 2.5.5p157 (2019-03-15 revision 67260)]
```
ok
```
#### mruby [3.1.0 (2022-05-12)]
```
test.rb:8: undefined method 'test_func' (NoMethodError)
```
## `defined?`
The `defined?` keyword is considered too complex to be fully
+2 -2
View File
@@ -9,7 +9,7 @@ directory. For examples:
- `default`: the default configuration
- `host-gprof`: compiles with `gprof` for performance tuning
- `host-m32`: compiles in gcc 32bit mode on 64bit platforms
- `host-m32`: compiles in gcc 32-bit mode on 64-bit platforms
- `boxing`: compiles all three boxing options
- `clang-asan`: compiles with `clang`'s Address Sanitizer
@@ -62,7 +62,7 @@ or `MRB_NO_XXX`).
- `MRB_USE_FLOAT32` is changed from `MRB_USE_FLOAT` to make sure `float` here
means using single-precision float, and not the opposite of `MRB_NO_FLOAT`.
- `MRB_USE_METHOD_T_STRUCT` uses `struct` version of `mrb_method_t`. More
portable but consumes more memory. Turned on by default on 32bit platforms.
portable but consumes more memory. Turned on by default on 32-bit platforms.
- `MRB_` prefix is added to those without.
## `MRB_NO_BOXING`
+1 -1
View File
@@ -37,7 +37,7 @@ We have added several new build configurations in the `build_config` directory.
- `nintendo_switch.rb`
- `serenity.rb`
- `minimal`: minimal configuration
- `host-f32`: compiles with `mrb_float` as 32 bit `float`
- `host-f32`: compiles with `mrb_float` as 32-bit `float`
- `host-nofloat`: compiles with no float configuration
- `android_arm64_v8a.rb`: renamed from `android_arm64-v8a.rb`
+121 -25
View File
@@ -1,90 +1,186 @@
# User visible changes in `mruby3.3` from `mruby3.2`
"**_NOTE_**:" are changes to be aware of.
# The language
- aliases work properly with `super`
- `callee` method work differently with aliases in mruby
- define `Kernel#respond_to_missing?` method
- aliases work properly with `super` ([2ad3f0e](https://github.com/mruby/mruby/commit/2ad3f0e))
- `callee` method work differently with aliases in mruby ([f2dc76e](https://github.com/mruby/mruby/commit/f2dc76e))
- define `Kernel#respond_to_missing?` method ([347586e](https://github.com/mruby/mruby/commit/347586e))
- `_inspect` method (`inspect` with recursive check) is removed
- `__printstr` method is removed; use `print` instead
([e2bbf75](https://github.com/mruby/mruby/commit/e2bbf75), [5cb0c74](https://github.com/mruby/mruby/commit/5cb0c74), [113565a](https://github.com/mruby/mruby/commit/113565a),
[0713f2a](https://github.com/mruby/mruby/commit/0713f2a), [6ae6b63](https://github.com/mruby/mruby/commit/6ae6b63), [fc9fffc](https://github.com/mruby/mruby/commit/fc9fffc))
- `__printstr__` method is removed; use `print` instead
([acecee0](https://github.com/mruby/mruby/commit/acecee0), [192e6e3](https://github.com/mruby/mruby/commit/192e6e3))
- New method `String#bytesplice` ([5274647](https://github.com/mruby/mruby/commit/5274647), [a2e2e83](https://github.com/mruby/mruby/commit/a2e2e83))
- Allow `return` in blocks to cross C boundaries ([#6125](https://github.com/mruby/mruby/pull/6125))
# Configuration
- mruby can be built using Docker now. Try `docker-compose build` for example.
- New Platform: Nintendo Wii
- Improved Platforms: Android, Dreamcast
- mruby can be built using Docker now. Try `docker-compose build` for example. ([#5961](https://github.com/mruby/mruby/pull/5961))
- New Platform: DJGPP (MS-DOS) ([#6022](https://github.com/mruby/mruby/pull/6022))
- New Platform: Nintendo Wii ([#6086](https://github.com/mruby/mruby/pull/6086))
- Improved Platform: Android ([#6013](https://github.com/mruby/mruby/pull/6013))
- Improved Platform: Dreamcast ([#6130](https://github.com/mruby/mruby/pull/6130))
- Allow tests to be disabled for specific gems; warn about disabled tests ([#6012](https://github.com/mruby/mruby/pull/6012))
- Replace `MRB_NO_DIRECT_THREADING` with `MRB_USE_VM_SWITCH_DISPATCH` ([#5902](https://github.com/mruby/mruby/pull/5902))
# mruby memory API
- `mrb_default_allocf` can be overridden by the application
- `mrb_open_allocf` will be deprecated
- `mrb_default_allocf` can be overridden by the application ([34c5d96](https://github.com/mruby/mruby/commit/34c5d96))
- `mrb_open_allocf` will be deprecated ([cfee5c2](https://github.com/mruby/mruby/commit/cfee5c2))
# mruby VM and bytecode
# Changes in C API
- [#5870](https://github.com/mruby/mruby/issues/5870) Use OP_LOADINEG instead of OP_LOADI
- add new error handling API functions ([8c8bbd9](https://github.com/mruby/mruby/commit/8c8bbd9))
- Add `mrb_vm_ci_env_clear()` function with `MRB_API` ([#5945](https://github.com/mruby/mruby/pull/5945))
- a new function `mrb_check_frozen_value()` ([ccdf75c](https://github.com/mruby/mruby/commit/ccdf75c))
- avoid formatting in `mrb_bug()` ([82a48bd](https://github.com/mruby/mruby/commit/82a48bd)) <br>
**_NOTE_**: If you are using it, you must give a simple string or replace it with a call to `mrb_raise()` series.
- stop using `mrbc_` prefix for compiler context ([c5e3cbe](https://github.com/mruby/mruby/commit/c5e3cbe)) <br>
The same names are provided as before, but we recommend replacing them.
- Allow `Class#allocate` to be prohibited
([#5979](https://github.com/mruby/mruby/pull/5979), [#6122](https://github.com/mruby/mruby/pull/6122), [#6123](https://github.com/mruby/mruby/pull/6123)) <br>
To disable `#allocate`, use `MRB_UNDEF_ALLOCATOR()`.
This is also automatically applied when the subclass is created, but to explicitly allow it, use `MRB_DEFINE_ALLOCATOR()`.
# Changes in mrbgems
- mruby-bin-config: new options --cxx,--cxxflags,--as,--asflags,--objc,--objcflags
- mruby-binding-eval (merged with mruby-eval) #5989
- mruby-binding: renamed from mruby-binding-core
- mruby-enumerator: remove internal attribute methods obj, args, kwd, meth, fib.
- mruby-fiber: Add a new mrb_fiber_new() with MRB_API
- mruby-fiber: Allows calling `Fiber#resume` from C
- mruby-fiber: `Fiber#to_s` format changed
- mruby-io: Add "x" mode option for IO.open
- mruby-method: `Method#to_s` format changed
- mruby-pack: support new directives j,J,b,B
- mruby-range-ext: new method `Range#overlap?`
- mruby-string-ext: Add `String#valid_encoding?` method
- **default.gembox**: Add mruby debugger mrdb (`mruby-bin-debugger`) ([#5966](https://github.com/mruby/mruby/pull/5966))
- **mruby-bin-config**: new options `--cxx`, `--cxxflags`, `--as`, `--asflags`, `--objc`, `--objcflags` ([#6054](https://github.com/mruby/mruby/pull/6054))
- **mruby-binding**: renamed from `mruby-binding-core` of mruby3.2 ([11af5db](https://github.com/mruby/mruby/commit/11af5db)) <br>
**_NOTE_**: If using `mruby-binding-core` of mruby 3.2, replace it with `mruby-binding`.
- **mruby-binding**: implemented `Binding#initialize_copy` method ([#5517](https://github.com/mruby/mruby/pull/5517))
- **mruby-binding**: `Kernel#binding` responds only to calls from Ruby ([#5981](https://github.com/mruby/mruby/pull/5981))
- **mruby-compar-ext**: Comparable#clamp to accept nil as arguments ([836bebc](https://github.com/mruby/mruby/commit/836bebc))
- **mruby-compiler**: add print name for identifier tokens ([d7b2e3a](https://github.com/mruby/mruby/commit/d7b2e3a))
- **mruby-data**: allow empty Data ([927a9df](https://github.com/mruby/mruby/commit/927a9df))
- **mruby-enumerator**: remove internal attribute methods `obj`, `args`, `kwd`, `meth`, `fib`. ([735fa24](https://github.com/mruby/mruby/commit/735fa24))
- **mruby-enumerator**: add Enumerator#size ([861f8bd](https://github.com/mruby/mruby/commit/861f8bd))
- **mruby-eval**: merged `mruby-binding` of mruby3.2 ([501b22a](https://github.com/mruby/mruby/commit/501b22a), [#5989](https://github.com/mruby/mruby/pull/5989)) <br>
**_NOTE_**: If using `mruby-binding` of mruby 3.2, replace it with `mruby-eval`.
- **mruby-fiber**: Add a new `mrb_fiber_new()` with `MRB_API` ([#6097](https://github.com/mruby/mruby/pull/6097))
- **mruby-fiber**: Allows calling `Fiber#resume` from C ([#6106](https://github.com/mruby/mruby/pull/6106))
- **mruby-fiber**: `Fiber#to_s` format changed ([#6105](https://github.com/mruby/mruby/pull/6105))
- **mruby-io**: add File#atime and File#ctime ([321cfe9](https://github.com/mruby/mruby/commit/321cfe9))
- **mruby-io**: Add "x" mode option for `IO.open` ([#6081](https://github.com/mruby/mruby/pull/6081))
- **mruby-io**: File.new should not take blocks ([53de964](https://github.com/mruby/mruby/commit/53de964))
- **mruby-method**: `Method#to_s` format changed ([f5bc82f](https://github.com/mruby/mruby/commit/f5bc82f), [02f189c](https://github.com/mruby/mruby/commit/02f189c))
- **mruby-numeric-ext**: `int.pow(n,m)` to take bigint as exponential ([d482eab](https://github.com/mruby/mruby/commit/d482eab))
- **mruby-pack**: support new directives `j`, `J`, `b`, `B`, `#`
([2a1e3a5](https://github.com/mruby/mruby/commit/2a1e3a5), [e7021f1](https://github.com/mruby/mruby/commit/e7021f1), [e17f325](https://github.com/mruby/mruby/commit/e17f325))
- **mruby-range-ext**: new method `Range#overlap?` ([384d0e2](https://github.com/mruby/mruby/commit/384d0e2))
- **mruby-string-ext**: Add `String#valid_encoding?` method ([eabe2d9](https://github.com/mruby/mruby/commit/eabe2d9))
- **mruby-struct**: allow empty Struct when a name is not given ([c212ede](https://github.com/mruby/mruby/commit/c212ede))
- **mruby-time**: should allow year before 1900 ([e5de08b](https://github.com/mruby/mruby/commit/e5de08b))
- **mruby-time**: support bigint to time_t if necessary ([7096d27](https://github.com/mruby/mruby/commit/7096d27))
- **mruby-time**: need to handle negative time_t ([b064d7e](https://github.com/mruby/mruby/commit/b064d7e))
# Changes in build system
- Extended `rake install` task ([#5928](https://github.com/mruby/mruby/pull/5928)) <br>
**_NOTE_**: Due to this impact, executable files in the `mruby/bin/` directory by default are now symbolic links (batch files on Windows).
If previously relied on those executables, should be replaced with direct references to the entity created under the build directory (e.g. `mruby/build/host/bin/`).
- Encode and decode escape characters for presym ([#6011](https://github.com/mruby/mruby/pull/6011))
- Rakefile: remove default build target directories in `deep_clean` ([#6032](https://github.com/mruby/mruby/pull/6032), [1e38569](https://github.com/mruby/mruby/commit/1e38569))
# Other breaking changes
- `mrb_f_raise()` is now an internal function
([#5923](https://github.com/mruby/mruby/pull/5923), [#6070](https://github.com/mruby/mruby/pull/6070))
- `mrb_make_exception()` is now an internal function with different parameters
([431f83e](https://github.com/mruby/mruby/commit/431f83e), [78137f3](https://github.com/mruby/mruby/commit/78137f3))
- The `File#path` method no longer uses the `#to_path` method for implicit conversion
([d86c4a7](https://github.com/mruby/mruby/commit/d86c4a7))
- stop mrb isolation for each test file ([a20fbe5](https://github.com/mruby/mruby/commit/a20fbe5))
- RBreak remembers the CI location ([#6103](https://github.com/mruby/mruby/pull/6103))
# Bugs Fixed
- [#5712](https://github.com/mruby/mruby/issues/5712) No "make install"
- [#5724](https://github.com/mruby/mruby/issues/5724) Rational#\*\* is missing
- [#5725](https://github.com/mruby/mruby/issues/5725) weird const_missing exceptions in mrblib code
- [#5789](https://github.com/mruby/mruby/issues/5789) No memory release of backtrace information due to stack error
- [#5932](https://github.com/mruby/mruby/issues/5932) How to create a block using the C API? mrb_yield keeps crashing!
- [#5943](https://github.com/mruby/mruby/issues/5943) TCPSocket#write is failed
- [#5944](https://github.com/mruby/mruby/issues/5944) Behavior of calling method with a hash variable
- [#5946](https://github.com/mruby/mruby/pull/5946) Don't switch constant search path from modules to Object
- [#5949](https://github.com/mruby/mruby/issues/5949) Caller appears to report wrong line when block passed and brackets omitted
- [0906cd7](https://github.com/mruby/mruby/commit/0906cd7) numeric.c: fix rounding function issues with big numbers
- [#5974](https://github.com/mruby/mruby/issues/5974) Invalid escape sequences in gem_init.c on windows
- [#5975](https://github.com/mruby/mruby/issues/5975) Equals comparison fails on extreme ends of 64-bit integers
- [#5985](https://github.com/mruby/mruby/issues/5985) Sign extension with OP_LOADI32 in get_int_operand()
- [#5986](https://github.com/mruby/mruby/issues/5986) Fix bugs in String#bytesplice
- [#5987](https://github.com/mruby/mruby/issues/5987) ~(-1 << 64) is incorrect
- [#5991](https://github.com/mruby/mruby/issues/5991) 'gets' method not working in mruby-3.2.0
- [#5994](https://github.com/mruby/mruby/pull/5994) fix typo in mrbgems/mruby-io/src/io.c
- [#5995](https://github.com/mruby/mruby/issues/5995) One seemingly unnecessary parameter is passed in the block parameters
- [#6008](https://github.com/mruby/mruby/pull/6008) Make "bintest" independent of directory
- [b47c8b7](https://github.com/mruby/mruby/commit/b47c8b7) gc.c (clear_all_old): fix a generational GC bug
- [#6029](https://github.com/mruby/mruby/issues/6029) mruby build fails under mrbgems directory
- [a264965](https://github.com/mruby/mruby/commit/a264965) mruby-os-memsize/memsize.c: fix irep size calculation
- [3310e10](https://github.com/mruby/mruby/commit/3310e10) mruby-test/mrbgem.rake: fix mrb_state handling bug
- [#6041](https://github.com/mruby/mruby/issues/6041) GC Performance may have degraded
- [#6044](https://github.com/mruby/mruby/issues/6044) Generated presym/table.h contains invalid characters
- [#6051](https://github.com/mruby/mruby/issues/6051) Null pointer dereference in mrb_addrinfo_unix_path
- [#6052](https://github.com/mruby/mruby/issues/6052) Null pointer dereference while handling the Proc class
- [#6055](https://github.com/mruby/mruby/pull/6055) Fix libmruby name for VisualC++
- [#6060](https://github.com/mruby/mruby/issues/6060) SEGFAULT Issue Related to Fiber Usage in ngx_mruby Development
- [#6061](https://github.com/mruby/mruby/issues/6061) Performance issue in String#codepoints
- [#6064](https://github.com/mruby/mruby/issues/6064) MRUBY_PACKAGE_DIR does not always have a value.
- [#6065](https://github.com/mruby/mruby/issues/6065) Null pointer dereference while handling the Proc class
- [#6066](https://github.com/mruby/mruby/issues/6066) Null pointer dereference involving Struct.new()
- [#6067](https://github.com/mruby/mruby/issues/6067) Null pointer dereference in mrb_string_value_cstr
- [#6068](https://github.com/mruby/mruby/issues/6068) Stack overflow in mrb_vm_exec
- [#6076](https://github.com/mruby/mruby/pull/6076) Fixed unwinding block that could point to invalid PC
- [#6084](https://github.com/mruby/mruby/issues/6084) Incorrect symbolic sinks in binary built on Linux
- [#6087](https://github.com/mruby/mruby/issues/6087) 'Remote branch HEAD not found in upstream origin' error on build
- [#6089](https://github.com/mruby/mruby/issues/6089) binding.eval() handles def expressions differently from CRuby
- [#6098](https://github.com/mruby/mruby/issues/6098) Fails to call superclass of wrapped method
- [#6099](https://github.com/mruby/mruby/issues/6099) `ensure` section is not executed if the function exits via a return in a proc
- [#6108](https://github.com/mruby/mruby/issues/6108) VM crashes with break
- [#6118](https://github.com/mruby/mruby/pull/6118) Fixed IO#read with buf
- [#6120](https://github.com/mruby/mruby/pull/6120) Set EBADF if check_file_descriptor() fails
- [#6126](https://github.com/mruby/mruby/pull/6126) Fixed return value of `OP_RETURN_BLK` called directly under C function
- [#6134](https://github.com/mruby/mruby/issues/6134) String#unpack1 returns an array instead of a single string
- [#6136](https://github.com/mruby/mruby/pull/6136) Fixed when combined `mrb_fiber_resume()` and `Fiber#transfer`
# Pull Requests (User Visible Ones)
- [#5870](https://github.com/mruby/mruby/pull/5870) Use OP_LOADINEG instead of OP_LOADI
- [#5517](https://github.com/mruby/mruby/pull/5517) Fixed local variables not separated between copied binding objects
- [#5902](https://github.com/mruby/mruby/pull/5902) Replace `MRB_NO_DIRECT_THREADING` with `MRB_USE_VM_SWITCH_DISPATCH`
- [#5923](https://github.com/mruby/mruby/pull/5923) Demotion `mrb_f_raise()` from `MRB_API`
- [#5928](https://github.com/mruby/mruby/pull/5928) Improved `rake install`
- [#5945](https://github.com/mruby/mruby/pull/5945) Avoid exposure for `REnv` objects
- [#5946](https://github.com/mruby/mruby/pull/5946) Don't switch constant search path from modules to Object
- [#5966](https://github.com/mruby/mruby/pull/5966) Update default.gembox add mruby debugger mrdb
- [#5979](https://github.com/mruby/mruby/pull/5979) Allow Class#allocate to be prohibited
- [#5981](https://github.com/mruby/mruby/pull/5981) `Kernel#binding` responds only to calls from Ruby
- [#5989](https://github.com/mruby/mruby/pull/5989) Integrate mruby-binding-eval into mruby-eval
- [#5961](https://github.com/mruby/mruby/pull/5961) Add Docker to build and run all mruby tests. Run pre-commit and generate YARD docs with Docker
- [#5994](https://github.com/mruby/mruby/pull/5994) fix typo in mrbgems/mruby-io/src/io.c
- [#6008](https://github.com/mruby/mruby/pull/6008) Make "bintest" independent of directory
- [#6009](https://github.com/mruby/mruby/pull/6009) Avoid adding <MRUBY_ROOT>/bintest which does not exist
- [#6011](https://github.com/mruby/mruby/pull/6011) Encode and decode escape characters for presym
- [#6012](https://github.com/mruby/mruby/pull/6012) Allow tests to be disabled for specific gems; warn about disabled tests
- [#6013](https://github.com/mruby/mruby/pull/6013) Fix Android toolchain
- [#6022](https://github.com/mruby/mruby/pull/6022) Build configuration for MS-DOS and DJGPP
- [#6032](https://github.com/mruby/mruby/pull/6032) Rake: update task clean to remove bin and build folders
- [#6045](https://github.com/mruby/mruby/pull/6045) Fixes escape sequence bug and enhancements in Presym scanning
- [#6054](https://github.com/mruby/mruby/pull/6054) Extends `bin/mruby-config`
- [#6055](https://github.com/mruby/mruby/pull/6055) Fix libmruby name for VisualC++
- [#6070](https://github.com/mruby/mruby/pull/6070) Demotion mrb_f_raise() in kernel.c from MRB_API too
- [#6076](https://github.com/mruby/mruby/pull/6076) Fixed unwinding block that could point to invalid PC
- [#6081](https://github.com/mruby/mruby/pull/6081) Add "x" mode option for IO.open
- [#6086](https://github.com/mruby/mruby/pull/6086) Add build config for Nintendo Wii
- [#6097](https://github.com/mruby/mruby/pull/6097) Add a new mrb_fiber_new() with MRB_API
- [#6103](https://github.com/mruby/mruby/pull/6103) RBreak remembers the CI location
- [#6105](https://github.com/mruby/mruby/pull/6105) Implement `Fiber#to_s` method
- [#6106](https://github.com/mruby/mruby/pull/6106) Ease fiber limitations
- [#6118](https://github.com/mruby/mruby/pull/6118) Fixed IO#read with buf
- [#6120](https://github.com/mruby/mruby/pull/6120) Set EBADF if check_file_descriptor() fails
- [#6122](https://github.com/mruby/mruby/pull/6122) Prohibit `Class#allocate` in a different way
- [#6123](https://github.com/mruby/mruby/pull/6123) Inherit `MRB_FL_UNDEF_ALLOCATE` in subclasses
- [#6125](https://github.com/mruby/mruby/pull/6125) Allow `OP_RETURN_BLK` to cross C boundaries
- [#6126](https://github.com/mruby/mruby/pull/6126) Fixed return value of `OP_RETURN_BLK` called directly under C function
- [#6130](https://github.com/mruby/mruby/pull/6130) `dreamcast_shelf build config`: complete overhaul
- [#6136](https://github.com/mruby/mruby/pull/6136) Fixed when combined `mrb_fiber_resume()` and `Fiber#transfer`
+251
View File
@@ -0,0 +1,251 @@
# User visible changes in `mruby3.4` from `mruby3.3`
"**_NOTE_**:" are changes to be aware of.
# The language
- mruby now supports `private` and `protected` visibitily ([b0db0bd](https://github.com/mruby/mruby/commit/b0db0bd))
- Maximum length of inlined symbols reduced from 5 to 4 characters to provide space for visibility flags ([6442a01](https://github.com/mruby/mruby/commit/6442a01))
- Many methods are made private according to CRuby visibility ([4a0e806](https://github.com/mruby/mruby/commit/4a0e806))
- Generate OP_SSEND for `self.method` type calls ([111fe4b](https://github.com/mruby/mruby/commit/111fe4b))
- `initialize` method will be always private ([eb8b412](https://github.com/mruby/mruby/commit/eb8b412))
- Add new hooks `method_removed`, `method_undefined` ([9c74f6e](https://github.com/mruby/mruby/commit/9c74f6e))
- Add new hooks `singleton_method_removed`, `singleton_method_undefined` ([0863c08](https://github.com/mruby/mruby/commit/0863c08))
- Updated `OP_DEF` output from codedump ([3a3e877](https://github.com/mruby/mruby/commit/3a3e877))
- Better handling of binary strings, e.g. String#b ([b0127f0](https://github.com/mruby/mruby/commit/b0127f0))
- Hash `to_s` format has changed ([baeeb5e](https://github.com/mruby/mruby/commit/baeeb5e))
- Some encoding related method such as `#force_encoding` ([e47b4ca](https://github.com/mruby/mruby/commit/e47b4ca)), `#b` ([b0127f0](https://github.com/mruby/mruby/commit/b0127f0))
- Constant folding for `String#+` ([6687bdd](https://github.com/mruby/mruby/commit/6687bdd))
- Remove Float bit-operation ([db8368f](https://github.com/mruby/mruby/commit/db8368f))
- use SWAR technique for strlen performance ([cbb31e6](https://github.com/mruby/mruby/commit/cbb31e6))
- use merge sort for `Array#sort` ([5bd63d6](https://github.com/mruby/mruby/commit/5bd63d6))
# Changes in C API
- pool.c renamed to mempool.c (and mrb_pool to mrb_mempool) ([49525fa](https://github.com/mruby/mruby/commit/49525fa))
- mrb_pool_value renamed to mrb_irep_pool to reduce confusion ([62ef5db](https://github.com/mruby/mruby/commit/62ef5db))
- rename BOXNIX_SET_VALUE to BOXNO_SET_VALUE ([#6397](https://github.com/mruby/mruby/pull/6397))
- `MRB_FROZEN_P()` is replaced by `mrb_frozen_p()` ([c11d18e](https://github.com/mruby/mruby/commit/c11d18e))
- rename `color` to `gc_color` ([0e79f6b](https://github.com/mruby/mruby/commit/0e79f6b), [1e36d76](https://github.com/mruby/mruby/commit/1e36d76))
- add `obj->frozen` instead of flags `MRB_SET_FROZEN_FLAG`/`MRB_UNSET_FROZEN_FLAG` ([8276143](https://github.com/mruby/mruby/commit/8276143))
# Build & Configuration
- New Build Target: `test:run:serial`, `test:run:serial:lib`, `test:run:serial:bin` ([#6423](https://github.com/mruby/mruby/pull/6423))
- New Platform: Playstation Portable ([#6022](https://github.com/mruby/mruby/pull/6465))
- New Platform: emscripten ([#6487](https://github.com/mruby/mruby/pull/6487))
- New Config: no-float (with MRB_NO_FLOAT) ([32200f1](https://github.com/mruby/mruby/commit/32200f1))
# Changes in mrbgems
- **mruby-print**: removed; if you do not use `mruby-io`, mruby use `#print` etc. in the core ([8c8bbd9](https://github.com/mruby/mruby/commit/8c8bbd9))
- **mruby-enum-lazy**: Add Enumerable::Lazy#grep_v to mruby-enum-lazy ([#6171](https://github.com/mruby/mruby/pull/6171))
- **mruby-io**: Add `level` argument to `File.dirname` ([#6463](https://github.com/mruby/mruby/pull/6463))
- **mruby-io**: File.absolute_path? ([#6482](https://github.com/mruby/mruby/pull/6482))
- **mruby-io**: File.absolute_path ([96113a2](https://github.com/mruby/mruby/commit/96113a2))
- **mruby-toplevel-ext**: top-level public/private/protected moved to the core ([2a876d2](https://github.com/mruby/mruby/commit/2a876d2))
- **mruby-metaprog**: method list methods now works according to the visibility ([9229da1](https://github.com/mruby/mruby/commit/9229da1))
- **mruby-metaprog**: `public_instance_methods`, `private_instance_methods`, `protected_instance_methods` ([9e3e7b2](https://github.com/mruby/mruby/commit/9e3e7b2))
- **mruby-encoding**: MRB_UTF8_STRING turned on automatically with this gem ([74bdae9](https://github.com/mruby/mruby/commit/74bdae9))
# Fixed GitHub Issues
- [#6173](https://github.com/mruby/mruby/issues/6173) Fails to build with tcc(Tiny C Compiler)
- [#6156](https://github.com/mruby/mruby/issues/6156) '/LIBPATH' issue
- [#6183](https://github.com/mruby/mruby/issues/6183) ".e".to_f returns NAN
- [#6182](https://github.com/mruby/mruby/issues/6182) mrb_read_float() converts "0.3" with a small error compared to strtod()
- [#6210](https://github.com/mruby/mruby/issues/6210) Unary minus seems broken
- [#6255](https://github.com/mruby/mruby/issues/6255) Wrong number of characters in broken UTF-8 string
- [#4038](https://github.com/mruby/mruby/issues/4038) Heap buffer overflow in OP_ENTER
- [#6262](https://github.com/mruby/mruby/issues/6262) Unable to define == for objects when using Array#delete
- [#6267](https://github.com/mruby/mruby/issues/6267) When MRB_UTF8_STRING is enabled, giving byte characters for String#index and String#split gives wrong results
- [#6277](https://github.com/mruby/mruby/issues/6277) MSVC: can't use malloc() in string.c with WIN32_LEAN_AND_MEAN
- [#6240](https://github.com/mruby/mruby/issues/6240) Differentiate between lib and lib64 in the build settings.
- [#6304](https://github.com/mruby/mruby/issues/6304) Calling method_missing with only Kwargs passes arguments incorrectly
- [#6317](https://github.com/mruby/mruby/issues/6317) mrb_gc_register() may cause GC and collect the object being protected
- [#6307](https://github.com/mruby/mruby/issues/6307) Planned change patch for mrb_vm_exec()
- [#6298](https://github.com/mruby/mruby/issues/6298) foo :bar {} is legal in mruby?
- [#6326](https://github.com/mruby/mruby/issues/6326) Detect “Use-after-free” with address sanitizer
- [#5358](https://github.com/mruby/mruby/issues/5358) static warning from getpwnam
- [#6339](https://github.com/mruby/mruby/issues/6339) mrb_ary_delete() may refer to an invalid address (use-after-free)
- [#6346](https://github.com/mruby/mruby/issues/6346) Block kwargs are passed as last positional arg when using yield
- [#6365](https://github.com/mruby/mruby/issues/6365) powl() not available when compiling for Dreamcast
- [#6369](https://github.com/mruby/mruby/issues/6369) 100x Performance Regression from 3.1
- [#6270](https://github.com/mruby/mruby/issues/6270) NODE_ZSUPER from deeply nested blocks will result in a truncated digits for block index in OP_ARGARY
- [#6297](https://github.com/mruby/mruby/issues/6297) Assigning to a block variable changes the actual block (thus affecting block_given? and yield)
- [#6389](https://github.com/mruby/mruby/issues/6389) instance_exec named block args don't work properly
- [#6388](https://github.com/mruby/mruby/issues/6388) Recent commit broke my windows build
- [#6411](https://github.com/mruby/mruby/issues/6411) Wrong function unwinding when using return in a block
- [#6439](https://github.com/mruby/mruby/issues/6439) OP_JMPUW does not call the ensure block when it jumps to the beginning of the begin block
- [#6441](https://github.com/mruby/mruby/issues/6441) break inside while loop will execute the ensure block outside of the while loop
- [#6453](https://github.com/mruby/mruby/issues/6453) Bigint: incorrect behavior of ^ operator
- [#6452](https://github.com/mruby/mruby/issues/6452) Bigint: weird mod behavior
- [#6451](https://github.com/mruby/mruby/issues/6451) Bigint: incorrect division behavior
- [#6456](https://github.com/mruby/mruby/issues/6456) bigint: bug with division of a small number by a bigint
- [#6466](https://github.com/mruby/mruby/issues/6466) mruby-bin-mruby using Kernel#p and Kernel#print in bintest fails test
- [#6467](https://github.com/mruby/mruby/issues/6467) Heap-Use-After-Free due to Recursive group_by Calls
- [#6471](https://github.com/mruby/mruby/issues/6471) Discrepancy in codegen for binary operations between master branch and 3.3.0
- [#6477](https://github.com/mruby/mruby/issues/6477) heap-buffer-overflow in mrb_vm_exec
- [#6485](https://github.com/mruby/mruby/issues/6485) Hash#rehash does not check if the hash is frozen
- [#6483](https://github.com/mruby/mruby/issues/6483) Hash#default_proc= accepts arbitrary objects that are not callable
- [#6491](https://github.com/mruby/mruby/issues/6491) Destroy existing string literals when composing string literals
# Merged Pull Requests (User Visible Ones)
- [#6171](https://github.com/mruby/mruby/pull/6171) Add Enumerable::Lazy#grep_v to mruby-enum-lazy
- [#6174](https://github.com/mruby/mruby/pull/6174) Fix MRUBY_PACKAGE_DIR in mruby-config.bat
- [#6175](https://github.com/mruby/mruby/pull/6175) Corrected strange conditional in mrb_vm_run()
- [#6176](https://github.com/mruby/mruby/pull/6176) Stop assuming alias proc in CI_PROC_SET()
- [#6177](https://github.com/mruby/mruby/pull/6177) gha: add macOS 14 to the build
- [#6184](https://github.com/mruby/mruby/pull/6184) Remove the L_STOP label
- [#6185](https://github.com/mruby/mruby/pull/6185) Added mrb_callinfo::u.keep_context for clarity
- [#6186](https://github.com/mruby/mruby/pull/6186) Omit NULL check of e->cxt in OP_RETURN_BLK
- [#6191](https://github.com/mruby/mruby/pull/6191) Speed up symbol equality comparison
- [#6192](https://github.com/mruby/mruby/pull/6192) Fix `OP_STOP` with exception
- [#6193](https://github.com/mruby/mruby/pull/6193) Fix wrong assertion in `OP_SENDB`.
- [#6194](https://github.com/mruby/mruby/pull/6194) Simplify the calculation of the number of closures in `MRB_TT_FIBER`
- [#6197](https://github.com/mruby/mruby/pull/6197) Fix int_xor to call flo_xor.
- [#6201](https://github.com/mruby/mruby/pull/6201) tasks/doc.rake: standardize the `rake doc` error messages
- [#6202](https://github.com/mruby/mruby/pull/6202) Remove the `.yardoc` folder with `rake doc:clean:api`
- [#6204](https://github.com/mruby/mruby/pull/6204) Clean up the `.editorconfig` file
- [#6209](https://github.com/mruby/mruby/pull/6209) Minor `.gitignore` clean up
- [#6211](https://github.com/mruby/mruby/pull/6211) Minor `.gitignore` clean up; order entries
- [#6216](https://github.com/mruby/mruby/pull/6216) Shared empty `iv_tbl` of module
- [#6217](https://github.com/mruby/mruby/pull/6217) Strict declaration for `mrb_istruct_size()`
- [#6219](https://github.com/mruby/mruby/pull/6219) Avoid assigning a fixed value in the loop
- [#6220](https://github.com/mruby/mruby/pull/6220) Reorganize `mrb_cache_entry` and `mrb_method_t` types
- [#6221](https://github.com/mruby/mruby/pull/6221) Arranging `each_backtrace()`
- [#6222](https://github.com/mruby/mruby/pull/6222) Need to synchronize `dbg->regs` after VM call in `mrdb`
- [#6224](https://github.com/mruby/mruby/pull/6224) `mrb_env_unshare()` to break the link to fiber
- [#6225](https://github.com/mruby/mruby/pull/6225) Revert "Adjust environment when `mrb_exec_irep` happened."
- [#6227](https://github.com/mruby/mruby/pull/6227) fix: `Array#shuffle(!)` result distribution
- [#6228](https://github.com/mruby/mruby/pull/6228) Revert "`env` referred from top-level callinfo should not be unshared; fix #4019"
- [#6230](https://github.com/mruby/mruby/pull/6230) Fix status of fiber after switched by exception raised
- [#6231](https://github.com/mruby/mruby/pull/6231) Add a way to let other gems handle closing of fds in mruby-io
- [#6232](https://github.com/mruby/mruby/pull/6232) Fold the code for freeing `env`
- [#6233](https://github.com/mruby/mruby/pull/6233) Free stack memory at end of fiber
- [#6235](https://github.com/mruby/mruby/pull/6235) fix `Array#delete` always firing the block when deleting `nil`
- [#6236](https://github.com/mruby/mruby/pull/6236) unify the code for filter methods (and speed up `#reject!`)
- [#6237](https://github.com/mruby/mruby/pull/6237) Stricter env objects to attach to ci
- [#6238](https://github.com/mruby/mruby/pull/6238) Minimize zero initialization of the stack
- [#6243](https://github.com/mruby/mruby/pull/6243) Fixed base64 decoding in `mruby-pack`
- [#6244](https://github.com/mruby/mruby/pull/6244) Revise scope of role of `mrb_vm_run()`
- [#6246](https://github.com/mruby/mruby/pull/6246) Fix typo in `test/t/hash.rb`
- [#6249](https://github.com/mruby/mruby/pull/6249) Fix grammar in `src/vm.c`; `catched` -> `caught`
- [#6250](https://github.com/mruby/mruby/pull/6250) Fix spelling
- [#6251](https://github.com/mruby/mruby/pull/6251) Clean up root move `CODEOWNERS` to `.github` directory
- [#6253](https://github.com/mruby/mruby/pull/6253) Allow recycling fibers by GC if not referenced directly
- [#6256](https://github.com/mruby/mruby/pull/6256) Update documentation for `mrb_top_run()`
- [#6257](https://github.com/mruby/mruby/pull/6257) fix some mrbconf.md typos
- [#6260](https://github.com/mruby/mruby/pull/6260) Remove `exc_caught` from `mrb_vm_exec()`
- [#6261](https://github.com/mruby/mruby/pull/6261) fix: `to_a` integer ranges with `begin > end` failing
- [#6263](https://github.com/mruby/mruby/pull/6263) fix: `Array#delete` mistakenly calling block even if not passed
- [#6264](https://github.com/mruby/mruby/pull/6264) Must pass keyword arguments for `Kernel#to_enum`
- [#6265](https://github.com/mruby/mruby/pull/6265) Fixes `Dir.children` and `Dir.each_child`
- [#6266](https://github.com/mruby/mruby/pull/6266) Passes the nonexistent key as a block argument in `Array#delete`
- [#6273](https://github.com/mruby/mruby/pull/6273) Improvements to `mrb_protect_atexit()`
- [#6275](https://github.com/mruby/mruby/pull/6275) Fixed `Binding#eval` that failed to assign to the same variable
- [#6276](https://github.com/mruby/mruby/pull/6276) Always run `atexit` on the top-level call frame
- [#6279](https://github.com/mruby/mruby/pull/6279) Include headers for malloc() explicitly; fix #6277
- [#6280](https://github.com/mruby/mruby/pull/6280) Remove `MRB_ENV_CLOSED` flag
- [#6281](https://github.com/mruby/mruby/pull/6281) Fixes local variables in `mruby-binding`.
- [#6283](https://github.com/mruby/mruby/pull/6283) Simplify `uvenv()`
- [#6288](https://github.com/mruby/mruby/pull/6288) Detach `env` of ci explicitly on atexit
- [#6289](https://github.com/mruby/mruby/pull/6289) Simplify `OP_RETURN_BLK` and `OP_BREAK`
- [#6290](https://github.com/mruby/mruby/pull/6290) Allow to change the output directory name of the `libmruby` file
- [#6293](https://github.com/mruby/mruby/pull/6293) Changed the instruction table in `opcode.md`
- [#6294](https://github.com/mruby/mruby/pull/6294) Optimise `mrb_iv_get`
- [#6302](https://github.com/mruby/mruby/pull/6302) Minor cleanup in mrb_str_init
- [#6303](https://github.com/mruby/mruby/pull/6303) mrb_str_aset_m() should return replace instead of str
- [#6305](https://github.com/mruby/mruby/pull/6305) Protect keyword arguments in `prepare_missing()`
- [#6308](https://github.com/mruby/mruby/pull/6308) Assume that `MRB_CATCH()` has `mrb->exc` set
- [#6310](https://github.com/mruby/mruby/pull/6310) Doubling the call stack when extending it
- [#6311](https://github.com/mruby/mruby/pull/6311) Added fast-path for positional arguments less than 15 in `OP_SEND`
- [#6312](https://github.com/mruby/mruby/pull/6312) Omit error checking at `OP_RETURN`, `OP_RETURN_BLK` and `OP_BREAK`
- [#6313](https://github.com/mruby/mruby/pull/6313) Fix wrong column number in opcode.md
- [#6314](https://github.com/mruby/mruby/pull/6314) Optimize even?/odd? for big integers
- [#6318](https://github.com/mruby/mruby/pull/6318) Shrink variables in `mrb_vm_exec()`
- [#6320](https://github.com/mruby/mruby/pull/6320) Shrinking the code in `OP_BREAK` and `OP_RETURN_BLK`
- [#6321](https://github.com/mruby/mruby/pull/6321) Avoid warnings in `lib/**/*.rb`
- [#6322](https://github.com/mruby/mruby/pull/6322) Fix mrb_ro_data_p on Intel Mac
- [#6324](https://github.com/mruby/mruby/pull/6324) Remove `localjump_error()`
- [#6327](https://github.com/mruby/mruby/pull/6327) fix ncurses linking issues
- [#6328](https://github.com/mruby/mruby/pull/6328) Fix use-after-free in `obj_free()` for env objects
- [#6329](https://github.com/mruby/mruby/pull/6329) Fix use-after-free in `mrb_obj_alloc()`
- [#6330](https://github.com/mruby/mruby/pull/6330) Add a precondition to call `mrb_env_unshare()`.
- [#6331](https://github.com/mruby/mruby/pull/6331) Restore the GC arena with tests
- [#6332](https://github.com/mruby/mruby/pull/6332) Must not depend on the “host” build to generate `mruby-compiler/core/y.tab.c`
- [#6333](https://github.com/mruby/mruby/pull/6333) Reduce the number of branch instructions in the `heap_p()`
- [#6335](https://github.com/mruby/mruby/pull/6335) Add `return_ci` in `CHECKPOINT_MAIN()` of `OP_RETURN`
- [#6338](https://github.com/mruby/mruby/pull/6338) Need to place static proc objects into 8-byte alignments
- [#6340](https://github.com/mruby/mruby/pull/6340) Fix use-after-free for `Array#<=>`
- [#6341](https://github.com/mruby/mruby/pull/6341) Need to restore the GC arena after some function calls
- [#6344](https://github.com/mruby/mruby/pull/6344) prefer using `mrb_yield` to call block arguments
- [#6347](https://github.com/mruby/mruby/pull/6347) codegen.c,parse.y: remove flattening of `yield` arguments; fix #6346
- [#6348](https://github.com/mruby/mruby/pull/6348) Cancel the warning disablement
- [#6349](https://github.com/mruby/mruby/pull/6349) Perform GC before deleting directories
- [#6350](https://github.com/mruby/mruby/pull/6350) Fixed character encoding conversion function mismatch
- [#6351](https://github.com/mruby/mruby/pull/6351) Remove unnecessary `mrb_gc_arena_restore()`
- [#6353](https://github.com/mruby/mruby/pull/6353) Fix use-after-free in `mrb_ary_delete()`
- [#6356](https://github.com/mruby/mruby/pull/6356) Making splat argument objects invisible from Ruby side
- [#6373](https://github.com/mruby/mruby/pull/6373) Add build config for Milk-V Duo (RISC-V Linux) board
- [#6382](https://github.com/mruby/mruby/pull/6382) Make array objects invisible in `mrb_gc_register()`
- [#6385](https://github.com/mruby/mruby/pull/6385) Small improvements for `mrb_gc_register()`
- [#6386](https://github.com/mruby/mruby/pull/6386) Avoid calling `mrb_gv_set()` from `mrb_gc_unregister()`
- [#6387](https://github.com/mruby/mruby/pull/6387) Small improvements for `mrb_gc_unregister()`
- [#6390](https://github.com/mruby/mruby/pull/6390) Fix use-after-free by `mrb_gc_unregistor()`
- [#6391](https://github.com/mruby/mruby/pull/6391) Fixed argument forwarding in `instance_exec`
- [#6392](https://github.com/mruby/mruby/pull/6392) Fix argument forwarding in `mrb_exec_irep()`
- [#6393](https://github.com/mruby/mruby/pull/6393) Follow-up to #6391
- [#6395](https://github.com/mruby/mruby/pull/6395) Storing method-id inside Symbol#to_proc
- [#6396](https://github.com/mruby/mruby/pull/6396) Milk-V Build Config: update GPIO gem URL
- [#6397](https://github.com/mruby/mruby/pull/6397) boxing_no.h: rename BOXNIX_SET_VALUE -> BOXNO_SET_VALUE
- [#6399](https://github.com/mruby/mruby/pull/6399) Add macOS 15 to the build
- [#6405](https://github.com/mruby/mruby/pull/6405) `io_read`: use `%i` instead of `%d` in call to `mrb_raisef`
- [#6407](https://github.com/mruby/mruby/pull/6407) Allow to exclude specific files in `rake install`
- [#6408](https://github.com/mruby/mruby/pull/6408) Improve compliance with C++ standards
- [#6410](https://github.com/mruby/mruby/pull/6410) Put `#include <stdlib.h>` in `parse.y`
- [#6412](https://github.com/mruby/mruby/pull/6412) Distinguish the call frame of the generator with `OP_RETURN_BLK`
- [#6413](https://github.com/mruby/mruby/pull/6413) Add links to documentation in `README.md`
- [#6415](https://github.com/mruby/mruby/pull/6415) Fix numbered parameters when used as a singleton
- [#6416](https://github.com/mruby/mruby/pull/6416) Optimize the "new" method's iseq
- [#6419](https://github.com/mruby/mruby/pull/6419) Follow Ruby's behavior for numbered parameters in -> {}
- [#6420](https://github.com/mruby/mruby/pull/6420) Update `labeler.yml`: add label for the `tools` directory
- [#6422](https://github.com/mruby/mruby/pull/6422) Add annotations for function names defined in the preprocessor
- [#6423](https://github.com/mruby/mruby/pull/6423) Adding a serialized test task
- [#6427](https://github.com/mruby/mruby/pull/6427) Need to update `ci` variable after re-entry to VM
- [#6428](https://github.com/mruby/mruby/pull/6428) Change the limits of OP_ADDI and OP_SUBI from 0-127 to 0-255.
- [#6429](https://github.com/mruby/mruby/pull/6429) Fix numbered parameters when used as hash keys
- [#6432](https://github.com/mruby/mruby/pull/6432) Moving code in macro arguments out of macros
- [#6434](https://github.com/mruby/mruby/pull/6434) Added document "Layout of the mruby filesystem"
- [#6436](https://github.com/mruby/mruby/pull/6436) Make `rake doc:update-index` prettier friendly
- [#6437](https://github.com/mruby/mruby/pull/6437) Add more details to the pre-commit config
- [#6438](https://github.com/mruby/mruby/pull/6438) Remove unused `MRuby::Build#list_install_excludes` method
- [#6440](https://github.com/mruby/mruby/pull/6440) Fix `redo` keyword
- [#6442](https://github.com/mruby/mruby/pull/6442) Fixed wrong range condition in `OP_JMPUW`
- [#6443](https://github.com/mruby/mruby/pull/6443) Fix NODE_NEGATE for bigints
- [#6444](https://github.com/mruby/mruby/pull/6444) Add test cases for bigints
- [#6446](https://github.com/mruby/mruby/pull/6446) Omit the `_WIN64` definition check
- [#6447](https://github.com/mruby/mruby/pull/6447) Fixed `File.expand_path`
- [#6448](https://github.com/mruby/mruby/pull/6448) Suppress presym in `mruby/ext/io.h` file
- [#6449](https://github.com/mruby/mruby/pull/6449) Using presym in the `mruby-io/src/file_test.c` file
- [#6450](https://github.com/mruby/mruby/pull/6450) Change `MRB_WITH_IO_PREAD_PWRITE` configuration name
- [#6454](https://github.com/mruby/mruby/pull/6454) mruby-bigint: handle rhs bigint in int_mod and int_divmod functions
- [#6455](https://github.com/mruby/mruby/pull/6455) mruby-bigint: fix rounding behavior in mpz_mdiv and mpz_mdivmod functions
- [#6457](https://github.com/mruby/mruby/pull/6457) bigint: fix bug with division of a small number by a bigint
- [#6459](https://github.com/mruby/mruby/pull/6459) `FileTest` is a module
- [#6461](https://github.com/mruby/mruby/pull/6461) To create a release package file in draft
- [#6462](https://github.com/mruby/mruby/pull/6462) Properly cast the return value of `memchr()`
- [#6463](https://github.com/mruby/mruby/pull/6463) Add `level` argument to `File.dirname`
- [#6465](https://github.com/mruby/mruby/pull/6465) Add initial playstation portable crossbuild support
- [#6468](https://github.com/mruby/mruby/pull/6468) Fixed missing changes to `IB_FIND_BY_KEY()` parameter names
- [#6469](https://github.com/mruby/mruby/pull/6469) Add more `const` qualifier for `RProc`
- [#6472](https://github.com/mruby/mruby/pull/6472) Moved tests for `Integer#quo`
- [#6473](https://github.com/mruby/mruby/pull/6473) Hide `mpz_and()` symbol
- [#6473](https://github.com/mruby/mruby/pull/6473) Hide mpz_and() symbol
- [#6474](https://github.com/mruby/mruby/pull/6474) Avoid array object creation with “unknown keyword” error
- [#6475](https://github.com/mruby/mruby/pull/6475) Don't include deleted mruby-print
- [#6478](https://github.com/mruby/mruby/pull/6478) Fixed buffer overrun in function `chars2bytes()`
- [#6479](https://github.com/mruby/mruby/pull/6479) Reimplementation of `File.expand_path` method
- [#6482](https://github.com/mruby/mruby/pull/6482) Add `File.absolute_path?` method
- [#6487](https://github.com/mruby/mruby/pull/6487) Add Emscripten toolchain & build_config
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

+1 -1
View File
@@ -3,7 +3,7 @@ services:
test:
build:
context: .
command: sh -c 'rake deep_clean && rake -m test:build && rake test:run'
command: sh -c 'rake deep_clean && rake -m test:run:serial'
environment:
- MRUBY_CONFIG=ci/gcc-clang
- CC=gcc
@@ -11,8 +11,6 @@ MRuby::Gem::Specification.new('ruby_extension_example') do |spec|
# Add libraries
# spec.linker.libraries << 'external_lib'
spec.add_dependency('mruby-print', :core => 'mruby-print')
# Default build files
# spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb")
# spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
+5 -18
View File
@@ -18,7 +18,7 @@
#endif
#if defined(MRB_32BIT) && defined(MRB_64BIT)
#error Cannot build for 32 and 64 bit architecture at the same time
#error Cannot build for 32 and 64-bit architecture at the same time
#endif
/* configuration options: */
@@ -48,16 +48,6 @@
//#define MRB_METHOD_CACHE_SIZE (1<<8)
//#define MRB_USE_INLINE_METHOD_CACHE
/* add -DMRB_USE_METHOD_T_STRUCT on machines that use higher bits of function pointers */
/* no MRB_USE_METHOD_T_STRUCT requires highest 2 bits of function pointers to be zero */
#ifndef MRB_USE_METHOD_T_STRUCT
// can't use highest 2 bits of function pointers at least on 32bit
// Windows and 32bit Linux.
# ifdef MRB_32BIT
# define MRB_USE_METHOD_T_STRUCT
# endif
#endif
/* define on big endian machines; used by MRB_NAN_BOXING, etc. */
#ifndef MRB_ENDIAN_BIG
# if (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN) || \
@@ -83,21 +73,21 @@
/* if defined mruby allocates Float objects in the heap to keep full precision if needed */
//#define MRB_WORDBOX_NO_FLOAT_TRUNCATE
/* add -DMRB_INT32 to use 32bit integer for mrb_int; conflict with MRB_INT64;
/* add -DMRB_INT32 to use 32-bit integer for mrb_int; conflict with MRB_INT64;
Default for 32-bit CPU mode. */
//#define MRB_INT32
/* add -DMRB_INT64 to use 64bit integer for mrb_int; conflict with MRB_INT32;
/* add -DMRB_INT64 to use 64-bit integer for mrb_int; conflict with MRB_INT32;
Default for 64-bit CPU mode (unless using MRB_NAN_BOXING). */
//#define MRB_INT64
/* if no specific integer type is chosen */
#if !defined(MRB_INT32) && !defined(MRB_INT64)
# if defined(MRB_64BIT) && !defined(MRB_NAN_BOXING)
/* Use 64bit integers on 64bit architecture (without MRB_NAN_BOXING) */
/* Use 64-bit integers on 64-bit architecture (without MRB_NAN_BOXING) */
# define MRB_INT64
# else
/* Otherwise use 32bit integers */
/* Otherwise use 32-bit integers */
# define MRB_INT32
# endif
#endif
@@ -170,9 +160,6 @@
//#define MRB_USE_ALL_SYMBOLS /* Symbol.all_symbols */
/* obsolete configurations */
#ifdef MRB_METHOD_T_STRUCT
# define MRB_USE_METHOD_T_STRUCT
#endif
#if defined(DISABLE_STDIO) || defined(MRB_DISABLE_STDIO)
# define MRB_NO_STDIO
#endif
+43 -21
View File
@@ -176,6 +176,7 @@ typedef struct {
uint8_t n:4; /* (15=*) c=n|nk<<4 */
uint8_t nk:4; /* (15=*) */
uint8_t cci; /* called from C function */
uint8_t vis; /* visibility in the current scope */
mrb_sym mid;
const struct RProc *proc;
struct RProc *blk;
@@ -184,6 +185,7 @@ typedef struct {
union {
struct REnv *env;
struct RClass *target_class;
const void *keep_context; /* if NULL, it means that the fiber has switched; for internal use */
} u;
} mrb_callinfo;
@@ -229,22 +231,19 @@ mrb_static_assert_powerof2(MRB_METHOD_CACHE_SIZE);
*/
typedef mrb_value (*mrb_func_t)(struct mrb_state *mrb, mrb_value self);
#ifndef MRB_USE_METHOD_T_STRUCT
typedef uintptr_t mrb_method_t;
#else
typedef struct {
uint8_t flags;
uint32_t flags; /* compatible with mt keys in class.c */
union {
struct RProc *proc;
const struct RProc *proc;
mrb_func_t func;
};
} as;
} mrb_method_t;
#endif
#ifndef MRB_NO_METHOD_CACHE
struct mrb_cache_entry {
struct RClass *c, *c0;
mrb_sym mid;
/* mrb_sym mid; // mid is stored in mrb_method_t::flags */
mrb_method_t m;
};
#endif
@@ -298,7 +297,7 @@ typedef struct mrb_state {
mrb_sym symhash[256];
size_t symcapa;
#ifndef MRB_USE_ALL_SYMBOLS
char symbuf[8]; /* buffer for small symbol names */
char symbuf[8]; /* buffer for small symbol names */
#endif
#ifdef MRB_USE_DEBUG_HOOK
@@ -426,8 +425,11 @@ MRB_API void mrb_prepend_module(mrb_state *mrb, struct RClass *cla, struct RClas
* @param func The function pointer to the method definition.
* @param aspec The method parameters declaration.
*/
MRB_API void mrb_define_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec);
MRB_API void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
MRB_API void mrb_define_private_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec);
MRB_API void mrb_define_private_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
/**
* Defines a class method.
@@ -798,6 +800,8 @@ MRB_API struct RClass * mrb_module_get_under_id(mrb_state *mrb, struct RClass *o
MRB_API void mrb_notimplement(mrb_state*);
/* a function to be replacement of unimplemented method */
MRB_API mrb_value mrb_notimplement_m(mrb_state*, mrb_value);
/* just return it self */
MRB_API mrb_value mrb_obj_itself(mrb_state*, mrb_value);
/**
* Duplicate an object.
@@ -1081,7 +1085,7 @@ MRB_API mrb_bool mrb_block_given_p(mrb_state *mrb);
*
* #include <stdio.h>
* #include <mruby.h>
* #include "mruby/compile.h"
* #include <mruby/compile.h>
*
* int
* main()
@@ -1112,7 +1116,7 @@ MRB_API mrb_value mrb_funcall_id(mrb_state *mrb, mrb_value val, mrb_sym mid, mrb
*
* #include <stdio.h>
* #include <mruby.h>
* #include "mruby/compile.h"
* #include <mruby/compile.h>
* int
* main()
* {
@@ -1141,8 +1145,9 @@ MRB_API mrb_value mrb_funcall_argv(mrb_state *mrb, mrb_value val, mrb_sym name,
*/
MRB_API mrb_value mrb_funcall_with_block(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv, mrb_value block);
/**
* Create a symbol from C string. But usually it's better to use MRB_SYM,
* MRB_OPSYM, MRB_CVSYM, MRB_IVSYM, MRB_SYM_B, MRB_SYM_Q, MRB_SYM_E macros.
* Create a symbol from C string. But usually it's better to
* use MRB_SYM, MRB_OPSYM, MRB_CVSYM, MRB_IVSYM, MRB_GVSYM,
* MRB_SYM_B, MRB_SYM_Q, MRB_SYM_E macros.
*
* Example:
*
@@ -1277,7 +1282,29 @@ MRB_API void mrb_close(mrb_state *mrb);
MRB_API void* mrb_default_allocf(mrb_state*, void*, size_t, void*);
MRB_API mrb_value mrb_top_self(mrb_state *mrb);
/**
* Enter the mruby VM and execute the proc.
*
* @param mrb
* The current mruby state.
* @param proc
* An object containing `irep`.
* If supplied an object containing anything other than `irep`, it will probably crash.
* @param self
* `self` on the execution context of `proc`.
* @param stack_keep
* Specifies the number of values to hold from the stack top.
* Values on the stack outside this range will be initialized to `nil`.
*
* @note
* When called from a C function defined as a method, the current stack is destroyed.
* If you want to use arguments obtained by `mrb_get_args()` or other methods after `mrb_top_run()`,
* you must protect them by `mrb_gc_protect()` or other ways before this function.
* Or consider using `mrb_yield()` family functions.
*/
MRB_API mrb_value mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep);
MRB_API mrb_value mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep);
MRB_API mrb_value mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *iseq);
/* compatibility macros */
@@ -1439,7 +1466,7 @@ MRB_API void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value
MRB_API mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id);
MRB_API mrb_bool mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid);
MRB_API mrb_bool mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c);
MRB_API mrb_bool mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, const struct RClass* c);
MRB_API mrb_bool mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func);
/* obsolete function(s); will be removed */
@@ -1492,13 +1519,6 @@ MRB_API mrb_value mrb_fiber_alive_p(mrb_state *mrb, mrb_value fib);
#define E_FIBER_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FiberError))
MRB_API void mrb_stack_extend(mrb_state*, mrb_int);
/* memory pool implementation */
typedef struct mrb_pool mrb_pool;
MRB_API struct mrb_pool* mrb_pool_open(mrb_state*);
MRB_API void mrb_pool_close(struct mrb_pool*);
MRB_API void* mrb_pool_alloc(struct mrb_pool*, size_t);
MRB_API void* mrb_pool_realloc(struct mrb_pool*, void*, size_t oldlen, size_t newlen);
MRB_API mrb_bool mrb_pool_can_realloc(struct mrb_pool*, void*, size_t);
/* temporary memory allocation, only effective while GC arena is kept */
MRB_API void* mrb_alloca(mrb_state *mrb, size_t);
@@ -1540,6 +1560,8 @@ mrbmemset(void *s, int c, size_t n)
#define memset(a,b,c) mrbmemset(a,b,c)
#endif
#define mrb_int_hash_func(mrb,key) (uint32_t)((key)^((key)<<2)^((key)>>2))
MRB_END_DECL
#endif /* MRUBY_H */
+10
View File
@@ -98,6 +98,16 @@ mrb_type(mrb_value o)
}
}
MRB_INLINE enum mrb_vtype
mrb_unboxed_type(mrb_value o)
{
if (!mrb_float_p(o) && mrb_nb_tt(o) == MRB_NANBOX_TT_OBJECT && o.u != 0) {
return ((struct RBasic*)(uintptr_t)o.u)->tt;
} else {
return MRB_TT_FALSE;
}
}
#define NANBOX_SET_MISC_VALUE(r,t,i) NANBOX_SET_VALUE(r, MRB_NANBOX_TT_MISC, ((uint64_t)(t)<<32) | (i))
#define mrb_float(o) mrb_nan_boxing_value_float(o)
+20 -19
View File
@@ -26,33 +26,34 @@ typedef struct mrb_value {
enum mrb_vtype tt;
} mrb_value;
#define mrb_ptr(o) (o).value.p
#define mrb_cptr(o) mrb_ptr(o)
#define mrb_ptr(o) (o).value.p
#define mrb_cptr(o) mrb_ptr(o)
#ifndef MRB_NO_FLOAT
#define mrb_float(o) (o).value.f
#define mrb_float(o) (o).value.f
#endif
#define mrb_fixnum(o) (o).value.i
#define mrb_integer(o) mrb_fixnum(o)
#define mrb_symbol(o) (o).value.sym
#define mrb_type(o) (o).tt
#define mrb_fixnum(o) (o).value.i
#define mrb_integer(o) mrb_fixnum(o)
#define mrb_symbol(o) (o).value.sym
#define mrb_type(o) (o).tt
#define mrb_unboxed_type(o) (o).tt
#define BOXNIX_SET_VALUE(o, ttt, attr, v) do {\
#define BOXNO_SET_VALUE(o, ttt, attr, v) do {\
(o).tt = ttt;\
(o).attr = v;\
} while (0)
#define SET_NIL_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
#define SET_FALSE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
#define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
#define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
#define SET_INT_VALUE(mrb,r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n))
#define SET_FIXNUM_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n))
#define SET_NIL_VALUE(r) BOXNO_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
#define SET_FALSE_VALUE(r) BOXNO_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
#define SET_TRUE_VALUE(r) BOXNO_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
#define SET_BOOL_VALUE(r,b) BOXNO_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
#define SET_INT_VALUE(mrb,r,n) BOXNO_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n))
#define SET_FIXNUM_VALUE(r,n) BOXNO_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n))
#ifndef MRB_NO_FLOAT
#define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v))
#define SET_FLOAT_VALUE(mrb,r,v) BOXNO_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v))
#endif
#define SET_SYM_VALUE(r,v) BOXNIX_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
#define SET_OBJ_VALUE(r,v) BOXNIX_SET_VALUE(r, (((struct RObject*)(v))->tt), value.p, (v))
#define SET_CPTR_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_CPTR, value.p, v)
#define SET_UNDEF_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
#define SET_SYM_VALUE(r,v) BOXNO_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
#define SET_OBJ_VALUE(r,v) BOXNO_SET_VALUE(r, (((struct RObject*)(v))->tt), value.p, (v))
#define SET_CPTR_VALUE(mrb,r,v) BOXNO_SET_VALUE(r, MRB_TT_CPTR, value.p, v)
#define SET_UNDEF_VALUE(r) BOXNO_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
#endif /* MRUBY_BOXING_NO_H */
+15 -2
View File
@@ -80,7 +80,7 @@ enum mrb_special_consts {
/*
* mrb_value representation:
*
* 64bit word with inline float:
* 64-bit word with inline float:
* nil : ...0000 0000 (all bits are 0)
* false : ...0000 0100 (mrb_fixnum(v) != 0)
* true : ...0000 1100
@@ -90,7 +90,7 @@ enum mrb_special_consts {
* float : ...FFFF FF10 (51 bit significands; require MRB_64BIT)
* object: ...PPPP P000
*
* 32bit word with inline float:
* 32-bit word with inline float:
* nil : ...0000 0000 (all bits are 0)
* false : ...0000 0100 (mrb_fixnum(v) != 0)
* true : ...0000 1100
@@ -228,4 +228,17 @@ mrb_type(mrb_value o)
mrb_val_union(o).bp->tt;
}
MRB_INLINE enum mrb_vtype
mrb_unboxed_type(mrb_value o)
{
if (mrb_nil_p(o)) {
return MRB_TT_FALSE;
} else if ((o.w & WORDBOX_IMMEDIATE_MASK) == 0) {
return mrb_val_union(o).bp->tt;
} else {
return MRB_TT_FALSE;
}
}
#endif /* MRUBY_BOXING_WORD_H */
+20
View File
@@ -59,6 +59,26 @@ MRB_BEGIN_DECL
# define mrb_deprecated
#endif
/** Declare a type or object as an alignment requirement. */
#ifndef mrb_alignas
# if defined(__cplusplus) && __cplusplus >= 201103L
# // https://en.cppreference.com/w/cpp/language/alignas
# define mrb_alignas(n) alignas(n)
# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
# // https://en.cppreference.com/w/c/language/_Alignas
# define mrb_alignas(n) _Alignas(n)
# elif defined(_MSC_VER) || defined(__INTEL_COMPILER)
# // https://learn.microsoft.com/en-us/cpp/cpp/align-cpp?view=msvc-170
# define mrb_alignas(n) __declspec(align(n))
# elif defined(__GNUC__) || defined(__clang__)
# // https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html#index-aligned-type-attribute
# define mrb_alignas(n) __attribute__((aligned(n)))
# else
# // `mrb_alignas` defined as dummy. If necessary, send issues to https://github.com/mruby/mruby .
# define mrb_alignas(n)
# endif
#endif
/** Declare a function as always inlined. */
#if defined _MSC_VER && _MSC_VER < 1900
# ifndef __cplusplus
+18 -10
View File
@@ -8,6 +8,7 @@
#define MRUBY_COMPILE_H
#include "common.h"
#include "mruby/mempool.h"
/**
* mruby Compiler
@@ -122,7 +123,7 @@ struct mrb_parser_heredoc_info {
/* parser structure */
struct mrb_parser_state {
mrb_state *mrb;
struct mrb_pool *pool;
struct mrb_mempool *pool;
mrb_ast_node *cells;
const char *s, *send;
#ifndef MRB_NO_STDIO
@@ -190,15 +191,22 @@ MRB_API struct mrb_parser_state* mrb_parse_nstring(mrb_state*,const char*,size_t
MRB_API struct RProc* mrb_generate_code(mrb_state*, struct mrb_parser_state*);
MRB_API mrb_value mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrb_ccontext *c);
/** program load functions
* Please note! Currently due to interactions with the GC calling these functions will
* leak one RProc object per function call.
* To prevent this save the current memory arena before calling and restore the arena
* right after, like so
* int ai = mrb_gc_arena_save(mrb);
* mrb_value status = mrb_load_string(mrb, buffer);
* mrb_gc_arena_restore(mrb, ai);
*/
/**
* program load functions
*
* Please note! Currently due to interactions with the GC calling these functions will
* leak one RProc object per function call.
* To prevent this save the current memory arena before calling and restore the arena
* right after, like so
*
* int ai = mrb_gc_arena_save(mrb);
* mrb_value status = mrb_load_string(mrb, buffer);
* mrb_gc_arena_restore(mrb, ai);
*
* Also, when called from a C function defined as a method, the current stack is destroyed.
* If processing continues after this function, the objects obtained from the arguments
* must be protected as needed before this function.
*/
#ifndef MRB_NO_STDIO
MRB_API mrb_value mrb_load_file(mrb_state*,FILE*);
MRB_API mrb_value mrb_load_file_cxt(mrb_state*,FILE*, mrb_ccontext *cxt);
+1 -1
View File
@@ -19,7 +19,7 @@ MRB_BEGIN_DECL
/* flags for mrb_dump_irep{,_binary,_cfunc,_cstruct} */
#define MRB_DUMP_DEBUG_INFO 1
#define MRB_DUMP_STATIC 2
#define DUMP_DEBUG_INFO MRB_DUMP_DEBUG_INFO /* deprecated */
#define MRB_DUMP_NO_LVAR 4
#ifndef MRB_NO_STDIO
MRB_API mrb_value mrb_load_irep_file(mrb_state*,FILE*);
+2 -2
View File
@@ -17,8 +17,8 @@ MRB_BEGIN_DECL
struct RException {
MRB_OBJECT_HEADER;
struct iv_tbl *iv;
struct RObject *mesg; // NULL or probably RString
struct RObject *backtrace; // NULL, RArray or RData
struct RBasic *mesg; // NULL or probably RString
struct RBasic *backtrace; // NULL, RArray or RData
};
/* error that should terminate execution */
-11
View File
@@ -34,17 +34,6 @@ typedef enum {
MRB_GC_STATE_SWEEP
} mrb_gc_state;
/* Disable MSVC warning "C4200: nonstandard extension used: zero-sized array
* in struct/union" when in C++ mode */
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4200)
#endif
#ifdef _MSC_VER
#pragma warning(pop)
#endif
typedef struct mrb_gc {
struct mrb_heap_page *heaps; /* all heaps pages */
struct mrb_heap_page *free_heaps;/* heaps for allocation */
+27 -13
View File
@@ -61,22 +61,32 @@ mrb_value mrb_exc_mesg_get(mrb_state *mrb, struct RException *exc);
mrb_value mrb_f_raise(mrb_state*, mrb_value);
mrb_value mrb_make_exception(mrb_state *mrb, mrb_value exc, mrb_value mesg);
struct RBacktrace {
MRB_OBJECT_HEADER;
size_t len;
struct mrb_backtrace_location *locations;
};
struct mrb_backtrace_location {
mrb_sym method_id;
int32_t idx;
const mrb_irep *irep;
};
/* gc */
void mrb_gc_mark_mt(mrb_state*, struct RClass*);
size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*);
size_t mrb_gc_mark_mt(mrb_state*, struct RClass*);
void mrb_gc_free_mt(mrb_state*, struct RClass*);
/* hash */
size_t mrb_hash_memsize(mrb_value obj);
void mrb_gc_mark_hash(mrb_state*, struct RHash*);
size_t mrb_gc_mark_hash_size(mrb_state*, struct RHash*);
size_t mrb_gc_mark_hash(mrb_state*, struct RHash*);
void mrb_gc_free_hash(mrb_state*, struct RHash*);
mrb_value mrb_hash_first_key(mrb_state*, mrb_value);
/* irep */
struct mrb_insn_data mrb_decode_insn(const mrb_code *pc);
#ifdef MRUBY_IREP_H
void mrb_irep_free(mrb_state*, struct mrb_irep*);
void mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep);
static inline const struct mrb_irep_catch_handler *
mrb_irep_catch_handler_table(const struct mrb_irep *irep)
@@ -116,25 +126,27 @@ mrb_value mrb_rational_add(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_rational_sub(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_rational_mul(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_rational_div(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_as_rational(mrb_state *mrb, mrb_value x);
void mrb_rational_copy(mrb_state *mrb, mrb_value x, mrb_value y);
int mrb_rational_mark(mrb_state *mrb, struct RBasic *rat);
#endif
#ifdef MRUBY_PROC_H
struct RProc *mrb_closure_new(mrb_state*, const mrb_irep*);
void mrb_proc_copy(mrb_state *mrb, struct RProc *a, struct RProc *b);
void mrb_proc_copy(mrb_state *mrb, struct RProc *a, const struct RProc *b);
mrb_int mrb_proc_arity(const struct RProc *p);
struct REnv *mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc);
void mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack);
mrb_value mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc);
const struct RProc *mrb_proc_get_caller(mrb_state *mrb, struct REnv **env);
mrb_value mrb_proc_get_self(mrb_state *mrb, struct RProc *p, struct RClass **target_class_p);
mrb_value mrb_proc_get_self(mrb_state *mrb, const struct RProc *p, struct RClass **target_class_p);
mrb_bool mrb_proc_eql(mrb_state *mrb, mrb_value self, mrb_value other);
#endif
/* range */
#ifdef MRUBY_RANGE_H
mrb_value mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, const mrb_value *argv, mrb_value (*func)(mrb_state*, mrb_value, mrb_int));
void mrb_gc_mark_range(mrb_state *mrb, struct RRange *r);
size_t mrb_gc_mark_range(mrb_state *mrb, struct RRange *r);
#endif
/* string */
@@ -170,19 +182,20 @@ mrb_value mrb_mod_class_variables(mrb_state*, mrb_value);
mrb_value mrb_mod_cv_get(mrb_state *mrb, struct RClass * c, mrb_sym sym);
mrb_bool mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym);
mrb_bool mrb_ident_p(const char *s, mrb_int len);
mrb_value mrb_exc_const_get(mrb_state *mrb, mrb_sym sym);
/* GC functions */
void mrb_gc_mark_gv(mrb_state*);
void mrb_gc_free_gv(mrb_state*);
void mrb_gc_mark_iv(mrb_state*, struct RObject*);
size_t mrb_gc_mark_iv_size(mrb_state*, struct RObject*);
size_t mrb_gc_mark_iv(mrb_state*, struct RObject*);
void mrb_gc_free_iv(mrb_state*, struct RObject*);
/* VM */
mrb_int mrb_ci_bidx(mrb_callinfo *ci);
mrb_int mrb_ci_nregs(mrb_callinfo *ci);
mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p);
mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, const struct RProc *p);
mrb_value mrb_obj_instance_eval(mrb_state*, mrb_value);
mrb_value mrb_object_exec(mrb_state *mrb, mrb_value self, struct RClass *target_class);
mrb_value mrb_mod_module_eval(mrb_state*, mrb_value);
mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
@@ -198,8 +211,8 @@ mrb_value mrb_bint_new_str(mrb_state *mrb, const char *x, mrb_int len, mrb_int b
mrb_value mrb_as_bint(mrb_state *mrb, mrb_value x);
mrb_value mrb_bint_add(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_sub(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_add_d(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_sub_d(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_add_n(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_sub_n(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_mul(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_div(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_divmod(mrb_state *mrb, mrb_value x, mrb_value y);
@@ -212,6 +225,7 @@ mrb_value mrb_bint_pow(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_powm(mrb_state *mrb, mrb_value x, mrb_value y, mrb_value z);
mrb_value mrb_bint_and(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_or(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_neg(mrb_state *mrb, mrb_value x);
mrb_value mrb_bint_xor(mrb_state *mrb, mrb_value x, mrb_value y);
mrb_value mrb_bint_rev(mrb_state *mrb, mrb_value x);
mrb_value mrb_bint_lshift(mrb_state *mrb, mrb_value x, mrb_int width);
+53 -43
View File
@@ -16,19 +16,19 @@
MRB_BEGIN_DECL
enum irep_pool_type {
IREP_TT_STR = 0, /* string (need free) */
IREP_TT_SSTR = 2, /* string (static) */
IREP_TT_INT32 = 1, /* 32bit integer */
IREP_TT_INT64 = 3, /* 64bit integer */
IREP_TT_BIGINT = 7, /* big integer (not yet supported) */
IREP_TT_FLOAT = 5, /* float (double/float) */
IREP_TT_STR = 0, /* string (need free) */
IREP_TT_SSTR = 2, /* string (static) */
IREP_TT_INT32 = 1, /* 32-bit integer */
IREP_TT_INT64 = 3, /* 64-bit integer */
IREP_TT_BIGINT = 7, /* big integer (not yet supported) */
IREP_TT_FLOAT = 5, /* float (double/float) */
};
#define IREP_TT_NFLAG 1 /* number (non string) flag */
#define IREP_TT_SFLAG 2 /* static string flag */
#define IREP_TT_NFLAG 1 /* number (non string) flag */
#define IREP_TT_SFLAG 2 /* static string flag */
typedef struct mrb_pool_value {
uint32_t tt; /* packed type and length (for string) */
typedef struct mrb_irep_pool {
uint32_t tt; /* packed type and length (for string) */
union {
const char *str;
int32_t i32;
@@ -37,7 +37,7 @@ typedef struct mrb_pool_value {
mrb_float f;
#endif
} u;
} mrb_pool_value;
} mrb_irep_pool;
enum mrb_catch_type {
MRB_CATCH_RESCUE = 0,
@@ -45,32 +45,33 @@ enum mrb_catch_type {
};
struct mrb_irep_catch_handler {
uint8_t type; /* enum mrb_catch_type */
uint8_t begin[4]; /* The starting address to match the handler. Includes this. */
uint8_t end[4]; /* The endpoint address that matches the handler. Not Includes this. */
uint8_t target[4]; /* The address to jump to if a match is made. */
uint8_t type; /* enum mrb_catch_type */
uint8_t begin[4]; /* The starting address to match the handler. Includes this. */
uint8_t end[4]; /* The endpoint address that matches the handler. Not Includes this. */
uint8_t target[4]; /* The address to jump to if a match is made. */
};
/* Program data array struct */
struct mrb_irep {
uint16_t nlocals; /* Number of local variables */
uint16_t nregs; /* Number of register variables */
uint16_t clen; /* Number of catch handlers */
uint16_t nlocals; /* Number of local variables */
uint16_t nregs; /* Number of register variables */
uint16_t clen; /* Number of catch handlers */
uint8_t flags;
const mrb_code *iseq;
/*
* A catch handler table is placed after the iseq entity.
* The reason it doesn't add fields to the structure is to keep the mrb_irep structure from bloating.
* The catch handler table can be obtained with `mrb_irep_catch_handler_table(irep)`.
* The reason it doesn't add fields to the structure is to keep the mrb_irep
* structure from bloating. The catch handler table can be obtained with
* `mrb_irep_catch_handler_table(irep)`.
*/
const mrb_pool_value *pool;
const mrb_irep_pool *pool;
const mrb_sym *syms;
const struct mrb_irep * const *reps;
const struct mrb_irep *const *reps;
const mrb_sym *lv;
/* debug info */
struct mrb_irep_debug_info* debug_info;
struct mrb_irep_debug_info *debug_info;
uint32_t ilen;
uint16_t plen, slen;
@@ -80,37 +81,46 @@ struct mrb_irep {
#define MRB_ISEQ_NO_FREE 1
#define MRB_IREP_NO_FREE 2
#define MRB_IREP_STATIC (MRB_ISEQ_NO_FREE | MRB_IREP_NO_FREE)
#define MRB_IREP_STATIC (MRB_ISEQ_NO_FREE | MRB_IREP_NO_FREE)
MRB_API mrb_irep *mrb_add_irep(mrb_state *mrb);
/** load mruby bytecode functions
* Please note! Currently due to interactions with the GC calling these functions will
* leak one RProc object per function call.
* To prevent this save the current memory arena before calling and restore the arena
* right after, like so
* int ai = mrb_gc_arena_save(mrb);
* mrb_value status = mrb_load_irep(mrb, buffer);
* mrb_gc_arena_restore(mrb, ai);
*/
/**
* load mruby bytecode functions
*
* Please note! Currently due to interactions with the GC calling these
* functions will leak one RProc object per function call. To prevent this save
* the current memory arena before calling and restore the arena right after,
* like so
*
* int ai = mrb_gc_arena_save(mrb);
* mrb_value status = mrb_load_irep(mrb, buffer);
* mrb_gc_arena_restore(mrb, ai);
*
* Also, when called from a C function defined as a method, the current stack is
* destroyed. If processing continues after this function, the objects obtained
* from the arguments must be protected as needed before this function.
*/
/* @param [const uint8_t*] irep code, expected as a literal */
MRB_API mrb_value mrb_load_irep(mrb_state*, const uint8_t*);
MRB_API mrb_value mrb_load_irep(mrb_state *, const uint8_t *);
/*
* @param [const void*] irep code
* @param [size_t] size of irep buffer.
*/
MRB_API mrb_value mrb_load_irep_buf(mrb_state*, const void*, size_t);
MRB_API mrb_value mrb_load_irep_buf(mrb_state *, const void *, size_t);
/* @param [const uint8_t*] irep code, expected as a literal */
MRB_API mrb_value mrb_load_irep_cxt(mrb_state*, const uint8_t*, mrb_ccontext*);
MRB_API mrb_value mrb_load_irep_cxt(mrb_state *, const uint8_t *,
mrbc_context *);
/*
* @param [const void*] irep code
* @param [size_t] size of irep buffer.
*/
MRB_API mrb_value mrb_load_irep_buf_cxt(mrb_state*, const void*, size_t, mrb_ccontext*);
MRB_API mrb_value mrb_load_irep_buf_cxt(mrb_state *, const void *, size_t,
mrbc_context *);
struct mrb_insn_data {
uint8_t insn;
@@ -120,13 +130,13 @@ struct mrb_insn_data {
const mrb_code *addr;
};
#define mrb_irep_catch_handler_pack(n, v) uint32_to_bin(n, v)
#define mrb_irep_catch_handler_unpack(v) bin_to_uint32(v)
#define mrb_irep_catch_handler_pack(n, v) uint32_to_bin(n, v)
#define mrb_irep_catch_handler_unpack(v) bin_to_uint32(v)
void mrb_irep_incref(mrb_state*, struct mrb_irep*);
void mrb_irep_decref(mrb_state*, struct mrb_irep*);
void mrb_irep_cutref(mrb_state*, struct mrb_irep*);
void mrb_irep_incref(mrb_state *, struct mrb_irep *);
void mrb_irep_decref(mrb_state *, struct mrb_irep *);
void mrb_irep_cutref(mrb_state *, struct mrb_irep *);
MRB_END_DECL
#endif /* MRUBY_IREP_H */
#endif /* MRUBY_IREP_H */
+1 -1
View File
@@ -30,7 +30,7 @@ struct RIStruct {
#define RISTRUCT(obj) ((struct RIStruct*)(mrb_ptr(obj)))
#define ISTRUCT_PTR(obj) (RISTRUCT(obj)->inline_data)
MRB_INLINE mrb_int mrb_istruct_size()
MRB_INLINE mrb_int mrb_istruct_size(void)
{
return ISTRUCT_DATA_SIZE;
}
+1 -1
View File
@@ -264,7 +264,7 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len)
#define kh_size(h) ((h)->size)
#define kh_n_buckets(h) ((h)->n_buckets)
#define kh_int_hash_func(mrb,key) (khint_t)((key)^((key)<<2)^((key)>>2))
#define kh_int_hash_func(mrb,key) mrb_int_hash_func(mrb,key)
#define kh_int_hash_equal(mrb,a, b) (a == b)
#define kh_int64_hash_func(mrb,key) (khint_t)((key)>>33^(key)^(key)<<11)
#define kh_int64_hash_equal(mrb,a, b) (a == b)
+13
View File
@@ -0,0 +1,13 @@
/*
** mempool.h - memory pool
**
** See Copyright Notice in mruby.h
*/
/* memory pool implementation */
typedef struct mrb_mempool mrb_mempool;
MRB_API struct mrb_mempool* mrb_mempool_open(mrb_state*);
MRB_API void mrb_mempool_close(struct mrb_mempool*);
MRB_API void* mrb_mempool_alloc(struct mrb_mempool*, size_t);
MRB_API void* mrb_mempool_realloc(struct mrb_mempool*, void*, size_t oldlen, size_t newlen);
MRB_API mrb_bool mrb_mempool_can_realloc(struct mrb_mempool*, void*, size_t);
+5 -7
View File
@@ -11,8 +11,9 @@
struct RClass *c; \
struct RBasic *gcnext; \
enum mrb_vtype tt:8; \
uint32_t color:3; \
uint32_t flags:21
unsigned int gc_color:3; \
unsigned int frozen:1; \
uint32_t flags:20
#define MRB_FLAG_TEST(obj, flag) ((obj)->flags & (flag))
@@ -21,11 +22,8 @@ struct RBasic {
};
#define mrb_basic_ptr(v) ((struct RBasic*)(mrb_ptr(v)))
#define MRB_FL_OBJ_IS_FROZEN (1 << 20)
#define MRB_FROZEN_P(o) ((o)->flags & MRB_FL_OBJ_IS_FROZEN)
#define MRB_SET_FROZEN_FLAG(o) ((o)->flags |= MRB_FL_OBJ_IS_FROZEN)
#define MRB_UNSET_FROZEN_FLAG(o) ((o)->flags &= ~MRB_FL_OBJ_IS_FROZEN)
#define mrb_frozen_p(o) MRB_FROZEN_P(o)
#define MRB_OBJ_IS_FROZEN 1
#define mrb_frozen_p(o) ((o)->frozen)
struct RObject {
MRB_OBJECT_HEADER;
+1 -1
View File
@@ -9,7 +9,7 @@
enum mrb_insn {
#define OPCODE(x,_) OP_ ## x,
#include "mruby/ops.h"
#include <mruby/ops.h>
#undef OPCODE
};
+1 -1
View File
@@ -15,7 +15,7 @@ operation code operands semantics
OPCODE(NOP, Z) /* no operation */
OPCODE(MOVE, BB) /* R[a] = R[b] */
OPCODE(LOADL, BB) /* R[a] = Pool[b] */
OPCODE(LOADI, BB) /* R[a] = mrb_int(b) */
OPCODE(LOADI8, BB) /* R[a] = mrb_int(b) */
OPCODE(LOADINEG, BB) /* R[a] = mrb_int(-b) */
OPCODE(LOADI__1, B) /* R[a] = mrb_int(-1) */
OPCODE(LOADI_0, B) /* R[a] = mrb_int(0) */
+1
View File
@@ -19,6 +19,7 @@
* macros.
*
* MRB_OPSYM(xor) //=> ^ (Operator)
* MRB_GVSYM(xor) //=> $xor (Global Variable)
* MRB_CVSYM(xor) //=> @@xor (Class Variable)
* MRB_IVSYM(xor) //=> @xor (Instance Variable)
* MRB_SYM_B(xor) //=> xor! (Method with Bang)
+2
View File
@@ -12,6 +12,7 @@
#define MRB_PRESYM_MAX 0
#define MRB_OPSYM(name) MRB_OPSYM__##name(mrb)
#define MRB_GVSYM(name) mrb_intern_lit(mrb, "$" #name)
#define MRB_CVSYM(name) mrb_intern_lit(mrb, "@@" #name)
#define MRB_IVSYM(name) mrb_intern_lit(mrb, "@" #name)
#define MRB_SYM_B(name) mrb_intern_lit(mrb, #name "!")
@@ -20,6 +21,7 @@
#define MRB_SYM(name) mrb_intern_lit(mrb, #name)
#define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name(mrb)
#define MRB_GVSYM_2(mrb, name) mrb_intern_lit(mrb, "$" #name)
#define MRB_CVSYM_2(mrb, name) mrb_intern_lit(mrb, "@@" #name)
#define MRB_IVSYM_2(mrb, name) mrb_intern_lit(mrb, "@" #name)
#define MRB_SYM_B_2(mrb, name) mrb_intern_lit(mrb, #name "!")
+2
View File
@@ -10,6 +10,7 @@
#include <mruby/presym/id.h>
#define MRB_OPSYM(name) MRB_OPSYM__##name
#define MRB_GVSYM(name) MRB_GVSYM__##name
#define MRB_CVSYM(name) MRB_CVSYM__##name
#define MRB_IVSYM(name) MRB_IVSYM__##name
#define MRB_SYM_B(name) MRB_SYM_B__##name
@@ -18,6 +19,7 @@
#define MRB_SYM(name) MRB_SYM__##name
#define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name
#define MRB_GVSYM_2(mrb, name) MRB_GVSYM__##name
#define MRB_CVSYM_2(mrb, name) MRB_CVSYM__##name
#define MRB_IVSYM_2(mrb, name) MRB_IVSYM__##name
#define MRB_SYM_B_2(mrb, name) MRB_SYM_B__##name
+2
View File
@@ -30,6 +30,7 @@
#define mrb_funcall(mrb, v, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (v) (__VA_ARGS__)
#define MRB_OPSYM(name) MRB_OPSYM__##name(mrb)
#define MRB_GVSYM(name) MRB_PRESYM_SCANNING_TAGGED("$" #name)
#define MRB_CVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@@" #name)
#define MRB_IVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@" #name)
#define MRB_SYM_B(name) MRB_PRESYM_SCANNING_TAGGED(#name "!")
@@ -38,6 +39,7 @@
#define MRB_SYM(name) MRB_PRESYM_SCANNING_TAGGED(#name)
#define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name(mrb)
#define MRB_GVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("$" #name)
#define MRB_CVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("@@" #name)
#define MRB_IVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("@" #name)
#define MRB_SYM_B_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED(#name "!")
+30 -33
View File
@@ -9,25 +9,32 @@
#include "common.h"
#include <mruby/irep.h>
#include <string.h>
/**
* Proc class
*/
MRB_BEGIN_DECL
/*
* env object (for internal used)
*
* - don't create multiple envs on one ci.
* - don't share a env to different ci.
* - don't attach a closed env to any ci.
*/
struct REnv {
MRB_OBJECT_HEADER;
mrb_value *stack;
struct mrb_context *cxt;
struct mrb_context *cxt; /* if not null, it means that the stack is shared with the call frame */
mrb_sym mid;
};
/* flags (21bits): 1(close):1(touched):1(heap):8(cioff/bidx):8(stack_len) */
/* flags (21bits): 5(ZERO):8(cioff/bidx):8(stack_len) */
#define MRB_ENV_SET_LEN(e,len) ((e)->flags = (((e)->flags & ~0xff)|((unsigned int)(len) & 0xff)))
#define MRB_ENV_LEN(e) ((mrb_int)((e)->flags & 0xff))
#define MRB_ENV_CLOSED (1<<20)
#define MRB_ENV_CLOSE(e) ((e)->flags |= MRB_ENV_CLOSED)
#define MRB_ENV_ONSTACK_P(e) (((e)->flags & MRB_ENV_CLOSED) == 0)
#define MRB_ENV_CLOSE(e) ((e)->cxt = NULL)
#define MRB_ENV_ONSTACK_P(e) ((e)->cxt != NULL)
#define MRB_ENV_BIDX(e) (((e)->flags >> 8) & 0xff)
#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0xff<<8))|((unsigned int)(idx) & 0xff)<<8))
@@ -102,40 +109,30 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx);
/* old name */
#define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx)
#define MRB_METHOD_FUNC_FL 1
#define MRB_METHOD_NOARG_FL 2
#ifndef MRB_USE_METHOD_T_STRUCT
#define MRB_METHOD_FUNC_P(m) (((uintptr_t)(m))&MRB_METHOD_FUNC_FL)
#define MRB_METHOD_NOARG_P(m) ((((uintptr_t)(m))&MRB_METHOD_NOARG_FL)?1:0)
#define MRB_METHOD_NOARG_SET(m) ((m)=(mrb_method_t)(((uintptr_t)(m))|MRB_METHOD_NOARG_FL))
#define MRB_METHOD_FUNC(m) ((mrb_func_t)((uintptr_t)(m)>>2))
#define MRB_METHOD_FROM_FUNC(m,fn) ((m)=(mrb_method_t)((((uintptr_t)(fn))<<2)|MRB_METHOD_FUNC_FL))
#define MRB_METHOD_FROM_PROC(m,pr) ((m)=(mrb_method_t)(pr))
#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
#define MRB_METHOD_PROC(m) ((struct RProc*)(m))
#define MRB_METHOD_UNDEF_P(m) ((m)==0)
#else
#define MRB_METHOD_FUNC_FL 8
#define MRB_METHOD_NOARG_FL 4
#define MRB_METHOD_PUBLIC_FL 0
#define MRB_METHOD_PRIVATE_FL 1
#define MRB_METHOD_PROTECTED_FL 2
#define MRB_METHOD_VDEFAULT_FL 3
#define MRB_METHOD_VISIBILITY_MASK 3
#define MRB_METHOD_FUNC_P(m) ((m).flags&MRB_METHOD_FUNC_FL)
#define MRB_METHOD_NOARG_P(m) (((m).flags&MRB_METHOD_NOARG_FL)?1:0)
#define MRB_METHOD_FUNC(m) ((m).func)
#define MRB_METHOD_FUNC(m) ((m).as.func)
#define MRB_METHOD_NOARG_SET(m) do{(m).flags|=MRB_METHOD_NOARG_FL;}while(0)
#define MRB_METHOD_FROM_FUNC(m,fn) do{(m).flags=MRB_METHOD_FUNC_FL;(m).func=(fn);}while(0)
#define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).proc=(struct RProc*)(pr);}while(0)
#define MRB_METHOD_FROM_FUNC(m,fn) do{(m).flags=MRB_METHOD_FUNC_FL;(m).as.func=(fn);}while(0)
#define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).as.proc=(pr);}while(0)
#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
#define MRB_METHOD_PROC(m) ((m).proc)
#define MRB_METHOD_UNDEF_P(m) ((m).proc==NULL)
#define MRB_METHOD_PROC(m) ((m).as.proc)
#define MRB_METHOD_UNDEF_P(m) ((m).as.proc==NULL)
#define MRB_METHOD_VISIBILITY(m) ((m).flags & MRB_METHOD_VISIBILITY_MASK)
#define MRB_SET_VISIBILITY(f,v) ((f)=(((f)&~MRB_METHOD_VISIBILITY_MASK)|(v)))
#define MRB_METHOD_SET_VISIBILITY(m,v) MRB_SET_VISIBILITY((m).flags,(v))
#endif /* MRB_USE_METHOD_T_STRUCT */
#define MRB_METHOD_CFUNC_P(m) (MRB_METHOD_FUNC_P(m)?TRUE:(MRB_METHOD_PROC(m)?(MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m))):FALSE))
#define MRB_METHOD_CFUNC(m) (MRB_METHOD_FUNC_P(m)?MRB_METHOD_FUNC(m):((MRB_METHOD_PROC(m)&&MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m)))?MRB_PROC_CFUNC(MRB_METHOD_PROC(m)):NULL))
#include <mruby/khash.h>
#define MRB_METHOD_CFUNC_P(m) (MRB_METHOD_FUNC_P(m) || (MRB_METHOD_PROC(m)?(MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m))):FALSE))
/* use MRB_METHOD_CFUNC(m) only when MRB_METHOD_CFUNC_P(m) is true */
#define MRB_METHOD_CFUNC(m) (MRB_METHOD_FUNC_P(m)?MRB_METHOD_FUNC(m):MRB_PROC_CFUNC(MRB_METHOD_PROC(m)))
MRB_API mrb_value mrb_load_proc(mrb_state *mrb, const struct RProc *proc);
+28 -31
View File
@@ -38,12 +38,25 @@ struct RStringEmbed {
char ary[RSTRING_EMBED_LEN_MAX+1];
};
#define RSTR_SET_TYPE_FLAG(s, type) (RSTR_UNSET_TYPE_FLAG(s), (s)->flags |= MRB_STR_##type)
#define RSTR_UNSET_TYPE_FLAG(s) ((s)->flags &= ~(MRB_STR_TYPE_MASK|MRB_STR_EMBED_LEN_MASK))
#define RSTR_SET_TYPE(s, type) ((s)->flags = ((s)->flags & ~(MRB_STR_TYPE_MASK|MRB_STR_EMBED_LEN_MASK)) | MRB_STR_##type)
#define MRB_STR_NORMAL 0
#define MRB_STR_SHARED 1
#define MRB_STR_FSHARED 2
#define MRB_STR_NOFREE 4
#define MRB_STR_EMBED 8
#define MRB_STR_TYPE_MASK 15
#define MRB_STR_EMBED_LEN_SHIFT 6
#define MRB_STR_EMBED_LEN_BITS 5
#define MRB_STR_EMBED_LEN_MASK (((1 << MRB_STR_EMBED_LEN_BITS) - 1) << MRB_STR_EMBED_LEN_SHIFT)
#define MRB_STR_BINARY 16
#define MRB_STR_SINGLE_BYTE 32
#define MRB_STR_STATE_MASK 48
#define RSTR_EMBED_P(s) ((s)->flags & MRB_STR_EMBED)
#define RSTR_SET_EMBED_FLAG(s) ((s)->flags |= MRB_STR_EMBED)
#define RSTR_UNSET_EMBED_FLAG(s) ((s)->flags &= ~(MRB_STR_EMBED|MRB_STR_EMBED_LEN_MASK))
#define RSTR_SET_EMBED_LEN(s, n) do {\
size_t tmp_n = (n);\
(s)->flags &= ~MRB_STR_EMBED_LEN_MASK;\
@@ -67,30 +80,24 @@ struct RStringEmbed {
#define RSTR_CAPA(s) (RSTR_EMBED_P(s) ? RSTRING_EMBED_LEN_MAX : (s)->as.heap.aux.capa)
#define RSTR_SHARED_P(s) ((s)->flags & MRB_STR_SHARED)
#define RSTR_SET_SHARED_FLAG(s) ((s)->flags |= MRB_STR_SHARED)
#define RSTR_UNSET_SHARED_FLAG(s) ((s)->flags &= ~MRB_STR_SHARED)
#define RSTR_FSHARED_P(s) ((s)->flags & MRB_STR_FSHARED)
#define RSTR_SET_FSHARED_FLAG(s) ((s)->flags |= MRB_STR_FSHARED)
#define RSTR_UNSET_FSHARED_FLAG(s) ((s)->flags &= ~MRB_STR_FSHARED)
#define RSTR_NOFREE_P(s) ((s)->flags & MRB_STR_NOFREE)
#define RSTR_SET_NOFREE_FLAG(s) ((s)->flags |= MRB_STR_NOFREE)
#define RSTR_UNSET_NOFREE_FLAG(s) ((s)->flags &= ~MRB_STR_NOFREE)
#ifdef MRB_UTF8_STRING
# define RSTR_ASCII_P(s) ((s)->flags & MRB_STR_ASCII)
# define RSTR_SET_ASCII_FLAG(s) ((s)->flags |= MRB_STR_ASCII)
# define RSTR_UNSET_ASCII_FLAG(s) ((s)->flags &= ~MRB_STR_ASCII)
# define RSTR_WRITE_ASCII_FLAG(s, v) (RSTR_UNSET_ASCII_FLAG(s), (s)->flags |= v)
# define RSTR_COPY_ASCII_FLAG(dst, src) RSTR_WRITE_ASCII_FLAG(dst, RSTR_ASCII_P(src))
# define RSTR_SINGLE_BYTE_P(s) ((s)->flags & MRB_STR_SINGLE_BYTE)
# define RSTR_SET_SINGLE_BYTE_FLAG(s) ((s)->flags |= MRB_STR_SINGLE_BYTE)
# define RSTR_UNSET_SINGLE_BYTE_FLAG(s) ((s)->flags &= ~MRB_STR_SINGLE_BYTE)
# define RSTR_WRITE_SINGLE_BYTE_FLAG(s, v) (RSTR_UNSET_SINGLE_BYTE_FLAG(s), (s)->flags |= v)
# define RSTR_COPY_SINGLE_BYTE_FLAG(dst, src) RSTR_WRITE_SINGLE_BYTE_FLAG(dst, RSTR_SINGLE_BYTE_P(src))
#else
# define RSTR_ASCII_P(s) (void)0
# define RSTR_SET_ASCII_FLAG(s) (void)0
# define RSTR_UNSET_ASCII_FLAG(s) (void)0
# define RSTR_WRITE_ASCII_FLAG(s, v) (void)0
# define RSTR_COPY_ASCII_FLAG(dst, src) (void)0
# define RSTR_SINGLE_BYTE_P(s) TRUE
# define RSTR_SET_SINGLE_BYTE_FLAG(s) (void)0
# define RSTR_UNSET_SINGLE_BYTE_FLAG(s) (void)0
# define RSTR_WRITE_SINGLE_BYTE_FLAG(s, v) (void)0
# define RSTR_COPY_SINGLE_BYTE_FLAG(dst, src) (void)0
#endif
#define RSTR_SET_ASCII_FLAG(s) RSTR_SET_SINGLE_BYTE_FLAG(s)
#define RSTR_BINARY_P(s) ((s)->flags & MRB_STR_BINARY)
/**
* Returns a pointer from a Ruby string
@@ -104,16 +111,6 @@ struct RStringEmbed {
#define RSTRING_END(s) (RSTRING_PTR(s) + RSTRING_LEN(s))
#define RSTRING_CSTR(mrb,s) mrb_string_cstr(mrb, s)
#define MRB_STR_SHARED 1
#define MRB_STR_FSHARED 2
#define MRB_STR_NOFREE 4
#define MRB_STR_EMBED 8 /* type flags up to here */
#define MRB_STR_ASCII 16
#define MRB_STR_EMBED_LEN_SHIFT 6
#define MRB_STR_EMBED_LEN_BIT 5
#define MRB_STR_EMBED_LEN_MASK (((1 << MRB_STR_EMBED_LEN_BIT) - 1) << MRB_STR_EMBED_LEN_SHIFT)
#define MRB_STR_TYPE_MASK 15
MRB_API void mrb_str_modify(mrb_state *mrb, struct RString *s);
/* mrb_str_modify() with keeping ASCII flag if set */
MRB_API void mrb_str_modify_keep_ascii(mrb_state *mrb, struct RString *s);
+3 -11
View File
@@ -16,11 +16,11 @@
# if defined(__cplusplus)
#define MRB_TRY(buf) try {
#define MRB_CATCH(buf) } catch(mrb_jmpbuf_impl e) { if (e != (buf)->impl) { throw e; }
#define MRB_CATCH(buf) } catch(mrb_jmpbuf *e) { if (e != (buf)) { throw e; }
#define MRB_END_EXC(buf) }
#define MRB_THROW(buf) throw((buf)->impl)
typedef mrb_int mrb_jmpbuf_impl;
#define MRB_THROW(buf) throw(buf)
typedef void *mrb_jmpbuf_impl;
# else
# error "need to be compiled with C++ compiler"
@@ -50,16 +50,8 @@ typedef mrb_int mrb_jmpbuf_impl;
#endif
#if defined(MRB_USE_CXX_EXCEPTION)
extern mrb_int mrb_jmpbuf_id;
#endif
struct mrb_jmpbuf {
mrb_jmpbuf_impl impl;
#if defined(MRB_USE_CXX_EXCEPTION)
mrb_jmpbuf() : impl(mrb_jmpbuf_id++) {}
#endif
};
#endif /* MRB_THROW_H */
+20 -14
View File
@@ -143,23 +143,24 @@ static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000;
f(MRB_TT_OBJECT, struct RObject, "Object") \
f(MRB_TT_CLASS, struct RClass, "Class") \
f(MRB_TT_MODULE, struct RClass, "Module") \
f(MRB_TT_ICLASS, struct RClass, "iClass") \
f(MRB_TT_SCLASS, struct RClass, "SClass") \
f(MRB_TT_HASH, struct RHash, "Hash") \
f(MRB_TT_CDATA, struct RData, "C data") \
f(MRB_TT_EXCEPTION, struct RException, "Exception") \
f(MRB_TT_ICLASS, struct RClass, "iClass") \
f(MRB_TT_PROC, struct RProc, "Proc") \
f(MRB_TT_ARRAY, struct RArray, "Array") \
f(MRB_TT_HASH, struct RHash, "Hash") \
f(MRB_TT_STRING, struct RString, "String") \
f(MRB_TT_RANGE, struct RRange, "Range") \
f(MRB_TT_EXCEPTION, struct RException, "Exception") \
f(MRB_TT_ENV, struct REnv, "env") \
f(MRB_TT_CDATA, struct RData, "C data") \
f(MRB_TT_FIBER, struct RFiber, "Fiber") \
f(MRB_TT_STRUCT, struct RArray, "Struct") \
f(MRB_TT_ISTRUCT, struct RIStruct, "istruct") \
f(MRB_TT_BREAK, struct RBreak, "break") \
f(MRB_TT_COMPLEX, struct RComplex, "Complex") \
f(MRB_TT_RATIONAL, struct RRational, "Rational") \
f(MRB_TT_BIGINT, struct RBigint, "Integer")
f(MRB_TT_BIGINT, struct RBigint, "Integer") \
f(MRB_TT_BACKTRACE, struct RBacktrace, "backtrace")
enum mrb_vtype {
#define MRB_VTYPE_DEFINE(tt, type, name) tt,
@@ -320,7 +321,8 @@ struct RCptr {
* Takes a float and boxes it into an mrb_value
*/
#ifndef MRB_NO_FLOAT
MRB_INLINE mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f)
MRB_INLINE mrb_value
mrb_float_value(struct mrb_state *mrb, mrb_float f)
{
mrb_value v;
(void) mrb;
@@ -341,14 +343,16 @@ mrb_cptr_value(struct mrb_state *mrb, void *p)
/**
* Returns an integer in Ruby.
*/
MRB_INLINE mrb_value mrb_int_value(struct mrb_state *mrb, mrb_int i)
MRB_INLINE mrb_value
mrb_int_value(struct mrb_state *mrb, mrb_int i)
{
mrb_value v;
SET_INT_VALUE(mrb, v, i);
return v;
}
MRB_INLINE mrb_value mrb_fixnum_value(mrb_int i)
MRB_INLINE mrb_value
mrb_fixnum_value(mrb_int i)
{
mrb_value v;
SET_FIXNUM_VALUE(v, i);
@@ -377,7 +381,8 @@ mrb_obj_value(void *p)
* @return
* nil mrb_value object reference.
*/
MRB_INLINE mrb_value mrb_nil_value(void)
MRB_INLINE mrb_value
mrb_nil_value(void)
{
mrb_value v;
SET_NIL_VALUE(v);
@@ -387,7 +392,8 @@ MRB_INLINE mrb_value mrb_nil_value(void)
/**
* Returns false in Ruby.
*/
MRB_INLINE mrb_value mrb_false_value(void)
MRB_INLINE mrb_value
mrb_false_value(void)
{
mrb_value v;
SET_FALSE_VALUE(v);
@@ -397,7 +403,8 @@ MRB_INLINE mrb_value mrb_false_value(void)
/**
* Returns true in Ruby.
*/
MRB_INLINE mrb_value mrb_true_value(void)
MRB_INLINE mrb_value
mrb_true_value(void)
{
mrb_value v;
SET_TRUE_VALUE(v);
@@ -445,10 +452,9 @@ mrb_ro_data_p(const char *p)
struct mach_header *mhp;
#endif
mhp = _NSGetMachExecuteHeader();
unsigned long textsize, datasize;
unsigned long textsize;
char *text = (char*)getsegmentdata(mhp, SEG_TEXT, &textsize);
char *data = (char*)getsegmentdata(mhp, SEG_DATA, &datasize);
return text + textsize < p && p < data + datasize;
return text <= p && p < text + textsize;
}
#endif /* Linux or macOS */
#endif /* MRB_NO_DEFAULT_RO_DATA_P */
+5 -5
View File
@@ -27,7 +27,7 @@ MRB_BEGIN_DECL
/*
* The version of Ruby used by mruby.
*/
#define MRUBY_RUBY_VERSION "3.3"
#define MRUBY_RUBY_VERSION "3.4"
/*
* Ruby engine.
@@ -42,7 +42,7 @@ MRB_BEGIN_DECL
/*
* Minor release version number.
*/
#define MRUBY_RELEASE_MINOR 3
#define MRUBY_RELEASE_MINOR 4
/*
* Tiny release version number.
@@ -80,17 +80,17 @@ MRB_BEGIN_DECL
/*
* Release year.
*/
#define MRUBY_RELEASE_YEAR 2024
#define MRUBY_RELEASE_YEAR 2025
/*
* Release month.
*/
#define MRUBY_RELEASE_MONTH 1
#define MRUBY_RELEASE_MONTH 3
/*
* Release day.
*/
#define MRUBY_RELEASE_DAY 4
#define MRUBY_RELEASE_DAY 17
/*
* Release date as a string.
+14 -4
View File
@@ -75,8 +75,9 @@ module MRuby
include Rake::DSL
include LoadGems
attr_accessor :name, :bins, :exts, :file_separator, :build_dir, :gem_clone_dir, :defines
attr_accessor :name, :bins, :exts, :file_separator, :build_dir, :gem_clone_dir, :defines, :libdir_name
attr_reader :products, :libmruby_core_objs, :libmruby_objs, :gems, :toolchains, :presym, :mrbc_build, :gem_dir_to_repo_url
attr_reader :install_excludes
alias libmruby libmruby_objs
@@ -101,7 +102,9 @@ module MRuby
@file_separator = '/'
@build_dir = "#{build_dir}/#{@name}"
@gem_clone_dir = "#{build_dir}/repos/#{@name}"
@libdir_name = (self.kind_of?(MRuby::CrossBuild) ? nil : ENV["MRUBY_SYSTEM_LIBDIR_NAME"]) || "lib"
@install_prefix = nil
@install_excludes = []
@defines = []
@cc = Command::Compiler.new(self, %w(.c), label: "CC")
@cxx = Command::Compiler.new(self, %w(.cc .cxx .cpp), label: "CXX")
@@ -134,6 +137,13 @@ module MRuby
@toolchains = []
@gem_dir_to_repo_url = {}
# Add lambda instead of string because libdir_name or lib may be changed by user configuration
libmruby_core_name = nil
@install_excludes << ->(file) {
libmruby_core_name ||= File.join(libdir_name, libfile("libmruby_core"))
file == libmruby_core_name
}
MRuby.targets[@name] = current = self
end
@@ -490,11 +500,11 @@ EOS
end
def libmruby_static
libfile("#{build_dir}/lib/libmruby")
libfile("#{build_dir}/#{libdir_name}/libmruby")
end
def libmruby_core_static
libfile("#{build_dir}/lib/libmruby_core")
libfile("#{build_dir}/#{libdir_name}/libmruby_core")
end
def libraries
@@ -537,7 +547,7 @@ EOS
attr_writer :presym
def create_mrbc_build
exclusions = %i[@name @build_dir @gems @enable_test @enable_bintest @internal]
exclusions = %i[@name @build_dir @gems @enable_test @enable_bintest @internal @install_excludes]
name = "#{@name}/mrbc"
MRuby.targets.delete(name)
build = self.class.new(name, internal: true){}
+2 -2
View File
@@ -249,7 +249,7 @@ module MRuby
def initialize(build)
super
@command = 'bison'
@command = "ruby #{MRUBY_ROOT}/tools/lrama/exe/lrama"
@compile_options = %q[-o "%{outfile}" "%{infile}"]
end
@@ -317,7 +317,7 @@ module MRuby
end
def commit_hash(dir)
`#{@command} --git-dir #{shellquote(dir +'/.git')} --work-tree #{shellquote(dir)} rev-parse --verify HEAD`.strip
`#{@command} --git-dir #{shellquote(dir + '/.git')} --work-tree #{shellquote(dir)} rev-parse --verify HEAD`.strip
end
def current_branch(dir)
+1 -1
View File
@@ -322,7 +322,7 @@ module MRuby
return false unless prev
# Canonical declarations must precede all others.
fail("Attempted to re-declare #{prev.gemname} as canonical!\n" +
fail("Attempted to redeclare #{prev.gemname} as canonical!\n" +
"('canonical' can only be used on its first declaration.)") if
prev && @canonical
+5 -4
View File
@@ -21,15 +21,16 @@ module MRuby
diff = ""
spliter = <<~'SPLITER'
| Instruction Name | Operand type | Semantics |
|--------------------|----------------|------------------------------------------------------------|
| No. | Instruction Name | Operand type | Semantics
| --: | ---------------- | ------------ | ---------------
SPLITER
diff = path_opcode_md.read.sub(/^#{Regexp.escape spliter}.*?(?=\z|^$\n)/m) do
repl = spliter
ops = path_ops_h.read
ops.scan(/^\s*OPCODE\s*\(\s*(\w+)\s*,\s*(\w+)\s*\)\s*(?:\/\*\s*(.*?)\s*\*\/\s*)?/).each do |ins, opr, cmt|
pat = /^\s*OPCODE\s*\(\s*(\w+)\s*,\s*(\w+)\s*\)\s*(?:\/\*\s*(.*?)\s*\*\/\s*)?/
ops.scan(pat).each_with_index do |(ins, opr, cmt), no|
if cmt
cmt.sub!(/\s*#.*/, "")
cmt.sub!(/\b(?=L_\w+\b)/, "OP_")
@@ -37,7 +38,7 @@ module MRuby
cmt.gsub!(/[\\\|]/) { |m| "\\#{m}" } # Ruby-2.5 is not support "Numbered block parameter"
end
spec = opspecs[opr] or raise "unknown operand type: #{opr}"
item = format(%(| %-18s | %-14s | %-58s |\n), "`OP_#{ins}`", "`#{spec[:modified] || opr}`", cmt && "`#{cmt}`")
item = format("| %3d | %-16s | %-12s | %s\n", no, "`OP_#{ins}`", "`#{spec[:modified] || opr}`", cmt && "`#{cmt}`")
repl << item
end
+4 -2
View File
@@ -372,6 +372,7 @@ module MRuby
def each(&b)
@ary.each(&b)
self
end
def [](name)
@@ -384,6 +385,7 @@ module MRuby
else
# GEM was already added to this list
end
self
end
def empty?
@@ -463,8 +465,8 @@ module MRuby
table.instance_variable_set :@root_gems, ary
class << table
include TSort
def tsort_each_node &b
@root_gems.each &b
def tsort_each_node(&b)
@root_gems.each(&b)
end
def tsort_each_child(n, &b)
+1
View File
@@ -36,6 +36,7 @@ module MRuby
SYMBOL_TO_MACRO = {
# Symbol => Macro
# [prefix, suffix] => [prefix, suffix]
["$" , "" ] => ["GV" , "" ],
["@@" , "" ] => ["CV" , "" ],
["@" , "" ] => ["IV" , "" ],
["" , "!" ] => ["" , "_B" ],
+61 -61
View File
@@ -333,13 +333,13 @@ class Array
def fetch(n, ifnone=NONE, &block)
#warn "block supersedes default value argument" if !n.nil? && ifnone != NONE && block
idx = n
idx = n.__to_int
if idx < 0
idx += size
end
if idx < 0 || size <= idx
return block.call(n) if block
if ifnone == NONE
if NONE.equal?(ifnone)
raise IndexError, "index #{n} outside of array bounds: #{-size}...#{size}"
end
return ifnone
@@ -400,12 +400,12 @@ class Array
len += 1 unless arg0.exclude_end?
elsif !arg0.nil?
# ary.fill(start [, length] ) { |index| block } -> ary
beg = arg0
beg = arg0.__to_int
beg += self.size if beg < 0
if arg1.nil?
len = self.size
else
len = arg0 + arg1
len = beg + arg1.__to_int
end
end
else
@@ -422,12 +422,12 @@ class Array
len += 1 unless arg1.exclude_end?
elsif !arg0.nil? && !arg1.nil?
# ary.fill(obj, start [, length]) -> ary
beg = arg1
beg = arg1.__to_int
beg += self.size if beg < 0
if arg2.nil?
len = self.size
else
len = beg + arg2
len = beg + arg2.__to_int
end
end
end
@@ -467,15 +467,16 @@ class Array
def delete_if(&block)
return to_enum :delete_if unless block
result = []
idx = 0
while idx < self.size do
if block.call(self[idx])
self.delete_at(idx)
else
idx += 1
end
len = size
while idx < len
elem = self[idx]
result << elem unless block.call(elem)
idx += 1
end
self
self.replace(result)
end
##
@@ -496,20 +497,18 @@ class Array
def reject!(&block)
return to_enum :reject! unless block
len = self.size
result = []
idx = 0
while idx < self.size do
if block.call(self[idx])
self.delete_at(idx)
else
idx += 1
end
end
if self.size == len
nil
else
self
len = size
while idx < len
elem = self[idx]
result << elem unless block.call(elem)
idx += 1
end
return nil if len == result.size
self.replace(result)
end
##
@@ -526,6 +525,7 @@ class Array
# a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
def insert(idx, *args)
idx = idx.__to_int
idx += self.size + 1 if idx < 0
self[idx, 0] = args
self
@@ -658,15 +658,16 @@ class Array
def keep_if(&block)
return to_enum :keep_if unless block
result = []
idx = 0
while idx < self.size do
if block.call(self[idx])
idx += 1
else
self.delete_at(idx)
end
len = size
while idx < len
elem = self[idx]
result << elem if block.call(elem)
idx += 1
end
self
self.replace(result)
end
##
@@ -694,39 +695,12 @@ class Array
result << elem if block.call(elem)
idx += 1
end
return nil if len == result.size
self.replace(result)
end
##
# call-seq:
# ary.index(val) -> int or nil
# ary.index {|item| block } -> int or nil
#
# Returns the _index_ of the first object in +ary+ such that the object is
# <code>==</code> to +obj+.
#
# If a block is given instead of an argument, returns the _index_ of the
# first object for which the block returns +true+. Returns +nil+ if no
# match is found.
#
# ISO 15.2.12.5.14
def index(val=NONE, &block)
return to_enum(:find_index, val) if !block && val == NONE
if block
idx = 0
len = size
while idx < len
return idx if block.call self[idx]
idx += 1
end
else
return self.__ary_index(val)
end
nil
end
##
# call-seq:
# ary.dig(idx, ...) -> object
@@ -736,6 +710,7 @@ class Array
# intermediate step is +nil+.
#
def dig(idx,*args)
idx = idx.__to_int
n = self[idx]
if args.size > 0
n&.dig(*args)
@@ -771,6 +746,7 @@ class Array
# a.permutation(0).to_a #=> [[]] # one permutation of length 0
# a.permutation(4).to_a #=> [] # no permutations of length 4
def permutation(n=self.size, &block)
n = n.__to_int
return to_enum(:permutation, n) unless block
size = self.size
if n == 0
@@ -817,6 +793,7 @@ class Array
# a.combination(5).to_a #=> [] # no combinations of length 5
def combination(n, &block)
n = n.__to_int
return to_enum(:combination, n) unless block
size = self.size
if n == 0
@@ -897,6 +874,27 @@ class Array
alias prepend unshift
alias filter! select!
##
# call-seq:
# ary.fetch_values(idx, ...) -> array
# ary.fetch_values(idx, ...) { |i| block } -> array
#
# Returns an array containing the values associated with the given indexes.
# but also raises <code>IndexError</code> when one of indexes can't be found.
# Also see <code>Array#values_at</code> and <code>Array#fetch</code>.
#
# a = ["cat", "dog", "cow"]
#
# a.fetch_values(2, 0) #=> ["cow", "cat"]
# a.fetch_values(2, 5) # raises KeyError
# a.fetch_values(2, 5) {|i| "BIRD" } #=> ["cow", "BIRD"]
#
def fetch_values(*idx, &block)
idx.map do |i|
self.fetch(i, &block)
end
end
##
# call-seq:
# ary.product(*arys) -> array
@@ -963,12 +961,14 @@ class Array
#
# A +permutation+ method that contains the same elements.
def repeated_permutation(n, &block)
n = n.__to_int
raise TypeError, "no implicit conversion into Integer" unless 0 <=> n
return to_enum(:repeated_permutation, n) unless block
__repeated_combination(n, true, &block)
end
def __repeated_combination(n, permutation, &block)
n = n.__to_int
case n
when 0
yield []
+9 -9
View File
@@ -346,15 +346,15 @@ mrb_mruby_array_ext_gem_init(mrb_state* mrb)
{
struct RClass * a = mrb->array_class;
mrb_define_method(mrb, a, "assoc", ary_assoc, MRB_ARGS_REQ(1));
mrb_define_method(mrb, a, "at", ary_at, MRB_ARGS_REQ(1));
mrb_define_method(mrb, a, "rassoc", ary_rassoc, MRB_ARGS_REQ(1));
mrb_define_method(mrb, a, "values_at", ary_values_at, MRB_ARGS_ANY());
mrb_define_method(mrb, a, "slice!", ary_slice_bang, MRB_ARGS_ARG(1,1));
mrb_define_method(mrb, a, "compact", ary_compact, MRB_ARGS_NONE());
mrb_define_method(mrb, a, "compact!", ary_compact_bang, MRB_ARGS_NONE());
mrb_define_method(mrb, a, "rotate", ary_rotate, MRB_ARGS_OPT(1));
mrb_define_method(mrb, a, "rotate!", ary_rotate_bang, MRB_ARGS_OPT(1));
mrb_define_method_id(mrb, a, MRB_SYM(assoc), ary_assoc, MRB_ARGS_REQ(1));
mrb_define_method_id(mrb, a, MRB_SYM(at), ary_at, MRB_ARGS_REQ(1));
mrb_define_method_id(mrb, a, MRB_SYM(rassoc), ary_rassoc, MRB_ARGS_REQ(1));
mrb_define_method_id(mrb, a, MRB_SYM(values_at), ary_values_at, MRB_ARGS_ANY());
mrb_define_method_id(mrb, a, MRB_SYM_B(slice), ary_slice_bang, MRB_ARGS_ARG(1,1));
mrb_define_method_id(mrb, a, MRB_SYM(compact), ary_compact, MRB_ARGS_NONE());
mrb_define_method_id(mrb, a, MRB_SYM_B(compact), ary_compact_bang, MRB_ARGS_NONE());
mrb_define_method_id(mrb, a, MRB_SYM(rotate), ary_rotate, MRB_ARGS_OPT(1));
mrb_define_method_id(mrb, a, MRB_SYM_B(rotate), ary_rotate_bang, MRB_ARGS_OPT(1));
}
void

Some files were not shown because too many files have changed in this diff Show More