Commit Graph

13622 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto c75dfad796 Merge pull request #5638 from suetanvil-misc/project-git-path-clash
Refactored load_gems.rb to be simpler and easier to understand.
Gracefully handle the case where multiple gems use the same git check out path.
2022-02-23 16:11:28 +09:00
Chris Reuter 8d1ffa8a11 Refactored load_gems.rb to be simpler and easier to understand:
- Converted LoadGems::load_special_path_gems() into a class, then
  subdivided the various types of gem dependencies into smaller
  private methods.

- Added class GemDepDetails to hold the relationship between a gem's
  location on the local disk and its upstream repository.  This will
  be used later.

- Removed the last remains of the '--pull-gems' option from the code
  base and documentation.  This is no longer present and the dead code
  is clutter.

Gracefully handle the case where multiple gems use the same git checkout path.

Previously, if two gems had the same directory name when cloning them
from git, mrbgems would assume they were the same gem.  This also
applied to different branches and/or commits of the same repository.
This led to a strange situation where the first `conf.gem` statement
"won" in cloning the repository but the last `conf.gem` ended up
choosing the branch/commit-id to use.

This change detects this situation and makes it an error.  It also
allows the config writer to explicitly specify a gem checkout to use
in place of the others.
2022-02-23 16:08:15 +09:00
Yukihiro "Matz" Matsumoto 776be1b397 codegen.c: use OP_ARRAY instead of OP_ARRAY2 in optimization.
If operand 1 and operand 2 specify the same register `OP_ARRAY2`
can/should be transformed to `OP_ARRAY`.
2022-02-22 19:28:40 +09:00
Yukihiro "Matz" Matsumoto d4d29b21b3 codegen.c: peephole optimize OP_MOVE after OP_ARRAY or OP_ARRAY2. 2022-02-22 17:27:24 +09:00
Yukihiro "Matz" Matsumoto c37f648552 codegen.c: use OP_ARRAY instead of OP_ARRAY2 if possible.
`OP_ARRAY` inline elements, i.e: with `OP_ARRAY Rn Rm len`, `Rn` and
`Rm` should always be the same register.
2022-02-22 17:21:51 +09:00
Yukihiro "Matz" Matsumoto 75e86dcfcd codegen.c: assign post assignees for fixed number of RHS. 2022-02-22 17:20:00 +09:00
Yukihiro "Matz" Matsumoto ae231924a9 parse.y: small refactoring in mrb_parser_dump(). 2022-02-22 16:46:02 +09:00
Yukihiro "Matz" Matsumoto 0282d3ec9f codegen.c: rename gen_vmassinment to gen_massignment.
`m` stands for `multiple` but I don't remember why I put `v` first.
2022-02-22 16:43:51 +09:00
Yukihiro "Matz" Matsumoto 80b44c6ade socket.c: avoid mrb_funcall_id() to retrieve file descriptor. 2022-02-22 11:46:02 +09:00
Yukihiro "Matz" Matsumoto 0fbdfaa831 Merge pull request #5652 from dearblue/check-type
Need to check the type of the method return value
2022-02-22 11:10:18 +09:00
Yukihiro "Matz" Matsumoto f72315575f codegen.c: fix a argument generation bug in array assignment. 2022-02-22 11:06:20 +09:00
Yukihiro "Matz" Matsumoto 349307ba88 codedump.c: do not print nameless registers. 2022-02-21 11:46:34 +09:00
Yukihiro "Matz" Matsumoto ce3b1c4780 SECURITY.md: added memory allocation error as a non security issue.
mruby expects `malloc(3)` returns `NULL` for too big allocations, so
even if big object allocation (e.g.  `[1,2,3]*268888888888888818`)
caused ASAN/Valgrind warnings, it's intentional, and we won't consider
the warning as a security issue.
2022-02-20 18:39:34 +09:00
Yukihiro "Matz" Matsumoto 5d9239c2c4 Merge pull request #5653 from dearblue/doc-keywords
Improved documentation for `struct mrb_kwargs` [ci skip]
2022-02-20 16:40:11 +09:00
dearblue d7c09fb24a Improved documentation for struct mrb_kwargs [ci skip]
- Changed the description to match the order of the changed members.
- Replaced "array of symbols" instead of "array of strings that mean symbols".
- The `mrb_kwargs::optional` member has not been present since the first merge. It is a remnant from development time.
- Removed `const` modifier used in variable declarations in examples. This is not always necessary from a user perspective.
- Added note on the use of `MRB_SYM()`.

resolved #5649
2022-02-19 21:55:52 +09:00
Yukihiro "Matz" Matsumoto 44f591aa8f codegen.c: adjust stack position for OP_SUPER instruction. 2022-02-19 16:17:33 +09:00
Yukihiro "Matz" Matsumoto f906ac314c Merge pull request #5651 from dearblue/doc3.1
Update `doc/mruby3.1.md`
2022-02-19 15:49:44 +09:00
dearblue 621cafde68 Need to check the type of the method return value 2022-02-19 15:01:46 +09:00
dearblue 401d316bcf Update doc/mruby3.1.md
- `OP_GETIDX`, `OP_SETIDX` : Fix operand number
- `OP_SYMBOL` : Add entry
2022-02-19 14:39:17 +09:00
Yukihiro "Matz" Matsumoto 5a014997ef Merge pull request #5650 from dearblue/keywords
Insert an empty hash before the first `NODE_KW_REST_ARGS`
2022-02-19 10:25:11 +09:00
dearblue 12d51807a3 Insert an empty hash before the first NODE_KW_REST_ARGS
I expect this will fix the two problems that "#5640" didn't address.

- It is expected to raise an exception `TypeError`, but it didn't before.

  ```console
  % bin/mruby -e 'p [**1]'
  [1]
  ```

- The variable `h` is expected to keep an empty hash, but it didn't before.

  ```console
  % bin/mruby -e 'h = {}; p(**h, a: 1, b: 2); p h'
  {:a=>1, :b=>2}
  {:a=>1, :b=>2}
  ```
2022-02-18 22:15:50 +09:00
Yukihiro "Matz" Matsumoto 47068ae07a vm.c: packed arguments length may be zero for send method. 2022-02-18 14:38:07 +09:00
Yukihiro "Matz" Matsumoto 1e314242e4 Merge pull request #5648 from mruby/dependabot/github_actions/github/super-linter-4.9.0
build(deps): bump github/super-linter from 4.8.7 to 4.9.0
2022-02-17 13:07:27 +09:00
dependabot[bot] 90e61e6a26 build(deps): bump github/super-linter from 4.8.7 to 4.9.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.7 to 4.9.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/github/super-linter/compare/v4.8.7...v4.9.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-16 14:05:48 +00:00
Yukihiro "Matz" Matsumoto a8f0e79107 parse.y: revert 9e064f2; fix #5647
Need to declare unnamed parameter when argument decomposition used.
2022-02-16 13:56:10 +09:00
Yukihiro "Matz" Matsumoto 1e0bdea30b codedump.c: print implicit operand of OP_HASHCAT.
Just like `OP_ARYCAT` and `OP_STRCAT`.
2022-02-16 07:40:42 +09:00
Yukihiro "Matz" Matsumoto ff3a5ebed6 vm.c: should check type before hash access.
Since the operand of double splat (`**`) may not be a hash, simple
assertion (previous code since d42a64e) was not enough for this case.
2022-02-15 18:36:38 +09:00
Yukihiro "Matz" Matsumoto ecb28f4bf4 load.c: add data boundary check for broken compiled binary. 2022-02-14 17:34:28 +09:00
Yukihiro "Matz" Matsumoto aba3d427c7 state.c: reps may be NULL if a broken compiled binary given. 2022-02-14 17:34:27 +09:00
Yukihiro "Matz" Matsumoto e884236e1c dump.h, irep.h: update comments not to omit buffer length for loading. [ci skip] 2022-02-14 17:34:27 +09:00
Yukihiro "Matz" Matsumoto ad3ce7b41c Merge pull request #5642 from dearblue/errmesg
Avoid direct access to error messages as instance variables
2022-02-13 20:59:47 +09:00
Yukihiro "Matz" Matsumoto 38b164ace7 codegen.c: fix a bug in gen_values().
- Fix limit handling that fails 15 arguments method calls.
- Fix too early argument packing in arrays.
2022-02-12 12:39:35 +09:00
Yukihiro "Matz" Matsumoto 0ed3fcfa26 Merge pull request #5646 from koic/support_array_join_with_string_argument
Make `Array#*` the CRuby compatible behavior when giving a string argument
2022-02-11 15:21:01 +09:00
Yukihiro "Matz" Matsumoto 11e7ca5db9 Merge pull request #5645 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2022-02-10 11:31:01 +09:00
Yukihiro "Matz" Matsumoto fb82108acb load.c: should check if length of irep sections are valid. 2022-02-10 11:25:45 +09:00
Yukihiro "Matz" Matsumoto d912b864df mruby-range-ext/range.c: cover? should work with begin-less ranges. 2022-02-09 13:32:20 +09:00
Yukihiro "Matz" Matsumoto 4e8ab145da vm.c: adjust integer types. 2022-02-08 13:11:44 +09:00
Yukihiro "Matz" Matsumoto 9037e447a5 numeric.c: avoid implicit cast from integer to double. 2022-02-08 13:11:44 +09:00
Yukihiro "Matz" Matsumoto 4562ba14c0 codegen.c: limit check was too restrictive in gen_values().
That can create unnecessary arrays when more than 12 arguments are
given to a method.
2022-02-08 13:11:43 +09:00
Yukihiro "Matz" Matsumoto 0849a2885f codegen.c: stack position may be wrong on assignments.
When `[]=` access includes keyword arguments.
2022-02-08 13:11:43 +09:00
Yukihiro "Matz" Matsumoto 4c13188ea6 codegen.c: generate OP_HASH in gen_hash() if limit exceeds.
That means when `limit` is `0` it should always generate a hash.
2022-02-08 13:11:43 +09:00
Yukihiro "Matz" Matsumoto 6f5e74f576 codegen.c: change size_t to uint16_t To remove type conversion warnings. 2022-02-08 13:11:42 +09:00
Koichi ITO 182096d8c0 Make Array#* the CRuby compatible behavior when giving a string argument
## Summary

This following is a behavior from CRuby 1.8.7 to 3.1.0.

```console
% ruby -ve "p ['a', 'b', 'c']*''"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin13.0.2]
"abc"

% ruby -ve "p ['a', 'b', 'c']*''"
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin19]
"abc"
```

### Before (mruby 3.0.0)

mruby unexpectedly gives the TypeError.

```ruby
['a', 'b', 'c']*'' #=> String cannot be converted to Integer (TypeError)
```

### After

This PR makes mruby behave compatible with CRuby.

```ruby
['a', 'b', 'c']*'' #=> 'abc'
```

As far as I checked, the behavior is unspecified when `Array#*`'s argument
is not an instance of Integer class in X 3017 : 2013 (ISO/IEC 30170 : 2012).

## Additional Information

I noticed this difference by the following idiom when writing ASCII art code
using Ruby.

```ruby
%w(foo bar baz)*''
```

e.g. TRICK (https://github.com/tric)
2022-02-08 11:20:14 +09:00
John Bampton 4f986060c0 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2022-02-07 19:52:12 +10:00
Yukihiro "Matz" Matsumoto 6cc6d9b078 Merge pull request #5644 from dearblue/errno-nopresym
Support `disable_presym` for `mrbgems/mruby-errno`
2022-02-07 16:05:22 +09:00
Yukihiro "Matz" Matsumoto 8b32a1f7ae Merge pull request #5643 from dearblue/errno-nostdio
Support `MRB_NO_STDIO` for `mrbgems/mruby-errno`
2022-02-07 15:43:51 +09:00
Yukihiro "Matz" Matsumoto e24e81cd3c mruby.c: rindex() is not supported by VC. 2022-02-06 22:44:02 +09:00
Yukihiro "Matz" Matsumoto d42a64eadf vm.c: add assertion for type of register values.
We used to check them by `mrb_ensure_xxx_type()` functions, but type
errors there should not occur if there's no bug in code generations.
So we use assertion rather than dynamic type checks.
2022-02-06 22:17:53 +09:00
Yukihiro "Matz" Matsumoto cf00c32e3a mruby.c: -b option should only affects the script.
Not the libraries loaded by `-r`. Instead, `.mrb` extension in the path
should determine whether they are compiled binary.
2022-02-06 22:17:41 +09:00
Yukihiro "Matz" Matsumoto bf8e061c17 Merge pull request #5641 from dearblue/ci-win2022
Pinning the Visual Studio version in GitHub Actions
2022-02-06 20:49:53 +09:00