Compare commits

...

3082 Commits

Author SHA1 Message Date
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
mimaki 28a1f7d143 Update version to 3.3.0RC2. 2024-01-04 14:56:56 +09:00
dearblue 69682e3d41 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-04 14:12:35 +09:00
John Bampton f8511ecb22 Fix pre-commit failure from prettier 2024-01-01 18:32:48 +09:00
Yukihiro "Matz" Matsumoto d4cd589733 NEWS: add mruby3.3 changes description 2024-01-01 10:11:32 +09:00
mimaki 82e289a64d Update version to 3.3.0RC. 2023-12-29 16:02:13 +09:00
mimaki c1ed125689 Merge remote-tracking branch 'origin/master' into stable 2023-12-29 14:26:19 +09:00
Yukihiro "Matz" Matsumoto 6d8323f3c7 mruby-pack (pack_unpack): unpack1 did not return single data; fix #6134
For following unpack directives:

- PACK_DIR_HEX (h)
- PACK_DIR_BSTR (b)
- PACK_DIR_STR (a,A,Z)
- PACK_DIR_BASE64 (m)
- PACK_DIR_QENC (M)
2023-12-29 13:09:14 +09:00
mimaki c11679ad79 Merge remote-tracking branch 'origin/master' into stable 2023-12-29 10:51:32 +09:00
Yukihiro "Matz" Matsumoto 95aa92d5c4 Update AUTHORS (date and commit hash) 2023-12-28 23:36:40 +09:00
Yukihiro "Matz" Matsumoto c1511d5f5d AUTHORS: update entries [ci skip] 2023-12-28 19:51:31 +09:00
mimaki e9047562a1 Merge branch 'master' into stable 2023-12-28 13:39:55 +09:00
Yukihiro "Matz" Matsumoto 67cb987510 doc/mruby3.{1,2}.md: update CVE links (nvd.nist.gov is down) 2023-12-27 22:24:12 +09:00
Yukihiro "Matz" Matsumoto 6ea3166005 doc/guides/memory.md: small style changes (markdownlink-cli) 2023-12-27 22:24:12 +09:00
Yukihiro "Matz" Matsumoto ae43ce7593 mruby-time: refactor _POSIX_TIMERS handling issue; ref #6124 2023-12-27 22:24:12 +09:00
Yukihiro "Matz" Matsumoto a8b82bfae5 Merge pull request #6128 from dearblue/fiber-end
Integrates the sequence when a fiber is terminated by `OP_RETURN`
2023-12-27 22:24:01 +09:00
Yukihiro "Matz" Matsumoto e51c20888b Merge pull request #6127 from dearblue/catch_handler_find
Changed parameters for `catch_handler_find()`
2023-12-27 22:22:12 +09:00
Yukihiro "Matz" Matsumoto 1ac4148020 Merge pull request #6126 from dearblue/block-return
Fixed return value of `OP_RETURN_BLK` called directly under C function
2023-12-27 22:19:36 +09:00
Yukihiro "Matz" Matsumoto 074374e28d Merge pull request #6125 from dearblue/cross-c
Allow `OP_RETURN_BLK` to cross C boundaries
2023-12-27 22:18:06 +09:00
Yukihiro "Matz" Matsumoto dc633ecae8 Merge pull request #6123 from dearblue/allocate-undef.2
Inherit `MRB_FL_UNDEF_ALLOCATE` in subclasses
2023-12-27 22:16:51 +09:00
Yukihiro "Matz" Matsumoto 7d83e9cd27 Merge pull request #6130 from sizious/dreamcast-shelf-build-config-overhaul
`dreamcast_shelf build config`: complete overhaul
2023-12-27 21:54:26 +09:00
SiZiOUS f81b7a3a1f dreamcast_shelf build config: complete overhaul
This configuration is used to support the Sega Dreamcast system.
mruby is now officially supported as a KallistiOS Port in kos-ports.
See: https://dreamcast.wiki/Using_Ruby_for_Sega_Dreamcast_development
2023-12-25 21:40:37 +00:00
Yukihiro "Matz" Matsumoto ebf66a2b80 Add prettier pre-commit hook; close #5490 2023-12-25 08:02:58 +09:00
Yukihiro "Matz" Matsumoto 9c66d4a453 Merge pull request #6124 from sizious/mruby-time-update
`mruby-time`: protect against incorrectly defined `_POSIX_TIMERS`
2023-12-24 17:33:23 +09:00
dearblue dba1dcdd25 Integrates the sequence when a fiber is terminated by OP_RETURN
In the `ensure` block while executing `fiber.transfer`, keep `fiber->cxt->prev` to be `NULL`.
2023-12-24 15:45:15 +09:00
dearblue dc09000f01 Fixed return value of OP_RETURN_BLK called directly under C function
```ruby
def cross; Class.new { return 1 }; end; p cross'
# => #<Class:0x8245cf170>               # without this patch
# => 1                                  # with this patch
```
2023-12-24 13:56:25 +09:00
dearblue d41a2612f4 Allow OP_RETURN_BLK to cross C boundaries
The restriction was introduced in commit b563bcb7ff to resolve https://github.com/mruby/mruby/issues/3462.
Subsequently, the `RBreak` object, introduced by mruby 1.3.0, allowed crossing the C boundary.

```ruby
def cross; Class.new { proc { return }.call }; end; cross
# => unexpected return (LocalJumpError) # without this patch
# => nothing raised                     # with this patch
```
2023-12-24 13:56:25 +09:00
SiZiOUS c0ffc13801 mruby-time: protect against incorrectly defined _POSIX_TIMERS
This update avoids the following error: operator '&&' has no right operand (related to _POSIX_TIMERS)
See: https://stackoverflow.com/questions/48538243/macro-if-statement-returns-error-operator-has-no-right-operand
2023-12-23 19:16:23 +00:00
dearblue 6a9671eac7 Changed parameters for catch_handler_find()
- Removed `mrb` and `ci` parameters.
  - Added `irep` parameter.
    The caller must guarantee that `irep->clen > 0`.
2023-12-23 23:02:48 +09:00
dearblue 2a1ea7d605 Inherit MRB_FL_UNDEF_ALLOCATE in subclasses
If `Class#allocate` is prohibited, subclasses should also be implicitly prohibited.

```ruby
p Class.new(Struct).allocate.class
# => #<Class:0x82362ac00>                                             by #6122
# => allocator undefined for #<Class:0x000000083a983220> (TypeError)  by Ruby 3.2
```

Added `MRB_DEFINE_ALLOCATOR()` to allow subclasses to use `Class#allocate`.

Supplement to #6122.
2023-12-23 21:01:42 +09:00
Yukihiro "Matz" Matsumoto 63580581f7 Merge pull request #6122 from dearblue/allocate-undef.1
Prohibit `Class#allocate` in a different way
2023-12-23 15:15:11 +09:00
dearblue 8ecfacefca Prohibit Class#allocate in a different way
The method introduced by #5979 causes a fault by swapping classes.

```console
% bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
zsh: segmentation fault (core dumped)  bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
```

After applying this patch, a `TypeError` exception will be raised.

```console
% bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
trace (most recent call last):
        [1] -e:1
-e:1:in method: allocation failure of Proc (TypeError)
```

However, if the `mrb_vtype` is the same object, the same care must still be taken as before.

```console
% bin/mruby -e 'Method = Binding; p method(:puts).eval("12345")'
trace (most recent call last):
        [1] -e:1
-e:1:in eval: wrong argument type nil (expected Proc) (TypeError)
```
2023-12-22 21:59:34 +09:00
Yukihiro "Matz" Matsumoto fa75865a33 Merge pull request #6121 from dearblue/separate-breaks
Separate unwinding process for `break` / `return`
2023-12-22 16:12:12 +09:00
Yukihiro "Matz" Matsumoto 97b522d778 src/fmt_fp.c: change condition order for memory safety 2023-12-22 15:35:21 +09:00
Yukihiro "Matz" Matsumoto cfee5c2753 doc/guides/memory.md: guide to memory management customization 2023-12-21 16:48:33 +09:00
Yukihiro "Matz" Matsumoto 28b526cf81 Update .pre-commit-config.yaml 2023-12-21 16:47:16 +09:00
Yukihiro "Matz" Matsumoto 34c5d96e86 allof.c: mrb_default_allocf() definition in the separate file
So that the user can define their own version of mrb_default_alloc
function to override memory allocation of mruby.
2023-12-21 15:28:04 +09:00
dearblue 859f1b3002 Separate unwinding process for break / return 2023-12-20 21:54:53 +09:00
Yukihiro "Matz" Matsumoto 899a09152b mruby.h (mrb_alloc): better description for the function type 2023-12-20 19:39:09 +09:00
Yukihiro "Matz" Matsumoto 72ca266ed7 mruby-io: rename some functions with io_buf prefix
Now all functions with `io_buf` takes `mrb_io_buf` as an argument.

Renamed functions (old names):

- io_init_buf (io_buf_init)
- io_fill_buf (io_buf_fill)
- io_fill_buf_comp (io_buf_fill_comp) for UTF-8 encoding
2023-12-20 08:59:46 +09:00
Yukihiro "Matz" Matsumoto 84fb9f40f0 mruby-io: some functions take mrb_io_buf as an argument
- io_buf_reset
- io_buf_shift
- io_buf_cat
- io_buf_cat_all
2023-12-20 08:59:46 +09:00
Yukihiro "Matz" Matsumoto 054f5b5284 mruby-io (io_eof): avoid unnecessary read(2) call 2023-12-20 08:59:46 +09:00
Yukihiro "Matz" Matsumoto 2e8bede6ea mruby-io (io_read): small refactoring; ref #6118
If `outbuf` is `nil` we allocate a buffer string, if `outbuf` is a
string, we resize it to zero length. In the function `io_read`, this
condition is done twice, so we refactor out to `io_reset_outbuf()`.
2023-12-20 08:59:46 +09:00
Yukihiro "Matz" Matsumoto 2e24c94873 Merge pull request #6120 from dearblue/file-EBADF
Set `EBADF` if `check_file_descriptor()` fails
2023-12-20 08:59:29 +09:00
Yukihiro "Matz" Matsumoto 82ed1c2600 Merge pull request #6118 from dearblue/io.read
Fixed `IO#read` with `buf`.
2023-12-19 08:00:42 +09:00
Yukihiro "Matz" Matsumoto 992bd49344 Merge pull request #6116 from dearblue/send-branch
Improve branching in the execution part of the `OP_SEND` block
2023-12-18 12:17:39 +09:00
Yukihiro "Matz" Matsumoto e8a36235d8 Merge pull request #6115 from dearblue/loop-inclusion
Replace `for` and `CHECKPOINT` block comprehensions
2023-12-18 12:16:38 +09:00
dearblue 5e3e75ed7b Set EBADF if check_file_descriptor() fails 2023-12-17 10:50:59 +09:00
Yukihiro "Matz" Matsumoto b20418cf78 Merge pull request #6119 from jbampton/fix-spelling
docs: fix spelling
2023-12-17 07:14:17 +09:00
John Bampton 4c79fce665 docs: fix spelling 2023-12-17 00:58:24 +10:00
dearblue 7611dc8338 Fixed IO#read with buf.
I hit the following two problems.

  - `io.read(0, buf)` always returned a new empty string object.
  - `io.read(num, buf)` was appending data to the given `buf`.
    This also meant that `buf` was never empty if EOF was reached.
2023-12-16 14:42:52 +09:00
Yukihiro "Matz" Matsumoto d14a269f49 Merge pull request #6114 from dearblue/integrate-catch
Move `L_RAISE` and `L_BREAK` blocks to `OP_RAISEIF`
2023-12-16 13:08:33 +09:00
Yukihiro "Matz" Matsumoto ecea3f2531 Merge pull request #6117 from mruby/dependabot/github_actions/actions/upload-artifact-4
build(deps): bump actions/upload-artifact from 3 to 4
2023-12-16 13:05:38 +09:00
Yukihiro "Matz" Matsumoto 6fad067ded mruby-binding: raise in upper count check
We count `Proc` upper links then check for upper bounds (default:20),
but now we raise an exception as soon as the count exceeds the limit so
that we can avoid traverse unnecessary upper links.
2023-12-16 12:21:55 +09:00
dependabot[bot] 1b7f2fb175 build(deps): bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 14:22:12 +00:00
dearblue 990e18ad59 Improve branching in the execution part of the OP_SEND block
The `MRB_METHOD_CFUNC_P()` macro contains several branches, which will be replaced by simple branches.
2023-12-15 21:46:00 +09:00
dearblue 7144eab350 Replace for and CHECKPOINT block comprehensions
I think it will make the eyes less tired for a process flow.
2023-12-15 21:46:00 +09:00
dearblue e9904ddb2a Move L_RAISE and L_BREAK blocks to OP_RAISEIF
`OP_RAISEIF` should be easier to relate than `OP_RETURN`.
2023-12-15 21:46:00 +09:00
Yukihiro "Matz" Matsumoto 24eca2e50b mruby-fiber (fiber_to_s): omit position info for terminated fibers
Since Fiber#to_s did not include location information before #6105,
when location information cannot be retrieved for terminated fibers,
instead of meaningless information such as "(unknown):0", we omit
positional information altogether for terminated fibers; ref #6111
2023-12-14 18:56:19 +09:00
Yukihiro "Matz" Matsumoto e9237f444a Merge pull request #6111 from dearblue/fiber-to_s.1
Consider proc to be GC'ed if fiber is terminated
2023-12-14 14:59:18 +09:00
Yukihiro "Matz" Matsumoto 5311d1aa1b Merge pull request #6106 from dearblue/fiber-limits-ease
Ease fiber limitations
2023-12-13 16:10:42 +09:00
Yukihiro "Matz" Matsumoto ae8dcb82ba vm.c: CINFO_SKIP should not be called with prev_jmp == NULL
We have added assertion to ensure.
2023-12-12 16:49:11 +09:00
Yukihiro "Matz" Matsumoto 89d4e8c851 Merge pull request #6113 from dearblue/unreachable
Remove unreachable code in `OP_R_BREAK`
2023-12-12 16:48:55 +09:00
dearblue 38c7936c94 Remove unreachable code in OP_R_BREAK
Termination of fiber by `break` results in a `LocalJumpError`, so the indicated code will not be executed.
2023-12-11 21:25:08 +09:00
Yukihiro "Matz" Matsumoto 93d842e045 Merge pull request #6112 from dearblue/labeler
Update labeler.yml for version 5
2023-12-10 20:01:17 +09:00
dearblue c0b5bc4ae8 Consider proc to be GC'ed if fiber is terminated
When fiber is terminated, the pointer indicated by `f->cxt->cibase->proc` is not protected from GC.
I should have done this patch way as of commit 9af6264d6b (#6105).
2023-12-09 22:28:47 +09:00
dearblue 88571052e8 Update labeler.yml for version 5 2023-12-09 17:28:13 +09:00
Yukihiro "Matz" Matsumoto 34346e75a4 Merge pull request #6103 from dearblue/RBreak-ci
RBreak remembers the CI location
2023-12-09 11:35:23 +09:00
Yukihiro "Matz" Matsumoto 645a464b2d mruby-fiber (fiber_to_s): retrieve position from terminated fibers; #6105
Since `cxt->ci` points to the last active callinfo, `cxt->ci == cxt->cibase`
does not mean it does not have correct `proc` information, so we have
removed the `f->cxt->ci > f->cxt->cibase` check. Instead, just in case
`proc` does not have `irep` information, we try to confirm `proc` does not
point to `CFUNC` nor is not an alias.
2023-12-08 09:33:05 +09:00
Yukihiro "Matz" Matsumoto fdea7924fe mruby-fiber (fiber_to_s): do not rely on mrb_any_to_s(); ref #6105 2023-12-08 09:25:46 +09:00
Yukihiro "Matz" Matsumoto b7949e81d7 mruby-fiber (fiber_to_s): use "(unknown):0" for unknown position
Ref #6105
2023-12-08 09:22:59 +09:00
Yukihiro "Matz" Matsumoto cb54138b81 Merge pull request #6105 from dearblue/fiber.to_s
Implement `Fiber#to_s` method
2023-12-08 09:00:05 +09:00
dearblue 73c8330cbd RBreak remembers the CI location
It is now possible to specify return destination directly.
This allows callinfo to distinguish between calls to the same proc object.

At the same time, the `Kernel#catch` method is adjusted.
By removing the previously required double lambda object, the REnv object is no longer created as well.
2023-12-07 21:33:14 +09:00
Yukihiro "Matz" Matsumoto 658d5a51ac mruby-string-ext: add test for String#valid_encoding? 2023-12-07 11:34:10 +09:00
Yukihiro "Matz" Matsumoto eabe2d96e2 mruby-string-ext: add String#valid_encoding? method 2023-12-07 10:58:20 +09:00
Yukihiro "Matz" Matsumoto bef7eea468 mruby-method: small refactoring mostly regarding declarations 2023-12-06 22:20:38 +09:00
Yukihiro "Matz" Matsumoto b01eb03d2a Merge pull request #6110 from mruby/dependabot/github_actions/actions/labeler-5
build(deps): bump actions/labeler from 4 to 5
2023-12-06 15:58:59 +09:00
Yukihiro "Matz" Matsumoto fab3dfc145 Merge pull request #6107 from mruby/dependabot/github_actions/super-linter/super-linter-5.7.2
build(deps): bump super-linter/super-linter from 5.7.0 to 5.7.2
2023-12-06 15:58:47 +09:00
Yukihiro "Matz" Matsumoto 5a258f0872 Merge pull request #6109 from dearblue/fix-6108
Needs `cipop()` before crossing the C boundary
2023-12-06 15:57:16 +09:00
Yukihiro "Matz" Matsumoto abd26b7ca6 mruby-bin-mrbc/mrbc.c: replace mrbc_ prefix by mrb_ccontext
This is a most confusion file because it contained both `mrbc_` from
"mruby compiler" (e.g. mrbc_args) and `mrbc_` from "mruby compiler
context".
2023-12-06 15:54:33 +09:00
Yukihiro "Matz" Matsumoto 7be67d3acf mruby-bin-mirb: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:51:20 +09:00
Yukihiro "Matz" Matsumoto 72689b0b9c mruby-eval: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:49:21 +09:00
Yukihiro "Matz" Matsumoto 7e74dbeed3 mruby-bin-mruby: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:45:01 +09:00
Yukihiro "Matz" Matsumoto c36b212fa9 mruby-bin-debugger: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:41:15 +09:00
Yukihiro "Matz" Matsumoto a66c685c81 mruby-bin-debugger/mrdb.h: remove unnecessary struct declarations 2023-12-06 15:40:31 +09:00
Yukihiro "Matz" Matsumoto 6de4df3b31 parse.y: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:32:13 +09:00
Yukihiro "Matz" Matsumoto 9c2af6aaed load.c: replace mrbc_ prefix by mrb_ccontext 2023-12-06 15:29:02 +09:00
Yukihiro "Matz" Matsumoto 073a4f19f8 proc.h: update document in the comment (regarding compiler context) 2023-12-06 15:22:09 +09:00
Yukihiro "Matz" Matsumoto c5e3cbe4bf compile.h: stop using mrbc_ prefix for compiler context
Since it is confusing that the term `mrbc` stands for both "mruby
compiler" and "mruby compiler context" in the source code. Instead,
we use `mrb_ccontext` (stands for compiler context) prefix hereafter.

We choose `mrb_ccontext` because we have already used `mrb_context` (for
VM execusion context).
2023-12-06 15:22:08 +09:00
dependabot[bot] 7ac0b60255 build(deps): bump actions/labeler from 4 to 5
Bumps [actions/labeler](https://github.com/actions/labeler) from 4 to 5.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v4...v5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-05 14:41:52 +00:00
dearblue ca9e8d91e4 Needs cipop() before crossing the C boundary
fix #6108
2023-12-05 22:03:38 +09:00
dependabot[bot] 7b74d22310 build(deps): bump super-linter/super-linter from 5.7.0 to 5.7.2
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.7.0 to 5.7.2.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.7.0...v5.7.2)

---
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>
2023-12-04 14:03:16 +00:00
dearblue 4f1c1c16da Check fiber backward when switching with Fiber#transfer
Previously, if the caller of `Fiber#resume` had a C function call, an inconsistency would occur.
2023-12-04 22:32:57 +09:00
dearblue 42308c42b5 Fix CI misalignment between Fiber#resume and Fiber.yield
When a fiber switched by `Fiber.yield` is resumed by `Fiber#resume` by C, it is necessary to pop CI with `fiber_switch()`.
Previously, CI misalignment caused inconsistencies, including crashes, on the next `Fiber#resume`.
2023-12-04 22:32:57 +09:00
dearblue 568309b25a Propagating exceptions to the caller of Fiber#resume
Need to return control from `mrb_vm_exec()` to the caller if `Fiber#resume` was done from C.
2023-12-04 22:32:57 +09:00
dearblue aaa0f124c3 Restore the value of ci->cci with fiber_switch()
If `mrb_fiber_resume()` was called from a C function as a method definition, the mruby VM was not processed afterwards.

    Called Fiber.yield
    mrb_vm_exec()       <<-- returns from the function by CINFO_RESUMED
    fiber_switch()      <<-- this patch causes the value to return to its pre-call state
    mrb_fiber_resume()
    mrb_vm_exec()       <<-- previously, returns from the function immediately as it was CINFO_RESUMED
    ...
    main()
2023-12-04 22:32:57 +09:00
dearblue ef8b0b7ed8 Allows calling Fiber#resume from C
This patch is effectively reverts to the following:
  - commit dc65b1faf1 (#5782)
  - commit f4c4809750 (#5947)

Ref. #6063
2023-12-04 22:32:51 +09:00
dearblue ad4c35b022 Enhanced Fiber Testing
The main objective is to make sure that fiber can be handled from C.

Also, add a mechanism to detect that the mruby VM has stopped in the middle of the process.
If it stops halfway, the test will be terminated with `abort()`.
2023-12-04 21:48:23 +09:00
Yukihiro "Matz" Matsumoto 7f1ae1c344 mruby-method (method_to_s): avoid goto across declarations for C++ 2023-12-03 22:39:27 +09:00
Yukihiro "Matz" Matsumoto 90ec09a716 mruby-proc-ext (mrb_proc_source_location): support aliases 2023-12-03 22:38:31 +09:00
Yukihiro "Matz" Matsumoto 87453fb70b vm.c (CI_PROC_SET): consider alias proc 2023-12-03 22:38:31 +09:00
Yukihiro "Matz" Matsumoto 9eae7df26e mruby-method (method_to_s): _proc may be nil; add check 2023-12-03 22:38:31 +09:00
Yukihiro "Matz" Matsumoto e8da16cdf5 vm.c (exec_irep): need to support aliases 2023-12-03 22:38:30 +09:00
Yukihiro "Matz" Matsumoto 02f189cebc mruby-method (method_to_s): add origin name in the string representation 2023-12-03 22:38:30 +09:00
Yukihiro "Matz" Matsumoto f5bc82f267 mruby-method (method_to_s): avoid origin class like Object(Object) 2023-12-03 22:38:30 +09:00
Yukihiro "Matz" Matsumoto b52870b4c6 mruby-method: add const modifier to struct RProc* 2023-12-03 22:38:29 +09:00
Yukihiro "Matz" Matsumoto 9da0c7e1a4 Update .pre-commit-config.yaml 2023-12-03 09:39:33 +09:00
dearblue 9af6264d6b Implement Fiber#to_s method
If the filename and line number cannot be obtained, "(unknown):1" is used instead.

Also, the file name information of the terminated fiber cannot be retrieved and will be replaced as well.
This limitation is due to the fact that `cibase->proc` of the terminated fiber is collected by the GC.

```console
% bin/mruby -e 'p Fiber.new { p Fiber.current }.resume'
#<Fiber:0x82423bef0 -e:1 (resumed)>
#<Fiber:0x82423bef0 (unknown):1 (terminated)>
```
2023-12-01 21:30:16 +09:00
Yukihiro "Matz" Matsumoto ccdd81eb69 Merge pull request #6101 from dearblue/unwinding
Reorganization of unwinding at `break` / `return`.
2023-11-22 08:11:15 +09:00
Yukihiro "Matz" Matsumoto fdef59b3a1 AUTHORS: update entries [ci skip] 2023-11-21 09:37:58 +09:00
Yukihiro "Matz" Matsumoto 53a8472e5e mruby-kernel-ext/test: skip some tests that related to alias callee.
The last commit changed the behavior of aliases, and we no longer keep
the alias name symbol but the original name. Since this is a small
incompatibility from CRuby and it requires some memory to fix this, we
keep this issue right now.
2023-11-21 09:37:17 +09:00
Yukihiro "Matz" Matsumoto f2dc76e3b5 Change alias handling to avoid using mid in Env; ref 6098
Since `Env` objects are shared by Blocks/Procs in the same context,
making multiple aliases in one context screws up with alias names.
New implementation uses alias bodies (Procs) to refer new names.
As a side effect, `__callee__` stop working correctly for aliases.
To fix this `__callee__` problem, we need to keep alias method names in
`callinfo`, which consumes more memory. We are wondering that is worth
the compatibility.
2023-11-21 09:37:17 +09:00
Yukihiro "Matz" Matsumoto f6cbf6ac1a Merge pull request #6102 from mruby/dependabot/github_actions/super-linter/super-linter-5.7.0
build(deps): bump super-linter/super-linter from 5.6.1 to 5.7.0
2023-11-21 09:37:07 +09:00
Yukihiro "Matz" Matsumoto 9c1c9ba8e5 vm.c: rename local variable m to p
`m` usually stands for a method but this one was `struct RProc*`.
2023-11-19 23:21:05 +09:00
Yukihiro "Matz" Matsumoto 956379928c mruby-io/io.c: fix possible short integer overflow 2023-11-19 07:47:23 +09:00
Yukihiro "Matz" Matsumoto 698da0982f mruby-io/io.c: fix fsize_t and mrb_ssize mixture 2023-11-19 07:45:29 +09:00
dependabot[bot] ee7ea34b10 build(deps): bump super-linter/super-linter from 5.6.1 to 5.7.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.6.1 to 5.7.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.6.1...v5.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>
2023-11-16 14:28:54 +00:00
Yukihiro "Matz" Matsumoto 91b4da3a2b class.c: keep alias flag in proc object; fix #6098 2023-11-16 17:18:28 +09:00
Yukihiro "Matz" Matsumoto 9959d4fc66 range.c: use presym for symbol initialization 2023-11-16 16:30:40 +09:00
Yukihiro "Matz" Matsumoto a94005b740 range.c: use presym to initialize Range class 2023-11-16 16:27:57 +09:00
dearblue 2e881d3297 Reorganization of unwinding at break / return.
The unwinding process that has been done at each point in time is now done in a merged block after looking for the last ci to `break` / `return`.
2023-11-12 20:39:33 +09:00
Yukihiro "Matz" Matsumoto 431d9d8a12 mrbgems/full-core.gembox: use parentheses for method call expression 2023-11-12 19:01:08 +09:00
Yukihiro "Matz" Matsumoto 76d0ff9a45 error.c: use presym for error initialization 2023-11-11 23:49:32 +09:00
Yukihiro "Matz" Matsumoto 8e6f4a79a8 hash.c: use presym to initialize Hash class 2023-11-11 23:48:31 +09:00
Yukihiro "Matz" Matsumoto df1d397da5 numeric.c: use presym to initialize numeric classes 2023-11-11 23:48:31 +09:00
Yukihiro "Matz" Matsumoto 5084716e6b class.c: use presym to undefine Module methods 2023-11-11 23:48:23 +09:00
Yukihiro "Matz" Matsumoto d5a69ac8c7 proc.c: use presym to initialize Proc class 2023-11-07 21:40:45 +09:00
Yukihiro "Matz" Matsumoto e41bbaa67a class.c: move Proc class allocation to proc.c 2023-11-07 21:40:45 +09:00
Yukihiro "Matz" Matsumoto eb906bd4c1 array.c: use presyms to define the class 2023-11-07 21:40:44 +09:00
Yukihiro "Matz" Matsumoto 1dec82d82f object.c: use presyms to define classes 2023-11-07 21:40:44 +09:00
Yukihiro "Matz" Matsumoto 4fd63cfb9d kernel.c: use presym to define a module 2023-11-07 21:40:44 +09:00
Yukihiro "Matz" Matsumoto 82f6facaad Merge pull request #6097 from dearblue/fiber-new
Add a new `mrb_fiber_new()` with MRB_API
2023-11-07 21:40:31 +09:00
dearblue 1bb77170ec Add a new mrb_fiber_new() with MRB_API 2023-11-05 20:36:29 +09:00
Yukihiro "Matz" Matsumoto 9e50d67fe7 Merge pull request #6096 from mruby/dependabot/github_actions/super-linter/super-linter-5.6.1
build(deps): bump super-linter/super-linter from 5.6.0 to 5.6.1
2023-11-03 07:35:13 +09:00
dependabot[bot] 52ac930af3 build(deps): bump super-linter/super-linter from 5.6.0 to 5.6.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.6.0 to 5.6.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.6.0...v5.6.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>
2023-11-02 14:07:54 +00:00
Yukihiro "Matz" Matsumoto 587d93d5a5 Merge pull request #6095 from mruby/dependabot/github_actions/super-linter/super-linter-5.6.0
build(deps): bump super-linter/super-linter from 5.4.3 to 5.6.0
2023-11-02 13:21:35 +09:00
Yukihiro "Matz" Matsumoto bc012deef9 object.c (mrb_eql): avoid mrb_funcall_argv() when possible 2023-11-02 13:20:10 +09:00
Yukihiro "Matz" Matsumoto 7db4050040 enum.c: use presym 2023-11-02 13:15:45 +09:00
Yukihiro "Matz" Matsumoto 8c068c57c8 Merge pull request #6092 from dearblue/lockfile
Get from local only if there is no default branch name
2023-11-02 12:07:56 +09:00
Yukihiro "Matz" Matsumoto 1e3d47760f Merge pull request #6090 from LanzaSchneider/patch-1
fix(class.c): typo in format specifiers
2023-11-02 08:20:39 +09:00
Yukihiro "Matz" Matsumoto 8708186692 Merge pull request #6091 from dearblue/binding.5
Fixed acquisition of wrong target class in `Kernel#binding`
2023-11-01 23:05:50 +09:00
Yukihiro "Matz" Matsumoto c99b67db65 gc.c: use presym for GC initialization 2023-11-01 22:24:57 +09:00
Yukihiro "Matz" Matsumoto c080d16150 string.c: use presym to define String class 2023-11-01 22:23:35 +09:00
Yukihiro "Matz" Matsumoto 571cb54f38 compar.c: remove unused file 2023-11-01 22:21:59 +09:00
dependabot[bot] ccf37b00aa build(deps): bump super-linter/super-linter from 5.4.3 to 5.6.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.4.3 to 5.6.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.4.3...v5.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>
2023-10-31 14:26:22 +00:00
dearblue 8284234229 Get from local only if there is no default branch name
The branch name of the cloned repository should be determined by the build configuration file.

fixes #6087
2023-10-28 19:02:50 +09:00
dearblue 0b25c9d224 Fixed acquisition of wrong target class in Kernel#binding
fixed #6089
2023-10-28 18:24:41 +09:00
Lanza 4ae0bacc6e fix(class.c): typo in format specifiers 2023-10-28 13:47:05 +08:00
Yukihiro "Matz" Matsumoto 552944b34e Merge pull request #6088 from jbampton/format-markdown-table
Standardize Markdown table format
2023-10-27 07:46:14 +09:00
John Bampton bbd5701617 Standardize Markdown table format 2023-10-26 16:15:57 +10:00
Yukihiro "Matz" Matsumoto c1feb41828 Merge pull request #6056 from dearblue/build/host-shared
Brush up `build_config/host-shared.rb` file
2023-10-26 14:23:49 +09:00
Yukihiro "Matz" Matsumoto ac73793a8f range.c: use mrb_define_method_id() which directly use symbols 2023-10-25 22:01:54 +09:00
dearblue 41cce1561f Brush up build_config/host-shared.rb file
Summary:

  - VisualC++ does not supported.
  - `cc.flags` must maintain array objects.
2023-10-25 21:58:28 +09:00
Yukihiro "Matz" Matsumoto 7a08c7042f string.c: move __ENCODING__ from kernel.c 2023-10-25 15:05:10 +09:00
Yukihiro "Matz" Matsumoto f85a3aff2b Merge pull request #6086 from yujiyokoo/add-wii-build-config
Add build config for Nintendo Wii
2023-10-23 17:34:33 +09:00
Yukihiro "Matz" Matsumoto 279e100ad5 Merge pull request #6085 from dearblue/define_installer.1
Fixed `MRuby::Build#define_installer`
2023-10-23 15:36:14 +09:00
Yukihiro "Matz" Matsumoto bba659f174 Merge pull request #6083 from mruby/dependabot/github_actions/super-linter/super-linter-5.4.3
build(deps): bump super-linter/super-linter from 5.4.0 to 5.4.3
2023-10-23 15:34:17 +09:00
Yukihiro "Matz" Matsumoto 461c97225e LICENSE: remove the end date of copyright notice; close #6080 2023-10-23 15:31:34 +09:00
Yukihiro "Matz" Matsumoto e7e47bb683 AUTHORS: update entries [ci skip] 2023-10-23 15:29:23 +09:00
Yukihiro "Matz" Matsumoto 0443f14fd0 array.c,hash.c,numeric.c,string.c: use mrb_define_method_id()
For primary class libraries.
2023-10-23 15:23:08 +09:00
Yukihiro "Matz" Matsumoto 8ad825dc3b class.c,kernel.c,object.c: use mrb_define_method_id()
Instead of mrb_define_method(), so that symbol resolution can be done in
compile-time.
2023-10-23 15:18:26 +09:00
Yukihiro "Matz" Matsumoto 0b8daabf27 object.c: fix wrong ISO section numbers 2023-10-23 12:26:51 +09:00
Yukihiro "Matz" Matsumoto fe6f9faba4 vm.c: reduce number of check_method_noarg() calls 2023-10-22 22:04:58 +09:00
Yuji Yokoo 2b9287dbc4 Add build_config.rb for Nintendo Wii 2023-10-22 00:07:22 +10:30
dearblue 9b0d516310 Fixed MRuby::Build#define_installer
Symbolic links were created with absolute paths, but to cope with path fluctuations between build and reference, they are now relative paths.

ref. #6084
2023-10-21 19:42:26 +09:00
dependabot[bot] 3c5aa936c7 build(deps): bump super-linter/super-linter from 5.4.0 to 5.4.3
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.4.0 to 5.4.3.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.4.0...v5.4.3)

---
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>
2023-10-18 14:50:06 +00:00
Yukihiro "Matz" Matsumoto 10d4a4278e class.c: make keyword_max mrb_int; ref #4754
Which is compared to other mrb_int.
2023-10-17 13:27:19 +09:00
Yukihiro "Matz" Matsumoto 9553284480 Merge pull request #6081 from dearblue/open-x
Add "x" mode option for `IO.open`
2023-10-17 13:27:07 +09:00
dearblue 88bc8c9144 Add "x" mode option for IO.open
From CRuby 2.6 feature.

This is the "x" mode (`O_EXCL`; exclusive create) of `fopen(3)` introduced in C11.

ref. https://bugs.ruby-lang.org/issues/11258
2023-10-15 16:41:48 +09:00
dearblue 782fd7e014 Integrate error handling for IO.open 2023-10-15 16:32:01 +09:00
Yukihiro "Matz" Matsumoto dec81fde4a Merge pull request #6079 from jbampton/fix-case-of-mruby
include/mruby/version.h: change `MRuby` to `mruby`
2023-10-15 05:16:04 +07:00
Yukihiro "Matz" Matsumoto 244156af2a Merge pull request #6078 from jbampton/fix-indent
Fix indentation in two Ruby files
2023-10-15 05:15:38 +07:00
John Bampton db20a19711 include/mruby/version.h: change MRuby to mruby 2023-10-14 19:13:49 +10:00
John Bampton a83d7d3510 Fix indentation in two Ruby files 2023-10-14 18:52:30 +10:00
Yukihiro "Matz" Matsumoto 4656ea5ccd Merge pull request #6000 from jbampton/update-docker-files
docker: use less image layers and update compose version
2023-10-14 05:36:04 +07:00
Yukihiro "Matz" Matsumoto 56a46cdff5 Merge pull request #6075 from mruby/dependabot/github_actions/super-linter/super-linter-5.4.0
build(deps): bump super-linter/super-linter from 5.3.1 to 5.4.0
2023-10-14 05:34:49 +07:00
Yukihiro "Matz" Matsumoto c22fbb2aa7 Merge pull request #6076 from dearblue/fiber-unwinding
Fixed unwinding block that could point to invalid PC
2023-10-13 20:33:03 +07:00
Yukihiro "Matz" Matsumoto 3e20c5c9b3 Merge pull request #6069 from dearblue/MRUBY_PACKAGE_DIR
Corrected wrong `MRUBY_PACKAGE_DIR`
2023-10-13 16:04:25 +07:00
Yukihiro "Matz" Matsumoto 4c696ed9e3 array.c: set array size limitation again
Unlike strings, arrays occupies more memory. It is still arguable
whether the current limit (131072) is appropriate.
2023-10-13 18:01:21 +09:00
Yukihiro "Matz" Matsumoto 1321e33f08 mruby-range-ext: implement __empty_range? in C 2023-10-13 16:59:21 +09:00
Yukihiro "Matz" Matsumoto deae227dff mruby-range-ext: update overlap? to handle empty ranges
The code is taken from ActiveSupport (Rails).
2023-10-12 13:40:28 +09:00
Yukihiro "Matz" Matsumoto 3277cc9ce1 numeric.c (int_to_s): avoid mrb_get_args() 2023-10-11 20:32:09 +09:00
Yukihiro "Matz" Matsumoto 717f91e5c6 array.c (mrb_ary_last): avoid mrb_get_args() 2023-10-11 20:31:23 +09:00
Yukihiro "Matz" Matsumoto fae8e55396 pool.c (mrb_pool_realloc): add comments in reallocation code 2023-10-11 13:39:53 +09:00
Yukihiro "Matz" Matsumoto 64e08c6d99 pool.c: add cast to void* 2023-10-11 13:38:59 +09:00
Yukihiro "Matz" Matsumoto 5d53c2b951 pool.c: remove unused mrb_pool_can_realloc() 2023-10-10 22:31:34 +09:00
Yukihiro "Matz" Matsumoto a538837fb1 pool.c (mrb_pool_realloc): do nothing if realloc() tries to shrink 2023-10-10 22:17:30 +09:00
dearblue e7828bac4d Fixed unwinding block that could point to invalid PC
Switching back from a fiber with an exception could point to an invalid PC.
The investigation was inspired by #6060.
2023-10-10 21:29:38 +09:00
Yukihiro "Matz" Matsumoto 42a621b42e pool.c: small refactoring regarding local variable declarations 2023-10-10 14:49:19 +09:00
dependabot[bot] 66ce1c03f4 build(deps): bump super-linter/super-linter from 5.3.1 to 5.4.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.3.1 to 5.4.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.3.1...v5.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>
2023-10-09 14:09:08 +00:00
Yukihiro "Matz" Matsumoto 097681b4d4 mruby-pack: unpack "b/B" should limit result size 2023-10-09 22:39:44 +09:00
Yukihiro "Matz" Matsumoto 861f8bdfa9 mruby-enumerator: add Enumerator#size
If the original object responds to `size` method, `Enumerator#size` calls
that method, otherwise return `nil`. CRuby returns the exact size for
more cases (e.g. Enumerable::Lazy#size), but mruby has more limitations.
2023-10-09 22:39:43 +09:00
Yukihiro "Matz" Matsumoto 49f86f19b2 mruby-enumerator: put "__" prefix to internal enumerator_block_call() 2023-10-09 22:39:43 +09:00
Yukihiro "Matz" Matsumoto 735fa246bf mruby-enumerator: remove internal attribute methods; ref #6068
Removed methods: obj, args, kwd, meth, fib.
2023-10-09 22:39:43 +09:00
Yukihiro "Matz" Matsumoto 298155d59e Merge pull request #6071 from jbampton/pre-commit-autoupdate 2023-10-06 23:58:45 +09:00
John Bampton 903ffb1584 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2023-10-04 01:17:23 +10:00
John Bampton 24ac7a547a Fix spelling 2023-10-04 01:17:23 +10:00
Yukihiro "Matz" Matsumoto 83d12f8d52 vm.c: GCC does not provide __has_feature() 2023-10-03 01:05:26 +09:00
Yukihiro "Matz" Matsumoto b9536ea35f vm.c: use smaller MRB_CALL_LEVEL_MAX with address sanitizer; fix #6068
Since ASAN uses lower memory bound. The other ideas to address #6068
might follow, e.g. removing `args=` from Enumerator.
2023-10-02 21:15:54 +09:00
Yukihiro "Matz" Matsumoto 771b56c796 mruby-socket: hide internal method new_with_prelude
- rename new_with_prelude to _new_with_prelude
- take a block instead of proc
2023-09-28 14:36:42 +09:00
Yukihiro "Matz" Matsumoto 67f1f0997c Merge pull request #6070 from komainu8/demotion-mrb_f_raise-from-mrb_api
Demotion mrb_f_raise() in kernel.c from MRB_API too
2023-09-28 14:22:19 +09:00
Yukihiro "Matz" Matsumoto 10aab4cc1b proc.c: prohibit direct Proc allocation() like CRuby; ref #6065 2023-09-28 11:37:46 +09:00
Yukihiro "Matz" Matsumoto d298da8e72 vm.c (eval_under): check if irep is NULL; fix #6065 2023-09-28 11:37:07 +09:00
Yukihiro "Matz" Matsumoto 0e98508c33 string.c (mrb_string_value_cstr): RSTR_PTR(s) may be NULL; fix #6067 2023-09-28 09:26:02 +09:00
Yukihiro "Matz" Matsumoto 4c7fab6126 string.c (check_null_byte): str may point NULL buffer; ref #6067 2023-09-28 09:24:30 +09:00
Horimoto Yasuhiro d55cec41eb Demotion mrb_f_raise() in kernel.c from MRB_API
The prototype declaration of mrb_f_raise() has arleady demoted from
MRB_API in a below commit.

https://github.com/mruby/mruby/commit/0898ce982eea706c9a7b814280cdda09e82abe17

However, the entity of mrb_f_raise() in kernel.c is set MRB_API yet.
Therefore, mruby occures build error with MSVC(in Visual Studio 2022) as below.

https://github.com/groonga/groonga/actions/runs/6310140553/job/17131485675#step:11:2067

The cause of the above error that we define both mrb_f_raise() with
MRB_API and mrb_f_raise() without MRB_API.
2023-09-28 09:17:54 +09:00
Yukihiro "Matz" Matsumoto 0ac917e228 Revert "mrbgems/mruby-struct/src/struct.c: use direct array access"
This reverts commit 159ff5b28d.
Fix #6066
2023-09-28 07:40:31 +09:00
Yukihiro "Matz" Matsumoto a80f394d97 mruby-array-ext (ary_rotate_bang): mrb_ary_modify may alter buf address 2023-09-27 18:37:38 +09:00
Yukihiro "Matz" Matsumoto 629a6839fd mruby-array-ext (ary_compact_bang): skip check that is always true 2023-09-27 18:32:44 +09:00
Yukihiro "Matz" Matsumoto f65229d103 mruby-array-ext (ary_compact_bang): mrb_ary_modify may alter buf address 2023-09-27 18:30:43 +09:00
Yukihiro "Matz" Matsumoto 7d3679dfc8 mruby-string-ext: refactoring
- raise exception in utf8code
- str_codepoints() use mrb_utf8len_table directly
2023-09-27 18:11:19 +09:00
Yukihiro "Matz" Matsumoto 5705d884ce mruby-string-ext (utf8code): change arguments to point at the end 2023-09-27 18:08:12 +09:00
dearblue c805d4dbba Corrected wrong MRUBY_PACKAGE_DIR
ref. #6064
2023-09-25 21:50:31 +09:00
Yukihiro "Matz" Matsumoto 2e3b482aa9 array.c, string.c: remove length limits on UNIX-ish OSes
- Linux
- MacOS
- FreeBSD
- OpenBSD

Send us a pull-request if you want to add your favorite OS here.
The size limitation will be done by malloc(3) on those OSes.
2023-09-23 19:57:44 +09:00
Yukihiro "Matz" Matsumoto 15bb6a9f9b mruby-string-ext: fix a typo; ref #6016 2023-09-23 11:44:15 +09:00
Yukihiro "Matz" Matsumoto 8a538c40c0 mruby-string-ext: implement core part of codepoints in C; close #6061 2023-09-23 11:36:20 +09:00
Yukihiro "Matz" Matsumoto 2db80b81c9 Merge pull request #6062 from mruby/dependabot/github_actions/super-linter/super-linter-5.3.1
build(deps): bump super-linter/super-linter from 5.3.0 to 5.3.1
2023-09-23 00:04:07 +09:00
Yukihiro "Matz" Matsumoto 9ee7edc1ac mruby-fiber/fiber.c (fiber_switch): check c->cibase->proc env is NULL
ref #6060
2023-09-22 19:36:33 +09:00
dependabot[bot] ed30e2e568 build(deps): bump super-linter/super-linter from 5.3.0 to 5.3.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.3.0...v5.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>
2023-09-21 14:29:25 +00:00
Yukihiro "Matz" Matsumoto 0730bda60e mruby-range-ext: add tests for Range#overlap? 2023-09-21 15:28:56 +09:00
Yukihiro "Matz" Matsumoto 384d0e2d21 mruby-range-ext: implement Range#overlap? method
Which is implemented in CRuby recently.
2023-09-21 15:28:06 +09:00
Yukihiro "Matz" Matsumoto 393aaada64 mruby-pack/pack.c (read_tmpl): fix out-of-bound access with templates 2023-09-20 09:51:22 +09:00
Yukihiro "Matz" Matsumoto b064d7e547 mruby-time/time.c (time_alloc_time): need to handle negative time_t 2023-09-19 14:22:49 +09:00
Yukihiro "Matz" Matsumoto ec3baece4f vm.c (catch_handler_find): check if irep is NULL; fix #6052 2023-09-19 14:22:49 +09:00
Yukihiro "Matz" Matsumoto 75e8a72649 vm.c (CI_PROC_SET): check whether p->body.irep is not NULL; ref #6052 2023-09-19 14:22:49 +09:00
Yukihiro "Matz" Matsumoto 8afb73f3e2 mruby-socket/socket.rb: should not call unix_path for non UNIX Addrinfo
ref #6051
2023-09-19 14:22:49 +09:00
Yukihiro "Matz" Matsumoto 52082ba399 mruby-socket/socket.c (mrb_addrinfo_unix_path): check sockaddr type
`sockaddr` should be a string; fix #6051
2023-09-19 14:22:49 +09:00
Yukihiro "Matz" Matsumoto 40f08e22f1 Merge pull request #6058 from mruby/dependabot/github_actions/super-linter/super-linter-5.3.0
build(deps): bump super-linter/super-linter from 5.2.2 to 5.3.0
2023-09-19 14:05:20 +09:00
dependabot[bot] 38113d2524 build(deps): bump super-linter/super-linter from 5.2.2 to 5.3.0
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.2.2 to 5.3.0.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.2.2...v5.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>
2023-09-18 14:15:49 +00:00
Yukihiro "Matz" Matsumoto 39d805e1da Merge pull request #6055 from dearblue/libmruby-name
Fix libmruby name for VisualC++
2023-09-18 15:47:41 +09:00
Yukihiro "Matz" Matsumoto 3ce5f2df8b Merge pull request #6054 from dearblue/mruby-config-plus
Extends `bin/mruby-config`
2023-09-17 18:23:54 +09:00
dearblue 7112db9fba Extends bin/mruby-config
Added output for C++ and Assembly, ObjectiveC.
2023-09-17 17:48:36 +09:00
dearblue 7ac536e3ca Fix libmruby name for VisualC++ 2023-09-17 17:42:25 +09:00
Yukihiro "Matz" Matsumoto 74949b3e7e Merge pull request #6053 from dearblue/gitattributes
Add `.gitattributes` for newline code normalization
2023-09-17 16:36:28 +09:00
dearblue 078b5ccaff Add .gitattributes for newline code normalization
References:
  - [Git] リポジトリで改行コードを正規化する
    https://zenn.dev/murnana/articles/eol-and-gitattributes
  - 行終端を処理するようGitを設定する - GitHub Docs
    https://docs.github.com/ja/get-started/getting-started-with-git/configuring-git-to-handle-line-endings
2023-09-17 13:52:48 +09:00
Yukihiro "Matz" Matsumoto 4810706ccc vm.c: refactor redundant if conditions 2023-09-16 14:49:58 +09:00
Yukihiro "Matz" Matsumoto f041d3a5d5 Merge pull request #6047 from mruby/dependabot/github_actions/super-linter/super-linter-5.2.2
build(deps): bump super-linter/super-linter from 5.2.1 to 5.2.2
2023-09-15 13:35:03 +09:00
Yukihiro "Matz" Matsumoto e8254eda42 gc.c: update comment for flexible array members (C++ incompatible) [ci skip] 2023-09-15 13:33:52 +09:00
Yukihiro "Matz" Matsumoto 4fe8b074bb gc.c: remove prev link from mrb_heap_page 2023-09-15 13:33:52 +09:00
Yukihiro "Matz" Matsumoto 44b5153360 gc.c: revert af68de52dddd80afe1620c45680eb055767a412f
The change increased memory consumption significantly
2023-09-15 13:33:52 +09:00
Yukihiro "Matz" Matsumoto 22e74a7ee5 gc.c: experiment before removing page->prev link 2023-09-15 13:33:52 +09:00
Yukihiro "Matz" Matsumoto 9b90fd4f60 gc.c (incremental_sweep_phase): rebuild free pages link only if needed 2023-09-15 13:33:52 +09:00
Yukihiro "Matz" Matsumoto 9f840e111a gc.c: inline unlink_heap_page which was called only once 2023-09-15 13:33:52 +09:00
Yukihiro "Matz" Matsumoto 0f69e93664 gc.c: inline link_heap_page which was called once 2023-09-15 13:33:51 +09:00
Yukihiro "Matz" Matsumoto 117fcfc8e9 gc.c: stop using bidirectional link for free_heaps
Reduce size of the heap pages again; ref #6041
2023-09-15 13:33:51 +09:00
Yukihiro "Matz" Matsumoto e1c96b709a Merge pull request #6045 from dearblue/presym-escape.2
Fixes escape sequence bug and enhancements in Presym scanning
2023-09-15 13:11:26 +09:00
dependabot[bot] d8ad654460 build(deps): bump super-linter/super-linter from 5.2.1 to 5.2.2
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.2.1 to 5.2.2.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.2.1...v5.2.2)

---
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>
2023-09-13 14:08:56 +00:00
Yukihiro "Matz" Matsumoto d708931b10 gc.c: revert 38b9a25e83
Fix #6041
2023-09-09 14:31:13 +09:00
dearblue 25f360803c Fixes escape sequence bug and enhancements in Presym scanning
In #6011, a hexadecimal escape sequence followed by a hexadecimal character would cause a compile error.
Also, avoid using "Numbered Parameter" which older Ruby does not have (e.g. AppVeyor).

ref. #6044
2023-09-08 22:57:24 +09:00
Yukihiro "Matz" Matsumoto 5eddccf89a gc.c: remove unnecessary symbol local variables 2023-09-08 14:15:54 +09:00
Yukihiro "Matz" Matsumoto d7b2e3ab14 mruby-compiler/parse.y: add print name for identifier tokens 2023-09-05 23:29:24 +09:00
Yukihiro "Matz" Matsumoto e8841fbf58 gc.h: move mrb_heap_page definition to gc.c 2023-09-05 23:29:24 +09:00
Yukihiro "Matz" Matsumoto acf5b74daa vm.c (ary_new_from_regs): avoid mrb_ary_push()
Use mrb_ary_new_from_values(), which is faster instead.
2023-09-05 23:29:23 +09:00
Yukihiro "Matz" Matsumoto 9914243d68 vm.c: use direct array access if possible 2023-09-05 23:29:23 +09:00
Yukihiro "Matz" Matsumoto 0eef05cc00 array.c (mrb_ary_to_s): use direct array access 2023-09-05 23:29:23 +09:00
Yukihiro "Matz" Matsumoto 159ff5b28d mrbgems/mruby-struct/src/struct.c: use direct array access
Unless we need boundary check, we don't need to use mrb_ary_ref().
2023-09-05 23:29:23 +09:00
Yukihiro "Matz" Matsumoto 1578f4bb99 mruby-data/data.c: use direct array access
Unless we need boundary check, we don't need to use mrb_ary_ref()
2023-09-05 23:29:23 +09:00
Yukihiro "Matz" Matsumoto 4cf810e4ea Merge pull request #6042 from mruby/dependabot/github_actions/actions/checkout-4
build(deps): bump actions/checkout from 3 to 4
2023-09-05 23:28:55 +09:00
dependabot[bot] f893c18088 build(deps): bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 14:59:02 +00:00
Yukihiro "Matz" Matsumoto 792459e63d Merge pull request #6040 from dearblue/puts-eol
Convert to string before output in `puts`
2023-08-30 22:30:58 +09:00
Yukihiro "Matz" Matsumoto a20fbe54b9 mrbgems/mruby-test/mrbgem.rake: stop mrb isolation for each test file
It reduces the number of `mrb_state` initialization in `mrbtest`. But at
the same time, each test in a gem shares states (classes, methods, etc.)
2023-08-30 18:32:48 +09:00
Yukihiro "Matz" Matsumoto a67f32561f test/t/codegen.rb: test 127 arguments with break not next
In addition, avoid using undefined constant `A` because it terminates
actual execution by `NameError`.
2023-08-30 18:28:59 +09:00
dearblue 301bcc636e Convert to string before output in puts
For example, evaluating `puts nil` raised `NoMethodError` before.
2023-08-29 21:59:09 +09:00
Yukihiro "Matz" Matsumoto a17fdb7481 AUTHORS: update entries [ci skip] 2023-08-28 10:59:29 +09:00
Yukihiro "Matz" Matsumoto b85b6822b2 hash.c (mrb_hash_aset): avoid slower mrb_get_args() 2023-08-26 22:30:20 +09:00
Yukihiro "Matz" Matsumoto 0578e518e6 src/vm.c: adjust mrb_gc_protect() for kdict argument
It was called repeatedly in some cases.
2023-08-25 23:12:08 +09:00
Yukihiro "Matz" Matsumoto 1e385692d1 Rakefile: remove default build target directories in deep_clean
Ref #6038, #6032
2023-08-24 12:57:27 +09:00
Yukihiro "Matz" Matsumoto f43f2fc8f3 mruby-socket/socket.c: use internal name for instance variables
For Socket::Option objects.
2023-08-23 11:27:03 +09:00
Yukihiro "Matz" Matsumoto 2160be7db7 mruby-socket/socket.rb: remove unused canonname accessor 2023-08-22 23:27:08 +09:00
Yukihiro "Matz" Matsumoto 95e09c0c95 mruby-method: implement Kernel#singleton method in C
- Also fixes error message inconsistency
- Avoid unnecessary method object allocation if possible
2023-08-22 10:53:52 +09:00
Yukihiro "Matz" Matsumoto a16b2b0e12 Merge pull request #6038 from dearblue/revert-6032-update-rake-task-clean
Revert "Rake: update task clean to remove `bin` and `build` folders"
2023-08-21 22:28:17 +09:00
Yukihiro "Matz" Matsumoto 182c06a46b codedump.c: fflush() output 2023-08-21 17:27:03 +09:00
Yukihiro "Matz" Matsumoto 982a378425 mruby-print/print.c: stop flushing every time in printstr
Instead, call `fflush` at the end of `print` method, if stdout is
connected to a tty.
2023-08-21 12:47:44 +09:00
Yukihiro "Matz" Matsumoto 192e6e3b9f mruby-print/print.c: remove internal method __printstr
Instead, implement `print` method in C and use it from mrblib/print.rb
2023-08-21 12:47:44 +09:00
dearblue 14a0cc4b7b Revert "Rake: update task clean to remove bin and build folders" 2023-08-18 22:36:21 +09:00
Yukihiro "Matz" Matsumoto bd41dfbcb9 mruby-socket/socket.c (socket_option_inspect): readable family name
Print readable name for know protocol families.
2023-08-17 10:54:59 +09:00
Yukihiro "Matz" Matsumoto 2fb478db76 Merge pull request #6037 from mruby/dependabot/github_actions/super-linter/super-linter-5.2.1
build(deps): bump super-linter/super-linter from 5.2.0 to 5.2.1
2023-08-17 10:53:10 +09:00
dependabot[bot] 1dbfeab2df build(deps): bump super-linter/super-linter from 5.2.0 to 5.2.1
Bumps [super-linter/super-linter](https://github.com/super-linter/super-linter) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/docs/release-process.md)
- [Commits](https://github.com/super-linter/super-linter/compare/v5.2.0...v5.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>
2023-08-16 14:29:51 +00:00
Yukihiro "Matz" Matsumoto 58e10f16e9 mruby-socket/socket.c: include Socket::Constants in C init 2023-08-16 13:23:56 +09:00
Yukihiro "Matz" Matsumoto 1d7c00e920 mruby-socket/socket.c: implement whole Socket::Option class in C
`mruby-pack` gem no longer needed.
2023-08-15 15:29:36 +09:00
Yukihiro "Matz" Matsumoto 83b6a63c16 mruby-socket/socket.c: implement accessors in C 2023-08-15 07:35:29 +09:00
Yukihiro "Matz" Matsumoto e209f0a220 mruby-socket/socket.c (socket_option_init): add integer type checks 2023-08-15 07:31:04 +09:00
Yukihiro "Matz" Matsumoto 892596d372 mruby-socket/socket.c: implement Socket::Option#initialize in C 2023-08-14 23:32:22 +09:00
Yukihiro "Matz" Matsumoto 2a3af5dc67 Merge pull request #6036 from jbampton/add-pre-commit-hook
pre-commit: add hook `forbid-submodules`
2023-08-13 22:05:20 +09:00
Yukihiro "Matz" Matsumoto d53aa54e3b Merge pull request #6035 from jbampton/fix-super-linter-path
Fix Super-Linter action path
2023-08-13 22:04:33 +09:00
Yukihiro "Matz" Matsumoto 3310e10318 mruby-test/mrbgem.rake: fix mrb_state handling bug
You should not pass values from different mrb_state. No one has ever
used test_args for gems, the issue has not been realized.
2023-08-13 20:02:01 +09:00
John Bampton 6ac6d690dd pre-commit: add hook forbid-submodules
https://github.com/pre-commit/pre-commit-hooks#forbid-submodules

If you want to ban them entirely use forbid-submodules.

Really this is just one extra check or test we can have.
2023-08-13 11:17:22 +10:00
John Bampton 9051367fd8 Fix Super-Linter action path
https://github.com/super-linter/super-linter

https://github.com/marketplace/actions/super-linter

They changed the organization name to "super-linter" from "github" for the Super-Linter Action
2023-08-13 11:03:28 +10:00
Yukihiro "Matz" Matsumoto 4769a474a4 mruby-test/mrbgem.rake: remove unnecessary arena_index 2023-08-12 23:43:48 +09:00
Yukihiro "Matz" Matsumoto 435cce7efd mruby-socket/socket.c: use mrb_iv_get() instead of accessors 2023-08-12 20:19:32 +09:00
Yukihiro "Matz" Matsumoto c675c0cbb1 mruby-socket/socket.c: use mrb_ensure_int_type() 2023-08-11 23:10:02 +09:00
Yukihiro "Matz" Matsumoto 34e7a0ef4b mruby-socket/socket.c (socket_option_class): a new function
To retrieve Socket::Option class from C functions.
2023-08-11 23:07:38 +09:00
Yukihiro "Matz" Matsumoto 0864f44c24 mruby-socket/socket.c: use mrb_obj_new() instead of mrb_obj_funcall() 2023-08-09 18:45:42 +09:00
Yukihiro "Matz" Matsumoto 08a780edd6 mruby-socket/socket.c: rename a local variable for clarity (res0 -> addr) 2023-08-09 14:33:14 +09:00
Yukihiro "Matz" Matsumoto edf3f1226c mruby-socket/socket.c: pass klass to gen_addrinfo 2023-08-09 14:33:14 +09:00
Yukihiro "Matz" Matsumoto 9e37a490f8 mruby-socket/socket.c: narrow local variable scope 2023-08-09 14:33:14 +09:00
Yukihiro "Matz" Matsumoto 10ed2ea03b mruby-socket/socket.c: use z! argument specifier rather than o
`z!` specifier checks if the argument is NULL terminated string or nil.
2023-08-09 14:33:14 +09:00
Yukihiro "Matz" Matsumoto 9d370e0851 mruby-socket/socket.c: ensure struct addrinfo to be freed
Instead of referring the last addrinfo via Addrinfo's class variable, we
use `mrb_ensure()` from `mruby-error` gem.
2023-08-09 13:51:25 +09:00
Yukihiro "Matz" Matsumoto 12bd395012 fmt_fp.c: revert 647324ad45c0d779a3c36f0bb7955b8b8fc9f491
C++ complier does not allow jump across local variable declaration, even
if we don't access those variables after the destination label.
2023-08-08 11:24:15 +09:00
Yukihiro "Matz" Matsumoto 8591211494 dump.c (mrb_dump_irep): remove a function which only delegates 2023-08-08 11:24:14 +09:00
Yukihiro "Matz" Matsumoto ceb5086eb3 fmt_fp.c: unify returning code 2023-08-08 11:24:14 +09:00
Yukihiro "Matz" Matsumoto 7e865aec51 mruby-bigint/bigint.c: remove unused mrb_bint_new() 2023-08-08 11:24:14 +09:00
Yukihiro "Matz" Matsumoto a22ea766e2 mruby-numeric-ext/numeric_ext.c: use local variables. 2023-08-08 11:24:14 +09:00
Yukihiro "Matz" Matsumoto 5de3be1bee mruby-dir/dir.c (mrb_di_getwd): reduce buffer allocation size
Instead of allocating `MAXPATHLEN` buffer string at the beginning,
allocate smaller (64 bytes) buffer, then resize it if needed. The
allocating max size is safe but consumes more memory.
2023-08-08 11:24:14 +09:00
Yukihiro "Matz" Matsumoto a2649652f1 mruby-os-memsize/memsize.c: fix irep size calculation
Need to count the following as well:

- size of pool values
- size of reps array
2023-08-02 07:04:35 +09:00
Yukihiro "Matz" Matsumoto 1bc8ef903e Merge pull request #6032 from jbampton/update-rake-task-clean
Rake: update task clean to remove `bin` and `build` folders
2023-07-31 10:42:01 +09:00
Yukihiro "Matz" Matsumoto 0af6f8ff57 Merge pull request #6033 from jbampton/file-sorter-unique
pre-commit: file-contents-sorter ensure each line is unique
2023-07-30 18:30:26 +09:00
John Bampton a2785a8180 pre-commit: file-contents-sorter ensure each line is unique
https://github.com/pre-commit/pre-commit-hooks#file-contents-sorter
2023-07-30 04:25:38 +10:00
John Bampton a94a8b1cf0 Rake: update task clean to remove bin and build folders 2023-07-30 03:51:48 +10:00
Yukihiro "Matz" Matsumoto bbd4edc607 mruby-data/data.c (mrb_data_ref): remove code duplication 2023-07-29 08:42:25 +09:00
Yukihiro "Matz" Matsumoto 8d2f9b3d12 mruby-data/data.c: skip inefficient env for first some accessors 2023-07-28 23:45:25 +09:00
Yukihiro "Matz" Matsumoto 1e1184f62d mruby-pack/pack.c (read_tmpl): should consume skips in the function 2023-07-28 17:05:49 +09:00
Yukihiro "Matz" Matsumoto 0542d6bad4 debug.c (mrb_packed_int_encode): remove end argument
The function requires the buffer bigger than `mrb_packed_int_len()`
anyway, so we don't need boundary checks for each iteration. Should
makes the function a little bit faster.
2023-07-28 17:05:38 +09:00
Yukihiro "Matz" Matsumoto 5b2056efda Merge pull request #6031 from jbampton/pre-commit-autoupdate
Run `pre-commit autoupdate` and update `codespell.txt`
2023-07-25 10:57:03 +09:00
John Bampton 0464ca3870 Run pre-commit autoupdate 2023-07-24 22:26:53 +10:00
John Bampton b66b67beda Update codespell.txt 2023-07-24 22:25:03 +10:00
Yukihiro "Matz" Matsumoto 1535e031df mruby-pack/pack.c (read_tmpl): direct return from skipping directives
We used to read counts after spaces, for example `pack("j 4")` read `4`
as counts after a space.
2023-07-24 18:03:39 +09:00
Yukihiro "Matz" Matsumoto a5a13ad35f mruby-pack/pack.c (read_tmpl): read_tmpl to return dir
Use return value for directives information.
2023-07-24 18:03:39 +09:00
Yukihiro "Matz" Matsumoto 8a3d52f494 mruby-pack/pack.c (read_tmpl): rename PACK_DIR_INVALID
The value is used for spaces and comments, so the term "skip" is more
appropriate than "invalid".
2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto e17f3256c6 mruby-pack/pack.c (read_tmpl): support comments in derectives 2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto 5d0016186f numeric.c (mrb_float_to_str): avoid memcpy() 2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto 0eceadd037 mruby-pack/test/pack.rb: test B/b directives 2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto e7021f190a mruby-pack/pack.c (pack_bstr): support B/b directives 2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto 05549410d9 mruby-pack/pack.c (read_tmpl): check unknown directives 2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto 2a1e3a572c mruby-pack/pack.c (read_tmpl): support J/j template in pack
J/j is available since Ruby 2.3.
2023-07-24 18:03:37 +09:00
Yukihiro "Matz" Matsumoto 663f936ba8 Merge pull request #6030 from jbampton/standardize-dots
Standardize docs to use 3 dots: `...`
2023-07-24 08:21:16 +09:00
Yukihiro "Matz" Matsumoto 0876cf82ff Merge pull request #6028 from jbampton/fix-super-linter-button
Fix Super-Linter button in README
2023-07-24 08:20:06 +09:00
John Bampton 14b4f5953b Standardize docs to use 3 dots: ... 2023-07-23 03:39:03 +10:00
Yukihiro "Matz" Matsumoto 455a5689f3 lib/mruby/build/command.rb: skip mrbgems in parent directory; fix #6029
If `mrbgems` is included in the parent directory path (MRUBY_ROOT), it
confuses gem path and build path.
2023-07-17 13:24:47 +09:00
Yukihiro "Matz" Matsumoto f84f129d65 AUTHORS: update entries [ci skip] 2023-07-17 12:18:10 +09:00
Yukihiro "Matz" Matsumoto 5e7d763e91 variable.c (mrb_obj_iv_set_force): check namespace_p beforehand
To reduce number of assign_class_name() invocation.
2023-07-17 12:09:28 +09:00
John Bampton 95fbacb1dc Fix Super-Linter button in README
Updated the button to the latest format seen here:

https://github.com/marketplace/actions/super-linter#add-super-linter-badge-in-your-repository-readme
2023-07-15 20:49:58 +10:00
Yukihiro "Matz" Matsumoto 82a48bd455 error.c (mrb_bug): avoid formatting in mrb_bug()
Since mrb_bug() would be called under the abnormal situation (and should
not be called if possible), the process should be minimal.
2023-07-14 21:48:11 +09:00
Yukihiro "Matz" Matsumoto d6d434eb3f Inline loop variables everywhere 2023-07-13 08:05:00 +09:00
Yukihiro "Matz" Matsumoto d4a03be96b mruby-string-ext/string.c (str_casecmp): small refactoring 2023-07-12 09:14:45 +09:00
Yukihiro "Matz" Matsumoto 2af0ff52e9 backtrace.c (count_backtrace_i): remove empty callback
Instead specifying NULL as function argument of each_backtrace()
count the number of callbacks.
2023-07-11 07:17:19 +09:00
Yukihiro "Matz" Matsumoto 6f99806d5b backtrace.c (packed_backtrace): remove count_backtrace()
Since we have stop calling mrb_debug_get_position() in each_backtrace(),
we don't need to craft special function count_backtrace(). We just use
each_backtrace() to count the number of backtraces.
2023-07-11 06:59:09 +09:00
Yukihiro "Matz" Matsumoto 316119069d backtrace.c (each_backtrace): skip callinfo without debug_info 2023-07-10 07:57:02 +09:00
Yukihiro "Matz" Matsumoto 7aa914b4d4 cdump.c (cdump_debug): restore arena index at the end of the function 2023-07-10 07:26:19 +09:00
Yukihiro "Matz" Matsumoto c57610ad8a backtrace.c (packed_backtrace): fix broken ciidx
- fix at higher level to remove redundancy
- ciidx should always be smaller than ci stack length
2023-07-10 07:05:27 +09:00
Yukihiro "Matz" Matsumoto 9c61c66045 gc.c (mrb_obj_alloc): clarify the heap initialization 2023-07-09 22:59:58 +09:00
Yukihiro "Matz" Matsumoto eebbc6eaa4 gc.c (mrb_obj_alloc): gc->heaps may be NULL 2023-07-07 06:53:19 +09:00
Yukihiro "Matz" Matsumoto af85b1fbed gc.c (gc_mark_gray_list): cut gcnext link 2023-07-06 22:57:14 +09:00
Yukihiro "Matz" Matsumoto aa5ffb686f mruby-os-memsize: more precise memory size for method tables 2023-07-06 16:12:51 +09:00
Yukihiro "Matz" Matsumoto 0a4473bf64 mruby-socket/socket.c: fix indentation 2023-07-04 17:50:37 +09:00
Yukihiro "Matz" Matsumoto 0558b1abd8 backtrace.c: reorder functions for clarity 2023-07-03 15:26:45 +09:00
Yukihiro "Matz" Matsumoto 97b60e7fb1 backtrace.c (backtrace_location): defer retrieving positions
Instead of calling `mrb_debug_get_position` in the `each_backtrace`, we
just keep `irep` and `idx` information in the backtrace_location, and
get the exact position in `mrb_unpack_backtrace` which may not be called
if exceptions are handled in the `rescue` clauses.
2023-07-03 15:21:16 +09:00
Yukihiro "Matz" Matsumoto 40bdd65ce6 backtrace.c (each_backtrace): return number of traces iterated 2023-07-03 15:20:24 +09:00
Yukihiro "Matz" Matsumoto 70b49eaef2 debug.c (debug_get_line): remove obsolete debug line types
- mrb_debug_line_ary
- mrb_debug_line_flat_map

Those two are no longer used, so we can safely remove the support.
2023-07-03 15:16:29 +09:00
Yukihiro "Matz" Matsumoto ea649e70b8 mruby-pack/pack.c (mrb_pack_pack): use direct array buffer access
We don't need index wrap-around not boundary check here, so we can use
faster direct array access.
2023-06-29 22:54:58 +09:00
Yukihiro "Matz" Matsumoto 0c4f5a4093 backtrace.c (mrb_unpack_backtrace): make the function static 2023-06-29 22:54:09 +09:00
Yukihiro "Matz" Matsumoto e563a3cb2c backtrace.c (packed_backtrace): reduce unnecessary calls
Instead of calling each_backtrace() twice, use a new function
count_backtrace().
2023-06-28 21:53:17 +09:00
Yukihiro "Matz" Matsumoto f1d6af08cf gc.c: inline heap page linkage 2023-06-27 15:48:33 +09:00
Yukihiro "Matz" Matsumoto 38b9a25e83 gc.c (mrb_obj_alloc): remove free_next,free_prev from heap pages
It used to be maintain heap pages with allocatable objects (free_heaps)
but we can save two words (16 bytes) per page by scanning live heap pages.
2023-06-27 15:48:25 +09:00
Yukihiro "Matz" Matsumoto 695ad6ea95 gc.c (incremental_sweep_phase): freed need not to be smaller than page size 2023-06-26 17:14:43 +09:00
Yukihiro "Matz" Matsumoto b2110c23a1 Merge pull request #6023 from dearblue/expose-headers
"expose_header_files" task split per build
2023-06-24 15:35:31 +09:00
Yukihiro "Matz" Matsumoto a3365d8b3f gc.c (obj_free): need not to unshare env object when freeing fibers
Since when env objects reference the context, we no longer need to
unshare (stack reallocate) env objects. Currently all env objects
referenced from fibers are already recycled, so we removed unnecessary
code altogether.
2023-06-23 23:06:15 +09:00
Yukihiro "Matz" Matsumoto fc9fffc5b5 kernel.rb (_inspect): _inspect method no longer needed 2023-06-22 23:32:31 +09:00
Yukihiro "Matz" Matsumoto 6ae6b63aaf mruby-struct: add recursive inspect check instead of _inspect hack 2023-06-22 12:53:51 +09:00
Yukihiro "Matz" Matsumoto 849963b81e variable.c (mrb_obj_iv_inspect): support recursion detection 2023-06-21 23:36:59 +09:00
Yukihiro "Matz" Matsumoto 0713f2a840 mruby-set/set.rb (inspect): add recursive inspect check to Set#inspect 2023-06-20 11:25:49 +09:00
Yukihiro "Matz" Matsumoto 113565a1c5 hash.c (mrb_hash_to_s): add recursive inspect check to Hash#inspect 2023-06-20 11:18:38 +09:00
Yukihiro "Matz" Matsumoto 5cb0c7463b array.c (mrb_ary_to_s): add recursive check to Array#inspect 2023-06-20 07:06:33 +09:00
Yukihiro "Matz" Matsumoto e2bbf75d58 kernel.c: prepare for new recursive inspect check
Like previous recursive `<=>` check, scan call stack to detect recursive
`inspect` calls. We no longer need incomplete `_inspect` hack to pass
around a hash table to record objects currently inspecting.
2023-06-20 07:04:28 +09:00
Yukihiro "Matz" Matsumoto 75c8ffddf5 object.c (mrb_equal) move mrb_equal() back to object.c 2023-06-20 06:45:05 +09:00
Yukihiro "Matz" Matsumoto 89a1719a13 compar.rb: use equal?() instead of ==
To avoid unnecessary infinite recursion.
2023-06-19 15:33:13 +09:00
dearblue fdec32a8f2 "expose_header_files" task split per build
If there are multiple build targets, it should be preferable to have the task processed at each of them.
2023-06-18 21:22:31 +09:00
Yukihiro "Matz" Matsumoto 7f85ae2c48 Merge pull request #6022 from chasonr/msdos-build
Build configuration for MS-DOS and DJGPP
2023-06-18 18:13:24 +09:00
Ray Chason 23e9befbc0 Changes to cross-compile with DJGPP 2023-06-17 17:20:33 -04:00
Ray Chason 853b25972e Build configuration for MS-DOS 2023-06-17 17:20:20 -04:00
Yukihiro "Matz" Matsumoto a638a71c72 test/hash.rb: remove some inspect/to_s tests
CRuby does prohibits Hash modification during iteration, so remove those
self modifying inspect/to_s.
2023-06-17 17:56:41 +09:00
Yukihiro "Matz" Matsumoto 20552fe176 hash.c (mrb_hash_foreach): wrap function call with h_check_modified
If the iterating hash is modified in the function, h_each loop may
crash accessing modified (and probably deallocated) internal data.
2023-06-17 10:55:55 +09:00
Yukihiro "Matz" Matsumoto e502fd88b9 kernel.c (mrb_cmp_m): check recursive <=> calls
If previous `<=>` method invocation with same arguments is detected in
the stack trace, this `<=>` call must be recursive and can cause stack
overflow.
2023-06-17 09:18:55 +09:00
Yukihiro "Matz" Matsumoto 7c9cb0901c kernel.c (mrb_equal): simplify the code 2023-06-16 13:45:58 +09:00
Yukihiro "Matz" Matsumoto 5e4cecf766 internal.h: add mrb_obj_equal_m to internal.h 2023-06-15 23:36:27 +09:00
Yukihiro "Matz" Matsumoto a04d18bb6d kernel.c (mrb_eqq_m): rename function equal -> eqq
This function implements `Kernel#===` and it's usually abbreviated to
`eqq` not `equal`.
2023-06-15 23:32:41 +09:00
Yukihiro "Matz" Matsumoto 359c630d73 kernel.c (mrb_equal): move mrb_equal() from object.c 2023-06-15 23:31:45 +09:00
Yukihiro "Matz" Matsumoto 2be7cba8f5 kernel.c (obj_respond_to): refactoring
- skip basic_obj_respond_to(); call mrb_respond_to() directly
- narrower scope for `mrb_sym rtm_id`
- use mrb_func_basic_p() to detect override
- use mrb_funcall_id() to avoid local mrb_value array
2023-06-14 11:41:21 +09:00
Yukihiro "Matz" Matsumoto 347586e400 kernel.c: define respond_to_missing? method 2023-06-14 11:31:55 +09:00
Yukihiro "Matz" Matsumoto e96d90dab2 Merge pull request #6017 from jbampton/standardize-pre-commit-config
Standardize the `pre-commit` config
2023-06-13 15:44:51 +09:00
Yukihiro "Matz" Matsumoto 7125481952 Merge pull request #6021 from jbampton/news-remove-duplicate-cve
NEWS: remove duplicate CVE from list
2023-06-13 14:09:59 +09:00
John Bampton 26659ef76c NEWS: remove duplicate CVE from list 2023-06-13 15:02:57 +10:00
Yukihiro "Matz" Matsumoto 0d863ae85f Merge pull request #6018 from jbampton/configure-dependabot-for-bundler
Configure Dependabot updates for Bundler/Ruby
2023-06-13 13:50:40 +09:00
Yukihiro "Matz" Matsumoto c99403d635 Merge pull request #6020 from jbampton/fix-markdown-link
Enable markdownlint rule MD052
2023-06-13 13:49:49 +09:00
Yukihiro "Matz" Matsumoto a332ea1f67 Merge pull request #6019 from jbampton/docs-remove-duplicate-cve
docs: remove duplicate CVE from list
2023-06-13 13:47:55 +09:00
John Bampton 50e0aad288 Enable markdownlint rule MD052
https://github.com/DavidAnson/markdownlint/blob/main/doc/md052.md
2023-06-13 14:34:52 +10:00
John Bampton 343a633fb0 doc: fix Markdown reference links 2023-06-13 14:31:29 +10:00
John Bampton 36f2d1733b docs: remove duplicate CVE from list 2023-06-13 13:27:23 +10:00
John Bampton 760ce71af0 Configure Dependabot updates for Bundler/Ruby
https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates#supported-repositories-and-ecosystems

In future this will keep the Gemfile.lock up to date
2023-06-13 12:44:00 +10:00
John Bampton f14f2ae174 Standardize the pre-commit config 2023-06-13 08:54:17 +10:00
Yukihiro "Matz" Matsumoto 17720c9b7b variable.c (const_get): avoid mrb_funcall if possible
Directly call mrb_const_missing() if const_missing is not overridden.
2023-06-12 23:47:35 +09:00
Yukihiro "Matz" Matsumoto 89f7bb1056 use more lightweight mrb_funcall_argv instead of mrb_funcall_id 2023-06-12 14:22:04 +09:00
Yukihiro "Matz" Matsumoto 39a29a7de1 mruby-bin-debugger/mrbgem.rake: fix defines configuration
`spec.build.defines` should be update inline. Otherwise, configuration
may differ from file to file.
2023-06-12 13:07:57 +09:00
Yukihiro "Matz" Matsumoto a867fb0703 class.c: remove methID from the example and codespell dict 2023-06-09 17:56:21 +09:00
Yukihiro "Matz" Matsumoto b6181ae58a mruby/gc.h: reorder mrb_gc members to reduce alignment gaps 2023-06-09 17:19:09 +09:00
Yukihiro "Matz" Matsumoto 727a2ec793 gc.c (obj_free): use simpler is_dead()
`mrb_object_dead_p()` is heavier if the pointer is (or used to be) an
object in the heaps.
2023-06-07 17:03:32 +09:00
Yukihiro "Matz" Matsumoto 336b7efb41 gc.c (mrb_incremental_gc): clarify the if-condition 2023-06-06 11:29:48 +09:00
Yukihiro "Matz" Matsumoto 8b8e186688 gc.h: rename majorgc_old_threashold to oldgen_threashold
This field means that if you have more old generation objects than
this value, major GC mode will be turned on.
2023-06-06 11:26:35 +09:00
Yukihiro "Matz" Matsumoto b47c8b738a gc.c (clear_all_old): fix a generational GC bug
This issue was caused by 375d22b that introduced a serious mark
leakage in the generational GC mode.
2023-06-06 07:29:41 +09:00
Yukihiro "Matz" Matsumoto 0bb08718b8 gc.c (incremental_marking_phase): clear gcnext for debugging 2023-06-05 23:31:36 +09:00
Yukihiro "Matz" Matsumoto 6958368daa gc.c (gc_mark_children): declare a loop variable in the for-statement 2023-06-05 23:30:33 +09:00
Yukihiro "Matz" Matsumoto 623cda5521 gc.c: make color macros literals for debugging clarity 2023-06-05 16:00:04 +09:00
Yukihiro "Matz" Matsumoto f07281a026 Revert "object.h: make GC color uint8_t that fits in 3 bits"
The change made the size of mruby data types bigger on Win.
This reverts commit afcf7fc86d.
2023-06-03 16:55:58 +09:00
Yukihiro "Matz" Matsumoto 93648fc954 gc.c (mrb_env_unshare): fix a write barrier bug 2023-06-02 11:00:13 +09:00
Yukihiro "Matz" Matsumoto 9369679e36 vm.c: reduce local variables 2023-06-01 09:14:39 +09:00
Yukihiro "Matz" Matsumoto 5b61407414 class.c (prepare_singleton_class): defer method table allocation 2023-06-01 09:13:44 +09:00
Yukihiro "Matz" Matsumoto 0d8545e01b error.c (frozen_error): change specifier from %t to %T
- `%t` prints type (class) of the argument
- `%T` prints real class of the argument, skipping TT_ICLASS, etc.
2023-05-31 08:35:54 +09:00
Yukihiro "Matz" Matsumoto e6c89ef1f9 mruby.h: make mrb_check_frozen to a normal function from inline one 2023-05-31 08:33:58 +09:00
Yukihiro "Matz" Matsumoto ccdf75c1c2 error.c: a new function mrb_check_frozen_value() 2023-05-31 08:31:13 +09:00
Yukihiro "Matz" Matsumoto 8b39a7825d Reduce unnecessary mrb_obj_ptr() to mrb_check_frozen() 2023-05-31 08:29:12 +09:00
Yukihiro "Matz" Matsumoto afcf7fc86d object.h: make GC color uint8_t that fits in 3 bits 2023-05-31 08:27:23 +09:00
Yukihiro "Matz" Matsumoto 8873229312 codedump.c: fix indentation of OP_SCLASS 2023-05-30 16:08:38 +09:00
Yukihiro "Matz" Matsumoto 6eedf1065d numeric.c (flo_idiv): add mrb_check_num_exact 2023-05-30 08:54:44 +09:00
Yukihiro "Matz" Matsumoto 795044f82c internal.h: add mrb_check_num_exact prototype to the header 2023-05-30 08:54:05 +09:00
Yukihiro "Matz" Matsumoto e84060a900 string.c: rename function str_check_too_big -> str_check_length 2023-05-30 08:40:16 +09:00
Yukihiro "Matz" Matsumoto f813b5d1d8 string.c (str_new): add string length check 2023-05-29 23:18:44 +09:00
Yukihiro "Matz" Matsumoto aecaaf011f string.c (mrb_str_resize): refactor string length check 2023-05-29 23:18:19 +09:00
Yukihiro "Matz" Matsumoto 0a6e1c0ffe class.c (copy_class): copy source flags as well (except frozen flag) 2023-05-29 22:59:05 +09:00
Yukihiro "Matz" Matsumoto c0c4219b25 class.c (copy_class): avoid copying method table in some cases
To prevent memory leaks
2023-05-29 22:57:59 +09:00
Yukihiro "Matz" Matsumoto bba2fd84ea class.h: instance type should occupy 5 bits in flags 2023-05-29 09:27:08 +09:00
Yukihiro "Matz" Matsumoto e4e3740688 class.c (init_copy): add an assertion 2023-05-29 09:26:45 +09:00
Yukihiro "Matz" Matsumoto a02894afa3 small cosmetic changes 2023-05-29 09:26:45 +09:00
Yukihiro "Matz" Matsumoto 0ffe9b987a class.c (mrb_prepend_module): c should not be MRB_TT_ICLASS 2023-05-29 09:26:44 +09:00
Yukihiro "Matz" Matsumoto 6ac10a01e4 Merge pull request #6014 from dearblue/setup_debug.1
Fixed visibility of `MRuby::Command::Compiler#setup_debug`
2023-05-29 09:26:32 +09:00
dearblue a7bee69452 Fixed visibility of MRuby::Command::Compiler#setup_debug
In #5977 it was incorrectly set to `private`.
2023-05-26 21:37:29 +09:00
Yukihiro "Matz" Matsumoto 7f887f1928 class.c (mrb_class_initialize): check duplicated initialization 2023-05-26 12:48:34 +09:00
Yukihiro "Matz" Matsumoto 8914c2318c Merge pull request #6013 from CaptainJet/master
Fix Android toolchain
2023-05-26 12:47:08 +09:00
Robert Rowe fb727a169f Spacing fix 2023-05-25 19:47:32 -07:00
Robert Rowe bcb5674676 Update Android building
New minimum SDK. NDK longer supports mips, plain armeabi, nor GCC. Fix tooling.
2023-05-25 19:45:14 -07:00
Yukihiro "Matz" Matsumoto 2ad3f0e34b vm.c (mrb_yield_with_class): keep mid of the callee
Otherwise `super` from within blocks may call wrong methods.
2023-05-26 11:17:51 +09:00
Yukihiro "Matz" Matsumoto 9040baa270 vm.c (mrb_yield_with_class): avoid redundant initialization of mid 2023-05-26 11:14:58 +09:00
Yukihiro "Matz" Matsumoto 2b3ecef66c mruby-data/data.c: use mrb_ary_ref instead of direct memory access
Avoid out-of-bound memory access when actual data object size is smaller
than the number of data members.
2023-05-25 09:05:03 +09:00
Yukihiro "Matz" Matsumoto 9bc9ff771d mruby-data/data.c (mrb_data_s_def): simplify the code 2023-05-25 09:05:03 +09:00
Yukihiro "Matz" Matsumoto 05f4831751 mruby-data/data.c (mrb_data_s_def): add member duplication check 2023-05-25 09:05:03 +09:00
Yukihiro "Matz" Matsumoto eeab289f87 mruby-data/data.c (mrb_data_ref): avoid out-of-bound access 2023-05-25 09:05:02 +09:00
Yukihiro "Matz" Matsumoto de69190df5 mruby-struct/struct.c: need to copy the argument array
Just in case for stack reallocations.
2023-05-25 09:05:02 +09:00
Yukihiro "Matz" Matsumoto e05ac91217 mruby-struct/struct.c: update the behavior when actual size differs
Assertions may be false and terminate the whole process when actual size
for struct objects are different.
2023-05-25 09:05:02 +09:00
Yukihiro "Matz" Matsumoto f50e40f291 mruby-struct/struct.c: use mrb_ary_set to simplify the code
We don't need to do `mrb_struct_modify()` and calling write barriers by
ourselves for the small performance issue.
2023-05-25 09:05:02 +09:00
Yukihiro "Matz" Matsumoto 0295e6a688 mruby-struct/struct.c (struct_aref_int): update index check
Check should use the number of members, not the actual size of the
struct object, which may be smaller than the declared size.
2023-05-25 08:40:46 +09:00
Yukihiro "Matz" Matsumoto 8e579e6552 mruby-data/data.c (mrb_data_ref): check if reader has no argument 2023-05-24 22:45:35 +09:00
Yukihiro "Matz" Matsumoto ed5fbb5d63 mruby-struct.c (mrb_struct_s_def): check duplicate members 2023-05-24 22:43:09 +09:00
Yukihiro "Matz" Matsumoto f80192e8ac mruby-struct/struct.c (struct_s_member): avoid break
Direct `return` is more readable, IMO.
2023-05-24 17:59:32 +09:00
Yukihiro "Matz" Matsumoto c2f3f103bb mruby-struct/struct.c (mrb_struct_ref): update the function
- use `num_members`
- ensure the function takes no argument
- avoid out-of-bound access when struct is failed to initialize
2023-05-24 17:53:41 +09:00
Yukihiro "Matz" Matsumoto 69d33de527 mruby-struct/struct.c (num_members): simplify the code by new argument 2023-05-24 17:51:44 +09:00
Yukihiro "Matz" Matsumoto 52fb2f59d8 mruby-struct/struct.c (struct_aref_sym): simplify the logic 2023-05-24 17:51:03 +09:00
Yukihiro "Matz" Matsumoto 7b7ea70b84 mruby-struct/struct.c (mrb_struct_to_h): RSTRUCT_PTR() may be NULL
Especially when you define a member named `initialize`.
2023-05-24 17:48:51 +09:00
Yukihiro "Matz" Matsumoto 53de96426a mruby-io/io.c (io_init): File.new should not take blocks 2023-05-23 15:34:37 +09:00
Yukihiro "Matz" Matsumoto 67187881c2 mruby-io/io.c (io_init_copy): copy flags before io_buf_init() 2023-05-23 15:17:13 +09:00
Yukihiro "Matz" Matsumoto 8f745b7728 vm.c (OP_ENTER): fix issues by unreferenced kdict and blk
There's short a period where kdict and blk are not pointed from the stack.
2023-05-23 14:54:36 +09:00
Yukihiro "Matz" Matsumoto 2f7f797473 remove extra spaces before ; 2023-05-22 12:05:35 +09:00
Yukihiro "Matz" Matsumoto 6a6c0869dc add a space between for and ( 2023-05-22 11:58:23 +09:00
Yukihiro "Matz" Matsumoto f1a3cfbd3b add a space between if and ( 2023-05-22 11:55:21 +09:00
Yukihiro "Matz" Matsumoto c32f7915fb reformat else clause indentation style 2023-05-20 00:21:01 +09:00
Yukihiro "Matz" Matsumoto eea72ec84a fix spaces in the type cast expressions (cosmetic changes) 2023-05-18 23:29:16 +09:00
Yukihiro "Matz" Matsumoto cead78b394 variable.c (iv_rehash): fixed removed check
This check removed in 70cc2cc was necessary.
2023-05-17 09:52:00 +09:00
Yukihiro "Matz" Matsumoto 49927a7035 mruby-biding/binding.c: unify get_line and get_filename 2023-05-16 23:40:53 +09:00
Yukihiro "Matz" Matsumoto 15be2a24c3 mruby-proc-ext/proc.c: unify get_line and get_filename 2023-05-16 23:39:51 +09:00
Yukihiro "Matz" Matsumoto 5ead26be3d vm.c (ci_bidx): inline the function if possible 2023-05-16 22:41:32 +09:00
Yukihiro "Matz" Matsumoto b10c99bb1b Merge pull request #6012 from sinisterchipmunk/allow-to-skip-tests-for-specific-mgems
Allow tests to be disabled for specific gems; warn about disabled tests
2023-05-16 14:36:40 +09:00
Colin MacKenzie IV 1a0c31130c Allow tests to be disabled for specific gems; warn about disabled tests 2023-05-15 12:43:37 -04:00
Yukihiro "Matz" Matsumoto 33bd6caf31 Merge pull request #6011 from dearblue/presym-escape
Encode and decode escape characters for presym
2023-05-15 00:15:40 +09:00
dearblue 03a42b52ee Encode and decode escape characters for presym
The purpose is to deal with `$"`, which has been treated as three characters including the escape character.
2023-05-14 17:54:13 +09:00
Yukihiro "Matz" Matsumoto cd276715f8 variable.c: move inline function before usage 2023-05-13 22:52:39 +09:00
Yukihiro "Matz" Matsumoto f210d3b106 Merge pull request #6010 from jbampton/add-hook-markdown-link-check 2023-05-12 23:31:34 +09:00
John Bampton ac0e157b89 pre-commit: add hook markdown-link-check
https://github.com/tcort/markdown-link-check
2023-05-11 12:37:38 +10:00
John Bampton de0779d6ca docs: fix links in Markdown 2023-05-11 12:34:59 +10:00
Yukihiro "Matz" Matsumoto 3d5cc1ab8f Merge pull request #6007 from dearblue/define_installer
Correct the `MRuby::Build#define_installer`
2023-05-10 23:54:27 +09:00
Yukihiro "Matz" Matsumoto 2217201603 Merge pull request #6006 from dearblue/mrbc-final_mrbgems
Remove `mrb_final_mrbgems()` in `mrbc.c`
2023-05-09 14:46:51 +09:00
Yukihiro "Matz" Matsumoto 568a7edf1f Merge pull request #6004 from jbampton/add-info-links-to-workflows
yml: document `workflows` with links as comments
2023-05-09 14:45:48 +09:00
Yukihiro "Matz" Matsumoto feb07d1d1a Merge pull request #6002 from jbampton/standardize-whitespace-spec-authors
mrbgems: standardize `spec.authors` for whitespace and author name
2023-05-08 17:01:23 +09:00
Yukihiro "Matz" Matsumoto d3f030f02a Merge pull request #5999 from alpha-netzilla/fix_poppen_mode
lib/mruby/build/command.rb: narrow down poppen mode
2023-05-08 17:00:28 +09:00
Yukihiro "Matz" Matsumoto e545ec3810 Merge pull request #6001 from jbampton/update-docs
docs: fix links, grammar and spelling in Markdown
2023-05-08 17:00:03 +09:00
Yukihiro "Matz" Matsumoto 599982454e Merge pull request #6008 from dearblue/bintest-dirfree 2023-05-07 19:10:59 +09:00
Yukihiro "Matz" Matsumoto 727d83c118 Merge pull request #6009 from dearblue/ghost-bintest
Avoid adding `<MRUBY_ROOT>/bintest` which does not exist
2023-05-06 22:28:41 +09:00
dearblue 5a4c319dd8 Avoid adding <MRUBY_ROOT>/bintest which does not exist
The `<MRUBY_ROOT>/bintest` directory does not exist in current mruby.
2023-05-06 22:08:48 +09:00
dearblue eb4c7d0edf Make "bintest" independent of directory
Previously, "bintest" would fail to run unless `MRUBY_ROOT` and `Dir.pwd` were the same.
2023-05-06 22:00:57 +09:00
dearblue 44f9fa1b61 Correct the MRuby::Build#define_installer
This is a complement to #5928.
The previous PR had the following problem:

  - The `<INSTALL_DIR>/bin/*` file could not be replaced if the destination of the symbolic link was lost.
  - The wrong link destination was written if `MRuby::Build.install_dir` was a relative path.
2023-05-06 21:54:49 +09:00
dearblue e570ca82a8 Remove mrb_final_mrbgems() in mrbc.c
The current `mrb_final_mrbgems()` function is only referenced in the `mrbgem/gem_init.c` file.

Also, the definition in that file makes it a static function.
2023-05-06 21:07:08 +09:00
John Bampton 04a120f7c2 yml: document workflows with links as comments 2023-05-06 08:31:20 +10:00
Yukihiro "Matz" Matsumoto 9033191efa Merge pull request #6003 from jbampton/label-more-files
`.github/labeler.yml`: label more files for `doc`
2023-05-06 06:43:53 +09:00
John Bampton 5fab261d8a .github/labeler.yml: label more files for doc 2023-05-06 07:19:46 +10:00
John Bampton 63e170170e mrbgems: standardize spec.authors for whitespace and author name 2023-05-06 06:06:29 +10:00
John Bampton db3774ea45 docs: fix links, grammar and spelling in Markdown 2023-05-06 04:43:50 +10:00
John Bampton d63115a0f1 docker: use less image layers and update compose version
https://stackoverflow.com/questions/30256386/how-to-copy-multiple-files-in-one-layer-using-a-dockerfile

https://docs.docker.com/compose/compose-file/compose-file-v3/
2023-05-06 01:46:51 +10:00
Yukihiro "Matz" Matsumoto 9b4046f479 Merge pull request #5961 from jbampton/add-docker
Add `Docker` to build and run all `mruby` tests. Run `pre-commit` and generate `YARD` docs with Docker
2023-05-05 22:42:33 +09:00
alpha.netzilla 3409c1f309 lib/mruby/build/command.rb: narrow down poppen mode 2023-05-05 19:23:18 +09:00
Yukihiro "Matz" Matsumoto 28a29c6da1 Merge pull request #5997 from jbampton/pre-commit-autoupdate
Run `rake checkupdate` -> `pre-commit autoupdate`
2023-05-04 08:36:36 +09:00
Yukihiro "Matz" Matsumoto ab0f2297ab Merge pull request #5996 from jbampton/fix-case-of-mruby
Change `MRuby` to `mruby`
2023-05-04 08:34:46 +09:00
John Bampton be722da0d1 pre-commit autoupdate
Run `rake checkupdate`
2023-05-03 22:49:34 +10:00
John Bampton 12f64cc6d9 Update codespell.txt. Disable markdownlint rule MD052 2023-05-03 22:44:58 +10:00
John Bampton 06a765a1c2 Change MRuby to mruby 2023-05-03 22:12:59 +10:00
Yukihiro "Matz" Matsumoto 5956496267 lib/mruby/build/command.rb: remove unnecessary block parameter; fix #5995 2023-05-03 12:41:52 +09:00
Yukihiro "Matz" Matsumoto 077d8ad514 symbol.c (sym_intern): check NUL before calling strlen()
To avoid accidental buffer overrun if a string without NUL termination
is provided.
2023-05-02 09:45:47 +09:00
Yukihiro "Matz" Matsumoto 19b2c1c73d symbol.c: remove unused macro 2023-05-02 09:45:23 +09:00
Yukihiro "Matz" Matsumoto 7fd3108201 README.md: update English description (used ChatGPT) 2023-05-02 09:44:49 +09:00
Yukihiro "Matz" Matsumoto 7154526c04 Merge pull request #5994 from masahino/fix_typo_in_io_c
fix typo in mrbgems/mruby-io/src/io.c
2023-05-02 09:44:13 +09:00
masahino ad318e55c0 fix typo MRB_NO_IO_POEPN -> MRB_NO_IO_POPEN 2023-05-02 07:34:30 +09:00
Yukihiro "Matz" Matsumoto b488f197c5 Merge pull request #5992 from dearblue/doc/directory
Replace "folder" with "directory" for consistency
2023-04-30 23:19:40 +09:00
Yukihiro "Matz" Matsumoto abd1222089 class.h (mrb_class): treat immediate values first 2023-04-30 23:19:00 +09:00
dearblue 5c19b259e4 Replace "folder" with "directory" for consistency
Also, use "x/y/z directory" instead of "directory x/y/z" if there is no problem.
2023-04-30 18:32:54 +09:00
Yukihiro "Matz" Matsumoto 70cc2cc173 variable.c (iv_rehash): remove unnecessary checks 2023-04-29 23:17:08 +09:00
Yukihiro "Matz" Matsumoto 5024c3453d variable.c (iv_put): remove NULL check since t must not be NULL 2023-04-27 17:14:48 +09:00
Yukihiro "Matz" Matsumoto 68d67aee0e mruby-io/io.c: need to adjust buffer limit before searching; fix #5991 2023-04-26 09:09:05 +09:00
Yukihiro "Matz" Matsumoto 01e5f2a3c8 mruby-io/io.c: fix indent 2023-04-25 23:27:59 +09:00
Yukihiro "Matz" Matsumoto 9a5a9b814f mruby-catch/catch.c: remove mrb_ prefix from a static function 2023-04-25 23:27:30 +09:00
Yukihiro "Matz" Matsumoto e0194bba67 mruby-string-ext/string.c: remove mrb_ prefix from static functions 2023-04-25 14:25:15 +09:00
Yukihiro "Matz" Matsumoto 62e8f047b9 mruby-sleep/sleep.c: remove mrb_ prefix from static functions 2023-04-24 12:19:12 +09:00
Yukihiro "Matz" Matsumoto f116808d80 Merge pull request #5435 from jbampton/add-github-pr-labeler
Add the pull request labeler Action
2023-04-23 23:50:06 +09:00
Yukihiro "Matz" Matsumoto 49b887d75f mruby-object-ext/object.c: remove mrb_ prefix from static functions 2023-04-20 22:40:10 +09:00
Yukihiro "Matz" Matsumoto 2810491587 mruby-class-ext/class.c: remove mrb_ prefix from static functions 2023-04-19 00:12:28 +09:00
Yukihiro "Matz" Matsumoto c1010624a4 Merge pull request #5989 from dearblue/integrate-eval
Integrate `mruby-binding-eval` into `mruby-eval`
2023-04-19 00:06:13 +09:00
Yukihiro "Matz" Matsumoto ac7e63ab3b Merge pull request #5986 from dearblue/bytesplice
Fix bugs in `String#bytesplice`
2023-04-17 07:17:00 +09:00
Yukihiro "Matz" Matsumoto ceabb9cac8 Merge pull request #5988 from dearblue/int-inv
Returns the value of `Integer#~` from `mrb_bint_rev()`
2023-04-16 23:55:51 +09:00
dearblue 0e00d8e224 Integrate mruby-binding-eval into mruby-eval
Currently mruby-eval depends on mruby-binding (formerly mruby-binding-core).
Also, `Kernel#eval` can accept `binding` objects.
With this in mind, it would be better if `Binding#eval` could also be handled by `mrbgems/mruby-eval`.
2023-04-16 21:44:00 +09:00
Yukihiro "Matz" Matsumoto a959ce5755 Merge pull request #5985 from dearblue/sign-extension
Sign extension with `OP_LOADI32` in `get_int_operand()`
2023-04-15 23:25:07 +09:00
dearblue 0279067dc4 Returns the value of Integer#~ from mrb_bint_rev()
fixed #5987
2023-04-15 22:39:05 +09:00
dearblue 8665f88791 Allow an empty string for String#bytesplice 2023-04-15 21:26:01 +09:00
dearblue 59931e95c4 Prohibit string lengths less than 0 in String#bytesplice 2023-04-15 21:26:00 +09:00
dearblue 5bc3a48ecb Handling negative indices in String#bytesplice 2023-04-15 21:25:59 +09:00
dearblue dcced0016c Countermeasure to overflow for String#bytesplice 2023-04-15 21:25:58 +09:00
dearblue 73b6c6619c Need type check for replace by String#bytesplice 2023-04-15 21:25:57 +09:00
dearblue 2e9ac8f448 Returns self for String#bytesplice 2023-04-15 21:25:56 +09:00
dearblue c981e151ae Sign extension with OP_LOADI32 in get_int_operand()
Previously, the following code did not give the expected result.

```
% bin/mruby -e 'p "%08X" % ~(-1 << 16)'
"..F0000FFFF"

% ruby32 -e 'p "%08X" % ~(-1 << 24)'
"00FFFFFF"
```

For information: this problem arises in the process of folding numbers through optimisation.
2023-04-15 20:52:43 +09:00
Yukihiro "Matz" Matsumoto 836bebc708 mruby-compar-ext/compar.rb: Comparable#clamp to accept nil as arguments 2023-04-14 01:06:29 +09:00
Yukihiro "Matz" Matsumoto 68c58eac91 Merge pull request #5981 from dearblue/binding-only-ruby
`Kernel#binding` responds only to calls from Ruby
2023-04-14 01:06:16 +09:00
Yukihiro "Matz" Matsumoto c80db85ed5 Merge pull request #5980 from dearblue/binding-noise
Remove noise in new `mruby-binding`
2023-04-14 01:05:05 +09:00
Yukihiro "Matz" Matsumoto 4f125a3f19 mruby-struct/struct.c: allow struct size differ from members
The situation may be caused by `Struct.new(...).alloc` etc.
2023-04-13 07:39:05 +09:00
Yukihiro "Matz" Matsumoto 8af45425d0 mruby-struct/struct.c: Struct.new should take 1+ arguments 2023-04-13 07:39:05 +09:00
Yukihiro "Matz" Matsumoto bb7b4b67ae mruby-struct/struct.c (struct_corrupted): fix error message 2023-04-13 07:39:05 +09:00
Yukihiro "Matz" Matsumoto a7c96edf6f mruby-struct/struct.c: prohibit Struct.allocate; ref #5979 2023-04-13 07:39:05 +09:00
Yukihiro "Matz" Matsumoto 9822c843e9 mruby-array-ext/array.c: remove mrb_ prefix from static functions 2023-04-13 07:39:05 +09:00
John Bampton 00d43ad960 Add Docker to build and run all mruby tests
Run `pre-commit` and  generate `YARD` docs with Docker

Update CONTRIBUTING
2023-04-13 00:12:32 +10:00
John Bampton 976ec87100 Add the pull request labeler Action
https://github.com/actions/labeler
https://github.com/marketplace/actions/labeler

Verified Action

Update labeler.yml
2023-04-12 19:25:51 +10:00
Yukihiro "Matz" Matsumoto 8d014e9f43 Merge pull request #5984 from mruby/dependabot/github_actions/github/super-linter-5.0.0
build(deps): bump github/super-linter from 4.10.1 to 5.0.0
2023-04-12 09:12:00 +09:00
dependabot[bot] 71e78428ea build(deps): bump github/super-linter from 4.10.1 to 5.0.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.10.1 to 5.0.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.10.1...v5.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-11 14:57:54 +00:00
Yukihiro "Matz" Matsumoto 0df3e68a5d Merge pull request #5979 from dearblue/allocate-undef
Allow `Class#allocate` to be prohibited
2023-04-10 10:45:00 +09:00
dearblue 5cb2764279 Kernel#binding responds only to calls from Ruby
This follows the behavior changed in CRuby 3.2.
2023-04-09 21:15:13 +09:00
dearblue 93e07eec1c Remove noise in new mruby-binding
`Binding#eval` should not be defined in `mruby-binding`.
2023-04-09 21:14:33 +09:00
dearblue d3128ce58a Allow Class#allocate to be prohibited
Calling `Class#allocate` with `UnboundMethod#bind_call` usually succeeds without problems.
If this behavior does not make us happy, we can now prohibit it with `MRB_SET_INSTANCE_TT(klass, MRB_TT_UNDEF)`.

At the same time, it applies to the `Binding`, `Complex`, `Data`, `Float`, `Integer`, `Method`, `Rational` and `UnboundMethod` classes.
2023-04-09 21:14:07 +09:00
Yukihiro "Matz" Matsumoto c3ba76794f Merge pull request #5977 from dearblue/setup_debug
Make `MRuby::Build#enable_debug` compiler flag setting abstract
2023-04-09 15:51:44 +09:00
dearblue 0f2c1caa96 Make MRuby::Build#enable_debug compiler flag setting abstract
Previously, compiler flags were only added for GCC or similar.
The situation has not changed, but it has become easier to improve.

I expect `MRuby::Command::Compiler#setup_debug` to be defined as a singleton method inside the block given to `MRuby::Toolchain.new`.
2023-04-09 11:21:50 +09:00
Yukihiro "Matz" Matsumoto 64536b866b string.c (str_escape): simplify the logic 2023-04-07 13:53:19 +09:00
Yukihiro "Matz" Matsumoto d0653ca908 cdump.c: escape filename debug information; fix #5974
Windows path separator is "\" so that it needs to be escaped.
2023-04-07 13:51:59 +09:00
Yukihiro "Matz" Matsumoto 27a14f0a9a vm.c (OP_CMP): fixed wrong numeric comparison for integers; fix #5975
MRB_TT_INTEGER value may not be fixnum (immediate integer), so we should
not use mrb_fixnum() here.
2023-04-07 10:46:01 +09:00
Yukihiro "Matz" Matsumoto 761816bf8a fmt_fp.c (mrb_format_float): change else indentation style 2023-04-06 16:49:08 +09:00
Yukihiro "Matz" Matsumoto 956d0c5127 fmt_fp.c (mrb_format_float): set minimum precision 1 for "%e" 2023-04-06 16:47:43 +09:00
Yukihiro "Matz" Matsumoto 31c99eb99b debug.c (mrb_debug_get_position): do not keep lp and fp uninitialized 2023-04-06 15:47:24 +09:00
Yukihiro "Matz" Matsumoto ce86040a0f Merge pull request #5973 from dearblue/envadjust
Small improvements to `envadjust()`
2023-04-06 10:48:49 +09:00
Yukihiro "Matz" Matsumoto 9e4b3af553 Merge pull request #5972 from dearblue/simple-mrb_top_run
Simplify `mrb_top_run()`
2023-04-06 10:46:56 +09:00
Yukihiro "Matz" Matsumoto b4d7b269b0 Merge pull request #5971 from dearblue/simple-raise.2
Remove unnecessary branches in `L_RAISE` block
2023-04-06 10:46:02 +09:00
dearblue 17abe548a7 Small improvements to envadjust()
- Calculate the difference between `oldbase` and `newbase` only once outside the loop.
  - To make sure they are within range, the comparison is done only once instead of twice.
2023-04-05 22:29:27 +09:00
dearblue b90f59d36e Simplify mrb_top_run() 2023-04-05 22:11:36 +09:00
dearblue b46a852acb Remove unnecessary branches in L_RAISE block
The previous `while` loop ends if the catch handler pointer `ch` is not `NULL`.

Supplement to #5843.
2023-04-05 21:52:21 +09:00
Yukihiro "Matz" Matsumoto 35a3bab369 Merge pull request #5966 from jbampton/add-mruby-debugger
Update `default.gembox` add mruby debugger `mrdb`
2023-04-05 15:11:29 +09:00
Yukihiro "Matz" Matsumoto 8e9da2130f Merge pull request #5968 from jbampton/add-mruby-logo-to-readme
Add `mruby` logo to the README
2023-04-05 15:10:26 +09:00
Yukihiro "Matz" Matsumoto 730cbe7c0c Merge pull request #5969 from jbampton/docs-fix-grammar
Fix grammar in `mruby-YOUR-bigint/TODO-HINT.md`
2023-04-05 15:08:44 +09:00
Yukihiro "Matz" Matsumoto 19a2145204 Merge pull request #5970 from jbampton/fix-spelling-of-homepage
`README.md` fix spelling: `home-page` -> `homepage`
2023-04-05 15:07:44 +09:00
John Bampton 6467488854 Add mruby logo to the README
Center logo, mruby title and linter badge

Fix for YARD and Doxygen output
2023-04-05 15:53:02 +10:00
John Bampton e9756c77ea README.md fix spelling: home-page -> homepage
https://en.wikipedia.org/wiki/Home_page
2023-04-05 13:39:41 +10:00
John Bampton ebdb03b4d4 Fix grammar in mruby-YOUR-bigint/TODO-HINT.md 2023-04-05 11:26:05 +10:00
Yukihiro "Matz" Matsumoto 8171edc4eb Merge pull request #5967 from jbampton/sort-gitignore
Sort and remove blank lines from `.gitignore`
2023-04-05 08:05:45 +09:00
John Bampton 076520cac1 Sort and remove blank lines from .gitignore 2023-04-05 03:49:49 +10:00
Yukihiro "Matz" Matsumoto 90e3022936 Merge pull request #5965 from jbampton/fix-word-case-yard
Fix word case: `yard` -> `YARD`
2023-04-04 23:12:48 +09:00
John Bampton b486a3c425 Update default.gembox add mruby debugger mrbd 2023-04-04 19:31:42 +10:00
John Bampton 7082e95fa2 Fix word case: yard -> YARD
https://yardoc.org/
2023-04-04 18:20:52 +10:00
Yukihiro "Matz" Matsumoto b44d757b8c Merge pull request #5962 from jbampton/code-blocks-add-languages
docs: add language `console` to code blocks
2023-04-04 12:09:54 +09:00
Yukihiro "Matz" Matsumoto 76df8d737d Merge pull request #5960 from dearblue/gem-init-final.2
Shrink `<BUILD-DIR>/mrbgems/gem_init.c` if possible
2023-04-04 11:30:21 +09:00
Yukihiro "Matz" Matsumoto 5265e35ad2 mruby-time/time.c: remove mrb_ prefix from static functions 2023-04-03 08:58:33 +09:00
Yukihiro "Matz" Matsumoto 3d2cf0d9bf mruby-bigint/bigint.c: fix int64/uint64 conversion
The functions were totally wrong in digit order and sign treatment. We
didn't notice since they are only called from mruby-time in the m64-i32
configuration.
2023-04-03 08:55:48 +09:00
Yukihiro "Matz" Matsumoto 65897145aa mruby-time/time.c (mrb_to_time_t): should always initialize usec 2023-04-03 08:46:30 +09:00
Yukihiro "Matz" Matsumoto 875e0b0b59 mruby-time/time.c (time_value_from_time_t): should raise exception
When time_t does not fit in mrb_int; ref #5958
2023-04-03 08:38:52 +09:00
Yukihiro "Matz" Matsumoto dd453080e0 Merge pull request #5958 from dearblue/fixable_time_t_p
Need `fixable_time_t_p()` always
2023-04-03 07:34:11 +09:00
John Bampton f0d6674352 docs: add language console to code blocks
https://github.com/github/linguist/blob/79c4aa4706e08f9eb36e46535f0e909f51f3b74d/lib/linguist/languages.yml#L6392
2023-04-03 08:28:59 +10:00
dearblue 73b2e0bf76 Shrink <BUILD-DIR>/mrbgems/gem_init.c if possible
If none of the GEMs have `mrblib/` or `src/` directories, generate `mrb_init_mrbgems()` which does nothing, and omit `mrb_final_mrbgems()`.

The impetus was to avoid `gem_funcs[]` becoming a zero-length array, which is not allowed by the C standard.
The problem is caused by #5938.
2023-04-02 20:28:14 +09:00
Yukihiro "Matz" Matsumoto c6e7dfe9e5 Merge pull request #5959 from dearblue/mruby-strip
Need a dependency to `mruby-compiler` for `mruby-bin-strip`
2023-04-02 08:58:58 +09:00
dearblue 96190dba59 Need a dependency to mruby-compiler for mruby-bin-strip
It uses `mrb_irep_remove_lv()` defined in `mrbgems/mruby-compiler/core/codegen.c`.
2023-04-01 23:32:36 +09:00
dearblue bcce4b7141 Need fixable_time_t_p() always 2023-04-01 23:22:08 +09:00
Yukihiro "Matz" Matsumoto 2de602b869 mruby-eval: add dependency to mruby-binding 2023-04-01 10:37:56 +09:00
Yukihiro "Matz" Matsumoto eaaa474630 mruby-method/method.c: fix proc comparison for uncovered case 2023-04-01 10:37:16 +09:00
Yukihiro "Matz" Matsumoto a3fc6ae53c mruby-proc-ext/proc.c: use mrb_debug_get_position() 2023-04-01 10:37:15 +09:00
Yukihiro "Matz" Matsumoto 6629112291 Merge pull request #5957 from jbampton/clean-up-doc-limitations-md
doc/limitations.md: remove whitespace, add code block languages
2023-04-01 10:37:08 +09:00
John Bampton e76525568a doc/limitations.md: remove whitespace, add code block languages 2023-04-01 07:52:29 +10:00
Yukihiro "Matz" Matsumoto 58a83f3b9a codeql-analysis.yml: stop running codeql workflow 2023-03-31 09:43:30 +09:00
Yukihiro "Matz" Matsumoto 85aefa8992 Merge pull request #5955 from LanzaSchneider/master
fix: wrong comment for ```mrb_debug_get_filename```
2023-03-31 08:27:27 +09:00
Yukihiro "Matz" Matsumoto d482eabfa2 mruby-bigint/bigint.c: int.pow(n,m) to take bigint as exponential 2023-03-31 08:26:47 +09:00
Yukihiro "Matz" Matsumoto 62c52d5a28 mruby-bigint/bigint.c: remove unreachable line 2023-03-30 08:18:27 +09:00
Yukihiro "Matz" Matsumoto 35cedfb400 mruby-numeric-ext/numeric.c: Integer#pow fix for 2nd argument type
`int.pow()` takes 2nd argument only if 1st argument is an integer.
2023-03-30 08:18:27 +09:00
Lanza 01b03d852f fix: wrong comment for ``mrb_debug_get_filename`` 2023-03-30 06:57:33 +08:00
Yukihiro "Matz" Matsumoto f1568af0d2 gc.c: fix GC regressions
The past fix was wrong.
2023-03-29 08:46:10 +09:00
Yukihiro "Matz" Matsumoto 1f5a4d5386 mruby-method/method.c (method_eql): simplify the logic 2023-03-27 19:21:40 +09:00
Yukihiro "Matz" Matsumoto 553f9ba802 mruby-method/method.c (method_eql): use mrb_proc_eql 2023-03-27 19:15:03 +09:00
Yukihiro "Matz" Matsumoto fbb3a2426f proc.c (mrb_proc_eql): define == and eql? for Proc class 2023-03-27 19:14:21 +09:00
Yukihiro "Matz" Matsumoto ddb2240b5e proc.c: update ISO section numbers for methods 2023-03-27 11:39:58 +09:00
Yukihiro "Matz" Matsumoto b885d7387d proc.c: no need to define Proc.lambda
Since Kernel is an ancestor of Kernel module itself recursively.
2023-03-27 11:33:13 +09:00
Yukihiro "Matz" Matsumoto 0f63551def mruby-method/method.c (method_p): stricter method type check 2023-03-27 11:32:15 +09:00
Yukihiro "Matz" Matsumoto f4cff664e6 mruby-proc-ext/proc.c: no need to define Kernel.proc
Since Kernel is an ancestor of Kernel module itself recursively.
2023-03-27 00:18:57 +09:00
Yukihiro "Matz" Matsumoto 3e7ced5d63 mruby-proc-ext/proc.c: remove prefix from static functions 2023-03-27 00:12:18 +09:00
Yukihiro "Matz" Matsumoto 0bbfec3e8b mruby-eval: use functions from mruby-binding to simplify the code 2023-03-25 19:12:46 +09:00
Yukihiro "Matz" Matsumoto 11af5db1c3 mruby-binding: renamed from mruby-binding-core
The dependency is now:

mruby-binding-eval:

  - mruby-binding
  - mruby-eval

mruby-proc-binding:

  - mruby-binding

mruby-eval:

  - mruby-binding [new]
2023-03-24 12:25:57 +09:00
Yukihiro "Matz" Matsumoto 3ef41672ab mruby-biding-eval: move essential part of the gem to mruby-eval
This change makes mruby-binding-eval gem nearly empty, but needed to
make `eval(str, binding)` works as well as `binding.eval(str)`.
2023-03-24 07:33:13 +09:00
Yukihiro "Matz" Matsumoto 910afdc691 mruby-binding-eval: modify struct initialization 2023-03-23 22:10:20 +09:00
Yukihiro "Matz" Matsumoto 5914d9e9d4 mruby-binding-eval: remove unused members from binding_eval_prepar_body 2023-03-23 16:16:52 +09:00
Yukihiro "Matz" Matsumoto bf9a2501d1 mruby-binding-eval: move non raising code to the parent function 2023-03-22 23:22:45 +09:00
Yukihiro "Matz" Matsumoto bdbc613ccb parse.y (mrbc_filename): should not raise exceptions 2023-03-22 17:33:49 +09:00
Yukihiro "Matz" Matsumoto feabcfe29e doc/limitations.md: remove an entry regarding binding
Since it's no longer a limitation.
2023-03-22 15:26:29 +09:00
Yukihiro "Matz" Matsumoto 501b22a2ac mruby-binding-eval: renamed from mruby-binding
Since this gem only provides `Binding#eval`.
2023-03-22 15:25:23 +09:00
Yukihiro "Matz" Matsumoto 979e8602dd mruby-binding-core: make mrb_binding_wrap_lvspace static 2023-03-21 16:18:15 +09:00
Yukihiro "Matz" Matsumoto 66ca9722b6 mruby-binding-core (mrb_binding_new): new function
Use this function instead of `mrb_binding_alloc` (removed).
2023-03-21 16:17:08 +09:00
Yukihiro "Matz" Matsumoto 88ae5e8cf8 mruby-binding-core: use mrb_binding_wrap_lvspace if possible 2023-03-21 16:10:15 +09:00
Yukihiro "Matz" Matsumoto 495845443c mruby-binding-core (mrb_binding_p) add new function 2023-03-21 16:10:15 +09:00
Yukihiro "Matz" Matsumoto 35e2779575 Small cosmetic changes (adjust indent, and remove extra space) 2023-03-21 16:10:15 +09:00
Yukihiro "Matz" Matsumoto 0c8404a3e2 mruby-binding: use C implementation of Kernel#eval directly 2023-03-21 16:10:15 +09:00
Yukihiro "Matz" Matsumoto 1c765dc37a Merge pull request #5902 from dearblue/threadedcode
Replace `MRB_NO_DIRECT_THREADING` with `MRB_USE_VM_SWITCH_DISPATCH`
2023-03-18 23:56:04 +09:00
dearblue f6c9191cd0 Replace MRB_NO_DIRECT_THREADING with MRB_USE_VM_SWITCH_DISPATCH
The correct technique now is "Token Threading".
However, the new name was chosen because it was felt that if a different technique was added in the future, there would be no need to replace it.
2023-03-18 17:39:41 +09:00
Yukihiro "Matz" Matsumoto db11e07497 Merge pull request #5951 from dearblue/mrb_yield
Safely retrieve `self` from proc in `mrb_yield()`
2023-03-17 22:54:05 +09:00
dearblue 2675477f07 Safely retrieve self from proc in mrb_yield()
Passing a proc generated by the following method to `mrb_yield()` or `mrb_yield_argv()` no longer causes `SIGSEGV`:

- C functions made into proc objects with `mrb_proc_new_cfunc()`.
- A proc object which is the top level of a program generated by `mrb_load_string_cxt()` etc. with `mrbc_context::no_exec` enabled.

See also: #5932
2023-03-17 21:20:48 +09:00
Yukihiro "Matz" Matsumoto 800cb15fc3 limitation.md: describe mruby limitation for keyword arguments; #5952 2023-03-17 18:58:04 +09:00
Yukihiro "Matz" Matsumoto de70014643 mruby-binding/binding.c: add comment for functions from outer gems 2023-03-16 19:02:23 +09:00
Yukihiro "Matz" Matsumoto 62a8ea7113 mruby-bigint/bigint.c: mrb_bint_add_d, mrb_bint_sub_d only take int
Where mrb_bint_add and mrb_bint_sub may take float numbers.
2023-03-15 19:09:02 +09:00
Yukihiro "Matz" Matsumoto 3f7ea47ec1 Merge pull request #5917 from jbampton/remove-super-linter-folder
Remove `super-linter.report` folder
2023-03-15 19:07:30 +09:00
Yukihiro "Matz" Matsumoto 4fc69ce3bc Revert "mruby/throw.h: do not use __builtin_setjmp for GCC; close #5950"
This reverts commit 9cf49d08b4.

This change caused flaky tests on MinGW. I now remember it was introduced
for MINGW64 to address #5133. Sorry.
2023-03-14 19:50:15 +09:00
Yukihiro "Matz" Matsumoto 0d07af104b internal.h: move function prototypes to <mruby/internal.h> 2023-03-14 11:06:44 +09:00
Yukihiro "Matz" Matsumoto 2d975d59ce Merge branch 'dearblue-binding.4' 2023-03-14 11:05:53 +09:00
Yukihiro "Matz" Matsumoto 6915e75207 Merge branch 'binding.4' of https://github.com/dearblue/mruby into dearblue-binding.4 2023-03-14 11:05:10 +09:00
Yukihiro "Matz" Matsumoto da2cfa62f4 AUTHORS: update entries [ci skip] 2023-03-13 19:01:32 +09:00
Yukihiro "Matz" Matsumoto 0906cd7593 numeric.c: fix rounding function issues with big numbers
- int_ceil
- int_floor
- int_round
- int_truncate
2023-03-13 18:53:17 +09:00
Yukihiro "Matz" Matsumoto 8d1192f8a2 gc.c (mrb_field_write_barrier): change the condition
Minor GC may be suspended with the MRB_GC_STATE_SWEEP.
2023-03-13 18:52:03 +09:00
Yukihiro "Matz" Matsumoto ccca6ec458 gc.c (clear_all_old): simplify the code
The function is called only with generational mode.
2023-03-13 18:50:51 +09:00
Yukihiro "Matz" Matsumoto 9a1e6760a8 mruby-bigint: add new functions mrb_bint_add_d, mrb_bint_sub_d
Those functions do not normalize the return value to avoid repeated
conversions between Bigints and (small) Integers.
2023-03-13 16:07:17 +09:00
Yukihiro "Matz" Matsumoto f7cbb319cb mruby-bigint: remove unused mrb_bint_div_ii() function 2023-03-13 08:10:41 +09:00
Yukihiro "Matz" Matsumoto 33320b08bb mruby-data: fix uninitialized variable error 2023-03-13 08:09:26 +09:00
Yukihiro "Matz" Matsumoto 7327ca898c mruby-struct: fix uninitialized variable error 2023-03-13 08:08:30 +09:00
Yukihiro "Matz" Matsumoto dd0a9e8970 mruby-bigint/bigint.c: remove a condition to stop warnings 2023-03-13 08:06:41 +09:00
Yukihiro "Matz" Matsumoto 9cf49d08b4 mruby/throw.h: do not use __builtin_setjmp for GCC; close #5950
https://gcc.gnu.org/onlinedocs/gcc/Nonlocal-Gotos.html
2023-03-13 08:05:55 +09:00
Yukihiro "Matz" Matsumoto 924d605712 vm.c: remove redundant assignment (already done in cipush) 2023-03-13 08:05:55 +09:00
Yukihiro "Matz" Matsumoto 0edb616f51 gc.c: remove time profiling code for debugging 2023-03-13 08:05:54 +09:00
Yukihiro "Matz" Matsumoto a8d840da19 Merge pull request #5928 from dearblue/task/install
Improved `rake install`
2023-03-13 08:05:20 +09:00
Yukihiro "Matz" Matsumoto 938ad70e1e Merge pull request #5938 from dearblue/reorganize-gem-init-final
Reorganize gem init final
2023-03-13 07:52:20 +09:00
dearblue 1432baec1d Perform chores with mrb_final_mrbgems() function
The main purpose is to ignore exceptions raised by the GEMS finalizer.
2023-03-12 14:31:10 +09:00
dearblue c474ae8cc4 Perform chores with mrb_init_mrbgems() function
Make the `mrb_init_mrbgems()` function do the cleanup and error handling.
Instead, simplify processing in the `GENERATED_TMP_mrb_XXX_gem_init()` function.

Previously, `mrb_load_irep()` or `mrb_load_proc()` would kill the process when an exception occurred.
With this patch, it is now caught by `mrb_core_init_protect()`.
2023-03-12 10:25:54 +09:00
Yukihiro "Matz" Matsumoto 629d81f57b Merge pull request #5937 from dearblue/note-gem-init
Add the generator path to the `build/***/gem_init.c` file
2023-03-12 08:01:38 +09:00
Yukihiro "Matz" Matsumoto 894ce40797 Merge pull request #5946 from dearblue/const-search
Don't switch constant search path from modules to Object
2023-03-11 16:19:53 +09:00
Yukihiro "Matz" Matsumoto 90e53cad39 Merge pull request #5945 from dearblue/env-internal
Avoid exposure for `REnv` objects
2023-03-11 16:18:28 +09:00
Yukihiro "Matz" Matsumoto 7f79ca2cf6 mruby-compiler: need to adjust the line number for do_block; fix #5949 2023-03-11 15:49:35 +09:00
Yukihiro "Matz" Matsumoto 927a9df453 mruby-data/data.c: allow empty Data 2023-03-10 08:52:06 +09:00
Yukihiro "Matz" Matsumoto c212edec5f mruby-struct/struct.c: allow empty Struct when a name is not given 2023-03-10 08:52:06 +09:00
Yukihiro "Matz" Matsumoto fc4fe48a00 mruby-time/time.c: fix error message from localtime_r(3) failure 2023-03-10 08:52:06 +09:00
Yukihiro "Matz" Matsumoto 13cd0e5585 mruby-time/time.c (mrb_time_minus): specify mrb_float directly
The `typedef mrb_sec` does not improve readability at all.
2023-03-10 08:52:06 +09:00
Yukihiro "Matz" Matsumoto e62d672ef3 mruby-time/time.c (mrb_to_time_t): support Bigint if defined 2023-03-10 08:52:06 +09:00
Yukihiro "Matz" Matsumoto 01233f70bd mruby-bigint/bigint.c: add two new functions to convert to 64bit int
- mrb_bint_as_int64()
- mrb_bint_as_uint64()
2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto c71408bc0a mruby-time/time.c (mrb_to_time_t): raise error if obj is not time
Or a time-compatible object like a number.
2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto 7096d277da mruby-time/time.c: support bigint to time_t if necessary 2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto da8c23524f mruby-time/time.c (mrb_to_time_t): use floor instead of llround
Since we should generate `t=(sec+usec)` from a floating point number
`sec` should be `floor(f)` especially for negative numbers, if the place
for `usec` is specified. In contrast, we can `round` the below point
digits if we are going to ignore them. But we now use `round` instead of
`llround` which directly convert `double` to `long long`, to add
boundary check for conversion.
2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto 2f0265d078 mruby-io/io.c (check_file_descriptor): stop "unused label" warning 2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto 9a3199cadd mruby-io/file.c: atime, ctime, mtime to return Bigint if possible 2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto a3b84fbb08 mruby-bigint/bigint.c: add 2 new functions for 64 bit integer
- mrb_bint_new_int64()
- mrb_bint_new_uint64()
2023-03-10 08:52:05 +09:00
Yukihiro "Matz" Matsumoto b1d0a3d3aa etc.c (mrb_float_id): define the function only when necessary 2023-03-10 08:52:04 +09:00
Yukihiro "Matz" Matsumoto e5de08b692 mruby-time/time.c (time_mktime): should allow year before 1900
If the platform use 64 bit time_t, it is possible to represent the year
before 1903. So we should remove this check.
2023-03-10 08:52:04 +09:00
Yukihiro "Matz" Matsumoto bcd595ad1b mruby-bigint/bigint.c: add else to skip if check 2023-03-10 08:52:04 +09:00
Yukihiro "Matz" Matsumoto f1ffedc3fa vm.c: kdict may be converted to a normal argument; fix #5944 2023-03-10 08:52:04 +09:00
Yukihiro "Matz" Matsumoto 18158c96f5 Merge pull request #5948 from dearblue/cinfo
Added note to `CINFO_*` constants
2023-03-10 08:50:26 +09:00
Yukihiro "Matz" Matsumoto 840953b55a Merge pull request #5947 from dearblue/fiber-resume
Remove unreachable codes in `Fiber#resume`
2023-03-10 08:49:12 +09:00
dearblue ddaf3bdc0f Added note to CINFO_* constants 2023-03-09 22:13:52 +09:00
dearblue f4c4809750 Remove unreachable codes in Fiber#resume
ref. #5782
2023-03-09 21:40:03 +09:00
dearblue 9c9be44a98 Don't switch constant search path from modules to Object
Previously, for example, it was possible to retrieve the `String` class as follows:

```console
% bin/mruby -e 'p Comparable::Enumerable::Errno::GC::Kernel::Math::ObjectSpace::String'
String
```

Note that this patch affects the API function `mrb_const_get()`.
2023-03-05 20:32:56 +09:00
dearblue 38d5ed44e1 Avoid exposure for REnv objects
The `REnv` object is difficult to deal with, and it would be ideal if the user did not have to manipulate it directly.
In some previous situations, it was necessary to call `mrb_env_unshare()`, a non-API function, after `mrb_load_string()` or similar.

With this patch, it is no longer necessary for users to use `mrb_env_unshare()` directly, as it is now handled internally simply by using the `mrb_vm_ci_env_clear()` function.
Also, `mrb_vm_ci_env_set()` is demoted from the `MRB_API` function for the same reason.

ref. commit 1ab3da6f08
2023-03-05 17:45:47 +09:00
Yukihiro "Matz" Matsumoto 45ee9cc404 mruby-socket/socket.c: read/write should be redefined on Windows; fix #5943
Since normal file descriptors and sockets cannot be mixed on the
platform.
2023-03-04 09:27:43 +09:00
Yukihiro "Matz" Matsumoto 42d3efee1c mruby-socket/socket.c: read/write should be redefined on Windows; fix #5943
Since normal file descriptors and sockets cannot be mixed on the
platform.
2023-03-03 15:30:51 +09:00
Yukihiro "Matz" Matsumoto 011edf6e99 mruby-io/file.c: hide internal methods in backtraces 2023-03-03 14:23:10 +09:00
Yukihiro "Matz" Matsumoto 5237b2cccc mruby-io/file.c: atime, ctime, mtime check mrb_int overflow
When `sizeof(time_t)` is different from `mrb_int`, overflow may happen.
2023-03-03 14:21:05 +09:00
Yukihiro "Matz" Matsumoto 0e51da81bb mruby-io/file.rb (inspect): include path in the #inspect output 2023-03-03 13:33:30 +09:00
Yukihiro "Matz" Matsumoto a956ef35a4 mruby-io/file.c: atime, ctime, mtime should raise error
For fstat(3) failure.
2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto 9c6848a594 mruby-io/io.c (check_file_descriptor): only check EBADF 2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto 0529f5fc31 mruby-io/test/file.rb: add tests for File#atime, File#ctime 2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto 321cfe9760 mruby-io/file.c: add File#atime and File#ctime 2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto 31c1b7bc78 mruby-file: File#mtime has been available for long time 2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto 84a4d340a6 mruby-io/file.c (_mtime): return nil instead of false
As a Ruby convention, a method should return nil (not false) for the
exceptional value, e.g. String#index. File#_mtime should follow the
convention too.
2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto d86c4a795d mruby-io does not provide to_path method for implicit conversion
mruby does not use implicit type conversion by `to_xxx` (e.g. to_int,
to_str, etc.)
2023-03-03 13:33:29 +09:00
Yukihiro "Matz" Matsumoto d7f4af04ca Merge pull request #5939 from jbampton/appveyor-add-visual-studio-2022
appveyor: add job for Visual Studio 2022
2023-03-02 15:08:50 +09:00
Yukihiro "Matz" Matsumoto bdf39fe4af Merge pull request #5940 from jbampton/remove-misspell
Remove `misspell` and update `CONTRIBUTING.md`
2023-03-01 23:47:41 +09:00
Yukihiro "Matz" Matsumoto 0d35fe072e Merge pull request #5941 from jbampton/simplify-the-editorconfig-file 2023-03-01 23:42:08 +09:00
John Bampton a874b80dae Simplify the .editorconfig file
We already have `trailing-whitespace` set globally in the `pre-commit` config
and we are also using `spaces` instead of `tabs` except for "Makefiles" which have `tab_width = 8`

Perhaps in future we can enforce line lengths.

https://github.com/mruby/mruby/blob/92ca93c885a6e6d2facd8e9ca3dbf85ac3dce8c9/.pre-commit-config.yaml#L29

https://github.com/mruby/mruby/blob/92ca93c885a6e6d2facd8e9ca3dbf85ac3dce8c9/.pre-commit-config.yaml#L33
2023-03-01 21:34:23 +10:00
John Bampton 2559c93b2b Remove misspell and update CONTRIBUTING.md
It looks like `misspell` is no longer maintained and
the last commit was on `Mar 9, 2018`.

We already run `codespell` and it is an active project
with the last commit 5 days ago.

Also updated the CONTRIBUTING guide with more
information on `pre-commit` as well as listed `codespell`
as the spell checker.

https://github.com/codespell-project/codespell
https://github.com/client9/misspell
https://github.com/client9/misspell/issues/197
2023-03-01 17:49:39 +10:00
John Bampton 47dcb393ca appveyor: add job for Visual Studio 2022
Visual Studio 2022 on Windows is now a 64-bit application.

https://www.appveyor.com/docs/build-environment/#build-worker-images

https://learn.microsoft.com/en-us/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022#visual-studio-2022-is-64-bit
2023-03-01 03:21:46 +10:00
dearblue 396ca2809f Add the generator path to the build/***/gem_init.c file 2023-02-28 22:11:14 +09:00
Yukihiro "Matz" Matsumoto 92ca93c885 Merge pull request #5936 from jbampton/remove-duplicate-method-calls
benchmark: remove duplicate method calls
2023-02-25 22:10:28 +09:00
Yukihiro "Matz" Matsumoto b59832ed26 Merge pull request #5935 from jbampton/upgrade-doxyfile
Upgrade the `Doxyfile`
2023-02-25 22:09:36 +09:00
John Bampton d86f4d220f benchmark: remove duplicate method calls
DuplicateMethodCall: Scene#render calls 'nsf * nsf' 3 times
2023-02-25 15:22:49 +10:00
John Bampton 5dd0f74ecf Upgrade the Doxyfile
```
mruby % doxygen -u
warning: Tag 'CLANG_ASSISTED_PARSING' at line 50 of file 'Doxyfile' belongs to an option that was not enabled at compile time.
         This tag has been removed.
warning: Tag 'CLANG_OPTIONS' at line 51 of file 'Doxyfile' belongs to an option that was not enabled at compile time.
         This tag has been removed.
warning: Tag 'TCL_SUBST' at line 238 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'COLS_IN_ALPHA_INDEX' at line 1075 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'FORMULA_TRANSPARENT' at line 1481 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'LATEX_SOURCE_CODE' at line 1769 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'RTF_SOURCE_CODE' at line 1851 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'DOCBOOK_PROGRAMLISTING' at line 1949 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'PERL_PATH' at line 2094 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'CLASS_DIAGRAMS' at line 2107 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'MSCGEN_PATH' at line 2116 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'DOT_FONTNAME' at line 2158 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'DOT_FONTSIZE' at line 2165 of file 'Doxyfile' has become obsolete.
         This tag has been removed.
warning: Tag 'DOT_TRANSPARENT' at line 2391 of file 'Doxyfile' has become obsolete.
         This tag has been removed.

Configuration file 'Doxyfile' updated.
```
2023-02-25 12:55:53 +10:00
Yukihiro "Matz" Matsumoto ee599b25c1 Merge pull request #5934 from jbampton/rake-checkupdate
Run `rake checkupdate`
2023-02-25 09:26:26 +09:00
Yukihiro "Matz" Matsumoto f8a66c88b8 Merge pull request #5933 from jbampton/update-mruby-version-numbers
docs: update mruby version to `3.2.0`
2023-02-25 09:26:03 +09:00
John Bampton d4dd75b82c Run rake checkupdate
`pre-commit autoupdate`
2023-02-25 08:12:50 +10:00
John Bampton 46e42b38f0 docs: update mruby version to 3.2.0 2023-02-25 08:02:45 +10:00
Yukihiro "Matz" Matsumoto 82c67d52fc Merge pull request #5931 from mruby/stable
Merge mruby 3.2.0
2023-02-24 23:19:09 +09:00
mimaki 87260e7bb1 Update version and release date. (mruby 3.2.0 (2023-02-24)) 2023-02-24 19:51:12 +09:00
Yukihiro "Matz" Matsumoto 1ab3da6f08 vm.c (ci_env_set): inline ci_env_set()
Along with making preparing mrb_vm_ci_env_clar() as a replacement of
mrb_vm_ci_env_set(mrb, NULL).
2023-02-23 17:16:10 +09:00
Yukihiro "Matz" Matsumoto 2c046eb512 mruby.h: replace frequently used inline functions with macros
- mrb_gc_arena_save()
- mrb_gc_arena_restore()
2023-02-22 16:35:14 +09:00
Yukihiro "Matz" Matsumoto d8d1fe27f6 vm.c (stack_extend): inline mrb_stack_extend() in vm.c 2023-02-22 12:05:46 +09:00
Yukihiro "Matz" Matsumoto 43922a5bf9 vm.c (mrb_gc_arena_shrink): use local variable 2023-02-21 21:59:42 +09:00
Yukihiro "Matz" Matsumoto a21edf75ad Use mrb_get_arg1() instead of mrb_get_args() for single argument 2023-02-21 16:33:15 +09:00
Yukihiro "Matz" Matsumoto aecbdf72bf vm.c (mrb_env_unshare): remove unnecessary mrb_write_barrier() call
Since this function does not modify references from env, we don't need
to put write barrier here.
2023-02-21 09:45:17 +09:00
Yukihiro "Matz" Matsumoto d4cb136deb kernel.c (mrb_obj_ceqq): skip unnecessary mrb_ary_entry()
We have checked the boundary before the call.
2023-02-20 17:33:52 +09:00
Yukihiro "Matz" Matsumoto 76157c5f78 add inline specifier to frequently called functions
- entry_deleted_p(): hash.c
- ensure_block(): vm.c
2023-02-19 19:06:37 +09:00
Yukihiro "Matz" Matsumoto 7cbe6894b4 debug.c (mrb_debug_get_position): avoid duplicate calls to get_file() 2023-02-19 19:05:54 +09:00
Yukihiro "Matz" Matsumoto 78137f31c8 error.c (mrb_make_exception): reinvent exception creation
The arguments of mrb_make_exception() has changed. I believe no one is
using the function, but beware.
2023-02-18 11:51:33 +09:00
Yukihiro "Matz" Matsumoto 431f83eb8c error.c (mrb_make_exception): make the function internal 2023-02-17 17:04:09 +09:00
Yukihiro "Matz" Matsumoto 515b2fd144 class.c (mrb_method_added): skip mrb_funcall_id() is possible
When `method_added` is not redefined, we don't need to call it since its
default implementation does nothing.
2023-02-16 09:38:26 +09:00
Yukihiro "Matz" Matsumoto 2768fd62a0 Reduce calls to mrb_obj_is_kind_of() 2023-02-15 11:45:10 +09:00
Yukihiro "Matz" Matsumoto 235aaafef2 array.c (mrb_ary_aset): remove unnecessary ary_modify()
The `ary_modify()` is called in subsidiary functions.
2023-02-14 23:45:10 +09:00
Yukihiro "Matz" Matsumoto 4384a87516 class.c, vm.c: use loop variable declaration in for statement 2023-02-13 14:16:53 +09:00
Yukihiro "Matz" Matsumoto 58aefd6010 class.c, vm.c: use NULL instead of 0 for pointers 2023-02-13 14:16:30 +09:00
Yukihiro "Matz" Matsumoto ea0e8f7ea4 numeric.c (flo_mod): use NULL instead of 0
In C, we don't use 0 as NULL representation.
2023-02-13 00:08:40 +09:00
dearblue 7c7ed3c27a Write symbolik links or batch files in INSTALL_DIR
Since `bin/mruby-config` now points to a directory relative to itself, it is no longer possible to reach `include/` or `lib/`.
Therefore, avoid placing entities in them.
2023-02-12 23:25:05 +09:00
dearblue 11513bae43 Make bin/mruby-config output a directory based on itself 2023-02-12 23:25:01 +09:00
dearblue 3d996a84cc Takes the environment variable DESTDIR in rake install
If the environment variable `DESTDIR` is set, the writing destination is `<DESTDIR>/<PREFIX>/...`.
It is assumed to be used for package work.
2023-02-12 21:02:31 +09:00
dearblue 0e9a71e50a Install other build targets with rake install:full
Build targets other than "host" will be installed under `<PREFIX>/mruby/<build-name>`.
This can be changed with `build.install_prefix = dir`.
2023-02-12 21:02:30 +09:00
dearblue 7fd7409bf2 Files copied by task install should be from the build directory 2023-02-12 21:02:29 +09:00
dearblue aac2fd7055 Copy header files to the build directory
This is so that the build directory can be regarded as a temporary installation directory to work in.

Directories set in `MRuby::Gem::Specification#export_include_paths` are used as they are if they are subdirectories placed under `gem.dir`.
Files are placed under `<build-dir>/include/mruby/gems/<gem-name>/<gem-include_paths>` to separate each GEM.

When GEM is compiled by building `libmruby.a`, the same `include_paths` will be set as before, so it is expected that no unintended references will be made.
2023-02-12 21:02:28 +09:00
dearblue c020d8507e Separate rake install related stuff into tasks/install.rake 2023-02-12 21:02:27 +09:00
Yukihiro "Matz" Matsumoto 4f9caea891 range.c (range_num_to_a): add array entries directly
Calling `mrb_ary_push()` is slower.
2023-02-11 16:13:33 +09:00
Yukihiro "Matz" Matsumoto 2adb1043f4 array.c (mrb_ary_push_m): call mrb_ary_push() when argc == 1 2023-02-11 14:23:48 +09:00
Yukihiro "Matz" Matsumoto b4c936b533 use new E_EXCEPTION and E_STANDARD_ERROR; ref #5924 2023-02-10 15:21:38 +09:00
Yukihiro "Matz" Matsumoto 49709a65c7 AUTHORS: update entries [ci skip] 2023-02-10 15:21:38 +09:00
Yukihiro "Matz" Matsumoto bed7a79add Merge pull request #5927 from jbampton/remove-unneeded-whitespace
md/yml: remove unneeded blank lines and whitespace
2023-02-10 14:24:47 +09:00
Yukihiro "Matz" Matsumoto 7373b63919 Merge pull request #5926 from jbampton/update-license-year
Update License year to 2023
2023-02-10 14:23:32 +09:00
John Bampton 07a7d2a6cb md/yml: remove unneeded blank lines and whitespace 2023-02-10 14:02:57 +10:00
John Bampton 8af0aa4905 Update License year to 2023 2023-02-10 11:55:32 +10:00
mimaki 4ca2129889 Update version to 3.2.0RC4. 2023-02-08 10:04:29 +09:00
Yukihiro "Matz" Matsumoto fc53cd20b6 Merge pull request #5925 from jbampton/update-authors-file
AUTHORS: update "as of" info for `year`
2023-02-08 06:38:31 +09:00
Yukihiro "Matz" Matsumoto 75bdb4e0ec Merge pull request #5924 from dearblue/exception-classes
Improve consistency of how error classes are retrieved
2023-02-08 06:30:34 +09:00
Yukihiro "Matz" Matsumoto 8a2bb9eb93 Merge pull request #5923 from dearblue/mrb_f_raise
Demotion `mrb_f_raise()` from `MRB_API`
2023-02-08 06:30:17 +09:00
John Bampton 5189d73d6d AUTHORS: update "as of" info for year
The AUTHORS file was last published on January 8th 2023
2023-02-08 03:29:10 +10:00
dearblue a93807f48f Improve consistency of how error classes are retrieved 2023-02-07 22:46:56 +09:00
dearblue 0898ce982e Demotion mrb_f_raise() from MRB_API
This function is the entity of the `Kernel.#raise` or `Kernel#fail` method.
I don't think users can use it whenever they want, and I don't think there is any need to expose it as an entity of a user-defined method.
2023-02-07 22:37:58 +09:00
Yukihiro "Matz" Matsumoto 056cda72be mruby-bin-mirb: fix multi-line input issue; fix #5922
Bison changed the message for the end-of-file error. `mirb` should
be updated for the new message.
2023-02-07 17:43:14 +09:00
Yukihiro "Matz" Matsumoto 762ca43c16 mruby-bin-mirb: add bintest for multi-line input; ref #5922 2023-02-07 17:42:56 +09:00
Yukihiro "Matz" Matsumoto 78141d17f1 mruby-bin-mirb: fix multi-line input issue; fix #5922
Bison changed the message for the end-of-file error. `mirb` should
be updated for the new message.
2023-02-07 15:45:11 +09:00
Yukihiro "Matz" Matsumoto a25755060c mruby-bin-mirb: add bintest for multi-line input; ref #5922 2023-02-07 15:44:50 +09:00
Yukihiro "Matz" Matsumoto 6ca1b8e4e7 mruby-catch/catch.c: update disasm comment for new output format 2023-02-06 11:21:52 +09:00
Yukihiro "Matz" Matsumoto 7e607c67f2 codedump.c: adjust output format for ireps and literals
- I(%d:%p) -> I[%d]
- L(%d) -> L[%d]

The irep address is not useful, so just print index in reps table.
And use `[]` instead of `()` to clarify they are index.
2023-02-06 11:13:48 +09:00
Yukihiro "Matz" Matsumoto 1e122f7887 mruby-catch/catch.c: add disassembled comment for catch irep 2023-02-05 22:53:11 +09:00
Yukihiro "Matz" Matsumoto acecee0da1 mruby-print/print.c: rename __printstr__ to __printstr
As a convention other internal methods are prefixed by `__`.
2023-02-04 18:58:07 +09:00
Yukihiro "Matz" Matsumoto 1273c04e26 mruby-print/print.rb: update ISO references 2023-02-04 18:57:43 +09:00
Yukihiro "Matz" Matsumoto 8c8bbd94dc error.c: add new error handling API functions; ref #2837
- mrb_clear_error(): clear error status of mrb_state
- mrb_check_error(): check if error caused in the previous API

Note that `mrb_check_error` clears error status, so if you call
`mrb_check_error` more than once, latter calls will return FALSE.
2023-02-03 14:28:24 +09:00
Yukihiro "Matz" Matsumoto f5a7b6aad2 hash.rb: defer local variable initialization 2023-02-02 22:45:30 +09:00
Yukihiro "Matz" Matsumoto 1b299addaf mruby-hash-ext/hash.rb: implement Hash#compact! in C
Using `__compact` method defined in the core, since hash access
functions are private to `src/hash.c`.
2023-02-02 22:44:04 +09:00
Yukihiro "Matz" Matsumoto 9cda737a56 mruby-hash-ext/test: test Hash#compact! returns nil if unmodified 2023-02-02 22:42:36 +09:00
Yukihiro "Matz" Matsumoto 0a1fd07910 mruby-time/time.c: implement weekday methods in C 2023-02-01 14:33:46 +09:00
Yukihiro "Matz" Matsumoto ecd2d8c11e wrap method arguments by parentheses as convention 2023-02-01 14:33:46 +09:00
Yukihiro "Matz" Matsumoto caac15e8e1 Merge pull request #5919 from jbampton/make-rake-add-target
Makefile/Rakefile add target/task for `pre-commit install`
2023-02-01 14:29:40 +09:00
Yukihiro "Matz" Matsumoto 2dcc7346b4 Merge pull request #5918 from jbampton/actions-checkout-name-info
gha: full details for `actions/checkout` name
2023-02-01 14:28:40 +09:00
John Bampton 2bb6eeb7c0 Makefile/Rakefile add target/task for pre-commit install 2023-02-01 13:14:23 +10:00
John Bampton 5532d176e1 gha: full details for actions/checkout name 2023-02-01 02:00:56 +10:00
John Bampton 7d4200df84 Remove super-linter.report folder
The `super-linter.report` folder does not seem to be listed anymore on https://github.com/github/super-linter
2023-01-31 22:46:39 +10:00
Yukihiro "Matz" Matsumoto d41ea96c2a string.c: fix boundary check in String#bytesplice
It should be able to append to the receiver.
2023-01-29 17:10:15 +09:00
Yukihiro "Matz" Matsumoto a2e2e83012 string.c: move String#bytesplice to the core 2023-01-28 16:43:40 +09:00
Yukihiro "Matz" Matsumoto 12e232c006 mruby-string-ext/string.rb: add test for String#bytesplice 2023-01-28 16:41:40 +09:00
Yukihiro "Matz" Matsumoto 52746479a3 mruby-string-ext/string.c: new method String#byteslice 2023-01-27 23:22:02 +09:00
Yukihiro "Matz" Matsumoto 7b27346386 mruby-os-memsize/memsize.c: avoid mrb_get_args() 2023-01-26 11:14:10 +09:00
Yukihiro "Matz" Matsumoto 78bbf75981 mruby-random/random.c: avoid mrb_get_args() 2023-01-26 11:13:48 +09:00
Yukihiro "Matz" Matsumoto 4e85e855cf numeric.c: avoid mrb_get_args() if possible 2023-01-25 14:10:43 +09:00
Yukihiro "Matz" Matsumoto 4e5be5a288 array.c: avoid slower mrb_get_args() if possible 2023-01-25 14:10:03 +09:00
Yukihiro "Matz" Matsumoto 37da677cc8 numeric.c (mrb_int_pow): avoid unnecessary calls to mrb_get_args() 2023-01-24 15:25:06 +09:00
Yukihiro "Matz" Matsumoto d1449c2622 array.c (mrb_ary_times): avoid multiple calls to mrb_get_args() 2023-01-24 15:23:30 +09:00
Yukihiro "Matz" Matsumoto d9bf3235d2 mruby-math/math.c: avoid mrb_get_args() if possible
When a method takes single argument, we can use lighter `mrb_get_arg1()`
instead of `mrb_get_args()`.
2023-01-24 09:15:20 +09:00
mimaki 6b82843e72 Update version to 3.2.0RC3. 2023-01-23 10:16:15 +09:00
mimaki b40ab7bfee Merge branch 'master' into stable 2023-01-23 09:54:02 +09:00
Yukihiro "Matz" Matsumoto aefc5befbd mruby-io/io.c: fix issues with gets; fix #5913
- gets with RS multiple times
- gets with RS with limit
- gets with limit bigger than buffer size
2023-01-23 07:30:40 +09:00
Yukihiro "Matz" Matsumoto be5266fbe6 mruby-io/test: test gets with RS multiple times; ref #5913 2023-01-23 07:26:40 +09:00
Yukihiro "Matz" Matsumoto 4d5aadfc84 class.c (create_method_value): refactor mrb_method_t creation 2023-01-23 00:17:32 +09:00
Yukihiro "Matz" Matsumoto 079244c36a src/class.c: add new function mrb_vm_find_method
The function skips `cp` dereference, and improve performance of method
calls slightly.
2023-01-23 00:17:32 +09:00
Yukihiro "Matz" Matsumoto 6b0efd43da NEWS: copy entries from doc/mruby3.2.md 2023-01-23 00:17:32 +09:00
Yukihiro "Matz" Matsumoto 2e9f62b12c Merge pull request #5914 from dearblue/doc/mruby3.2.md
Update mruby3.2.md for changes behavior of `mrb_vm_run()`
2023-01-22 22:49:57 +09:00
Yukihiro "Matz" Matsumoto 3c02c517ca Merge pull request #5915 from dearblue/doc/mruby3.2.md.1
Update mruby3.2.md for new `mruby-data` gem
2023-01-22 22:49:05 +09:00
dearblue 998ef1711a Update mruby3.2.md for new mruby-data gem 2023-01-22 20:52:09 +09:00
dearblue a223778ee8 Update mruby3.2.md for changes behavior of mrb_vm_run() 2023-01-22 20:45:57 +09:00
Yukihiro "Matz" Matsumoto 882bb0662a Merge pull request #5912 from dearblue/io-popen
Replaced `NO_IO_POPEN` with `MRB_NO_IO_POPEN`
2023-01-22 13:37:39 +09:00
dearblue b0e537c05c Replaced NO_IO_POPEN with MRB_NO_IO_POPEN
ref. commit 9deb52c7b2
2023-01-22 09:20:10 +09:00
Yukihiro "Matz" Matsumoto 97fe582d41 Merge pull request #5911 from dearblue/eval+binding
Fixed `Kernel#.eval` crash when given a custom defined `Binding` instance
2023-01-20 22:44:28 +09:00
dearblue 36f822d9af Fixed Kernel#.eval crash when given a custom defined Binding instance
```console
% bin/mruby -e 'class Binding; end; eval "1", Binding.new'
zsh: segmentation fault (core dumped)  bin/mruby -e 'class Binding; end; eval "1", Binding.new'
```
2023-01-20 21:26:21 +09:00
mimaki b4f36b1ad9 Merge branch 'master' into stable 2023-01-18 10:45:35 +09:00
Yukihiro "Matz" Matsumoto 3a7e138c05 mruby/internal.h: add mrb_env_new to the internal function header 2023-01-18 10:37:48 +09:00
Yukihiro "Matz" Matsumoto e6cf932d38 fixup! mruby/internal.h: add codedump functions to the internal function header 2023-01-18 10:37:48 +09:00
Yukihiro "Matz" Matsumoto 55eea005c8 mruby/internal.h: add codedump functions to the internal function header
ref #5906
2023-01-18 10:37:48 +09:00
mimaki 23aa5f91bc Update version to 3.2.0RC2. 2023-01-18 10:26:58 +09:00
mimaki 830f88c5a0 Merge commit '9deb52c7b2ba6028d996172bfdd6cf8a0405ce1c' into stable 2023-01-18 09:45:23 +09:00
Yukihiro "Matz" Matsumoto 3639feb047 Merge pull request #5908 from dearblue/env-unshare.2
Make `mrb_env_unshare()` call in `mrb_vm_run()`
2023-01-18 08:05:00 +09:00
Yukihiro "Matz" Matsumoto 63597cbbd1 Merge pull request #5910 from mruby/dependabot/github_actions/github/super-linter-4.10.1
build(deps): bump github/super-linter from 4.10.0 to 4.10.1
2023-01-18 07:53:11 +09:00
Yukihiro "Matz" Matsumoto faa6a5cb4f Merge pull request #5906 from AlexDenisov/codedump-to-file
Add ability to dump bytecode into an arbitrary file
2023-01-18 07:37:12 +09:00
AlexDenisov e15288e460 Add ability to dump bytecode into an arbitrary file 2023-01-17 19:01:55 +01:00
dependabot[bot] 823b8e4148 build(deps): bump github/super-linter from 4.10.0 to 4.10.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.10.0 to 4.10.1.
- [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.10.0...v4.10.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-17 14:01:22 +00:00
Yukihiro "Matz" Matsumoto 9deb52c7b2 mruby-io/io.c: allow disabling popen
When `MRB_NO_IO_POPEN` is defined (or iPhone is target), `IO#popen`
will be disabled.
2023-01-17 18:25:23 +09:00
Yukihiro "Matz" Matsumoto 6b87aae757 doc/guides/compile.md: update compilation example
Show usage of multiple command-line options to `mruby-config`.
2023-01-17 18:23:29 +09:00
Yukihiro "Matz" Matsumoto 10768c1191 LEGAL: add entries for non-MIT licensed files. 2023-01-17 18:23:29 +09:00
Yukihiro "Matz" Matsumoto 2c261503b5 doc/internal/boxing.md: remove an extra double quote sign. 2023-01-16 19:01:11 +09:00
Yukihiro "Matz" Matsumoto 7a6d03f869 vm.c: transferred fiber termination should kick root fiber; fix #5907 2023-01-16 18:25:50 +09:00
Yukihiro "Matz" Matsumoto 3f6fd994f0 README.md: mruby is not Ruby 3.x compatible (for syntax at least)
With pattern matching as an exception.
2023-01-16 14:39:47 +09:00
dearblue 365c151df0 Make mrb_env_unshare() call in mrb_vm_run()
Move the detachment of the "env" object, now done by `mrb_top_run()` by #5904, to `mrb_vm_run()`.
This is because `mrb_vm_run()` can remove `mrb_env_unshare()` which is called from `bin/mirb`.

Also, even if the mruby VM is already running, either of the following conditions should be used to detach "env":
  - If the `stack_keep` variable is 0.
  - If the stack length of "env" is longer than `irep->nlocals`.

The reason for the change is that the stack beyond `irep->nlocals` is used inside the called method, and previously it was possible to reference and manipulate the state inside the method via "env".

    env stack       |                           |

    main stack      | top |  m1  |    m2    |
                          |<--------------->|
                            operable via env stack (including self)

If the problematic block is called from the `m2` method above, it is possible to replace `self` in `m1` and `m2` as well as the internal variables.

This change may cause compatibility problems, but I believe it is better to make `MRB_API`, `mrb_vm_run()` safe.
If a dangerous procedure is absolutely necessary, `mrb_vm_exec()` can still be called as before.
2023-01-15 18:16:42 +09:00
mimaki 7a0eabb574 Update version to 3.2.0RC. 2023-01-13 09:12:08 +09:00
Yukihiro "Matz" Matsumoto a96a9f2c2b mruby-fiber/fiber.c: detect resume/transfer mixture; fix #5905
Also, transferred fibers should kick the root fiber at termination.
2023-01-12 07:23:35 +09:00
Yukihiro "Matz" Matsumoto 9211bf0950 mruby-fiber/test: Fiber#transfer should not be mixed with Fiber#resume
ref #5905

The original tests failed with CRuby.
2023-01-11 18:19:07 +09:00
Yukihiro "Matz" Matsumoto d9145b8621 mruby-test/drive.c: add string type check 2023-01-11 10:43:11 +09:00
Yukihiro "Matz" Matsumoto 00339b3aa8 Merge pull request #5904 from dearblue/env-unshare-on-top-run
Call `mrb_env_unshare()` in `mrb_top_run()` if necessary
2023-01-10 18:22:43 +09:00
Yukihiro "Matz" Matsumoto 1bba8cf53b mruby-dir: remove files needed for an independent gem 2023-01-10 10:53:15 +09:00
Yukihiro "Matz" Matsumoto a800988239 mruby-set: remove files needed for an independent gem 2023-01-10 10:51:23 +09:00
dearblue c101261f45 Call mrb_env_unshare() in mrb_top_run() if necessary
This is to keep the local variables of the previously created blocks consistent in case the `mrbc_context` passed to `mrb_load_exec()` is `NULL` or different.
Switching between `mrbc_context` pointers that are non `NULL` can be done safely by calling `mrbc_cleanup_local_variables()`.

Before this patch, the result of the following code is not as expected.

```console
% cat loadstr.c
#include <mruby.h>
#include <mruby/compile.h>

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

  mrb_load_string(
      mrb,
      "(a, b, c, d, e, f, g) = [1, 2, 3, 4, 5, 6, 7] \n"
      "$lambda = -> { p [a, b, c, d, e, f, g] }");
  mrb_load_string(mrb, "$lambda.call");

  mrb_close(mrb);

  return 0;
}

% $(bin/mruby-config --cc --cflags --ldflags) loadstr.c $(bin/mruby-config --libs) && ./a.out
[main, nil, nil, main, nil, nil, main]
```

Also, since `mrb_env_unshare()` was not used before, the internal stack of simply detached `env` objects could show invalid addresses by `stack_extend()`.
ref. https://github.com/kou/mruby-pp/commit/ef5951aca870183d8767cb61f6414240988ca35e
2023-01-09 22:47:37 +09:00
Yukihiro "Matz" Matsumoto e2ffcbab6e mruby-io/io.c: cast return pointer from malloc/realloc for C++ 2023-01-09 19:58:30 +09:00
Yukihiro "Matz" Matsumoto 8b7e240e67 mruby-io/io.c: improve code around io_cloexec_open() 2023-01-09 19:43:37 +09:00
Yukihiro "Matz" Matsumoto 91727f38de mruby-io/io.c: change the implementation of read buffers
The original implementations used plain Ruby strings referenced from
instance variable (`@buf`) as buffers. We replaced those buffers by C
structure (`struct mrb_io_buf`) referenced directly from `fptr`.

The result is significant improvement of both performance and memory
consumption. Our simple benchmarks (reading `README.md` 10,000 times)
runs 5+ times faster, and `mrbtest` test suites consumes 85% less
memory.

Recent changes on `mruby-io` is preparation for this improvement.
2023-01-09 10:18:35 +09:00
Yukihiro "Matz" Matsumoto 6bc44f8aa8 Remove non-existent ISO section numbers suffixed with "(x)" [ci skip]
We don't know how we introduced these section references.
Weak memories.
2023-01-08 22:32:16 +09:00
Yukihiro "Matz" Matsumoto 29fa3d9950 AUTHORS: update entries [ci skip] 2023-01-08 16:56:13 +09:00
Yukihiro "Matz" Matsumoto 4462e3d8b3 string.c: add assertion for positive length 2023-01-08 16:36:20 +09:00
Yukihiro "Matz" Matsumoto e45e57fe22 mruby-io: update ISO section numbers 2023-01-07 16:39:59 +09:00
Yukihiro "Matz" Matsumoto 6de5e00a6c pre-commit-config.yaml: update 2023-01-07 16:39:46 +09:00
Yukihiro "Matz" Matsumoto ad7802a3a0 Merge pull request #5901 from dearblue/doc/gem-block
Added tips for giving blocks to `MRuby::Build#gem`
2023-01-06 09:50:31 +09:00
Yukihiro "Matz" Matsumoto e7052f78b7 Merge pull request #5900 from dearblue/doc/dup-allsyms
Remove duplicate entry `MRB_USE_ALL_SYMBOLS`
2023-01-06 09:49:37 +09:00
Yukihiro "Matz" Matsumoto fadb39a096 mruby-io/io.c: remove unused method _bufread 2023-01-06 08:52:02 +09:00
Yukihiro "Matz" Matsumoto 412b1f0fb3 mruby-io/io.c: implement IO#readlines in C 2023-01-06 08:51:21 +09:00
Yukihiro "Matz" Matsumoto 7827808d3b mruby-io/io.c: remove Ruby implementation of IO#gets 2023-01-05 23:54:46 +09:00
dearblue 9016acf54e Added tips for giving blocks to MRuby::Build#gem
ref. #5860
2023-01-05 21:50:17 +09:00
dearblue c5163fe29f Remove duplicate entry MRB_USE_ALL_SYMBOLS 2023-01-05 21:50:17 +09:00
Yukihiro "Matz" Matsumoto 9797138aca mruby-io/io.c: rename io_read_buf_noraise to io_read_buf 2023-01-05 19:50:17 +09:00
Yukihiro "Matz" Matsumoto 714cc254c0 mruby-io/io.c: remove unused function io_read_buf() 2023-01-05 19:50:16 +09:00
Yukihiro "Matz" Matsumoto cd01f1173a mruby-io/io.c: implement IO#gets in C
In addition, reimplement `IO#readline` using `IO#gets`.
2023-01-05 19:50:16 +09:00
Yukihiro "Matz" Matsumoto b7147bbd8d mruby-io/io.c: implement IO#getbyte in C
In addition, reimplement `IO#readbyte` using `IO#getbyte`.
2023-01-05 19:50:16 +09:00
Yukihiro "Matz" Matsumoto eec546a9cf mruby-io/io.c: implement IO#getc in C
In addition, reimplement `IO#readchar` using `IO#getc`.
2023-01-05 19:50:16 +09:00
Yukihiro "Matz" Matsumoto 6e7322a3fe mruby-io/io.c (eof_error): a new function to raise EOFError exception 2023-01-05 19:50:15 +09:00
Yukihiro "Matz" Matsumoto 40039d93ab mruby-io/io.c: implement IO#getline in C 2023-01-05 19:50:15 +09:00
Yukihiro "Matz" Matsumoto a9c98ab855 mruby-io/io.c: implement IO#read in C 2023-01-05 19:50:15 +09:00
Yukihiro "Matz" Matsumoto 99dffb6daf mruby-io/io.c: use RSTR_SET_LEN() instead of mrb_str_resize()
since the latter may shrink allocated buffer, and may cause repeated
allocations.
2023-01-05 19:50:14 +09:00
Yukihiro "Matz" Matsumoto 1bc0be3e43 mruby-io/io.c: implement IO#eof? in C 2023-01-05 19:50:14 +09:00
Yukihiro "Matz" Matsumoto 9e808512d5 mruby-io/io.c: remove duplicated initializations after io_alloc() 2023-01-05 19:50:14 +09:00
Yukihiro "Matz" Matsumoto 2b90937a2e mruby-io/io.c: add ISO section comments 2023-01-05 19:50:14 +09:00
Yukihiro "Matz" Matsumoto d57540118b mruby-io/io.c: rename _common functions 2023-01-05 19:50:13 +09:00
Yukihiro "Matz" Matsumoto 64bf33adb4 Merge pull request #5899 from mruby/dependabot/github_actions/github/super-linter-4.10.0
build(deps): bump github/super-linter from 4.9.7 to 4.10.0
2023-01-05 09:15:06 +09:00
dependabot[bot] fd57c5284b build(deps): bump github/super-linter from 4.9.7 to 4.10.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.7 to 4.10.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.9.7...v4.10.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>
2023-01-04 14:02:05 +00:00
Yukihiro "Matz" Matsumoto 51dca6eda8 mruby-io/io.c: rename receiver names from self to io in this file 2023-01-02 10:01:09 +09:00
Yukihiro "Matz" Matsumoto 0e25448a20 mruby-io/io.c (io_check_readable): hide internal method in backtraces 2023-01-02 10:01:08 +09:00
Yukihiro "Matz" Matsumoto 7cc6a720f3 mruby-io/io.c: implement IO#readchar in C 2023-01-02 10:01:08 +09:00
Yukihiro "Matz" Matsumoto 10a5edd978 mruby-io/io.c: implement IO#getbyte in C 2023-01-02 10:01:08 +09:00
Yukihiro "Matz" Matsumoto a117095ca1 Merge pull request #5897 from dearblue/doc/MRB_HEAP_PAGE_SIZE
Added more description of the `MRB_HEAP_PAGE_SIZE` configuration
2023-01-02 10:00:30 +09:00
dearblue 4a39a9f1c4 Added more description of the MRB_HEAP_PAGE_SIZE configuration 2023-01-01 21:59:24 +09:00
Yukihiro "Matz" Matsumoto 170326cb41 Merge pull request #5896 from dearblue/dir-open
Avoid `IOError` when returning from `Dir.open`
2023-01-01 19:27:45 +09:00
dearblue 72ab1821de Avoid IOError when returning from Dir.open
Ignore `IOError` if `Dir#close` was done in the block.
2023-01-01 17:40:50 +09:00
Yukihiro "Matz" Matsumoto 0c9798373a mruby-io/io.c (fptr_finalize): close stdin/out/err as well
if not during the termination process.
2022-12-31 17:53:20 +09:00
Yukihiro "Matz" Matsumoto 965997d91b mruby-io/io.c: implement IO#flush in C 2022-12-31 10:39:05 +09:00
Yukihiro "Matz" Matsumoto 0628669790 mruby-data/data.c (to_s): add class name in string representation 2022-12-31 07:51:09 +09:00
Yukihiro "Matz" Matsumoto b79563af60 mruby-io/test: remove test for internal IO#_read_buf 2022-12-30 13:59:21 +09:00
Yukihiro "Matz" Matsumoto a68b1200c2 mruby-io/test: test IO#ungetc 2022-12-30 13:59:01 +09:00
Yukihiro "Matz" Matsumoto 26f458baab mruby-io/io.c: implement IO#ungetc in C 2022-12-30 13:59:01 +09:00
Yukihiro "Matz" Matsumoto 99a4c1f703 mruby-io/io.c (io_buf): protect @buf from modification
Users may re-assign `@buf` using `instance_variable_set` for example.
2022-12-30 13:59:00 +09:00
Yukihiro "Matz" Matsumoto 9a6a251460 mruby-io/io.c (io_bufread_m): remove unnecessary checks 2022-12-30 13:59:00 +09:00
Yukihiro "Matz" Matsumoto af59e30710 mruby-io/io.c: implement IO#pos in C 2022-12-30 13:59:00 +09:00
Yukihiro "Matz" Matsumoto d0659b089f mruby-io/io.c: remove wrong ISO section comment 2022-12-30 13:58:59 +09:00
Yukihiro "Matz" Matsumoto d905746218 mruby-io/io.c: implement IO#seek in C 2022-12-30 13:58:59 +09:00
Yukihiro "Matz" Matsumoto 14a374c6bc mruby-io/io.c: implement IO#write in C
And now `write` takes multiple string arguments
2022-12-30 13:58:59 +09:00
Yukihiro "Matz" Matsumoto 663d5715bc mruby-io/io.c: new function io_get_write_fd 2022-12-30 13:58:59 +09:00
Yukihiro "Matz" Matsumoto 5732948108 mruby-io/io.c (io_init): check opt if it's a hash
But `opt` will be ignored anyway in mruby.
2022-12-30 13:58:58 +09:00
Yukihiro "Matz" Matsumoto 0cdecd2e9e mruby-io/io.c (io_init): remove redundant code 2022-12-30 13:58:58 +09:00
Yukihiro "Matz" Matsumoto ef0b43d9a1 mruby-io/test/io.rb: specify access mode for IO.{sysopen,open} in tests 2022-12-30 13:58:58 +09:00
Yukihiro "Matz" Matsumoto a9330dbc4b Merge pull request #5895 from jbampton/yardopts-add-pages
`.yardopts` add LEGAL, NEWS, TODO.md
2022-12-30 13:58:47 +09:00
John Bampton 6fe3e8dae3 .yardopts add LEGAL, NEWS, TODO.md 2022-12-30 14:05:16 +10:00
Yukihiro "Matz" Matsumoto 69791b1078 Merge pull request #5894 from jbampton/use-rubygems-org-links
Use rubygems.org links for yard-mruby and yard-coderay
2022-12-30 11:47:55 +09:00
John Bampton d318e992ea Use rubygems.org links for yard-mruby and yard-coderay
The RubyGems website gives a much better overview of both Gems

A lot more quick links and statistics.

https://rubygems.org/gems/yard-mruby

https://rubygems.org/gems/yard-coderay
2022-12-30 12:39:54 +10:00
Yukihiro "Matz" Matsumoto df35e36682 Merge pull request #5893 from jbampton/contributing-building-documentation
Add more building documentation
2022-12-30 11:26:53 +09:00
John Bampton 6da82230e8 Add more building documentation 2022-12-30 11:14:12 +10:00
Yukihiro "Matz" Matsumoto 7fab8275dc Merge pull request #5892 from jbampton/rake-doc-capi-graphviz
rake doc: C API needs both Doxygen and Graphviz
2022-12-30 09:15:51 +09:00
John Bampton e9b69c611d rake doc: C API needs both Doxygen and Graphviz
https://www.doxygen.nl/

https://graphviz.org/download/
2022-12-30 10:08:15 +10:00
Yukihiro "Matz" Matsumoto d437182f79 Merge pull request #5891 from jbampton/update-doxyfile
`Doxyfile` add `LEGAL`, `LICENSE`, `NEWS`
2022-12-30 08:01:02 +09:00
Yukihiro "Matz" Matsumoto 4d3cc0975a Merge pull request #5887 from rmalizia44/cdata-example
Add cdata example
2022-12-30 08:00:14 +09:00
Yukihiro "Matz" Matsumoto 618d8c6706 Merge pull request #5885 from FnControlOption/patch-2
Use `getsegmentdata` instead of deprecated `get_etext`/`get_edata`
2022-12-30 07:58:20 +09:00
fn ⌃ ⌥ 8c23385f62 Add reason for include 2022-12-29 08:08:55 -08:00
John Bampton ee61a1ebfe Doxyfile add LEGAL, LICENSE, NEWS 2022-12-30 01:40:34 +10:00
rmalizia44 e062af51f3 Add cdata example
Fix trailing-whitespace and tabs
2022-12-29 08:36:43 -03:00
Yukihiro "Matz" Matsumoto 9845872168 Merge pull request #5888 from jbampton/update-contributing-guide
CONTRIBUTING.md: update `pre-commit` info with `make` and `rake`
2022-12-29 14:47:49 +09:00
Yukihiro "Matz" Matsumoto b7552ece6e Merge pull request #5890 from jbampton/update-doxyfile
Update `Doxyfile` add `CONTRIBUTING.md` and `TODO.md`
2022-12-29 14:47:15 +09:00
Yukihiro "Matz" Matsumoto 6a062d79f1 Merge pull request #5889 from jbampton/remove-blank-lines
Remove blank line from the top of Ruby files
2022-12-29 14:46:00 +09:00
John Bampton d82ab7835e Update Doxyfile add CONTRIBUTING.md and TODO.md 2022-12-29 15:16:22 +10:00
John Bampton 42946fed8f CONTRIBUTING.md: update pre-commit info with make and rake 2022-12-29 14:46:58 +10:00
John Bampton 41572d71b6 Remove blank line from the top of Ruby files 2022-12-29 14:29:48 +10:00
Yukihiro "Matz" Matsumoto 9dbcdd51c2 mruby-io/io.c (io_sysseek): fixed wrong condition when off_t < mrb_int 2022-12-29 12:19:57 +09:00
Yukihiro "Matz" Matsumoto bc8d8da81a class.c (get_args_v): fixed integer type mismatch 2022-12-29 11:55:44 +09:00
Yukihiro "Matz" Matsumoto 142915acd6 mruby-io: mistakenly committed WIP code, sigh 2022-12-29 11:44:35 +09:00
Yukihiro "Matz" Matsumoto 80e5c8a90a mruby-io/io.c: forgot to rename mrb_io_pread on non-Unix platforms 2022-12-29 11:37:28 +09:00
Yukihiro "Matz" Matsumoto 5401d95017 mruby-io/ext/io.h: remove unused macros 2022-12-29 11:22:37 +09:00
Yukihiro "Matz" Matsumoto aa3005da02 mruby-io/io.c: remove mrb_ prefix from function names 2022-12-29 11:22:37 +09:00
Yukihiro "Matz" Matsumoto 0172388aa2 mruby-io/io.c: rename mrb_io_read_write_size to fssize_t 2022-12-29 11:22:36 +09:00
Yukihiro "Matz" Matsumoto c83b715f0c mruby-io/io.c: small format updates 2022-12-29 11:22:36 +09:00
Yukihiro "Matz" Matsumoto 8e1a82b424 mruby-io/io.c: raise error if seek position is too big 2022-12-29 11:22:36 +09:00
Yukihiro "Matz" Matsumoto f3a5f3ee1d mruby-io/io.c: define seek constants in C
From C macro definitions instead of literal integers (may differ from
the platform's definitions).

- SEEK_SET
- SEEK_CUR
- SEEK_END
2022-12-29 11:22:35 +09:00
Yukihiro "Matz" Matsumoto 830c882f06 mruby-io/io.rb (IO.read): should not allow path starting "|"
It was made obsolete long time ago.
2022-12-29 11:22:35 +09:00
Yukihiro "Matz" Matsumoto 20606c4455 mruby-io/io.rb: update a comment 2022-12-29 11:20:52 +09:00
Yukihiro "Matz" Matsumoto ba1b12948d mruby-io/io.c: implement _read_buf in C 2022-12-29 11:20:51 +09:00
Yukihiro "Matz" Matsumoto 1940bec0af mruby-io/io.c: rename mrb_dup to clearer sysdup 2022-12-29 11:20:51 +09:00
Yukihiro "Matz" Matsumoto 7ef0b6e66e mruby-io/io.c (mrb_io_initialize_copy): dupe the buffer 2022-12-29 11:20:51 +09:00
Yukihiro "Matz" Matsumoto 2d765bfa90 mruby-io/io.c: use MRB_IVSYM() instead of mrb_intern_lit() 2022-12-29 11:20:51 +09:00
Yukihiro "Matz" Matsumoto fb8cfa8a90 mruby-io/io.c: rename functions
Remove the word `dummy` from working function names.
2022-12-29 11:20:50 +09:00
Yukihiro "Matz" Matsumoto 7b130004da mruby-io/io.c: reorder functions to remove function prototype 2022-12-29 11:20:50 +09:00
Yukihiro "Matz" Matsumoto 8a6344b64f mruby-io/io.c (mrb_io_readchar): avoid redundant call to mrb_utf8len() 2022-12-29 11:20:50 +09:00
Yukihiro "Matz" Matsumoto 2970607267 mruby-io/io.c (mrb_io_readchar): RSTRING_PTR(buf) never be NULL 2022-12-29 11:20:50 +09:00
Yukihiro "Matz" Matsumoto 5c36a768f7 mruby-io/io.c (mrb_io_readchar): no need to pass @buf 2022-12-29 11:20:49 +09:00
Yukihiro "Matz" Matsumoto 134c9f3178 Merge pull request #5886 from jbampton/remove-coding-utf-8-ruby
Remove `# coding: utf-8` from Ruby file
2022-12-29 09:56:51 +09:00
John Bampton efd0e52cfd Remove # coding: utf-8 from Ruby file
The default script encoding is Encoding::UTF-8 after v2.0.

https://ruby-doc.org/core-2.1.2/Encoding.html#class-Encoding-label-Script+encoding
2022-12-29 10:15:48 +10:00
fn ⌃ ⌥ e6c0f324ae Use getsegmentdata instead of deprecated get_etext/get_edata 2022-12-28 08:50:59 -08:00
Yukihiro "Matz" Matsumoto 73fbc33596 Merge pull request #5884 from jbampton/remove-unneeded-return
Remove unneeded `return` keyword from last line in Ruby functions
2022-12-27 14:14:50 +09:00
Yukihiro "Matz" Matsumoto 54d408aa57 Merge pull request #5883 from jbampton/rakefile-remove-encoding-comment
Rakefile: remove unnecessary utf-8 encoding comment
2022-12-27 14:14:16 +09:00
John Bampton 3ba388fc78 Remove unneeded return keyword from last line in Ruby functions 2022-12-27 11:42:48 +10:00
John Bampton 0075b6f240 Rakefile: remove unnecessary utf-8 encoding comment 2022-12-27 11:20:29 +10:00
Yukihiro "Matz" Matsumoto 02c576accf Merge pull request #5882 from rmalizia44/master
Add code block in boxing docs to better spacing
2022-12-27 09:58:22 +09:00
Yukihiro "Matz" Matsumoto fb34d9ee17 Merge pull request #5881 from jbampton/fix-spelling
Fix spelling
2022-12-27 09:56:52 +09:00
Yukihiro "Matz" Matsumoto 4aad86a3e1 Merge pull request #5880 from jbampton/android-rake-style
style: pass `&:to_i` as an argument to collect instead of a block
2022-12-27 09:56:06 +09:00
Yukihiro "Matz" Matsumoto 1282527342 Merge pull request #5879 from jbampton/rake-task-generate-active-gems-txt 2022-12-27 09:12:31 +09:00
rmalizia44 1614a88cb7 Add code block in boxing docs to better spacing 2022-12-26 20:12:54 -03:00
John Bampton 1aa2fff1e8 Fix spelling
https://en.wikipedia.org/wiki/Single-precision_floating-point_format

https://en.wikipedia.org/wiki/Double-precision_floating-point_format
2022-12-26 20:50:35 +10:00
John Bampton 10250f835c style: pass &:to_i as an argument to collect instead of a block 2022-12-26 19:12:56 +10:00
John Bampton b5af16b93a Add generate_active_gems_txt to rake --tasks 2022-12-26 17:16:50 +10:00
Yukihiro "Matz" Matsumoto feb6164d8d Merge pull request #5878 from jbampton/rake-tasks-benchmark
Add `benchmark` to `rake --tasks`
2022-12-26 14:45:52 +09:00
John Bampton 6c10351c88 Add benchmark to rake --tasks 2022-12-26 15:41:37 +10:00
Yukihiro "Matz" Matsumoto bb3f403511 Merge pull request #5876 from dearblue/dir-foreach
Close the directory object with the `Dir.foreach` method
2022-12-26 13:27:53 +09:00
Yukihiro "Matz" Matsumoto 3518d15d04 Merge pull request #5875 from dearblue/dir-cstr
Get argument of the `Dir` method takes a C string directly
2022-12-26 13:26:56 +09:00
Yukihiro "Matz" Matsumoto 954a847141 Merge pull request #5877 from jbampton/update-rake-tasks
Add `check` and `checkupdate` to `rake --tasks`
2022-12-26 13:25:30 +09:00
John Bampton f5cd3bfa82 Add check and checkupdate to rake --tasks 2022-12-26 14:20:34 +10:00
Yukihiro "Matz" Matsumoto 2656a92380 Merge pull request #5874 from dearblue/dir-funcs
Hide substance functions of methods in `mruby-dir`
2022-12-26 12:58:44 +09:00
Yukihiro "Matz" Matsumoto 79f586d7b4 Merge pull request #5873 from dearblue/dir-ioerr
Define also the exception class `IOError` in `mruby-dir`
2022-12-26 12:48:43 +09:00
dearblue 50b24c124f Close the directory object with the Dir.foreach method 2022-12-25 21:25:30 +09:00
dearblue 1fb19ca046 Get argument of the Dir method takes a C string directly 2022-12-25 21:25:30 +09:00
dearblue 71df263bdf Hide substance functions of methods in mruby-dir 2022-12-25 21:25:30 +09:00
dearblue 35490c2c32 Define also the exception class IOError in mruby-dir
Since `IOError` is a standard exception class in Ruby, there is no need to assume different superclasses.
The Ruby specification allows repeated class definitions as long as the superclass is the same.

This also avoids using the `mruby/ext/io.h` file to reference `E_IO_ERROR`.
2022-12-25 21:25:21 +09:00
Yukihiro "Matz" Matsumoto a6e456e72e Merge pull request #5872 from dearblue/src-headers
Avoid uses `mruby/src/error.h` file
2022-12-25 18:10:59 +09:00
Yukihiro "Matz" Matsumoto fbc4730cf7 doc/mruby3.2.md: update CVE-2022 entries 2022-12-25 18:00:11 +09:00
Yukihiro "Matz" Matsumoto a082c5d61e doc/mruby3.2.md: update entries for new gems 2022-12-25 18:00:11 +09:00
Yukihiro "Matz" Matsumoto 684ca72439 Merge pull request #5871 from ukrainskiysergey/fix_nil_redefinition_limitation_type
Fix typo in doc/limitations.md
2022-12-25 17:56:34 +09:00
dearblue fec74cd040 Avoid uses mruby/src/error.h file 2022-12-25 17:31:53 +09:00
Sergey Ukrainskiy 872f01ddef Fix typo in doc/limitations.md 2022-12-25 13:33:11 +09:00
Yukihiro "Matz" Matsumoto 89830296eb numeric.c (int_round): n may not be a bigint
`mrb_bint_add()` expects its first operand to be a bigint.
2022-12-24 19:20:37 +09:00
Yukihiro "Matz" Matsumoto 48e5ca4802 include/value.h (mrb_float_p): define always
even when `MRB_NO_FLOAT` is set. In that case, it is FALSE always.
2022-12-24 19:05:41 +09:00
Yukihiro "Matz" Matsumoto 14f8cf040e mruby-string-ext: add unary +/- for strings to freeze/unfreeze 2022-12-24 10:42:28 +09:00
Yukihiro "Matz" Matsumoto 4288ee39b3 doc/mruby3.2.md: update - add mruby-dir entry 2022-12-23 14:17:18 +09:00
Yukihiro "Matz" Matsumoto 7821462571 mruby-dir/dirtest.c: need to include <io.h> for mktemp() on Windows 2022-12-22 22:07:07 +09:00
Yukihiro "Matz" Matsumoto e6544e44f7 class.c (mrb_get_args_a): avoid an uninitialized warning from VC. 2022-12-22 15:13:08 +09:00
Yukihiro "Matz" Matsumoto 67addd7da3 mruby-dir/dirtest.c: avoid string allocations for mrb_raisef 2022-12-22 11:36:03 +09:00
Yukihiro "Matz" Matsumoto 1d174404b3 mruby-dir/dirtest.c: refactor mkdir in mrb_dirtest_setup 2022-12-22 11:33:44 +09:00
Yukihiro "Matz" Matsumoto d51d5825ad mruby-dir/dir.c: update compatibility macros for Windows 2022-12-22 11:13:50 +09:00
Yukihiro "Matz" Matsumoto 084871abf3 mruby-dir/dirtest.c: use _mktemp instead of mktemp for Windows 2022-12-22 11:12:32 +09:00
Yukihiro "Matz" Matsumoto c737519d02 mruby-dir/dirtest.c: add compatibility macro for getcwd 2022-12-22 11:11:49 +09:00
Yukihiro "Matz" Matsumoto 4cbcf743a7 mruby-dir/dirtest.c: wrap function prototypes by extern "C" 2022-12-22 11:11:18 +09:00
Yukihiro "Matz" Matsumoto 783e62e582 mruby-dir/dirtest.c: copy some of dirent header information
Instead of including whole "dirent.c" file.
2022-12-22 09:53:16 +09:00
Yukihiro "Matz" Matsumoto 965d1d1554 mruby-dir/dirtest.c: should not include <unistd.h> 2022-12-22 09:27:13 +09:00
Yukihiro "Matz" Matsumoto 0aa8ce5c57 mruby-dir/dirtest.c: did not work for Windows 2022-12-22 09:10:40 +09:00
Yukihiro "Matz" Matsumoto cfb2d3e888 mruby-dir: include Enumerable module 2022-12-22 00:03:28 +09:00
Yukihiro "Matz" Matsumoto ca3b694efe mruby-dir/dir.rb: make each_child as an alias to each 2022-12-22 00:02:33 +09:00
Yukihiro "Matz" Matsumoto 3d6a4c39bf mruby-dir: reformat 2022-12-21 15:18:09 +09:00
Yukihiro "Matz" Matsumoto d656ea87c6 mruby-dir: add compatibility macro 2022-12-21 15:15:10 +09:00
Yukihiro "Matz" Matsumoto b93a624b5f mruby-dir/dir.c: add new method Dir.empty?(path) 2022-12-21 15:11:37 +09:00
Yukihiro "Matz" Matsumoto e4b80cc282 mruby-dir/dir.rb: add new method children as an alias to entries 2022-12-21 14:48:22 +09:00
Yukihiro "Matz" Matsumoto 818212b5db mruby-dir/dir.rb: rename each to each_child 2022-12-21 14:44:24 +09:00
Yukihiro "Matz" Matsumoto afcdf5e803 mruby-dir/dir.rb: simplify loop delegation 2022-12-21 14:42:50 +09:00
Yukihiro "Matz" Matsumoto d0af9e9863 README.md: update the simplest build instruction 2022-12-20 22:14:34 +09:00
Yukihiro "Matz" Matsumoto d3e997f4f9 mruby-dir: remove run_test.rb that is no longer used 2022-12-20 22:13:34 +09:00
Yukihiro "Matz" Matsumoto 4b48c86103 mruby-dir: extra spaces and typos are removed 2022-12-20 22:12:21 +09:00
Yukihiro "Matz" Matsumoto e3589bf001 AUTHORS: update "as of" info
Forgot to update last time.
2022-12-20 21:57:53 +09:00
Yukihiro "Matz" Matsumoto f486069a94 mruby-dir/test: reformat 2022-12-20 21:56:52 +09:00
Yukihiro "Matz" Matsumoto 869a2778a9 mruby-dir/test: remove warnings from lacked assertions 2022-12-20 20:24:28 +09:00
Yukihiro "Matz" Matsumoto fbf04c6ec3 mruby-dir/dir.rb: removed work around for old mruby bug 2022-12-20 20:13:04 +09:00
Yukihiro "Matz" Matsumoto e6a2f0b98e mruby-dir/dir.rb: reformat according to coding standard 2022-12-20 19:51:18 +09:00
Yukihiro "Matz" Matsumoto d46bbb72ac mrbgems/stdlib-io.gembox: add mruby-dir gem 2022-12-20 18:49:29 +09:00
Yukihiro "Matz" Matsumoto 277341f694 Add 'mrbgems/mruby-dir/' from commit '89dceefa1250fb1ae868d4cb52498e9e24293cd1'
git-subtree-dir: mrbgems/mruby-dir
git-subtree-mainline: f2d43069f0
git-subtree-split: 89dceefa12
2022-12-20 18:06:36 +09:00
Yukihiro "Matz" Matsumoto f2d43069f0 mruby-socet: add socket constants
Introduced in Ruby3.2:

- SO_INCOMING_CPU
- SO_INCOMING_NAPI_ID
- SO_RTABLE
- SO_SETFIB
- SO_USER_COOKIE
- TCP_KEEPALIVE
- TCP_CONNECTION_INFO
2022-12-19 18:59:10 +09:00
Yukihiro "Matz" Matsumoto 772bf559ef codedump.c: print embedded operands
- LOADNIL  (nil)
- LOADSELF (R0)
- LOADT    (true)
- LOADF    (false)
2022-12-18 19:08:28 +09:00
Yukihiro "Matz" Matsumoto f7a8a42521 mruby-compiler/parse.y: allow multiple anonymous splat in args rule
For example, this should be allowed:

```ruby
def f(*)
  p(*,*)
end
```
2022-12-17 09:37:44 +09:00
Yukihiro "Matz" Matsumoto 6d01c5b56c codedump.c: print embedded operands (with parentheses) 2022-12-16 07:51:31 +09:00
Yukihiro "Matz" Matsumoto b18a267709 codedump.c: print LOADINEG for the instruction; close #5869
Stopped unifying LOADI and LOAINEG in instruction printing.
The issue is reported by @NaokiM03.
2022-12-15 18:35:14 +09:00
Yukihiro "Matz" Matsumoto 8819183088 gc.c (mrb_field_write_barrier): value may be NULL
Especially when called from MRB_PROC_SET_TARGET_CLASS() from
f_instance_eval().
2022-12-15 07:50:11 +09:00
Yukihiro "Matz" Matsumoto d6dc9caa02 mruby-hash-ext/hash.rb: make transform_keys! to keep old keys
```ruby
h={1=>2,2=>3}
h.transform_keys!{_1.succ}
```

used to make `h` to `{2=>2}` (duplicated keys were squashed), but now
makes it `{2=>2,3=>3}`.
2022-12-14 07:39:10 +09:00
Yukihiro "Matz" Matsumoto ba3541bbc4 mruby-set/set.rb (reset): add reset method defined in Ruby 2.5 2022-12-14 07:38:38 +09:00
Yukihiro "Matz" Matsumoto ddefcea151 mruby-eval/eval.c (f_instance_eval): skip mrb_value to get singleton
Use mrb_singleton_class_ptr() instead of mrb_instance_class(), because
the former returns NULL, when the latter raises error for immediate
objects.

```
1.instance_eval <<END
  def foo
    :foo
  end
END
```
2022-12-13 10:51:44 +09:00
Yukihiro "Matz" Matsumoto 3bd2c56dae vm.c (check_target_class): raise error if target_class is NULL
It fixes a bug that instance_eval for immediate objects defines methods
in Object, instead of raising error.

```ruby
1.instance_eval do
  def foo
    p :foo
  end
end
```
2022-12-13 10:49:14 +09:00
Yukihiro "Matz" Matsumoto 7ad657b532 mrb_kwargs numbers changed to mrb_int from uint32_t
They are unsigned but `mrb_int` is more common among mruby
implementation, e.g. length of strings and arrays.
2022-12-12 14:42:38 +09:00
Yukihiro "Matz" Matsumoto cc8ce1b5c7 Merge pull request #5868 from boatrite/2022-12-10-path-with-spaces-fix
Fix cloning gem when destination path contains spaces
2022-12-12 14:42:26 +09:00
Gwendolyn Boatrite 8b728e4056 Fix cloning gem when destination path contains spaces
This was how clone command was previously being generated, for example:

```
git clone  --recursive --branch "master" --depth 1 https://github.com/mattn/mruby-onig-regexp.git /path/to mruby with spaces/mruby-3.1.0/build/repos/wasm/mruby-onig-regexp
```

Now it's changed so the path is quoted and will work when containing
spaces:

```
git clone  --recursive --branch "master" --depth 1 https://github.com/mattn/mruby-onig-regexp.git "/path/to mruby with spaces/mruby-3.1.0/build/repos/wasm/mruby-onig-regexp"
```

Similar for the other commands.
2022-12-11 17:18:29 -06:00
Yukihiro "Matz" Matsumoto dc508eafe8 Merge pull request #5867 from dearblue/gha-ci
Combine gcc/clang jobs with matrix
2022-12-11 15:14:05 +09:00
dearblue 9068a157c7 Combine gcc/clang jobs with matrix 2022-12-10 23:37:52 +09:00
Yukihiro "Matz" Matsumoto 38c50b3094 mruby-struct (struct_index): avoid direct array indexing
Caused crash probably due to the combination of C++ UB & optimizer.
2022-12-10 08:00:31 +09:00
Yukihiro "Matz" Matsumoto 990d41f9f7 mruby-class-ext: new method attached_object introduced in Ruby3.2 2022-12-09 17:30:17 +09:00
Yukihiro "Matz" Matsumoto 6fecea1a7d AUTHORS: update entries [ci skip] 2022-12-09 07:38:42 +09:00
Yukihiro "Matz" Matsumoto a7e304a51c mruby-struct (struct_index): unify indexing access code 2022-12-08 08:01:53 +09:00
Yukihiro "Matz" Matsumoto de0ed25fbf mruby-struct (struct_corrupted): unify error raising code 2022-12-07 17:07:33 +09:00
Yukihiro "Matz" Matsumoto 0c1d6c5d1b Merge pull request #5866 from jbampton/md-fix-c-code-block
docs: fix start of `C` code block
2022-12-07 08:01:13 +09:00
Yukihiro "Matz" Matsumoto 672495555b mruby-data (mrb_data_init_copy): use data_corrupted() for errors 2022-12-07 07:49:19 +09:00
John Bampton 8eee3ce150 docs: fix start of C code block 2022-12-06 21:48:28 +10:00
Yukihiro "Matz" Matsumoto 38098ddf2a class.c (prepare_singleton_class): remove unnecessary write barrier
Since sc (singleton class) is a newly created object so it's not needed
to call write barrier.
2022-12-06 15:45:39 +09:00
Yukihiro "Matz" Matsumoto 375d22b412 gc.c (clear_all_old): avoid calling GC twice in the function 2022-12-06 15:26:24 +09:00
Yukihiro "Matz" Matsumoto b3c95f3851 Merge pull request #5863 from dearblue/doc/OP_CALL
Update semantics comment for `OP_CALL`
2022-12-06 14:20:16 +09:00
Yukihiro "Matz" Matsumoto 94b3d48df2 Merge pull request #5862 from dearblue/doc/update-opcode.md
Update `opcode.md` to match the latest implementation
2022-12-06 14:20:03 +09:00
Yukihiro "Matz" Matsumoto a7232ecf8d mruby-sprintf (mrb_str_format): fixed integer size confusion
Declared as int, checked as mrb_int.
2022-12-06 08:31:30 +09:00
Yukihiro "Matz" Matsumoto 4295a8c560 gc.c (final_marking_phase): mark gray objects after marking
If pre-allocate object is modified (e.g. singleton class added) in
certain timing, some objects may be swept even if it's alive.
The problem was reported by Denis Kasak via private communication.
2022-12-05 22:34:15 +09:00
Yukihiro "Matz" Matsumoto d4fb67a1a0 Merge pull request #5864 from dearblue/doc/escape-pipe
Escaping pipes in the code of table elements
2022-12-05 10:51:51 +09:00
Yukihiro "Matz" Matsumoto 841bf6a270 mruby-data: update a comment (there's no Data.new) [ci skip] 2022-12-05 10:49:40 +09:00
Yukihiro "Matz" Matsumoto 0d261aff6b mruby-data: freeze Data object after initialize 2022-12-04 22:45:36 +09:00
Yukihiro "Matz" Matsumoto 9992de5a4f Rename MRB_TT_DATA to MRB_TT_CDATA
`TT_DATA` is too confusing with `Data` objects (which is immutable
Struct like objects introduced in Ruby 3.2).
2022-12-04 22:45:36 +09:00
Yukihiro "Matz" Matsumoto 0ef4796dfb mruby-data: improve comment description 2022-12-04 22:45:35 +09:00
Yukihiro "Matz" Matsumoto 951caa8f42 mruby-data: rename some internal functions and a macro 2022-12-04 22:45:35 +09:00
Yukihiro "Matz" Matsumoto 25faa74d23 array.c (mrb_ary_unshift_m): small refactoring
Unify size error by `ary_too_big()` function.
2022-12-04 22:45:35 +09:00
Yukihiro "Matz" Matsumoto 6d8e025901 Merge pull request #5865 from dearblue/errno-to-stdlib-io
Move `mruby-errno` to `stdlib-io.gembox`
2022-12-04 22:45:24 +09:00
dearblue 392033fb6b Move mruby-errno to stdlib-io.gembox
This is because GEMs that use errno are currently limited to `mruby-io` and `mruby-socket`.
2022-12-04 18:33:12 +09:00
Yukihiro "Matz" Matsumoto 5deb8c7894 Merge pull request #5861 from dearblue/doc/addfiles.2
Additional document files for doxygen
2022-12-03 15:27:04 +09:00
dearblue 32d48a5f0e Escaping pipes in the code of table elements
ref. https://github.github.com/gfm/#example-200
2022-12-03 14:40:30 +09:00
dearblue 478fd615af Update semantics comment for OP_CALL 2022-12-03 14:26:05 +09:00
dearblue 13d8804d88 Update opcode.md to match the latest implementation 2022-12-03 13:59:35 +09:00
dearblue 4bd3e0e20b Additional document files for doxygen
Complements #5802.
2022-12-03 13:37:32 +09:00
Yukihiro "Matz" Matsumoto 5f3aed7413 mruby-data (mrb_data_new): Data#new to accept keyword arguments 2022-12-01 15:38:06 +09:00
Yukihiro "Matz" Matsumoto a40fdfde5c mruby-data: cosmetic changes regarding for loop variables 2022-11-30 21:51:52 +09:00
Yukihiro "Matz" Matsumoto c7f1195ccb mruby-random: fix size of kw symbol arrays 2022-11-30 21:50:08 +09:00
Yukihiro "Matz" Matsumoto 138adbe282 mruby-data (mrb_data_initialize): update argument error conditions
- raise ArgumentError if arguments size differs from data size.
  Previously it accepted smaller argument size.

- the message is updated to "wrong number of arguments". It's not
  "struct" any longer.
2022-11-30 21:47:31 +09:00
Yukihiro "Matz" Matsumoto fce2c5131f mruby-data: new gem for Data class introduced in Ruby 3.2 2022-11-29 15:58:05 +09:00
Yukihiro "Matz" Matsumoto 3fa029b079 mruby-io (mrb_fd_cloexec): instead of assertion call mrb_sys_fail()
Should provide system call failure information to the user.
2022-11-29 08:16:22 +09:00
Yukihiro "Matz" Matsumoto 551d603d9c mruby-sprintf: remove unnecessary format specifier 2022-11-26 23:22:50 +09:00
Yukihiro "Matz" Matsumoto 16ed467266 mruby-struct: avoid using mrb_bug(); ref #5852
Use mrb_assert() instead.
2022-11-25 16:17:29 +09:00
Yukihiro "Matz" Matsumoto 855e63e17c parse.y: avoid using mrb_bug(); ref #5852 2022-11-25 16:17:29 +09:00
Yukihiro "Matz" Matsumoto eb988c9025 cdump.c (cdump_pool): simplify IREP_TT_FLOAT dump. 2022-11-25 16:17:29 +09:00
Yukihiro "Matz" Matsumoto c39ee489e1 Remove non formatting fprintf(). 2022-11-25 16:17:29 +09:00
Yukihiro "Matz" Matsumoto 260c2b60df Merge pull request #5859 from dearblue/rake/opcode.md
Add task `rake doc:update-opcode.md`
2022-11-23 18:00:52 +09:00
Yukihiro "Matz" Matsumoto ffb6b2243b Merge pull request #5858 from dearblue/mrb_print_backtrace
Print errors by calling `mrb_print_backtrace()` without backtrace
2022-11-21 08:37:01 +09:00
dearblue 5e62990748 Add task rake doc:update-opcode.md
Allow to update `doc/internal/opcode.md` file mechanically from `include/mruby/ops.h` file.

At the same time, the `doc/internal/opcode.md` file has been updated.
Consecutive hyphens at the end of the table were removed as they would have created noise as markdown flavours.
2022-11-20 21:58:13 +09:00
dearblue 61b60273ea Print errors by calling mrb_print_backtrace() without backtrace
- In case of `NoMemoryError` exceptions, the error message is now printed directly.
- Replaced `mrb_p()` used by #4250 with `mrb_print_error()`.

  ref. squashed commit f1523d2404
  ref. subcommit da7d7f881b
  ref. subcommit d9c7b6be6e
2022-11-20 20:58:03 +09:00
Yukihiro "Matz" Matsumoto 3a0e2255bd Merge pull request #5857 from dearblue/avoid-abort-resume
Avoid `abort()` when exception occurs in `mrb_fiber_resume()`
2022-11-20 20:37:44 +09:00
dearblue f0a65ec3c2 Avoid abort() when FiberError occurs in mrb_fiber_resume()
However, this may not be the case depending on where the `FiberError` raises.
2022-11-20 20:32:44 +09:00
Yukihiro "Matz" Matsumoto 9c5dc42e59 small cosmetic changes.
I prefer `i++` style unless absolutely necessary.
This commit is an addition to 41e4148.
2022-11-19 17:11:56 +09:00
Yukihiro "Matz" Matsumoto 7ab7608094 small cosmetic changes.
I prefer `i++` style unless absolutely necessary.
2022-11-19 17:11:56 +09:00
Yukihiro "Matz" Matsumoto 89a34e1b7e Revert "error.c (mrb_sys_fail): errno argument removed from _sys_fail."
Intermediate function calls may update `errno`.
This reverts commit a099ca44f4.
2022-11-19 17:11:56 +09:00
Yukihiro "Matz" Matsumoto 80986804cc Merge pull request #5856 from dearblue/doc/fiber-funcs
Updates documentation for `mrb_fiber_resume()` and `mrb_fiber_yield()`
2022-11-19 17:11:48 +09:00
dearblue 6fed73445e Updates documentation for mrb_fiber_resume() and mrb_fiber_yield()
- Added note on `mrb_fiber_resume()` and `mrb_fiber_yield()`.
  Removed comments from C files that were not documented by yard and doxygen instead.
- Leads to use of `mrb_fiber_resume()` instead of `Fiber#resume` in C.
- Leads to use of `mrb_fiber_yield()` instead of `Fiber.yield` in C.
2022-11-19 16:59:28 +09:00
Yukihiro "Matz" Matsumoto a099ca44f4 error.c (mrb_sys_fail): errno argument removed from _sys_fail.
As a side effect, `errno.h` dependency removed from `error.c`.
2022-11-15 13:27:32 +09:00
Yukihiro "Matz" Matsumoto 71a1d0ad26 mruby-sprintf: fix a debug error message (remove additional "1"). 2022-11-15 13:27:31 +09:00
Yukihiro "Matz" Matsumoto 0ad29fda67 Merge pull request #5854 from jbampton/add-ubuntu-2204-to-build
gha: replace `Ubuntu 18.04` with `Ubuntu 22.04` in `build` workflow
2022-11-15 13:27:18 +09:00
John Bampton 512486d067 gha: replace Ubuntu 18.04 with Ubuntu 22.04 in build workflow
https://github.blog/changelog/2022-08-09-github-actions-ubuntu-22-04-is-now-generally-available-on-github-hosted-runners/
2022-11-15 09:27:52 +10:00
Yukihiro "Matz" Matsumoto c9f67d376f Merge pull request #5853 from jbampton/standardize-markdown-headings
docs: standardize Markdown headings
2022-11-13 17:21:59 +09:00
John Bampton 4903aa2be9 docs: standardize Markdown headings 2022-11-13 16:32:38 +10:00
Yukihiro "Matz" Matsumoto 5412f525fa Merge pull request #5851 from dearblue/prepare_missing
Changed `prepare_missing()` parameters
2022-11-13 09:14:12 +09:00
dearblue f9b13d27b5 Changed prepare_missing() parameters
- Now that it is called after `cipush()`, pass in a new ci pointer.
- Removed the parameters `clsp`, `a`, and `c`, which are no longer needed since they now operate directly on `ci`.
- Change the parameter `super`, which is treated as a boolean, to `mrb_bool`.
- Leave the parameter `mid`.
  Because if `prepare_missing()` raises the exception `NoMethodError`, `ci->mid` must not be set when suppressing extra information on the stack trace.
  However, set `ci->mid` here, since the preparation is completed at the end of the function.
2022-11-12 20:56:46 +09:00
Yukihiro "Matz" Matsumoto 6bcbfed8bb mruby-sprintf/sprintf.c: check integer overflow before casting. 2022-11-11 08:08:07 +09:00
Yukihiro "Matz" Matsumoto 9fcfd01f20 mruby-pack/pack.c (read_tmpl): check integer overflow before casting. 2022-11-10 22:21:12 +09:00
Yukihiro "Matz" Matsumoto 3b56332952 doc/mruby3.2.md: update [ci skip] 2022-11-09 23:37:02 +09:00
Yukihiro "Matz" Matsumoto c759ee5f77 AUTHORS: update entries [ci skip] 2022-11-08 16:28:09 +09:00
Yukihiro "Matz" Matsumoto 98cc66070b readnum.c: provide obsolete functions.
- mrb_int_read()
- mrb_float_read()

Both functions should not be use and this file should not be linked.
This is just for compatibility.
2022-11-07 16:09:31 +09:00
Yukihiro "Matz" Matsumoto 4a888a34bb readfloat.c (mrb_read_float): a new function.
We no longer use `mrb_float_read()` that depends on `errno`.
2022-11-07 16:09:31 +09:00
Yukihiro "Matz" Matsumoto 4e9773ae3d readint.c (mrb_int_read): new function.
We no longer use `mrb_read_int` which is kinda compatible with `strtol`.
2022-11-07 16:09:31 +09:00
Yukihiro "Matz" Matsumoto 440adc447b Merge pull request #5849 from dearblue/re-stackerr 2022-11-06 19:46:21 +09:00
dearblue 5db5b27aa0 Using mrb_realloc() with stack_extend_alloc()
Raising a `SystemStackError` exception in an out-of-memory situation will generate backtrace information.
This can eventually lead to a `NoMemoryError` exception, and this process flow is completely undesirable.

In effect, this change means that it will include a revert of commit 0dbb9e6e41.
2022-11-05 20:34:49 +09:00
Yukihiro "Matz" Matsumoto 47575ed72a Merge pull request #5848 from dearblue/mrb_str_inspect-utf-8
Reduce memory copy in `mrb_str_inspect()` with UTF-8
2022-11-04 23:27:05 +09:00
dearblue 97c075ad68 Reduce memory copy in mrb_str_inspect() with UTF-8 2022-11-04 22:13:07 +09:00
Yukihiro "Matz" Matsumoto 4f385f119c parse.y (call_with_block): a->cdr may be NULL. 2022-11-04 14:05:52 +09:00
Yukihiro "Matz" Matsumoto c6b7029cdc mruby-sprintf: fix int and mrb_int mixtures. 2022-11-04 13:11:36 +09:00
Yukihiro "Matz" Matsumoto 7e7cc425d4 bingint.c: add cast to silence some warnings (on VC). 2022-11-04 13:10:51 +09:00
Yukihiro "Matz" Matsumoto b7240056f8 vm.c (funcall_args_capture): fix integer size mixture. 2022-11-04 12:07:00 +09:00
Yukihiro "Matz" Matsumoto 5617de0071 mruby-method/method.c (method_eql): do not check _klass for equality. 2022-11-03 23:38:27 +09:00
Yukihiro "Matz" Matsumoto bf642becc2 internal.h: aggregate prototypes to internal.h.
- mrb_f_send()
- mrb_ci_nregs()
2022-11-02 14:24:42 +09:00
Yukihiro "Matz" Matsumoto e3dd65f761 throw.h: simplified a compilation conditional. 2022-11-02 14:22:04 +09:00
Yukihiro "Matz" Matsumoto c68d3dcbac vm.c: stop wrapping implementation by extern "C". 2022-11-02 14:22:04 +09:00
Yukihiro "Matz" Matsumoto 37fac6c089 throw.h: avoid using static member in C++ struct; fix #5846
The initialization causes linkage error with gcc (not clang), caused by
the following gcc bug:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86254
2022-11-02 14:22:03 +09:00
Yukihiro "Matz" Matsumoto ab0a7f0583 Merge pull request #5839 from jbampton/script-must-not-have-extension
pre-commit(shell): add hook `script-must-not-have-extension`
2022-11-01 23:16:04 +09:00
Yukihiro "Matz" Matsumoto a4b41fe53c Merge pull request #5843 from dearblue/simple-raise
Simplify the `L_RAISE` block
2022-11-01 00:06:06 +09:00
Yukihiro "Matz" Matsumoto ce535b872f Merge pull request #5844 from jbampton/ruby-remove-parenthesis
ruby: remove unneeded parenthesis from methods
2022-11-01 00:05:38 +09:00
John Bampton 2438195289 ruby: remove unneeded parenthesis from methods
commit eeb33da43035b5400f8d1830ea52a68691b3a678
Author: John Bampton <jbampton@gmail.com>
Date:   Mon Oct 31 23:53:43 2022 +1000

    Fix up

commit 80923c8f92a58b2f33a36d6403de7f6341973110
Merge: bc89500f6 416f012f6
Author: John Bampton <jbampton@users.noreply.github.com>
Date:   Mon Oct 31 20:12:59 2022 +1000

    Merge branch 'master' into ruby-remove-parenthesis

commit bc89500f6357c453b457516452ffcc7fd03fee88
Author: John Bampton <jbampton@gmail.com>
Date:   Mon Oct 31 14:39:20 2022 +1000

    ruby: remove unneeded parenthesis from methods
2022-11-01 00:25:09 +10:00
Yukihiro "Matz" Matsumoto 416f012f68 Merge pull request #5845 from jbampton/ruby-fix-whitespace
ruby: standardize whitespace
2022-10-31 18:43:08 +09:00
John Bampton ea8964ef35 ruby: standardize whitespace 2022-10-31 16:25:56 +10:00
Yukihiro "Matz" Matsumoto 734fe47de4 Merge pull request #5841 from dearblue/raise-in-vm
Use macro in `mrb_vm_exec()` exception raising
2022-10-31 13:04:23 +09:00
Yukihiro "Matz" Matsumoto e4d6ea3382 Merge pull request #5838 from jbampton/editorconfig-batch-charset-encoding
Remove `charset = latin1` from `.editorconfig` for batch files
2022-10-31 12:56:42 +09:00
Yukihiro "Matz" Matsumoto 9832e7db5b Merge pull request #5837 from jbampton/pre-commit-tabs-exclude
pre-commit(tabs): use blacklist to exclude files
2022-10-31 07:30:52 +09:00
Yukihiro "Matz" Matsumoto 21436e2350 Merge pull request #5842 from mattn/fix-use-after-free
fix use after free
2022-10-31 07:28:24 +09:00
dearblue 8a62bf25c8 Simplify the L_RAISE block
The current flow of the `L_RAISE` block is as follows:

```mermaid
flowchart LR

raise((raise))
raise --> citop{"top of call info?"}

citop -- YES --> chftop{"no catch handler?"}
citop -- NO --> chf{"no catch handler?"}

chftop -- YES --> fiber{"root of fiber?"}
chftop -- NO --> vmexec((vmexec))

fiber -- YES --> vmstop((vmstop))
fiber -- NO --> fswitch["switch fiber"]
fswitch --> citop

chf -- YES --> cipop["cipop"]
chf -- NO --> vmexec((vmexec))
cipop --> citop
```

This patch makes the catch handler search first:

```mermaid
flowchart LR

raise((raise))
raise --> chf{"no catch handler?"}

chf -- NO --> vmexec((vmexec))
chf -- YES --> citop{"top of call info?"}

citop -- YES --> fiber{"root of fiber?"}
citop -- NO --> cipop["cipop"]
cipop --> chf

fiber -- YES --> vmstop((vmstop))
fiber -- NO --> fswitch["switch fiber"]
fswitch --> chf
```
2022-10-30 23:05:29 +09:00
Yasuhiro Matsumoto 6697a6a067 fix use after free 2022-10-30 20:51:33 +09:00
Yukihiro "Matz" Matsumoto 4371b736b7 Merge pull request #5811 from FnControlRuby/splat
ops.h: update `OP_ARYDUP` instruction and rename  to `OP_ARYSPLAT`
2022-10-30 16:50:58 +09:00
fn ⌃ ⌥ 273fcbc347 ops.h: update OP_ARYDUP instruction and rename to OP_ARYSPLAT.
Transforms the value of a splat inside a return statement (similar
to an array). For example, `return *nil` should return `nil.to_a`,
while `return *1` should return `[1]`
2022-10-29 19:54:34 -07:00
dearblue 1de8fda2ec Use macro in mrb_vm_exec() exception raising
Introduce the macro functions `RAISE_EXC()`, `RAISE_FORMAT()` and `RAISE_LIT()`.
2022-10-30 11:04:38 +09:00
Yukihiro "Matz" Matsumoto 6ee4f845c6 Merge pull request #5840 from mattn/errno-windows
errno must be set before mrb_sys_fail
2022-10-30 07:56:59 +09:00
Yasuhiro Matsumoto 4612c8b2d6 errno must be set before mrb_sys_fail 2022-10-30 01:00:27 +09:00
John Bampton bd51915679 Remove charset = latin1 from .editorconfig for batch files
The top `.editorconfig` rule `charset = utf-8` now applies to batch files

```
mruby % file -I mrbgems/mruby-bin-config/mruby-config.bat
mrbgems/mruby-bin-config/mruby-config.bat: text/x-msdos-batch; charset=us-ascii
```

US-ASCII (basic English) is a 7-bit, 128 characters code page, originally designed for telegraphy.

UTF-8 encoding uses the same encoding as 7-bit ASCII for its first 128 characters. So a text file that only contains characters from that range of the first 128 characters will be identical at a byte level whether encoded with UTF-8 or 7-bit ASCII.

https://stackoverflow.com/questions/11303405/force-encode-from-us-ascii-to-utf-8-iconv
2022-10-29 23:45:39 +10:00
John Bampton af0b3e3388 pre-commit(shell): add hook script-must-not-have-extension
```
mruby % file -I mrbgems/mruby-bin-config/mruby-config
mrbgems/mruby-bin-config/mruby-config: text/x-shellscript; charset=us-ascii
```

The Google shell style guide states:

Executables should have no extension (strongly preferred)

This hook checks for conformance.

https://github.com/jumanjihouse/pre-commit-hooks#script-must-not-have-extension

We are already using hooks from "jumanjihouse" in the `mgem-list` repo.

https://github.com/mruby/mgem-list/blob/f5904922d5fbc87f45c582b8ef759e2ebf16df79/.pre-commit-config.yaml#L39
2022-10-29 23:08:48 +10:00
John Bampton e7507778a4 pre-commit(tabs): use blacklist to exclude files
Add `indent_style = space` to the `.editorconfig` file for batch files.
2022-10-29 20:26:00 +10:00
Yukihiro "Matz" Matsumoto 15eb62479b Merge pull request #5836 from jbampton/fix-whitespace-in-md-files
docs: standardize whitespace in Markdown files
2022-10-29 18:56:45 +09:00
John Bampton f631460dfb docs: standardize whitespace in Markdown files
Most of the Markdown has a single space between sentences.

This pr changes `2 spaces` to `1 space`.
2022-10-29 18:49:31 +10:00
Yukihiro "Matz" Matsumoto ce86585281 Merge pull request #5812 from FnControlRuby/block
parse.y: fix return/break/next with method call with args and block
2022-10-29 16:29:41 +09:00
Yukihiro "Matz" Matsumoto 9edf311fd3 Merge pull request #5834 from FnControlRuby/<=>
kernel.c (mrb_cmp_m): use mrb_equal instead of mrb_obj_equal.
2022-10-29 16:29:26 +09:00
fn ⌃ ⌥ 55c423fc55 kernel.c (mrb_cmp_m): use mrb_equal instead of mrb_obj_equal.
`Kernel#<=>` should also call `#==` to check if the objects are equal.
2022-10-28 06:19:37 -07:00
Yukihiro "Matz" Matsumoto 63c0abeabd Merge pull request #5835 from mattn/windows-errno
use WSAGetLastError() for errno on Windows
2022-10-28 18:13:39 +09:00
Yasuhiro Matsumoto fd5e3654c4 use WSAGetLastError() for errno on Windows 2022-10-28 17:17:09 +09:00
Yukihiro "Matz" Matsumoto 5ccca7e45b mruby-bigint/bigint.c (udiv): skip loop if xd<yd. 2022-10-28 17:01:46 +09:00
Yukihiro "Matz" Matsumoto 02f44d76fc codegen.c: stop peephole optimization for headless case statement.
This fixes #5815
2022-10-28 15:57:35 +09:00
Yukihiro "Matz" Matsumoto 9ff247c5c2 Revert "codegen.c: exit headless case early if a condition is always true"
This reverts commit e5b32e559860073632fc7b69cb98b90f2c069e81; ref #5815
2022-10-28 15:54:40 +09:00
Yukihiro "Matz" Matsumoto 604d7e9c86 mruby-bigint/bigint.c (mpz_mul_2exp): move mpz_clear() call.
No need to call mpz_clear() after mpz_move().
2022-10-28 15:36:34 +09:00
Yukihiro "Matz" Matsumoto 5f5109b72b Merge pull request #5815 from FnControlRuby/case
codegen.c: exit headless `case` early if a condition is always true
2022-10-28 15:36:22 +09:00
Yukihiro "Matz" Matsumoto 4f8ab59e79 Merge pull request #5819 from FnControlRuby/allocate
class.c (mrb_instance_alloc): raise error if NilClass/FalseClass
2022-10-28 15:19:24 +09:00
Yukihiro "Matz" Matsumoto bb67008663 Merge pull request #5832 from FnControlRuby/comparable
Fix `Comparable#clamp` with range
2022-10-27 18:13:40 +09:00
Yukihiro "Matz" Matsumoto 5ee42ff1dd Merge pull request #5833 from jbampton/remove-coding-utf-8-ruby
Remove `# coding: utf-8` from Ruby files
2022-10-27 18:11:54 +09:00
Yukihiro "Matz" Matsumoto 8a67a26104 mruby-pack/pack.c (unpack): check if the given length is positive.
To avoid out-of-bound array access.
2022-10-27 16:32:05 +09:00
John Bampton 44db4f18d3 Remove # coding: utf-8 from Ruby files
The default script encoding is Encoding::UTF-8 after v2.0.

https://ruby-doc.org/core-2.1.2/Encoding.html#class-Encoding-label-Script+encoding
2022-10-27 04:43:13 +10:00
fn ⌃ ⌥ c1697a9c4e kernel.c (mrb_cmp_m): implement Kernel#<=> 2022-10-26 09:04:29 -07:00
fn ⌃ ⌥ 3adae7d237 mruby-compar-ext/compar.rb (clamp): fix range support.
Also, raise error if any comparison among min, max, and self
returns nil.
2022-10-26 09:02:32 -07:00
Yukihiro "Matz" Matsumoto a8a8e7fbd8 Merge pull request #5831 from jbampton/fix-spelling
Fix spelling: `floating point` -> `floating-point`
2022-10-27 00:29:32 +09:00
Yukihiro "Matz" Matsumoto b49eb72a5a Merge pull request #5830 from jbampton/remove-semi-colons-ruby
Remove unneeded trailing semi-colons from Ruby files
2022-10-27 00:28:54 +09:00
John Bampton 8208a836ff Fix spelling: floating point -> floating-point
https://en.wikipedia.org/wiki/Floating-point_arithmetic
2022-10-27 00:09:12 +10:00
John Bampton 7870409cf1 Remove unneeded trailing semi-colons from Ruby files 2022-10-26 23:48:27 +10:00
Yukihiro "Matz" Matsumoto 7eb6d626f5 update pre-commit-config by rake checkupdate; ref #5816 2022-10-26 22:10:38 +09:00
Yukihiro "Matz" Matsumoto eba36f5991 Merge pull request #5827 from jbampton/c-remove-extra-semicolon
Remove unneeded trailing semi-colons from `C` files
2022-10-26 22:10:22 +09:00
Yukihiro "Matz" Matsumoto e678af175e Merge pull request #5829 from jbampton/fiber-c-fix-grammar
fiber.c: fix grammar
2022-10-26 22:09:58 +09:00
Yukihiro "Matz" Matsumoto f18a75e1dc Merge pull request #5828 from jbampton/add-hooks-for-tabs
pre-commit: add hooks `forbid-tabs` and `remove-tabs`
2022-10-26 22:09:21 +09:00
John Bampton da4d7d4bc6 fiber.c: fix grammar
`suspend` -> `suspended`
2022-10-26 22:48:01 +10:00
John Bampton aab7bc0023 pre-commit: add hooks forbid-tabs and remove-tabs
The indentation settings have been taken from the `.editorconfig` file

https://github.com/Lucas-C/pre-commit-hooks
2022-10-26 21:33:32 +10:00
John Bampton 664c9e533b Remove unneeded trailing semi-colons from C files 2022-10-26 20:07:18 +10:00
Yukihiro "Matz" Matsumoto 52a3dc2153 Merge pull request #5825 from jbampton/add-pre-commit-hook
pre-commit: add hook `check-shebang-scripts-are-executable`
2022-10-26 18:55:18 +09:00
Yukihiro "Matz" Matsumoto ce9918d45c Merge pull request #5824 from jbampton/tasks-rake-doc-macos
tasks: enable rake docs to open on macOS
2022-10-26 18:53:32 +09:00
Yukihiro "Matz" Matsumoto 1aa77c9f23 Merge pull request #5826 from jbampton/replace-gsub-with-tr
Replace `gsub` with `tr`
2022-10-26 18:04:32 +09:00
Yukihiro "Matz" Matsumoto 580134e07a Merge pull request #5823 from jbampton/remove-travis-button
docs: remove unused Travis CI button from README
2022-10-26 18:03:26 +09:00
Yukihiro "Matz" Matsumoto f718408371 Merge pull request #5822 from jbampton/assert-remove-comma
Remove unneeded trailing comma from `assert_equal` statement
2022-10-26 17:42:36 +09:00
John Bampton 1626758ccc Replace gsub with tr
Using `tr` is faster than `gsub` when replacing a single character in a string with another single character
2022-10-26 18:17:17 +10:00
John Bampton 1d37f75add pre-commit: add hook check-shebang-scripts-are-executable
chmod +x ./mrbgems/mruby-bin-config/mruby-config

https://github.com/pre-commit/pre-commit-hooks#check-shebang-scripts-are-executable
2022-10-26 16:37:17 +10:00
John Bampton 1bf9ed196c tasks: enable rake docs to open on macOS
The `xdg-open` command is not available on macOS.

macOS uses the `open` command.

Add info to install doxygen on macOS with Homebrew.

https://formulae.brew.sh/formula/doxygen
2022-10-26 15:39:10 +10:00
John Bampton 2e3861ff7c docs: remove unused Travis CI button from README
The building on travis-ci.org is ceased.
2022-10-26 14:40:20 +10:00
Yukihiro "Matz" Matsumoto 20617017df Merge pull request #5821 from jbampton/standardize-md-lists
docs: standardize Markdown lists
2022-10-26 13:12:56 +09:00
John Bampton b049a71582 Remove unneeded trailing comma from assert_equal statement 2022-10-26 13:58:53 +10:00
John Bampton 696226a60e docs: standardize Markdown lists
Previously for lists we were using both `*` and `-` to start the list items.

This pr changes all lists to use `-`.
2022-10-26 13:09:41 +10:00
Yukihiro "Matz" Matsumoto 0ae85c9233 Merge pull request #5816 from jbampton/add-target
Makefile/Rakefile: add checkupdate target
2022-10-26 11:20:25 +09:00
John Bampton 72f22afc99 Makefile/Rakefile: add checkupdate target
Runs `pre-commit autoupdate`
2022-10-26 12:04:59 +10:00
Yukihiro "Matz" Matsumoto a1cdb3240e Merge pull request #5820 from FnControlRuby/nil
Implement `nil.to_c` and `nil.to_r`
2022-10-26 07:32:19 +09:00
Yukihiro "Matz" Matsumoto fe5191398a mruby-set: rename mrb_set.rb to set.rb. 2022-10-25 16:59:49 +09:00
Yukihiro "Matz" Matsumoto e3f74074ba mruby-set: remove intialize_{dup,clone}. 2022-10-25 16:58:31 +09:00
Yukihiro "Matz" Matsumoto 1152c43039 mruby-set: remove taint/untaint which are no longer exist. 2022-10-25 16:57:24 +09:00
fn ⌃ ⌥ c65200cb5a complex.rb: implement Numeric#to_c 2022-10-24 17:31:52 -07:00
fn ⌃ ⌥ 7801741790 complex.c: implement nil.to_c 2022-10-24 17:31:52 -07:00
fn ⌃ ⌥ f3ec5f744f rational.c: implement nil.to_r and Float#to_r 2022-10-24 17:31:52 -07:00
fn ⌃ ⌥ 91f8245a0c class.c (mrb_instance_alloc): raise error if NilClass/FalseClass.
MRB_TT_FALSE is equal to 0, so we have to explicitly check if the
class is either NilClass or FalseClass.
2022-10-24 07:57:28 -07:00
Yukihiro "Matz" Matsumoto 7cf3b57cba mruby-set/mrb_set.rb (<=>): update definition.
Set#<=> needs to be comparing sets to be subset/superset relation.
2022-10-24 07:53:52 +09:00
Yukihiro "Matz" Matsumoto 7acf756b6f mruby-set/mrb_set.rb: add __ prefix to internal methods. 2022-10-24 07:44:21 +09:00
Yukihiro "Matz" Matsumoto ca0db4a161 mruby-set/README.md: more cleanup after #5814 2022-10-24 07:42:53 +09:00
Yukihiro "Matz" Matsumoto b1fd3dc160 mruby-set/mrbgem.rake; remove test dependency to mruby-metaprog.
mruby-set no longer depends on mruby-metaprog by introducing the
internal `_hash` method.
2022-10-24 07:42:52 +09:00
Yukihiro "Matz" Matsumoto e9ee0f2953 mruby-set/set.rb (_hash): add utility function to access internal hash.
Since `instance_variable_get` is no longer in the core.
2022-10-24 07:42:52 +09:00
Yukihiro "Matz" Matsumoto d5e13a7f2a mruby-set/set.rb (do_with_enum): prefix _ to internal method. 2022-10-24 07:41:30 +09:00
Yukihiro "Matz" Matsumoto 59162ceb4e Merge pull request #5817 from FnControlRuby/set
mrb_set.rb: improve ruby/spec compliance.
2022-10-24 07:41:20 +09:00
fn ⌃ ⌥ b0a494c414 mrb_set.rb: improve ruby/spec compliance.
- Alias `#===` to `#include?`
- Alias `#filter!` to `#select!`
- Fix `#subset?` and `#proper_subset?` for Set-like objects.
- Fix `#==`
- Fix `#inspect` for self-referencing sets.
- Add `#<=>` and `#join`
2022-10-23 07:42:25 -07:00
Yukihiro "Matz" Matsumoto f5824029ad Merge pull request #5814 from jbampton/mruby-set-docs
Clean up the mruby-set README
2022-10-22 22:57:22 +09:00
fn ⌃ ⌥ fee8f540c6 parse.y: fix return/break/next with method call with args and block 2022-10-21 20:01:08 -07:00
fn ⌃ ⌥ e5b32e5598 codegen.c: exit headless case early if a condition is always true 2022-10-21 20:00:44 -07:00
John Bampton f78fdecfc8 Clean up the mruby-set README 2022-10-22 12:25:29 +10:00
Yukihiro "Matz" Matsumoto 2d57967afa Merge pull request #5813 from jbampton/fix-pre-commit
gha: fix pre-commit
2022-10-22 07:50:03 +09:00
John Bampton 2ebb001e76 gha: fix pre-commit
Run `pre-commit run --all-files`
2022-10-22 08:31:38 +10:00
Yukihiro "Matz" Matsumoto e8e7887efe Merge pull request #5809 from dearblue/dep-mruby-proc-binding
Needs `mruby-proc-ext` by `mruby-proc-binding`
2022-10-22 00:34:05 +09:00
Yukihiro "Matz" Matsumoto d459b82c35 Merge pull request #5810 from dearblue/add-depends
Add default sauce to `#add_dependency`
2022-10-22 00:33:52 +09:00
dearblue bbb04d257f Add default sauce to #add_dependency 2022-10-21 22:27:20 +09:00
dearblue 6adbbd8773 Needs mruby-proc-ext by mruby-proc-binding
The `mruby-proc_source_location()` function used in `src/proc-binding.c` of `mruby-proc-binding` is defined in `mruby-proc-ext`.
2022-10-21 21:44:06 +09:00
Yukihiro "Matz" Matsumoto 63f7db0fba stdlib.gembox: add mruby-set gem. 2022-10-21 14:14:51 +09:00
Yukihiro "Matz" Matsumoto dad0852944 mruby-set/mrbgem.rake: add test dependency.
The `instance_variable_get` has been separated to `mruby-metaprog` gem,
so we need to specify the gem as test dependency.
2022-10-21 14:12:10 +09:00
Yukihiro "Matz" Matsumoto 4c86a7a5c3 Add 'mrbgems/mruby-set/' from commit '68334311ac7386eef84f3034a256e7135a87625d'
git-subtree-dir: mrbgems/mruby-set
git-subtree-mainline: 3b55a09f91
git-subtree-split: 68334311ac
2022-10-21 13:56:07 +09:00
Yukihiro "Matz" Matsumoto 3b55a09f91 mruby-hash-ext/hash.c (hash_values_at): early return from the function. 2022-10-21 13:41:38 +09:00
Yukihiro "Matz" Matsumoto 33f97bccba array.c (mrb_ary_unshift): use mrb_get_argc() and mrb_get_argv(). 2022-10-21 13:31:32 +09:00
Yukihiro "Matz" Matsumoto c27ae4337d mruby-array-ext/array.c (mrb_ary_values_at): avoid mrb_get_args().
If your function doesn't call VM recursively, you can use mrb_get_argv()
instead of mrb_get_args(mrb, "*", ...).
2022-10-20 19:07:25 +09:00
Yukihiro "Matz" Matsumoto da8ef29fba array.c (mrb_ary_push_m): fixed a stupid bug. 2022-10-19 17:14:49 +09:00
Yukihiro "Matz" Matsumoto cd17e177a7 Merge pull request #5808 from FnControlRuby/regx
parse.y: fix NODE_REGX dump
2022-10-19 17:12:50 +09:00
fn ⌃ ⌥ 6ba44f64d5 parse.y: fix NODE_REGX dump 2022-10-18 20:56:00 -07:00
Yukihiro "Matz" Matsumoto bdb51d1af4 array.c (mrb_ary_push_m): adjust function order.
ary_modify() and ary_expand_capa() may cause garbage collection and may
make argv invalid (in the future).
2022-10-18 17:11:07 +09:00
Yukihiro "Matz" Matsumoto 3f286f1bfd array.c: make ary_modify_check() an alias to mrb_check_frozen(). 2022-10-17 21:59:22 +09:00
Yukihiro "Matz" Matsumoto 84c26870d2 mruby-errno/errno.c (mrb_errno_list): no need to check array type here. 2022-10-16 23:20:49 +09:00
Yukihiro "Matz" Matsumoto 5c2f3f72a4 mruby-array-ext/array.c (mrb_ary_slice_bang): refactor.
Use `mrb_ary_new_from_value()` instead of adding individual elements
using a loop.
2022-10-15 08:46:48 +09:00
Yukihiro "Matz" Matsumoto d84daa56fa mruby-struct/struct.c (mrb_struct_modify): remove the write barrier.
Instead of calling write barriers (mrb_write_barrier) in the function,
call field write barriers (mrb_field_write_barrier_value) from the
individual functions.
2022-10-14 15:54:09 +09:00
Yukihiro "Matz" Matsumoto 6c40d64327 mruby-struct/struct.c: refactoring. 2022-10-13 23:12:53 +09:00
Yukihiro "Matz" Matsumoto af9ce1f64c mruby-struct/struct.c: adjust spaces. 2022-10-12 22:02:21 +09:00
Yukihiro "Matz" Matsumoto 37a3252ed3 mruby-struct/struct.c: need to use MRB_TT_STRUCT. 2022-10-11 23:24:19 +09:00
Yukihiro "Matz" Matsumoto 83fc75f399 doc/guides/mrbconf.md: update description for the configuration file. 2022-10-10 22:28:51 +09:00
Yukihiro "Matz" Matsumoto e19d55dbdd AUTHORS: update entries [ci skip] 2022-10-10 22:23:11 +09:00
Yukihiro "Matz" Matsumoto 4cefb2cccd class.c (mt_get): fix a bug regarding inline method cache. 2022-10-10 22:23:10 +09:00
Yukihiro "Matz" Matsumoto 16a224e25d mrbconf.h: add MRB_USE_INLINE_METHOD_CACHE option description.
Currently it does not improve the performance (yet).
2022-10-10 22:23:10 +09:00
Yukihiro "Matz" Matsumoto 5d1d58d4d1 Merge pull request #5805 from dearblue/doc/another-bigint
Add `examples/mrbgems/mruby-YOUR-bigint`
2022-10-10 19:52:30 +09:00
Yukihiro "Matz" Matsumoto c01587672d Merge pull request #5806 from dearblue/doc/mrbconf
Induce configuration to the `build_config` file
2022-10-10 19:51:08 +09:00
dearblue 6f80f09547 Induce configuration to the build_config file 2022-10-10 18:22:05 +09:00
dearblue 8f0dba2985 Add examples/mrbgems/mruby-YOUR-bigint 2022-10-10 14:12:53 +09:00
Yukihiro "Matz" Matsumoto 9fe5fc441a Merge pull request #5803 from bovi/patch-1
Update year in LICENSE file
2022-10-10 00:13:50 +09:00
Daniel Bovensiepen Li c47038462f Update year to 2022 in mruby.h 2022-10-09 17:02:27 +08:00
Daniel Bovensiepen Li 8717ef86c0 Update year in LICENSE file 2022-10-09 15:40:06 +08:00
Yukihiro "Matz" Matsumoto 95bf3c0d99 Merge pull request #5802 from dearblue/doc/addfiles
Additional file patterns to be documented
2022-10-07 12:05:31 +09:00
Yukihiro "Matz" Matsumoto daf2e23487 Merge pull request #5801 from dearblue/doc/call-seq
Corrected document directive to "call-seq"
2022-10-07 12:04:59 +09:00
Yukihiro "Matz" Matsumoto 27619cebc0 mruby.h: update documentation for mrb_singleton_class(); ref #5800 2022-10-07 12:03:28 +09:00
Yukihiro "Matz" Matsumoto 5d13733352 vm.c (OP_ENTER): address fast path.
For method of fixed arguments only (no rest arguments, no keyword
arguments). Makes Fibonacci benchmark and ao_bench 4-5% faster.
2022-10-07 12:01:13 +09:00
Yukihiro "Matz" Matsumoto df8295cbeb Merge pull request #5800 from dearblue/doc/singleton-class
Added documentation for `mrb_singleton_class()`
2022-10-07 12:01:02 +09:00
dearblue 911c81e0f1 Additional file patterns to be documented 2022-10-06 21:57:43 +09:00
dearblue 366185a54d Corrected document directive to "call-seq" 2022-10-06 21:56:38 +09:00
dearblue dbc78cd861 Added documentation for mrb_singleton_class() 2022-10-06 21:56:07 +09:00
Yukihiro "Matz" Matsumoto 52562f7dcc Merge pull request #5799 from mruby/dependabot/github_actions/github/super-linter-4.9.7
build(deps): bump github/super-linter from 4.9.6 to 4.9.7
2022-10-05 23:13:09 +09:00
Yukihiro "Matz" Matsumoto 78c8b649e7 mruby-print/print.c: small refactoring.
Inline `printstr` function which is called from only one place.
2022-10-05 23:11:11 +09:00
dependabot[bot] 5f4b83f7c1 build(deps): bump github/super-linter from 4.9.6 to 4.9.7
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.6 to 4.9.7.
- [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.9.6...v4.9.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-05 14:08:56 +00:00
Yukihiro "Matz" Matsumoto 268f6dcab3 numeric.c (mrb_float_to_integer): isinf/isnan takes any float values.
So don't need to cast to `float`, just use `mrb_float`.
2022-10-04 11:05:15 +09:00
Yukihiro "Matz" Matsumoto 62e0e3eebe class.c (mrb_get_args_a): adjust spacing [ci skip] 2022-10-04 11:05:15 +09:00
Yukihiro "Matz" Matsumoto ea1bc39b52 mruby-proc-ext/proc.c (mrb_proc_inspect): update the format. 2022-10-04 11:05:15 +09:00
Yukihiro "Matz" Matsumoto e7e22ec6a8 mruby-method/method.c (method_to_s): add location information.
Test updated too.
2022-10-04 11:05:14 +09:00
Yukihiro "Matz" Matsumoto 0c9fd9cffd Merge pull request #5798 from boahc077/github_actions_token_permission
ci: add minimum GitHub token permissions for workflows
2022-10-04 11:05:07 +09:00
Ashish Kurmi 34c640b8be ci: add minimum GitHub token permissions for workflows
Signed-off-by: Ashish Kurmi <akurmi@stepsecurity.io>
2022-10-02 10:15:55 -07:00
Yukihiro "Matz" Matsumoto 751ac378bd codegen.c: should not skip rhs array; fix #5797
When the value of multiple assignment taken, the rhs array needs to be
generated anyway.
2022-10-01 15:18:45 +09:00
Yukihiro "Matz" Matsumoto db7d40be85 mruby-proc-ext/proc.c (mrb_proc_parameters): disclose unnamed arguments.
Unnamed arguments (*, **, &) should be disclosed in the parameter list.
The test is also updated.
2022-09-30 22:19:59 +09:00
Yukihiro "Matz" Matsumoto 7ced009d4c mruby-proc-ext/proc.c (mrb_proc_parameters): unify conditions. 2022-09-30 22:19:58 +09:00
Yukihiro "Matz" Matsumoto 3d766aa1ef mruby-proc-ext/proc.c (mrb_proc_parameters): count arguments first.
Instead of approximating using `irep->nlocals-1` (which should be bigger
than argument numbers).
2022-09-30 22:19:36 +09:00
Yukihiro "Matz" Matsumoto 3a2de4af00 mruby-proc-ext/proc.c (mrb_proc_parameters): skip empty block slot.
Unlike other formal arguments, a block argument has an empty slot even
when the block is not given.
2022-09-30 07:49:44 +09:00
Yukihiro "Matz" Matsumoto 7667b0fc04 mruby-proc-ext/proc.c (mrb_proc_parameters): reformat. 2022-09-30 07:43:57 +09:00
Yukihiro "Matz" Matsumoto 3c16423c0a mruby-method/method.c (method_to_s): making it compatible with CRuby. 2022-09-29 11:00:49 +09:00
Yukihiro "Matz" Matsumoto b73802d437 vm.c (cipop): wrong callinfo shifts fixed; ref #5791 2022-09-28 16:57:11 +09:00
Yukihiro "Matz" Matsumoto 5e1c16653f mruby-method/method.c (method_super_method): fixed module related bug.
When the method is defined in module, super_method started method
searching from wrong point. We needed to find ICLASS corresponding to the
module, then start searching super_method from the next ancestor.
2022-09-27 23:03:38 +09:00
Yukihiro "Matz" Matsumoto 0a0ab73e8d mruby-class-ext: #subclasses should be a method of Class, not Module. 2022-09-27 23:03:23 +09:00
Yukihiro "Matz" Matsumoto 0c475708de vm.c (cipop): use mrb_object_dead_p() to detect reclaimed block; #5791 2022-09-26 07:50:41 +09:00
Yukihiro "Matz" Matsumoto 993c8c1053 gc.c (final_marking_phase): move exception clearing after marking; #5789 2022-09-24 23:08:28 +09:00
Yukihiro "Matz" Matsumoto d9061bd969 numeric.c: update documents [ci skip]. 2022-09-23 22:13:28 +09:00
Yukihiro "Matz" Matsumoto a04b09d535 Merge pull request #5796 from dearblue/bigint-readme
Small improves for `mrbgems/mruby-bigint/README.md` [ci skip]
2022-09-22 10:53:57 +09:00
dearblue b7069dba41 Small improves for mrbgems/mruby-bigint/README.md [ci skip]
- Add a period at the end of the line because markdown will combine lines if there are no blank lines.
- Enable link to `README-fgmp.md`.
2022-09-21 22:50:47 +09:00
Yukihiro "Matz" Matsumoto 07470eb538 mruby-exit.c: make exit() to raise SystemExit exception.
Now it allows error handlers to work, unlike `exit!`.
2022-09-21 22:37:23 +09:00
Yukihiro "Matz" Matsumoto 11504318b8 string-ext/string.rb: String#prepend to take multiple arguments. 2022-09-20 18:31:04 +09:00
Yukihiro "Matz" Matsumoto 4cba1b49c0 string-ext/string.c: String#concat to take multiple arguments. 2022-09-20 18:26:23 +09:00
Yukihiro "Matz" Matsumoto a4099ff776 enum-ext/enum.rb: add Enumerable#sum 2022-09-19 12:31:11 +09:00
Yukihiro "Matz" Matsumoto 81f98a3925 vm.c (cipop): check type of the callinfo::blk; fix #5791
Since `callinfo::blk` is not marked in the GC, it may be reclaimed in
the sweep phase. When it reclaimed, it will become either (a) a non Proc
object, or (b) a Proc object that happen to have the same address.

For case (a), adding `b->tt == MRB_TT_PROC` check works. We should avoid
the following `MRB_PROC_STRICT_P()` and `MRB_PROC_ENV()` operations for
non Proc objects.

For case (b), `MRB_PROC_ENV(b) == CI_ENV(&c->ci[-1])` check should work.
Unrelated Proc objects should be filtered by the check.

We don't need to clear `callinfo::blk` by `NULL` because the callinfo
struct will be discarded afterward in the `cipop()` function.
2022-09-19 08:35:36 +09:00
Yukihiro "Matz" Matsumoto 5b62fbc0fc array.c (mrb_ary_concat_m): Array#concat to take multiple arguments. 2022-09-19 08:25:00 +09:00
Yukihiro "Matz" Matsumoto 9caa4d642c errno.rb: fixed a typo. 2022-09-18 08:01:07 +09:00
Yukihiro "Matz" Matsumoto 3d125aeb89 errno.c (mrb_exxx_init): simplify the function.
Code duplication with mrb_sce_init has been unified.
2022-09-18 07:59:36 +09:00
Yukihiro "Matz" Matsumoto db536da412 errno.c (mrb_sce_sys_fail): SystemCallError may be overridden; fix #5793 2022-09-18 00:07:28 +09:00
Yukihiro "Matz" Matsumoto a5d7326eaa Merge pull request #5795 from jbampton/pre-commit-autoupdate
pre-commit autoupdate, fix spelling, update codespell.txt
2022-09-18 00:06:36 +09:00
John Bampton 2990aaa343 pre-commit autoupdate, fix spelling, update codespell.txt
https://pre-commit.com/#pre-commit-autoupdate
2022-09-18 00:22:55 +10:00
Yukihiro "Matz" Matsumoto 71d5cae016 Merge pull request #5792 from dearblue/stderr
Retrieve the `StandardError` class from `mrb_state`
2022-09-17 22:48:50 +09:00
Yukihiro "Matz" Matsumoto dd5a9f74d8 Merge pull request #5794 from jbampton/fix-makefile
Fix Makefile. Change `lint` to `check`
2022-09-17 22:45:38 +09:00
John Bampton d0ba1fb3ca Fix Makefile. Change lint to check 2022-09-17 23:23:35 +10:00
dearblue 50ea98e76d Retrieve the StandardError class from mrb_state 2022-09-17 22:03:52 +09:00
Yukihiro "Matz" Matsumoto a9d0e9a412 Makefile,Rakefile: rename lint target to check; #5790
The pre-commit check does some static analysis but the term lint is used
as static analysis of software code under the UNIX environment. So we
have renamed the target `check`.
2022-09-17 16:44:24 +09:00
Yukihiro "Matz" Matsumoto 52b2e12f07 numeric_ext.c: implement Integer#digits method.
Which is added in Ruby 2.4.
2022-09-17 16:43:06 +09:00
Yukihiro "Matz" Matsumoto bd1310c9f9 gc.c (incremental_gc_finish): rename the function.
incremental_gc_until() are always called with MRB_GC_STATE_ROOT.
So no need to supply it from outside.
2022-09-17 16:43:06 +09:00
Yukihiro "Matz" Matsumoto b774a004a0 Merge pull request #5790 from jbampton/add-lint-target-to-make
Add `lint` target to the Makefile
2022-09-17 16:41:16 +09:00
John Bampton b466271f16 Add lint target to the Makefile
Add `lint` task to the Rakefile

Runs `pre-commit run --all-files`
2022-09-16 13:26:25 +10:00
Yukihiro "Matz" Matsumoto 74b8bbd8b3 TODO.md: update [ci skip]
Remove bigint entry that we have implemented finally.
2022-09-15 06:43:11 +09:00
Yukihiro "Matz" Matsumoto 97a419f540 gc.c (clear_error_object): need to mark class of error objects; ref #5789 2022-09-13 22:20:34 +09:00
Yukihiro "Matz" Matsumoto b5677bff1f gc.c (final_marking_phase): clear error objects before sweep; close #5789
Some error objects are referenced from `mrb_state`, and previously they
are simply marked as root objects. But when they are not referenced from
other part of the program, they are no longer used at the current incarnation.
That means we can safely reclaim their child objects (their messages and
backtrace information).
2022-09-13 07:16:38 +09:00
Yukihiro "Matz" Matsumoto b716bf005e mruby-range-ext/range.c: use the reference from mrb structure.
Avoid `mrb_class_get()` if possible.
2022-09-12 10:29:45 +09:00
Yukihiro "Matz" Matsumoto d72d26afcb mruby-string-ext/string.c: use the reference from mrb structure. 2022-09-12 10:27:31 +09:00
Yukihiro "Matz" Matsumoto 3662d3d9da fixup! numeric_ext.c: use the reference from mrb structure. 2022-09-12 10:27:30 +09:00
Yukihiro "Matz" Matsumoto fc85523cf1 numeric_ext.c: use the reference from mrb structure. 2022-09-12 10:27:29 +09:00
Yukihiro "Matz" Matsumoto f05574606e mruby-numeric-ext: add ceildiv test with Float and Rational. 2022-09-12 10:27:29 +09:00
Yukihiro "Matz" Matsumoto b6d7564846 numeric_ext.rb: add Integer#ceildiv. 2022-09-12 10:27:28 +09:00
Yukihiro "Matz" Matsumoto ed28547553 doc/guides/mrbconf.md: updates. 2022-09-12 10:27:27 +09:00
Yukihiro "Matz" Matsumoto 3d26993458 AUTHORS: update entries [ci skip] 2022-09-06 13:49:30 +09:00
Yukihiro "Matz" Matsumoto b06fef65ea mruby-exit.c: add reference to exit method.
Currently `exit` works as `exit!` (no handler). It should be fixed
soon.
2022-09-05 23:36:04 +09:00
Yukihiro "Matz" Matsumoto d508c94f0e mruby-exit.c: add exit! method. 2022-09-05 23:35:37 +09:00
Yukihiro "Matz" Matsumoto 6ff00810c6 Merge pull request #5788 from ksss/patch-1
Fix doc for limitation
2022-09-05 14:46:24 +09:00
Yuki Kurihara 9d6cb6ecff Fix doc for limitation
`binding` has been supported since 3.1.0.
2022-09-05 12:12:37 +09:00
Yukihiro "Matz" Matsumoto 966d90e182 src/readfloat.c: renamed from readflt.c 2022-09-05 07:30:13 +09:00
Yukihiro "Matz" Matsumoto 4669d43f50 error.h: move rbreak_tag definitions to src/vm.c. 2022-09-05 07:30:12 +09:00
Yukihiro "Matz" Matsumoto bf16315b70 mruby-exit/exit.c: add fallback definition of constants.
- EXIT_SUCCESS
- EXIT_FAILURE
2022-09-05 07:30:12 +09:00
Yukihiro "Matz" Matsumoto 9f47f11abd math.c: update prototype style. 2022-09-05 07:30:12 +09:00
Yukihiro "Matz" Matsumoto 0cc361990c Merge pull request #5787 from dearblue/count_objects
Improves `ObjectSpace.count_objects`
2022-09-05 07:30:03 +09:00
dearblue c123c49ac4 Improves ObjectSpace.count_objects
- Support for `MRB_TT_STRUCT`, `MRB_TT_BREAK` and `MRB_TT_BIGINT`.
- Performs symbol value embedding with `MRB_SYM()`.
2022-09-04 20:53:18 +09:00
Yukihiro "Matz" Matsumoto eecb6cc080 vm.c (cipush): push block information in the callinfoa; fix #5786 2022-09-01 18:57:19 +09:00
Yukihiro "Matz" Matsumoto 4f0679bb86 pack.c (pack_unpack): small refactoring. 2022-08-31 23:29:12 +09:00
Yukihiro "Matz" Matsumoto 3643f067c2 proc.h: remove unused env flags.
- MRB_ENV_TOUCHED
- MRB_ENV_HEAPED
2022-08-31 07:27:14 +09:00
Yukihiro "Matz" Matsumoto 15e9b09bef pack.c (hex2int): should return signed integer. 2022-08-30 18:08:05 +09:00
Yukihiro "Matz" Matsumoto 0645c4536b readflt.c: small style modifications. 2022-08-29 15:14:46 +09:00
Yukihiro "Matz" Matsumoto dfeda0acc8 random.c: remove Random::DEFAULT. 2022-08-28 08:01:59 +09:00
Yukihiro "Matz" Matsumoto 8c1b2ee0bb numeric_ext.c (int_powm): avoid integer overflow by modulo first.
We do not fall back to big integer calculation unless absolutely necessary.
2022-08-27 22:18:38 +09:00
Yukihiro "Matz" Matsumoto 5b1e14b96b numeric_ext.c (int_powm): better error message. 2022-08-26 14:27:54 +09:00
Yukihiro "Matz" Matsumoto f5a3f4f2ea bigint.c (mpz_powm): avoid stack allocations. 2022-08-26 14:27:54 +09:00
Yukihiro "Matz" Matsumoto b158581118 bigint.c (udiv): xx%yy should have been xx when xx<yy. 2022-08-26 14:19:10 +09:00
Yukihiro "Matz" Matsumoto 4e0da4f0d8 bigint.c (mpz_init_set): fully initialize mpz_t first. 2022-08-26 14:18:30 +09:00
Yukihiro "Matz" Matsumoto 62c36c03b3 bigint.c (mpz_set_int): fixed a bug in integer size check. 2022-08-26 12:55:29 +09:00
Yukihiro "Matz" Matsumoto 6598732892 numeric_ext.c (int_powm): try bigint pow when overflow. 2022-08-26 12:37:54 +09:00
Yukihiro "Matz" Matsumoto b4785044d5 bigint.c (mrb_bint_powm): fix a return value bug. 2022-08-26 12:13:24 +09:00
Yukihiro "Matz" Matsumoto ef1974099d bigint.c (mrb_bint_powm): check zero division first. 2022-08-26 12:10:22 +09:00
Yukihiro "Matz" Matsumoto 818ca413af symbol.c (find_symbol): use mrb_byte_hash() instead of symhash(). 2022-08-25 18:50:17 +09:00
Yukihiro "Matz" Matsumoto b832856978 Merge branch 'sasq64-get-args-array' 2022-08-24 16:50:02 +09:00
Yukihiro "Matz" Matsumoto d4e649f8bf class.c: refactoring mrb_get_args(); ref #5596 2022-08-24 16:49:10 +09:00
Yukihiro "Matz" Matsumoto eaa89fbe2a Merge branch 'get-args-array' of https://github.com/sasq64/mruby into sasq64-get-args-array 2022-08-24 16:46:00 +09:00
Yukihiro "Matz" Matsumoto 7c0f7e2665 parse.y: allow NUMPARAMs (e.g. _1) as hash keys; fix #5785 2022-08-23 18:36:26 +09:00
Yukihiro "Matz" Matsumoto f587edd849 pack.c: need extra space for the terminal NULL. 2022-08-23 15:05:27 +09:00
Yukihiro "Matz" Matsumoto a641f146fc codegen.c (gen_assignment): use nsym() instead of simple type cast. 2022-08-23 11:30:54 +09:00
Yukihiro "Matz" Matsumoto 108875c972 codegen.c (gen_assignment): support NODE_COLON3 as lhs; fix #5752
We should allow `::C = 1` for example.
2022-08-23 07:53:23 +09:00
Yukihiro "Matz" Matsumoto c6daaa8c07 struct.c (make_struct): use preallocated symbols. 2022-08-22 16:12:59 +09:00
Yukihiro "Matz" Matsumoto 35a5678899 mruby-pack/pack.c: make base64_dec_tab a static array of chars. 2022-08-21 19:25:16 +09:00
Yukihiro "Matz" Matsumoto 9b4bbed047 vm.c (OP_SEND): remove scoping braces; ref #5775 2022-08-20 21:24:30 +09:00
Yukihiro "Matz" Matsumoto 43c5cd2dea Merge pull request #5775 from dearblue/integrate-super
Integrate the second half of `OP_SUPER` with `OP_SENDB`
2022-08-20 21:23:16 +09:00
Yukihiro "Matz" Matsumoto c7d2eaa3e8 Revert "vm.c (mrb_funcall_with_block): avoid use of MRB_METHOD_CFUNC_P()."
This reverts commit c28ac75a87.
This change caused SEGV in the case like the following:

```
class C
  class << self
    attr_accessor :a
    alias :const_missing :a=
  end
end
p C::CONST
```
2022-08-20 12:58:17 +09:00
Yukihiro "Matz" Matsumoto 563010697e doc/guides/compile.md: add rake clean tip; ref #5784 [ci skip] 2022-08-20 12:54:30 +09:00
dearblue 9c3e0145eb Directly write ARGUMENT_NORMALIZE()
The common parts of `OP_SEND` and `OP_SUPER` have been merged so they no longer need to be independent.
This effectively means revert commit d0e8637e30.
2022-08-20 10:46:46 +09:00
dearblue a7bfddecdb Integrate the second half of OP_SUPER with OP_SENDB
Not exactly the same, but I think there were some things that should have been fixed in the original `OP_SUPER`.
2022-08-20 10:46:46 +09:00
Yukihiro "Matz" Matsumoto 28d1e794db vm.c (mrb_funcall_with_block): need to initialize arginfo. 2022-08-19 23:17:23 +09:00
Yukihiro "Matz" Matsumoto 82b98bb8a4 vm.c (funcall_args_capture): move argument set-up in the function; #5777 2022-08-18 13:00:08 +09:00
Yukihiro "Matz" Matsumoto c28ac75a87 vm.c (mrb_funcall_with_block): avoid use of MRB_METHOD_CFUNC_P(). 2022-08-18 12:58:30 +09:00
Yukihiro "Matz" Matsumoto 772fe11d83 vm.c (stack_copy): use early return. 2022-08-18 12:57:51 +09:00
Yukihiro "Matz" Matsumoto d577221c2d vm.c (stack_copy) check if src is NULL before memcpy(); ref #5777
Because 2nd argument of memcpy() is declared to never be null.
2022-08-18 08:17:44 +09:00
Yukihiro "Matz" Matsumoto 8c08324d2f Merge pull request #5777 from dearblue/gc-on-cipush
Protect prepared arguments when GC occurs in `cipush()`
2022-08-18 08:09:05 +09:00
Yukihiro "Matz" Matsumoto 490d805577 Merge pull request #5783 from jbampton/patch-1
Use Super-Linter Slim Image
2022-08-17 12:58:54 +09:00
John Bampton 890d48463a Use Super-Linter Slim Image
Should improve workflow time.

https://github.com/github/super-linter#slim-image
2022-08-17 08:53:06 +10:00
Yukihiro "Matz" Matsumoto 993c388cce bigint.c (mrb_bint_idiv): remove unused function. 2022-08-16 15:45:54 +09:00
Yukihiro "Matz" Matsumoto 4107cc95a2 internal.c: move some functions to <mruby/internal.h>.
Ref #5776
2022-08-15 18:13:59 +09:00
Yukihiro "Matz" Matsumoto 37dc1be74b internal.c: move mrb_method_missing prototype to <mruby/internal.h>.
Ref #5776
2022-08-15 17:25:08 +09:00
Yukihiro "Matz" Matsumoto db20cbce53 src/class.c: move method_missing from Kernel to BasicObject; fix #5776
In ISO30170, method_missing is defined under Kernel, but BasicObject is
introduced after ISO and we should move (and have moved) some Kernel
methods to BasicObject, e.g. instance_eval, equal?, etc.

We have missed method_missing (mostly because built-in method_missing
in VM handles most of the case).
2022-08-15 16:41:19 +09:00
Yukihiro "Matz" Matsumoto 6a7fa26411 Merge pull request #5782 from haramako/crash-on-resume-from-cfunc
Protect when call Fiber#resume from C function.
2022-08-14 17:31:56 +09:00
Yukihiro "Matz" Matsumoto 83e8fd54f4 Merge pull request #5779 from dearblue/debug.h
Make definition of `mrb_irep` by `typedef` in `mruby.h`
2022-08-14 17:27:11 +09:00
HARADA Makoto dc65b1faf1 fiber.c: add fiber_check_cfunc in fiber_resume(). 2022-08-13 15:52:52 +09:00
Yukihiro "Matz" Matsumoto 3365388164 Merge pull request #5780 from dearblue/doc/mrb_value
Match the `mrb_value` documentation to the current implementation
2022-08-13 14:06:26 +09:00
dearblue 61c68927a2 Match the mrb_value documentation to the current implementation 2022-08-12 22:35:35 +09:00
dearblue 1e72c61b0f Make definition of mrb_irep by typedef in mruby.h
Eliminated invisible dependencies from `mruby/debug.h` to `mruby/irep.h`.
2022-08-12 22:25:27 +09:00
Yukihiro "Matz" Matsumoto b891c63ae1 numeric.c: calculate correct rounding for bigger numbers. 2022-08-12 12:31:38 +09:00
Yukihiro "Matz" Matsumoto 1a95da4ac2 numeric.c (mrb_cmp): inline big-integer comparison. 2022-08-12 12:24:04 +09:00
Yukihiro "Matz" Matsumoto d14fd77148 numeric.c (mrb_int_pow): make the function to take 2 operands. 2022-08-12 12:19:21 +09:00
Yukihiro "Matz" Matsumoto 15184c50f7 Merge pull request #5778 from dearblue/shadowing-insn
Avoid shadowing `insn` variables in `OP_EXT3`
2022-08-12 12:18:32 +09:00
dearblue 170118e4de Avoid shadowing insn variables in OP_EXT3 2022-08-12 11:12:18 +09:00
dearblue 3c2fcb5e74 Protect prepared arguments when GC occurs in cipush()
When `cipush()` extends "callinfo", GC may occur.
In this case, there was a problem that prepared arguments were spoiled depending on the situation when `cipush()` is called.
Therefore, in the problematic part, `cipush()` is prepared first, and then the arguments are prepared.

The reason for passing `CINFO_DIRECT` to `cipush()` is that it is simply ignored in the `MRB_CATCH()` part of `mrb_vm_exec()`.

Also, the argument processing parts of `mrb_funcall_with_block()` and `mrb_yield_with_class()` are combined and made independent as `funcall_args_capture()`.
2022-08-11 15:25:29 +09:00
Yukihiro "Matz" Matsumoto 8cdf14c06b numeric.c (int_rounding): unify code duplication. 2022-08-10 13:38:24 +09:00
Yukihiro "Matz" Matsumoto 4e735eb8ba numeric.c (flo_rounding): refactor float rounding methods. 2022-08-10 13:38:24 +09:00
Yukihiro "Matz" Matsumoto 7ffdb4c30e numeric.c: implement ndigits truncation for rounding methods.
- ceil
- floor
- round
- truncate
2022-08-10 13:38:23 +09:00
Yukihiro "Matz" Matsumoto abec98c681 numeric.c: implement ceil, floor, round, truncate methods in C.
- ISO 15.2.8.3.14 Integer#ceil
- ISO 15.2.8.3.17 Integer#floor
- ISO 15.2.8.3.20 Integer#round
- ISO 15.2.8.3.26 Integer#truncate
2022-08-10 13:38:23 +09:00
Yukihiro "Matz" Matsumoto 7340ad1c8b Merge pull request #5764 from dearblue/red-protect
Check `MRB_GC_RED` with `mrb_gc_protect()`
2022-08-09 23:01:55 +09:00
Yukihiro "Matz" Matsumoto 9f7cef2d42 Merge pull request #5763 from dearblue/realloc-fullgc
Perform Full-GC from `mrb_realloc_simple()` by `MRB_GC_STRESS + MRB_DEBUG`
2022-08-09 14:00:18 +09:00
Yukihiro "Matz" Matsumoto 78a3200fa5 etc.c (mrb_obj_id): separate object_id and hash values.
It's OK for hash values to conflict. But object_id is not (in theory).
2022-08-08 23:00:13 +09:00
dearblue 520df805a9 Check MRB_GC_RED with mrb_gc_protect()
When `gc_protect()` is called from `mrb_obj_alloc()`, unnecessary overhead is eliminated.
2022-08-08 22:10:22 +09:00
dearblue 71c398f298 Perform Full-GC from mrb_realloc_simple() by MRB_GC_STRESS + MRB_DEBUG
It also fills the GC'ed object area with `0xff` for debugging purposes.
2022-08-08 21:44:11 +09:00
Yukihiro "Matz" Matsumoto f653e89227 etc.c: refactor boxing/unboxing float values. 2022-08-07 20:43:31 +09:00
Yukihiro "Matz" Matsumoto 521072ca3a mruby-struct/struct.rb: include Enumerable module.
Struct.ancestors should be [Struct, Enumerable, Object, Kernel, BasicObject]
2022-08-06 16:03:26 +09:00
Yukihiro "Matz" Matsumoto a0c02e0a64 Merge pull request #5765 from dearblue/mrb_env_unshare
Improve out-of-memory tolerance of `mrb_env_unshare()`
2022-08-06 16:03:11 +09:00
Yukihiro "Matz" Matsumoto 5eaef1cf25 mruby-time/time.c: properly generate hash from time objects. 2022-08-06 06:43:42 +09:00
Yukihiro "Matz" Matsumoto 579379c517 rational.c (rational_hash): generate hash code from rational numbers. 2022-08-06 06:43:42 +09:00
Yukihiro "Matz" Matsumoto 25f9d2f65a complex.c (complex_hash): generate hash code from complex numbers. 2022-08-06 06:43:42 +09:00
Yukihiro "Matz" Matsumoto a7c3d59971 kernel.c (mrb_obj_hash): generate hash value for big-integers. 2022-08-06 06:43:41 +09:00
Yukihiro "Matz" Matsumoto 6d683785f9 etc.c: use mrb_byte_hash instead of simple hash function. 2022-08-06 06:43:41 +09:00
Yukihiro "Matz" Matsumoto 61f447e5df string.c (mrb_byte_hash): separate byte hashing functions. 2022-08-06 06:43:41 +09:00
Yukihiro "Matz" Matsumoto 62a35e502b bigint.c: rename double sized mp_limb.
- mp_limb2 -> mp_dbl_limb
- mp_limb2s -> mp_dbl_limb_signed
2022-08-06 06:43:41 +09:00
Yukihiro "Matz" Matsumoto 1718d9bafb bigint.c: add type cast to mp_limb. 2022-08-06 06:43:40 +09:00
Yukihiro "Matz" Matsumoto b7bc326b4c bigint.c (mpz_set_int): check mp_limb overflow from mrb_int. 2022-08-06 06:43:40 +09:00
Yukihiro "Matz" Matsumoto 798a2b1888 Merge pull request #5774 from dearblue/bidx-assert
Fixed assertion in `ARGUMENT_NORMALIZE()` for `bidx`.
2022-08-06 06:43:28 +09:00
dearblue 5bc15dd69b Fixed assertion in ARGUMENT_NORMALIZE() for bidx.
It should be compared to the `irep->nregs` value as is.

At the same time, discovered problems have been fixed.
2022-08-04 22:43:06 +09:00
Yukihiro "Matz" Matsumoto 72f2ac155e Merge pull request #5772 from mruby/dependabot/github_actions/github/super-linter-4.9.6
build(deps): bump github/super-linter from 4.9.5 to 4.9.6
2022-08-04 08:18:08 +09:00
Yukihiro "Matz" Matsumoto e2decd0528 Merge pull request #5773 from jbampton/run-pre-commit
Remove whitespace
2022-08-04 08:17:26 +09:00
John Bampton 791410ba3f Remove whitespace
pre-commit run --all-files
2022-08-04 00:51:03 +10:00
dependabot[bot] cf8d1eddf6 build(deps): bump github/super-linter from 4.9.5 to 4.9.6
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.5 to 4.9.6.
- [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.9.5...v4.9.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-03 14:05:47 +00:00
Yukihiro "Matz" Matsumoto 84b53fc1ee Merge pull request #5771 from sakisakira/master
Reenabling building for Android NDK
2022-08-03 12:34:12 +09:00
SAkira a.k.a. Akira Suzuki 4610fa55b9 Enabled building for Android again with NDK 25.0. 2022-08-03 08:23:54 +09:00
Yukihiro "Matz" Matsumoto 441c6ea30d bigint.c (udiv): check out of bound memory access. 2022-08-02 13:36:36 +09:00
Yukihiro "Matz" Matsumoto 75bd101685 AUTHORS: update entries [ci skip] 2022-08-02 09:04:47 +09:00
Yukihiro "Matz" Matsumoto 90e75f983e Merge pull request #5769 from dearblue/opdef-proc
Protected `proc` objects given by `OP_DEF` on registers
2022-08-01 17:46:09 +09:00
Yukihiro "Matz" Matsumoto 51f404be33 Merge pull request #5768 from dearblue/hash-expansion
Fix property between `ar_set()` and `ht_init()`.
2022-08-01 17:37:25 +09:00
Yukihiro "Matz" Matsumoto c32a8a71e9 Merge pull request #5767 from dearblue/fiber-gc
Fix `SIGSEGV` caused by GC during fiber initialization
2022-08-01 17:17:29 +09:00
Yukihiro "Matz" Matsumoto dd00724f30 Merge pull request #5766 from dearblue/red-write-barrier
Ignore `MRB_GC_RED` objects in `mrb_field_write_barrier()`
2022-08-01 17:15:54 +09:00
Yukihiro "Matz" Matsumoto c34bb7825a mruby-time/time.c: add Time#eql? to compare. 2022-08-01 16:29:35 +09:00
Yukihiro "Matz" Matsumoto 9dfbcbae7b object.c (mrb_equal): support big-integers. 2022-08-01 16:26:02 +09:00
Yukihiro "Matz" Matsumoto 4fb018d407 object.c (mrb_equal): shortcut per object comparison.
To reduce the chance to call mrb_funcall(), which is heavy and
unfriendly to fiber context switches.
2022-08-01 16:24:48 +09:00
Yukihiro "Matz" Matsumoto 585d80e0a7 numeric.c (num_eql): move eql? definition to Numeric class.
We no longer need Float#eql? etc.
2022-08-01 16:20:35 +09:00
Yukihiro "Matz" Matsumoto 569a8910af bigint.c: check division by zero errors. 2022-08-01 13:58:05 +09:00
Yukihiro "Matz" Matsumoto b5a3fe5276 Merge pull request #5770 from dearblue/doc-1
Avoid comparing `mrb_bool` to integer values in the documentation
2022-08-01 13:57:54 +09:00
dearblue 5215b9ce8b Avoid comparing mrb_bool to integer values in the documentation 2022-07-31 20:38:31 +09:00
Yukihiro "Matz" Matsumoto 9198b9c7db Merge pull request #5760 from jbampton/fix-type-use-array
CodeQL: fix type use array
2022-07-31 08:01:59 +09:00
Yukihiro "Matz" Matsumoto d28009ebd8 mruby-print/print.rb: reduce explicit return values; ref #5762
By making __printstr__ to return nil.
2022-07-31 07:56:06 +09:00
Yukihiro "Matz" Matsumoto a8e6b840ea Merge pull request #5762 from dearblue/iso-puts
Removed unnecessary ISO section numbers for `Kernel.puts` [ci skip]
2022-07-31 07:55:46 +09:00
dearblue 2d9ecc660e Fix property between ar_set() and ht_init().
If GC occurs in `mrb_realloc()` in `ht_init()` called from `ar_set()`, the following inconsistency occurs:
- If `h_ht_on()` is called before `mrb_realloc()`, `hash->hsh.ht` is referenced instead of `hash->hsh.ea` during GC.
- If the pointer is changed by `ea_adjust()` in `ar_set()`, `hash->hsh.ea` (`hash->hsh.ht`) is referenced in GC before the change.

These modifications can be resolved by changing the order of processing.

However, if a `NoMemoryError` exception is raised, it is presumed that the size of the "AR" will be exceeded and the unintended state will continue.
To prevent this, elements should be added after they have been converted to "HT".
2022-07-30 23:20:48 +09:00
dearblue 43fdce5019 Protected proc objects given by OP_DEF on registers
If a GC occurs in `mrb_calloc()` called by `mt_rehash()` inside `mrb_define_method_raw(), the `proc` may be destroyed.
2022-07-30 22:34:50 +09:00
dearblue a82a3533e6 Fix SIGSEGV caused by GC during fiber initialization
GC may occur in the `c->stbase = mrb_malloc()` part of the `fiber_init()` function.
The `SIGSEGV` happens because it references the `c->ci->stack` field without checking `c->ci`.
This is caused by #5272.
2022-07-30 22:32:02 +09:00
dearblue 2eefee0d6a Ignore MRB_GC_RED objects in mrb_field_write_barrier() 2022-07-30 22:32:01 +09:00
dearblue be3c0e5f4f Improve out-of-memory tolerance of mrb_env_unshare()
Exception raising can now be controlled by the caller.

The main purpose on this patch is:

- Suppress exceptions from `obj_free()` in `src/gc.c` with `mrb_env_unshare()`.

- Consider the possibility that calls to `mrb_malloc()` may cause `e` objects to be subject to GC.

  When control is returned to `mrb_env_unshare()`, `struct free_obj::next` in the same offset as `struct REnv::stack` is rewritten.
  Unexpected results then occur when the object is reused.
  Also, if `mrb_heap_page` containing an `e` object is freed, it may cause `SIGSEGV` at that point.

- Protects the value of the stack on `callinfo` that just exits if GC occurs inside `mrb_env_unshare()`.

  ```ruby
  def m
    b = -> { b }
  end

  p m.call
  # => print block object, not nil
  ```

  This patch does not raise a `NoMemoryError` exception in `mrb_env_unshare()` and can detect that error.
  Thus, the problem fixed in # 3087 is not resurrected.

Also, it may seem that this patch should suppress exceptions raised by `cipop()` during `mrb_protect_error()` and `mrb_vm_exec()` unwinds.
However, `mrb_callinfo::u.env` by `CINFO_DIRECT` is not seen to be set.
So in that case `mrb_env_unshare()` is assumed to be originally exception-free.
2022-07-30 22:32:00 +09:00
Yukihiro "Matz" Matsumoto 9e38aa8948 Merge pull request #5761 from jbampton/fix-grammar
docs: fix grammar
2022-07-30 15:56:48 +09:00
dearblue 2e6d2abf09 Removed unnecessary ISO section numbers for Kernel.puts [ci skip]
The `Kernel.puts` method is defined in the `mrbgems/mruby-print/mrblib/print.rb` file.
2022-07-30 11:54:23 +09:00
Yukihiro "Matz" Matsumoto b77b8f4deb numeric.c (flo_ceil_floor): negate after converting integer to float.
Otherwise integer negate may overflow.
2022-07-30 09:08:42 +09:00
Yukihiro "Matz" Matsumoto 9d774bc011 numeric.c (flo_ceil_floor): return bigint if possible. 2022-07-30 09:08:02 +09:00
Yukihiro "Matz" Matsumoto eb392cb643 numeric.c (mrb_float_to_integer): check for RangeError.
Otherwise flo_to_i raises FloatDomainError instead.
2022-07-30 09:06:49 +09:00
Yukihiro "Matz" Matsumoto e4bcd8a96a numeric.c (mrb_float_to_integer): unify with flo_to_i(). 2022-07-30 09:05:21 +09:00
Yukihiro "Matz" Matsumoto 5af98f2088 numeric.c (flo_ceil_floor): add exact number check. 2022-07-30 09:01:24 +09:00
Yukihiro "Matz" Matsumoto aebf75fed4 bigint.c (mrb_bint_as_int): change overflow message.
From "integer too big" to "integer out of range" because the integer can
be too small if it's negative.
2022-07-30 08:58:30 +09:00
Yukihiro "Matz" Matsumoto b8d3bc0eae numeric.c: move FloatDomainError description to the sufficient place. 2022-07-30 08:46:06 +09:00
Yukihiro "Matz" Matsumoto 89b0c7d7ab complex.c (mrb_complex_to_i): return bigint if possible. 2022-07-30 08:44:15 +09:00
Yukihiro "Matz" Matsumoto 273ca4d4f6 tasks/toolchains/gcc.rake: remove -lm on Windows; #5757 2022-07-30 07:33:45 +09:00
Yukihiro "Matz" Matsumoto 6da34fa735 numeric.c (int_div): add checks for division by zero. 2022-07-29 17:48:02 +09:00
John Bampton 9521e4e974 docs: fix grammar 2022-07-29 16:30:46 +10:00
John Bampton 5cae37abe5 CodeQL: fix type use array 2022-07-29 14:44:02 +10:00
Yukihiro "Matz" Matsumoto 387f383eeb bigint.c (mrb_sizeinbase): cast to remove a signedness warning. 2022-07-29 10:26:04 +09:00
Yukihiro "Matz" Matsumoto 5df3f8221d bigint.c (lzb): check x==0 before calling clz().
In theory, we should not call lzb() with 0, and we assume checks are
done before calling it. But we got a report that we call lzb(0) in some
use-case. We could not reproduce the issue, so we add this guard.
2022-07-29 10:24:41 +09:00
Yukihiro "Matz" Matsumoto 64ea7f0930 doc/guides/link.md: fixed typo. 2022-07-29 10:24:41 +09:00
Yukihiro "Matz" Matsumoto 23cb2a73ff bigint.c (mpz_move): reduce copying of digits arrays. 2022-07-29 10:24:41 +09:00
Yukihiro "Matz" Matsumoto dcf9e32870 Merge pull request #5759 from jbampton/lint-modified-files
Super-Linter: Lint modified files only
2022-07-29 10:24:01 +09:00
John Bampton 9ddc6c1915 Super-Linter: Lint modified files only
Following the basic example shown here

https://github.com/github/super-linter#example-connecting-github-action-workflow
2022-07-29 09:19:28 +10:00
Yukihiro "Matz" Matsumoto 33b11daca7 Merge pull request #5758 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2022-07-29 07:43:59 +09:00
John Bampton 718547be2b pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2022-07-29 08:29:12 +10:00
Yukihiro "Matz" Matsumoto d0780c0525 vm.c: should cast bigint length to unsigned.
Otherwise length>127 would be considered as negative.
2022-07-28 15:21:32 +09:00
Yukihiro "Matz" Matsumoto de2ea3c389 bigint.c (udiv): avoid integer underflow. 2022-07-28 15:07:22 +09:00
Yukihiro "Matz" Matsumoto 9592b7e4ec mruby_proto_fuzzer.cpp: try to print the code before evaluating it. 2022-07-27 13:42:28 +09:00
Yukihiro "Matz" Matsumoto 4620485135 Merge pull request #5756 from mruby/dependabot/github_actions/github/super-linter-4.9.5
build(deps): bump github/super-linter from 4.9.4 to 4.9.5
2022-07-27 09:23:05 +09:00
dependabot[bot] a65f953356 build(deps): bump github/super-linter from 4.9.4 to 4.9.5
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.4 to 4.9.5.
- [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.9.4...v4.9.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-26 14:09:39 +00:00
Yukihiro "Matz" Matsumoto 25a32ed681 bigint.c (ulshift,urshift): check uzero before actual shifting.
Bit-shifting zero always result in zero.
2022-07-26 15:06:06 +09:00
Yukihiro "Matz" Matsumoto 97b9bfc4fa bigint.c (mpz_init_set_str): move negative trick to mrb_bint_new_str().
It used to take negative base to generate negative value. But this weird
trick is now belong to the mruby API side.
2022-07-26 15:03:52 +09:00
Yukihiro "Matz" Matsumoto c2e4b82d84 codegen.c (new_litbint): remove surrounding braces.
It was to allow local variable declarations, but now we allow
declarations in the middle.
2022-07-26 13:55:54 +09:00
Yukihiro "Matz" Matsumoto 26ce85bd5d bigint.c (ucmp): fixed error with zero length zero value.
Big integers have two kind of zero values:

- digits in `p` array are all zeros
- length `sn` is zero

The old code crashed with the latter zero.
2022-07-26 00:13:15 +09:00
Yukihiro "Matz" Matsumoto e8ce82bf31 codegen.c (new_litbint): forgot else in a107b85. 2022-07-26 00:11:53 +09:00
Yukihiro "Matz" Matsumoto 3d1b5d2b06 Merge pull request #5754 from artichoke/lopopolo/class-name-use-after-free
Fix possible use after free in `mrb_class_find_path`
2022-07-25 15:41:07 +09:00
Yukihiro "Matz" Matsumoto c6bf4eaac0 codegen.c (new_litbint): renamed from new_litbn. 2022-07-25 15:33:43 +09:00
Yukihiro "Matz" Matsumoto a107b850eb codegen.c (new_bitbn): fixed wrong packing of integer radix. 2022-07-25 15:31:43 +09:00
Yukihiro "Matz" Matsumoto d2d105b589 bigint.c (mpz_get_int): should work with zero (i.e. y->p == NULL). 2022-07-25 14:54:41 +09:00
Yukihiro "Matz" Matsumoto 6a4c8e36b5 bigint.c (udiv): should trim remainder before bit shifting. 2022-07-25 14:54:41 +09:00
Yukihiro "Matz" Matsumoto e02e9ae434 bigint.c (mpz_mmod): should call mpz_clear() for internal mpz_t. 2022-07-25 14:54:41 +09:00
Yukihiro "Matz" Matsumoto 7d5475916c bigint.c (udiv): avoid out of bound access in division. 2022-07-25 14:54:40 +09:00
Yukihiro "Matz" Matsumoto 657263446e bigint.c: cosmetic changes (add spaces, etc.) 2022-07-25 14:54:40 +09:00
Yukihiro "Matz" Matsumoto 866ab88c94 mruby-os-memsize/memsize.c: add fall through comment. 2022-07-25 10:58:03 +09:00
Yukihiro "Matz" Matsumoto 13d909bd3c array.c: new configuration MRB_ARY_LENGTH_MAX.
The default value is 2**17 entries. If you want to avoid the limitation,
set this value to 0.
2022-07-25 10:58:02 +09:00
Yukihiro "Matz" Matsumoto c4cb416460 string.c: new configuration MRB_STR_LENGTH_MAX.
The default value is 1MB. If you want to avoid the limitation, set this
value to 0.
2022-07-25 10:58:02 +09:00
Yukihiro "Matz" Matsumoto 199758c0b9 bigint.c (mpz_sizeinbase): should return size_t instead of int.
`int` may overflow.
2022-07-25 10:58:02 +09:00
Ryan Lopopolo 547d465340 Fix possible use after free in mrb_class_find_path
`mrb_class_find_path` resolves a `char*` pointer to a class name string
by calling `mrb_class_name`. It then allocates a new string with
capacity 40 to copy that `char*` into.

https://github.com/mruby/mruby/blob/e04184185ab43b94980550e850d8813a415fa438/src/variable.c#L1111-L1112

`mrb_class_name` resolves the class name via `class_name_str`, which
returns an `mrb_value` with type tag `MRB_TT_STRING` and backed by an
`RString*`. Then `mrb_class_name` extracts the `RSTRING_PTR`:

https://github.com/mruby/mruby/blob/e04184185ab43b94980550e850d8813a415fa438/src/class.c#L2133-L2134

That `RString*`-backed `mrb_value` ultimately comes from `mrb_class_path`
which resolves the string from the symbol table:

https://github.com/mruby/mruby/blob/e04184185ab43b94980550e850d8813a415fa438/src/class.c#L2111

The allocation of the target `str` after resolving the class name
`mrb_value` and extracting its pointer is fragile and assumes the
`RString*` is "static". If the `RString*` is not static, the
interleaving of extracting the `RSTRING_PTR` followed by a subsequent
allocation might result in the class name `mrb_value` being garbage
collected, which will leave the extracted pointer invalid.

Fix this bad interleaving by allocating the destination string first
before taking a raw pointer to an `RString*`.
2022-07-24 09:33:51 -07:00
Yukihiro "Matz" Matsumoto e04184185a bigint.c: heavy restructuring of big-integers.
Instead of splitting mp_limb by bit operations (using HIGH/LOW macros),
now we use mp_limb2 (which is bigger integer size, e.g uint64_t). It
makes operations (especially mulitiplication) a lot faster. As a side
effect, it also reduces memory consumption (16,452,033 -> 15,545,853 on
my Linux machine).

Other changes:

- trailing zeros are removed after operations.
- division algorithm is simplified.
2022-07-23 07:50:30 +09:00
Yukihiro "Matz" Matsumoto c0a636c007 mruby-os-memsize/memsize.c: add up digit spaces for big-integers. 2022-07-21 20:56:32 +09:00
Yukihiro "Matz" Matsumoto 8bd1c56465 bigint.c (mpz_get_str): fixed wrong loop termination condition. 2022-07-21 20:40:35 +09:00
Yukihiro "Matz" Matsumoto 450382735b bigint.c (mrb_bint_to_s): shortcut for bigint zero. 2022-07-20 14:40:45 +09:00
Yukihiro "Matz" Matsumoto a4ce63abc5 bigint.c (mpz_sizeinbase): check zero length bigint. 2022-07-20 14:40:12 +09:00
Yukihiro "Matz" Matsumoto cfea0c28a0 bigint.c (digits): check zero length bigint. 2022-07-20 14:39:05 +09:00
Yukihiro "Matz" Matsumoto 2b07489372 codegen.c: keep stack space for block argument. 2022-07-20 14:27:02 +09:00
Yukihiro "Matz" Matsumoto b84bca666f bigint.c (mpz_get_int): avoid buffer overflow. 2022-07-19 18:20:28 +09:00
Yukihiro "Matz" Matsumoto a99d003622 Merge pull request #5751 from dearblue/mrb_insn_data
Fix the first operand of `struct mrb_insn_data` to 32 bits
2022-07-19 07:44:45 +09:00
Yukihiro "Matz" Matsumoto 714e8a57af bigint.c: avoid default allocation.
The digit space would be allocated on demand.
2022-07-19 00:52:54 +09:00
Yukihiro "Matz" Matsumoto 04ec65b87a mruby-numeric-ext/numeric.rb: add reference description.
- zero?
- nonzero?
- positive?
- negative?
2022-07-18 15:46:47 +09:00
Yukihiro "Matz" Matsumoto 56af812b98 mruby-numeric-ext/numeric.rb: bit predicates are implemented in Ruby now. 2022-07-18 12:59:10 +09:00
Yukihiro "Matz" Matsumoto a3f2470907 Merge pull request #5749 from dearblue/patch-5565
Corrected the number of registers in the `Class#new` method
2022-07-18 09:26:34 +09:00
Yukihiro "Matz" Matsumoto 0e530dbb63 numeric.c: fix smallint op bigint error in bitwise logical operators. 2022-07-18 08:29:52 +09:00
dearblue 1d95dd6e9b Fix the first operand of struct mrb_insn_data to 32 bits
Because there is `W` type, at least 24 bits must be represented.
2022-07-17 20:27:42 +09:00
Yukihiro "Matz" Matsumoto 2d749f5275 mruby-compar-ext/compar.rb (clamp): update document; ref #5748 2022-07-17 18:53:55 +09:00
Yukihiro "Matz" Matsumoto 33bf027d79 mruby-compar-ext/compar.rb (clamp): support endless/beginless range.
Ref #5748
2022-07-17 18:52:59 +09:00
dearblue c621d3cb95 Corrected the number of registers in the Class#new method
`OP_SEND R4 :allocate 0` requires an an invisible `nil` block to `R5`.
If `R5` is not allocated, this can lead to unexpected results due to buffer overflow.
This problem is caused by #5565.

ref. commit 33792c2a02
2022-07-17 10:38:53 +09:00
Yukihiro "Matz" Matsumoto b1bfa1d5c8 mruby-compar-ext/compar.rb (clamp): should take ranges too; fix #5748 2022-07-17 07:49:34 +09:00
Yukihiro "Matz" Matsumoto 53f131d8f1 bigint.c: remove unnecessary break in for loop. 2022-07-16 12:26:08 +09:00
Yukihiro "Matz" Matsumoto 4f737b8afb bigint.c: adjust integer types to remove warnings. 2022-07-15 18:37:45 +09:00
Yukihiro "Matz" Matsumoto 275684cf07 bigint.c: update header commend description. 2022-07-15 18:36:47 +09:00
Yukihiro "Matz" Matsumoto 30f6ad314d bigint.c (mpz_get_str): stringify multiple digits at once.
Instead of dividing by 10, 10000 (32 bit) or 100000000 (64 bit), for
example (Karatsuba method?).
2022-07-15 13:45:17 +09:00
Yukihiro "Matz" Matsumoto d9e0f3328b bigint.c (mpz_get_str): avoid bigint division for performance. 2022-07-15 13:45:17 +09:00
Yukihiro "Matz" Matsumoto f1f8221bf3 Merge pull request #5747 from dearblue/errno-summary
Added summary for `mrbgems/mruby-errno`
2022-07-15 13:45:09 +09:00
Yukihiro "Matz" Matsumoto 1d8f4bc775 Merge pull request #5746 from dearblue/cleanup-errno
Delete unnecessary files in `mrbgems/mruby-errno`
2022-07-15 13:44:35 +09:00
Yukihiro "Matz" Matsumoto ec688b34ec Merge pull request #5745 from dearblue/neg-errno
Allow negative `errno` to be handled as well
2022-07-15 13:43:33 +09:00
Yukihiro "Matz" Matsumoto 74a3e2353b Merge pull request #5744 from dearblue/checkout-ignore
Ignore git checkout if nil commit-hash
2022-07-14 23:49:39 +09:00
dearblue b012ebfa79 Ignore git checkout if nil commit-hash
If there is no `.lock` file and no commit hash specified, avoid `git checkout --detach`.
This behavior will be the same as up to mruby-3.1.

ref. #5638
2022-07-14 21:58:20 +09:00
dearblue bd98b71668 Added summary for mrbgems/mruby-errno 2022-07-14 21:55:15 +09:00
dearblue a74b0fb62b Delete unnecessary files in mrbgems/mruby-errno
This is because it has been integrated into the mruby repository.
2022-07-14 21:53:03 +09:00
dearblue 66b72430e6 Allow negative errno to be handled as well 2022-07-14 21:49:44 +09:00
Yukihiro "Matz" Matsumoto 7733f6b246 Merge pull request #5743 from dearblue/dummy-errno
Define `Errno::EXXX` when needed
2022-07-12 18:16:28 +09:00
Yukihiro "Matz" Matsumoto 37c2f080f0 numeric.c (int_to_s): should not bypass base range check. 2022-07-12 14:48:36 +09:00
Yukihiro "Matz" Matsumoto bae11ef689 complex.c (mrb_complex_copy): allow copying of complex numbers. 2022-07-11 11:25:31 +09:00
Yukihiro "Matz" Matsumoto 67f47c9b42 rational.c (mrb_rational_copy): allow copying of rational numbers. 2022-07-11 11:19:22 +09:00
Yukihiro "Matz" Matsumoto 3ebb55b75f bigint.c (mrb_bint_copy): allow dup operation for bigints. 2022-07-11 11:02:27 +09:00
Yukihiro "Matz" Matsumoto 95610a292b bigint.c (lzb): use __builtin_clz() if available. 2022-07-11 08:01:52 +09:00
Yukihiro "Matz" Matsumoto 3046440b5a bigint.c (mpz_set_int): remove an unused local variable. 2022-07-11 08:01:18 +09:00
dearblue c14e26d79e Define Errno::EXXX when needed
If the `Errno::EXXX` class is defined minimally when needed, it will save about 17 KiB of RAM in a 32-bit environment.
Define the singular methods `.const_defined?`, `.const_missing` and `.constants` in the `Errno` module and act as if there are classes that have not yet been defined.

However, if real classes are enumerated, for example by the following code, the effect is lost.

```ruby
Errno.constants.map { |id| Errno.const_get(id) }
```

But I believe that such codes are rarely written with the intention of being written.

In this patch, the `Errno::EXXX#initialize` method is no longer defined for further memory reduction.
Instead, it has been merged into the `SystemCallError#initialize` method.
2022-07-10 20:53:55 +09:00
Yukihiro "Matz" Matsumoto 04b153a3b1 bigint.c (mpz_init_set_int): unified with mpz_set_int(). 2022-07-10 08:06:55 +09:00
Yukihiro "Matz" Matsumoto 84d73ba6e8 bigint.c: small refactoring (removing extra lines and spaces). 2022-07-09 19:33:39 +09:00
Yukihiro "Matz" Matsumoto e157a84418 bigint.c (mpz_init_set_int): should avoid integer overflow.
Check MRB_INT_MIN which could overflow by negation.
2022-07-09 17:27:27 +09:00
Yukihiro "Matz" Matsumoto 48b43af37f numeric.c (mrb_div_int_value): should support integer overflow.
Especially in `MRB_INT_MIN/-1` which is bigger than MRB_INT_MAX.
2022-07-09 15:21:45 +09:00
Yukihiro "Matz" Matsumoto fa0ff7cf86 numeric.c: better error message (Float -> Integer). 2022-07-09 15:13:52 +09:00
Yukihiro "Matz" Matsumoto 7de03cbb68 numeric.c: add mrb_noreturn qualifier to error functions.
- mrb_int_zerodiv()
- mrb_int_overflow()
2022-07-09 15:12:37 +09:00
Yukihiro "Matz" Matsumoto e1980d7596 numeric.c (mrb_div_int): separate the function in two.
- mrb_div_int() does integer division in Ruby way (mdiv)
  returns mrb_int
- mrb_div_int_value() division with zero div and overflow checks.
  returns mrb_value
2022-07-09 14:38:18 +09:00
Yukihiro "Matz" Matsumoto f1275803c9 bigint.c (mpz_set): simplify memory reallocation code. 2022-07-09 14:36:17 +09:00
Yukihiro "Matz" Matsumoto a40842eb73 bigint.c (udiv): use (signed) int for loop counters.
Sometimes (xd-yd) may be negative and should be checked.
2022-07-09 10:56:02 +09:00
Yukihiro "Matz" Matsumoto a64d2bfbe6 bigint.c (mpz_mul,mpz_mdiv): return early on zero. 2022-07-09 10:47:23 +09:00
Yukihiro "Matz" Matsumoto a2f0fd81e6 numeric.c (mrb_int_mul): fix error message (Float -> Integer). 2022-07-09 10:45:44 +09:00
Yukihiro "Matz" Matsumoto 8d34981530 numeric.c: avoid mathematical operations for simple cases. 2022-07-09 10:45:11 +09:00
Yukihiro "Matz" Matsumoto 960021e519 numeric.c (cmpnum): call mrb_bigint_cmp() if v1 is bigint, not v2. 2022-07-08 21:57:05 +09:00
Yukihiro "Matz" Matsumoto 872020bb3d math.gembox: add cmath and bigint to math gembox; ref #5742 2022-07-07 15:39:36 +09:00
Yukihiro "Matz" Matsumoto b5538eded1 vm.c (OP_ENTER): need to protect kdict from GC; ref #5741 2022-07-06 14:57:06 +09:00
Yukihiro "Matz" Matsumoto 8fed80f5eb vm.c (OP_ENTER): protect kdict from GC; ref #5741 2022-07-06 14:29:14 +09:00
Yukihiro "Matz" Matsumoto 4225ae4176 vm.c (OP_ENTER): need to update ci->nk when kd is set; fix #5741 2022-07-06 13:57:12 +09:00
Yukihiro "Matz" Matsumoto 7e8a4212fb vm.c: refactor OP_ENTER code; ref #5741 2022-07-06 13:37:29 +09:00
Yukihiro "Matz" Matsumoto 82a419cde3 vm.c (mrb_ci_kdict): should return -1 when no kargs given; ref #5741 2022-07-06 13:37:20 +09:00
Yukihiro "Matz" Matsumoto 638356af03 class.c (mc_clear_by_id): clear method cache with method id specified. 2022-07-05 17:39:36 +09:00
Yukihiro "Matz" Matsumoto a99e4a926d class.c (mrb_mc_clear_by_class): simplify method cache clear condition. 2022-07-05 17:39:30 +09:00
Yukihiro "Matz" Matsumoto 1e7012f8c1 class.c (mrb_class_inherited): no need to clear method cache.
Since the function is only called for a newly created class, there is no
need to modify the method cache here.
2022-07-04 21:47:19 +09:00
Yukihiro "Matz" Matsumoto e8a202d461 vm.c: inline callinfo related functions. 2022-07-04 21:15:42 +09:00
Yukihiro "Matz" Matsumoto 78e723accb AUTHORS: update entries [ci skip] 2022-07-03 18:17:29 +09:00
Yukihiro "Matz" Matsumoto ce89ab8660 parse.y: class cannot be followed by modifier if. [ruby-bugs:18884] 2022-07-02 10:31:33 +09:00
Yukihiro "Matz" Matsumoto 0db9a8e8d7 Merge pull request #5740 from dearblue/src-include
Avoid adding `MRUBY_ROOT/src` to `cc.include_paths`
2022-07-02 10:31:14 +09:00
dearblue 9a84ef926b Avoid adding MRUBY_ROOT/src to cc.include_paths 2022-07-02 09:56:13 +09:00
Yukihiro "Matz" Matsumoto 03ae46e88d string.c: keep values in local variables to reduce member access. 2022-06-30 10:12:24 +09:00
Yukihiro "Matz" Matsumoto f2bc7c305a array.c (mrb_assoc_new): keep pointer in a local variable.
The optimizer may do the same, but tried to make it clear.
2022-06-30 10:09:34 +09:00
Yukihiro "Matz" Matsumoto e2c4a8cef0 array.c (ary_check_too_big): make the function inline. 2022-06-30 09:57:30 +09:00
Yukihiro "Matz" Matsumoto 72b60eb449 include/mruby/value.h: remove assertion from mrb_obj_value()
The function was called too often, so that even slightest assertion may
bother performance. The function is stable enough.
2022-06-30 08:11:36 +09:00
Yukihiro "Matz" Matsumoto b58094c881 mruby-sprintf/sprintf.c: call mrb_str_resize() less often. 2022-06-29 15:03:41 +09:00
Yukihiro "Matz" Matsumoto 580af1cf73 vm.c (mrb_bidx): avoid repeated packing/unpacking argument info. 2022-06-29 07:51:08 +09:00
Yukihiro "Matz" Matsumoto f7c2b0388a benchmark/bm_so_lists.rb: address the broken link; close #5737
The original page was lost, so we added the link to the wayback machine.
2022-06-28 11:31:16 +09:00
Yukihiro "Matz" Matsumoto 0b7822581f string.c (str_rindex): use more local variables; ref #5734 2022-06-27 19:04:36 +09:00
Yukihiro "Matz" Matsumoto 7319e744ad src/vm.c: move some inline functions from mruby/proc.h; ref #5732
Those functions are seldom called so no need to be inline functions.
2022-06-27 19:04:35 +09:00
Yukihiro "Matz" Matsumoto e5ec9a18fe Merge pull request #5738 from jbampton/fix-case-of-mruby
Fix case of `mruby`
2022-06-27 18:56:56 +09:00
John Bampton 48f03dceeb Fix case of mruby 2022-06-27 18:58:31 +10:00
Yukihiro "Matz" Matsumoto 1d87493803 Merge pull request #5736 from jbampton/update-docs
docs: add link and fix command
2022-06-27 16:53:08 +09:00
John Bampton 8f16c1d99e docs: add link and fix command 2022-06-27 15:30:17 +10:00
Yukihiro "Matz" Matsumoto f080005720 Merge pull request #5735 from jbampton/pre-commit-skip-docs
Add docs on the `SKIP` pre-commit environment variable
2022-06-27 13:18:43 +09:00
John Bampton 9841980bce Add docs on the SKIP pre-commit environment variable
Knowing about `SKIP` is useful

https://pre-commit.com/#temporarily-disabling-hook
2022-06-27 14:01:14 +10:00
Yukihiro "Matz" Matsumoto dc8da16b6b Merge pull request #5734 from sjothen/master
Fix out of bounds access by memcmp in String#rindex
2022-06-27 10:34:07 +09:00
Stephen Jothen 103f8bcad0 Fix out of bounds access by memcmp in String#rindex 2022-06-25 15:09:35 +02:00
Yukihiro "Matz" Matsumoto a3ccda657e Merge pull request #5733 from dearblue/patch-5402
Do not expand "included class" in `mrb_proc_new()`.
2022-06-25 14:48:02 +09:00
Yukihiro "Matz" Matsumoto d3e8494f8d Merge pull request #5732 from dearblue/patch-5272
Fixes `mrb_vm_ci_target_class_set()`
2022-06-25 12:24:33 +09:00
Yukihiro "Matz" Matsumoto 0caaf4da7f Merge pull request #5731 from dearblue/fix5725
Use `mrb->object_class` instead if `MRB_PROC_TARGET_CLASS()` is `NULL`
2022-06-25 12:23:34 +09:00
dearblue 8bab20ef7c Do not expand "included class" in mrb_proc_new().
If `target_class->tt` is `MRB_TT_ICLASS`, it may cause loss of class inheritance relationships.
This problem is caused by #5402.

ref. #5725
2022-06-25 11:45:18 +09:00
dearblue 109da08d8a Fixes mrb_vm_ci_target_class_set()
If `ci->u.target_class` was `NULL`, the value of the argument was always ignored.
This problem is caused by #5272.

ref. #5725
2022-06-25 11:41:55 +09:00
dearblue 1489338145 Use mrb->object_class instead if MRB_PROC_TARGET_CLASS() is NULL
Fix #5725
2022-06-25 11:10:39 +09:00
Yukihiro "Matz" Matsumoto ab3486d9ff Merge pull request #5730 from aoki1980taichi/patch-1
delete unused variable
2022-06-25 07:37:24 +09:00
aoki1980taichi ad1d35c342 delete unused variable
cnt is unused
2022-06-25 00:21:23 +09:00
Yukihiro "Matz" Matsumoto 88f3c19e5d Merge pull request #5729 from aoki1980taichi/patch-1
delete unnecessary code
2022-06-24 22:58:53 +09:00
aoki1980taichi 4332f56056 delete unnecessary code
"else 0.0" is not used
2022-06-24 19:22:28 +09:00
Yukihiro "Matz" Matsumoto d4d902b072 Merge pull request #5728 from artichoke/lopopolo/broken-extern-c-blocks-mrb-use-cxx-exception
Fix mismatched braces in `extern "C"` blocks when compiling as C++
2022-06-24 17:14:03 +09:00
Ryan Lopopolo 8a5e6f47f2 Match #if at end of vm.c 2022-06-23 22:25:15 -07:00
Ryan Lopopolo 3af82fbb51 Respect MRB_USE_CXX_ABI #define 2022-06-23 21:54:53 -07:00
Ryan Lopopolo c4c37b2069 Fix mismatched braces in extern "C" blocks when compiling as C++
When compiling mruby with `-DMRB_USE_CXX_EXCEPTION`, clang fails to
compile and emits these warnings:

    vendor/mruby/src/vm.c:3066:1: error: extraneous closing brace ('}')
    } /* end of extern "C" */
    ^
    vendor/mruby/src/vm.c:3072:7: error: expected '}'
    #endif
          ^
    vendor/mruby/src/vm.c:3070:12: note: to match this '{'
    extern "C" {
               ^
    2 errors generated.

Fixup the implementation of the `extern "C"` block in `vm.c`.
2022-06-23 21:38:55 -07:00
Yukihiro "Matz" Matsumoto 16cc6f3292 build_config/host-debug.rb: enable MRB_UTF8_STRING; ref #5727 2022-06-24 13:25:46 +09:00
Yukihiro "Matz" Matsumoto 89f22158d3 string.rb (each_line): may truncate string by mistake; fix #5727 2022-06-24 13:25:45 +09:00
Yukihiro "Matz" Matsumoto 22d0f4580e Merge pull request #5726 from aoki1980taichi/patch-1
fix typo otherBasis -> orthoBasis
2022-06-24 06:29:15 +09:00
aoki1980taichi ad8286c447 fix typo otherBasis -> orthoBasis
The original function name in ao.c was orthoBasis.
I guess the function is generating orthonormal basis (https://en.wikipedia.org/wiki/Orthonormal_basis).
2022-06-24 06:26:58 +09:00
Yukihiro "Matz" Matsumoto 92be161b1f vm.c (check_target_class): return Object class if target is NULL.
Since #5272 target_class kept in a Proc may be NULL. It crashes
`iij/mruby-require` gem for example; close #5725
2022-06-23 07:54:04 +09:00
Yukihiro "Matz" Matsumoto cd6e94c09f mruby/internal.h: move functions from internal.h; #5725
To compile `iij/mruby-require` gem.
2022-06-23 07:53:29 +09:00
Yukihiro "Matz" Matsumoto 01392e2719 mrblib/array.rb: add call-seq to each method description. [ci skip] 2022-06-22 19:02:54 +09:00
Yukihiro "Matz" Matsumoto 981740b1f2 mrblib/compar.rb: add call-seq to each method description. [ci skip] 2022-06-22 19:02:48 +09:00
Yukihiro "Matz" Matsumoto cf7aa74f7c mruby-rational/rational.c: update error message. 2022-06-21 22:17:17 +09:00
Yukihiro "Matz" Matsumoto 019a2ddff4 mruby-rational/rational.c: implement Rational#**; close #5724 2022-06-21 16:53:17 +09:00
Yukihiro "Matz" Matsumoto 04de280997 mruby-rational/rational.c: wrap prototype with mrb_float
When `MRB_NO_FLOAT` is defined, `mrb_float` is not defined.
2022-06-21 16:37:32 +09:00
Yukihiro "Matz" Matsumoto 6f78cd6c99 mruby-rational/rational.c: remove unused prototype [ci skip] 2022-06-21 14:01:38 +09:00
Yukihiro "Matz" Matsumoto 9a34bd9971 hash.rb: update Hash class documents [ci skip] 2022-06-20 12:19:54 +09:00
Yukihiro "Matz" Matsumoto d2a24a540c hash.c: implement typical part of merge in C. 2022-06-19 22:28:31 +09:00
Yukihiro "Matz" Matsumoto 909e1044ed mruby-hash-ext/hash.rb (merge!): takes multiple arguments. 2022-06-18 16:12:14 +09:00
Yukihiro "Matz" Matsumoto 0565bbf85a test/hash.rb: test Hash#merge that takes multiple arguments. 2022-06-18 08:30:26 +09:00
Yukihiro "Matz" Matsumoto 14e5c0c7b9 hash.rb (merge): now takes multiple arguments. 2022-06-18 08:25:11 +09:00
Yukihiro "Matz" Matsumoto 7dec6e776e mruby-random/random.c: pointer to uint32_t cast may fail with clang. 2022-06-17 10:06:07 +09:00
Yukihiro "Matz" Matsumoto f1d669024a mruby-random/random.c: srand to use pointer address as a seed.
Utilize process randomiser which may not be provided by non Linux OSes.
With those OSes, rand() would return same values if the processes are
invoked within a second.
2022-06-17 07:14:29 +09:00
Yukihiro "Matz" Matsumoto 267c26d20b mruby-random/random.c: randomize Random::DEFAULT.
Using time(2) and randomized pointer address. May not work well with old
OSes without process randomiser.
2022-06-17 07:12:12 +09:00
Yukihiro "Matz" Matsumoto 0a63cdd594 mruby-random/random.c: use random: keyword argument.
For Array#sample and Array#shuffle. They used to take optional ordinal
argument for Random object but CRuby uses `random:` keyword argument.
Now mruby is compatible with CRuby here.
2022-06-16 11:17:22 +09:00
Yukihiro "Matz" Matsumoto 7005f8661b parse.y (paser_pfree): recycle memory if possible. 2022-06-15 07:28:05 +09:00
Yukihiro "Matz" Matsumoto 65ff04b20d Merge pull request #5722 from dearblue/gc_protect
Fixed possible inconsistency in `gc_protect()`
2022-06-15 07:27:36 +09:00
dearblue cbeb392d7d Fixed possible inconsistency in gc_protect()
If `mrb_realloc()` raises an out-of-memory exception, `arena_capa` will hold the wrong value.
2022-06-14 22:31:45 +09:00
Yukihiro "Matz" Matsumoto 561dffcccc parse.y: fix nested here-document bug; fix #5607
- remove `lex_strterm_before_heredoc` that does not nest
- remove `all_heredocs` that cannot distinguish nested and followed
  here-doc
- replace `lex_strterm` represented by cons list by C struct
- push/pop `lex_strterm` before/after interpolation
2022-06-13 22:25:37 +09:00
Yukihiro "Matz" Matsumoto 3cab2e7b78 mruby-compiler: remove spaces before * in type casting. 2022-06-13 17:00:30 +09:00
Yukihiro "Matz" Matsumoto 4d70d17af7 compile.h: reorder parser_heredoc_info members to reduce alignment gap. 2022-06-12 18:48:34 +09:00
Yukihiro "Matz" Matsumoto c41f24216b Merge pull request #5718 from dearblue/rehash-iv_mt
Asigns table properties after `mrb_calloc()`
2022-06-10 10:44:14 +09:00
dearblue 56c6dde9c5 Asigns table properties after mrb_calloc()
If GC occurs in `mrb_calloc()` called by `iv_rehash()` or `mt_rehash()`, the object as table data may be destroyed.
2022-06-08 22:10:58 +09:00
Yukihiro "Matz" Matsumoto b1f6c856e3 parse.y (nextc0): small refactoring. 2022-06-08 21:59:51 +09:00
Yukihiro "Matz" Matsumoto 0d2c550f0f parse.y: use info as abbreviation for information.
Replace `inf` that looks like abbreviation for `infinity`.
2022-06-07 18:42:53 +09:00
Yukihiro "Matz" Matsumoto 62fc021f5a .git-blame-ignore-revs: add 650ffb9 to ignore indentation fix. 2022-06-06 08:00:43 +09:00
Yukihiro "Matz" Matsumoto 9cc9c9fe63 parse.y (heredoc_treat_nextline): simplify the logic using append(). 2022-06-06 08:00:04 +09:00
Yukihiro "Matz" Matsumoto 4c92636684 AUTHORS: update entries [ci skip] 2022-06-06 08:00:04 +09:00
Yukihiro "Matz" Matsumoto 81fb3c5a4b parse.y: need to update p->lex_strterm in heredoc_treat_nextline(). 2022-06-06 08:00:03 +09:00
Yukihiro "Matz" Matsumoto 5233865c47 codegen.c (search_upvar): update messages for anonymous parameters. 2022-06-03 13:00:13 +09:00
Yukihiro "Matz" Matsumoto aec849888e parse.y (new_kw_rest_args): aggregate integer to node* type casts. 2022-06-03 13:00:12 +09:00
Yukihiro "Matz" Matsumoto e49ae398bd Rakefile: add install target; close #5712
This change is not complete. Contribution is welcome.

- need to update `mruby-config` to refer installed path
- may need to support installing shared library
- need to support cross-compiled binaries
2022-06-03 13:00:12 +09:00
Yukihiro "Matz" Matsumoto 5cbce646b0 parse.y: allow anonymous rest (and keyword rest) arguments. 2022-06-03 13:00:12 +09:00
Yukihiro "Matz" Matsumoto 6649b353c9 Merge pull request #5716 from dearblue/__method__check
Check `NULL` for `proc` and `env` in `Kernel#__method__`
2022-05-31 11:23:23 +09:00
Yukihiro "Matz" Matsumoto 0d828fa918 Merge pull request #5717 from mruby/dependabot/github_actions/github/super-linter-4.9.4
build(deps): bump github/super-linter from 4.9.3 to 4.9.4
2022-05-31 11:23:00 +09:00
dependabot[bot] 0f88b74f2b build(deps): bump github/super-linter from 4.9.3 to 4.9.4
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.3 to 4.9.4.
- [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.9.3...v4.9.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 14:07:39 +00:00
Yukihiro "Matz" Matsumoto 8981b2fb28 vm.c (ary_new_from_regs): stack may be reallocated.
Unlike `hash_new_from_regs`, `ary_new_from_regs` do not call
`mrb_funcall` et al directly or indirectly. But since it may invoke the
garbage collection, and hooks for GC may call `mrb_funcall` etc (although
calling them is not encouraged), we care stack reallocation just for the
safety.
2022-05-30 11:52:12 +09:00
Yukihiro "Matz" Matsumoto aa7f98dedb vm.c (hash_new_from_regs): stack may be reallocated. 2022-05-30 01:18:15 +09:00
Yukihiro "Matz" Matsumoto af5acf3566 parse.y: fix wrong indent [ci skip]. 2022-05-30 01:16:47 +09:00
Yukihiro "Matz" Matsumoto d55a152b3d mruby-string-ext/string.c (utf8code): max length of UTF-8 is 4 bytes.
It used to be 6 bytes in RFC2279 but overridden by new RFC3629.
2022-05-29 22:19:00 +09:00
Yukihiro "Matz" Matsumoto 82b87be4df string.c (mrb_utf8len): retry 7cdef2b0.
C++ requires `extern` declaration before variable definition.
2022-05-29 22:18:59 +09:00
Yukihiro "Matz" Matsumoto 0a8bfd1f8b Merge pull request #5713 from dearblue/assert-object-size
Introduced `mrb_static_assert_object_size()`
2022-05-29 22:18:48 +09:00
dearblue 444fbd76c2 Check NULL for proc and env in Kernel#__method__
Fix #5714
2022-05-29 11:28:54 +09:00
dearblue 23611332d9 Introduced mrb_static_assert_object_size()
Asserts the size of the object structure is less than or equal to 6 words.
2022-05-28 11:08:27 +09:00
Yukihiro "Matz" Matsumoto 2e0d371ef1 Merge pull request #5711 from mruby/dependabot/github_actions/github/super-linter-4.9.3
build(deps): bump github/super-linter from 4.9.2 to 4.9.3
2022-05-26 08:03:30 +09:00
dependabot[bot] 0efe2e6514 build(deps): bump github/super-linter from 4.9.2 to 4.9.3
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.2 to 4.9.3.
- [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.9.2...v4.9.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-25 14:08:32 +00:00
Yukihiro "Matz" Matsumoto 82f0ba14a9 Revert "string.c: share UTF-8 length table with mruby-string-ext."
This reverts commit 7cdef2b03e.
This sharing does not with C++ compilers.
2022-05-25 16:07:52 +09:00
Yukihiro "Matz" Matsumoto 7cdef2b03e string.c: share UTF-8 length table with mruby-string-ext. 2022-05-25 11:25:43 +09:00
Yukihiro "Matz" Matsumoto be0b5f8cee mruby-string-ext/string.c: reduce UTF-8 table size. 2022-05-25 11:22:28 +09:00
Yukihiro "Matz" Matsumoto 2f4695b759 mruby-string-ext/string.c: check sequence length before decoding. 2022-05-25 11:20:29 +09:00
Yukihiro "Matz" Matsumoto f08e66e53e mruby-string-ext/string.c (mrb_str_ord): fail with invalid UTF-8. 2022-05-25 11:17:49 +09:00
Yukihiro "Matz" Matsumoto bb99d7b2ca string.c (mrb_utf8len): reduce UTF-8 table size. 2022-05-25 08:04:19 +09:00
Yukihiro "Matz" Matsumoto d7731a95ab string.c (mrb_str_rindex_m): avoid RSTRING_CHAR_LEN() if possible.
Since it scans the string. Use char_backtrack() instead for negative
offset (counting from the tail).
2022-05-24 08:47:07 +09:00
Yukihiro "Matz" Matsumoto 9475521fa3 string.c (char_adjust): simplify and unroll function. 2022-05-23 23:12:40 +09:00
Yukihiro "Matz" Matsumoto 4769ace7e1 string.c (char_backtrack): simplify the code using utf8_islead(). 2022-05-23 23:12:40 +09:00
Yukihiro "Matz" Matsumoto 916fd642fa string.c (mrb_utf8len): unroll a for loop. 2022-05-21 16:14:16 +09:00
Yukihiro "Matz" Matsumoto 54bbc062fb string.c (index,rindex) use single byte version for ASCII strings. 2022-05-21 08:51:11 +09:00
Yukihiro "Matz" Matsumoto ac79849fde mruby-io/io.c: refactor readable/writable checks for fptr. 2022-05-20 09:59:23 +09:00
Yukihiro "Matz" Matsumoto 013c9f31bc mruby-io/io.c: remove unnecessary type casts. 2022-05-20 09:53:12 +09:00
Yukihiro "Matz" Matsumoto 038aa6beb2 strinc.rb (sub, gsub): use byte index instead of char index. 2022-05-19 10:14:59 +09:00
Yukihiro "Matz" Matsumoto ce141b1332 string.rb (each_line): should not use [] reference.
Use `byteslice` instead.
2022-05-19 10:14:59 +09:00
Yukihiro "Matz" Matsumoto 19e4287d8b Merge pull request #5710 from suetanvil-misc/project-gemdecl-path-arg-flat
Fix `conf.gem path:` build_config argument.
2022-05-19 10:07:07 +09:00
Chris Reuter b297809b51 Fix conf.gem path: build_config argument.
The mrbgem guide (`doc/guides/mrbgems.md`) documents the `path:`
argument for `conf.gem` as being used to point to the root directory
of a gem when that gem is retrieved via git but is located in a
subdirectory of the checkout.

The actual code does not do this.  Instead, it treats path as (mostly)
identical to the `gemdir:` argument; that is, it points to a local
directory containing the gem.

This change fixes this by making `path:` behave as documented.
2022-05-18 14:02:47 -04:00
Yukihiro "Matz" Matsumoto 2cd966abc7 Merge pull request #5708 from jbampton/fix-spelling
Fix spelling
2022-05-18 07:50:00 +09:00
John Bampton 73580c49c4 Fix spelling 2022-05-17 19:47:54 +10:00
Yukihiro "Matz" Matsumoto f8b9464118 string.rb (each_line): use byteindex for performance; fix #4522
Character-wise String#index method calculate UTF-8 character width
numerous times if the string is long.
2022-05-17 07:18:44 +09:00
Yukihiro "Matz" Matsumoto 960da4ded4 cdump.c: should dump zero symbol (skip) too.
Zero symbol in the symbol table now means anonymous arguments.
2022-05-16 16:39:56 +09:00
Yukihiro "Matz" Matsumoto c2648ad95d string.c: add byteindex and byterindex methods. 2022-05-16 16:00:00 +09:00
Yukihiro "Matz" Matsumoto 8c985ff851 string.c (mrb_str_index_m): no need to align the position; ref #4569 2022-05-16 14:17:21 +09:00
Yukihiro "Matz" Matsumoto 0299ccf6c7 parse.y: allow inner anonymous block argument. 2022-05-16 14:17:21 +09:00
Yukihiro "Matz" Matsumoto 0a52f171aa mruby-random/random.c: factored out Random argument retrieval. 2022-05-16 14:17:20 +09:00
Yukihiro "Matz" Matsumoto 4283e2a950 Merge pull request #5707 from mruby/stable
Merge mruby 3.1.0
2022-05-13 07:38:26 +09:00
mimaki b3c04d036e Merge master branch. 2022-05-12 19:59:10 +09:00
Yukihiro "Matz" Matsumoto 6c6d8a98fa codedump.c: avoid printing 'local variable names:' header.
If there is no local variable defined in `irep`.
2022-05-12 19:14:40 +09:00
mimaki 1bec339230 Update version and release date. (mruby 3.1.0 (2022-05-12)) 2022-05-12 12:19:10 +09:00
Yukihiro "Matz" Matsumoto 257d16181d mruby3.2.md: add fixed CVE list. 2022-05-11 07:09:27 +09:00
Yukihiro "Matz" Matsumoto 090303568c mruby3.2.md: use dash instead of asterisk for itemize. 2022-05-11 07:08:39 +09:00
Yukihiro "Matz" Matsumoto 3ee10ccc63 mruby3.1.md: update fixed CVE list. 2022-05-11 07:06:36 +09:00
Yukihiro "Matz" Matsumoto 242a7f14e0 mruby3.1.md: update fixed CVE list. 2022-05-10 20:32:04 +09:00
Yukihiro "Matz" Matsumoto f13db72d26 load.c: add data boundary check for broken compiled binary. 2022-05-10 20:11:17 +09:00
Yukihiro "Matz" Matsumoto b82065aa92 load.c: should check if length of irep sections are valid. 2022-05-10 20:11:17 +09:00
Yukihiro "Matz" Matsumoto 11679e3f3a vm.c: check if target_class is NULL (when prepended).
Address CVE-2022-1427
2022-05-10 20:11:17 +09:00
Yukihiro "Matz" Matsumoto 82d3b3d11b vm.c: target class may be NULL.
Address CVE-2022-1201
2022-05-10 20:11:17 +09:00
Yukihiro "Matz" Matsumoto 2cbfc2f350 vm.c: vm.c: stack may be reallocated in functions calls; aaa28a5
`mrb_range_new()` also calls VM recursively.

Address CVE-2022-1106
2022-05-10 20:11:16 +09:00
Yukihiro "Matz" Matsumoto 6db4a58fbd vm.c: stack may be reallocated in functions calls.
Probably due to recursive VM calls via `mrb_funcall()`.

Address CVE-2022-1071
2022-05-10 19:24:46 +09:00
Yukihiro "Matz" Matsumoto 96cfde3488 fiber.c: should pack 15+ arguments in an array.
Address CVE-2022-0890
2022-05-10 19:24:46 +09:00
Yukihiro "Matz" Matsumoto 2e48070ab6 codegen.c: adjust stack position for OP_SUPER instruction.
Address CVE-2022-0632
2022-05-10 16:34:19 +09:00
Yukihiro "Matz" Matsumoto d823045af4 vm.c: packed arguments length may be zero for send method.
Address CVE-2022-0631
2022-05-10 16:32:03 +09:00
Yukihiro "Matz" Matsumoto c9ab1e601d codegen.c: fixed a bug in hash code generation with !val.
Address CVE-2022-0481
2022-05-10 14:56:53 +09:00
Yukihiro "Matz" Matsumoto beef5d37ad codegen.c: no OP_HASHADD required when val is false.
Address CVE-2022-0326
2022-05-10 14:55:58 +09:00
Yukihiro "Matz" Matsumoto 15f597e835 class.c: add obj->c check before prepare_singleton_class().
Address CVE-2022-0240
2022-05-10 14:54:45 +09:00
Yukihiro "Matz" Matsumoto 6189a90933 github/workflow: remove Cygwin build from Github Actions.
It often cross the 15 minutes timeout limit, so we just give up for now.
2022-05-10 14:02:16 +09:00
Yukihiro "Matz" Matsumoto fc4e9cdf81 mruby-test-inline-struct/inline.c: add type cast from void* to char*. 2022-05-09 18:57:26 +09:00
Yukihiro "Matz" Matsumoto eafc4b3f96 doc/mruby3.1.md: update for the 3.1 release. 2022-05-09 17:49:53 +09:00
Yukihiro "Matz" Matsumoto 84b0ba3f8d doc/mruby3.1.md: update for the release. 2022-05-09 17:46:26 +09:00
Yukihiro "Matz" Matsumoto 04d160f90b mruby-test-inline-struct/inline.c: add a comment about istruct protection. 2022-05-08 23:14:20 +09:00
Yukihiro "Matz" Matsumoto 8c2dbb761f mruby-test-inline-struct/inline.c: add mrb_istruct_p() checks. 2022-05-08 23:09:14 +09:00
Yukihiro "Matz" Matsumoto 45f61e3879 class.c (mrb_get_args): remove I specifier (istruct); close #5706 2022-05-07 17:35:45 +09:00
Yukihiro "Matz" Matsumoto 457abf4c9e error.c: now mrb_exc_mesg_get() returns a string or nil. 2022-05-06 16:45:17 +09:00
Yukihiro "Matz" Matsumoto 38b69b6014 error.c: protect mrb_print_error() from exceptions.
Now the function can be called when `mrb->jmp` is not set.
2022-05-06 16:26:31 +09:00
Yukihiro "Matz" Matsumoto c3e4ee0bf2 error.c: store error message converted as a string.
This is controversial since this change alters the `raise` behavior.
Previously, when an object that cannot be converted to a string, it just
ignore message when it's printed (using `Exception#inspect`). But after
this change, `raise` (more precisly `Exception.new`) raises TypeError
exception. I think the new behavior is clearer, more intuitive.
2022-05-06 16:21:39 +09:00
Yukihiro "Matz" Matsumoto d40822b148 Merge pull request #5705 from dearblue/adjust-stack
Introduce `mrb_stack_extend_adjust()`
2022-05-05 13:04:44 +09:00
dearblue c32cac6e59 Introduce mrb_stack_extend_adjust()
If necessary, adjust the pointer on the VM stack after `mrb_stack_extend()`.
2022-05-04 09:13:56 +09:00
Yukihiro "Matz" Matsumoto 50b1ded350 mruby-random/random.c: use rand_i() extensively. 2022-05-04 08:07:02 +09:00
Yukihiro "Matz" Matsumoto 49b8cef31f Merge pull request #5703 from dearblue/random-getargs
Strict acquisition of the `Random` class given by `mrb_get_args()`
2022-05-03 19:27:11 +09:00
dearblue 9b9424fe32 Strict acquisition of the Random class given by mrb_get_args()
This is to prevent data corruption of the substituted `Random` instance.
If the `Object::Random` constants are redefined to a different `MRB_TT_ISTRUCT` object class, they can pass `mrb_get_args()` validation.

The following is an example of how the `Array#shuffle` method rewrites the data of a non `Random` instance.

```c
// code.c

#include <mruby.h>
#include <mruby/class.h>
#include <mruby/compile.h>
#include <mruby/istruct.h>

#define EVAL_LIT(MRB, ...) mrb_load_string((MRB), #__VA_ARGS__)

static mrb_value
fake_initialize(mrb_state *mrb, mrb_value self)
{
  char *p = ISTRUCT_PTR(self);

  for (int i = 0; i < ISTRUCT_DATA_SIZE; i++) {
    p[i] = 'A' + i;
  }

  return self;
}

static mrb_value
fake_to_bytes(mrb_state *mrb, mrb_value self)
{
  const char *p = ISTRUCT_PTR(self);
  return mrb_str_new(mrb, p, ISTRUCT_DATA_SIZE);
}

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

  struct RClass *fake = mrb_define_class(mrb, "Fake", mrb->object_class);
  MRB_SET_INSTANCE_TT(fake, MRB_TT_ISTRUCT);
  mrb_define_method(mrb, fake, "initialize", fake_initialize, MRB_ARGS_NONE());
  mrb_define_method(mrb, fake, "to_bytes", fake_to_bytes, MRB_ARGS_NONE());

  EVAL_LIT(mrb,
    Random = Fake \n
    fake = Fake.new \n
    p [fake, fake.to_bytes] \n
    p a = (1..10).to_a \n
    p a.shuffle(fake) \n
    p [fake, fake.to_bytes]
  );

  mrb_close(mrb);

  return 0;
}
```

```console
% `bin/mruby-config --cc --cflags --ldflags` code.c `bin/mruby-config --libs`
% ./a.out
[#<Fake:0x8007d8f20>, "ABCDEFGHIJKLMNOPQRSTUVWX"]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 7, 8, 10, 2, 6, 9, 3, 4, 5]
[#<Fake:0x8007d8f20>, "\xe81{\v\fM\xb0D<\x99\xb1V+l\x84\x86QRSTUVWX"]
```
2022-05-03 13:35:29 +09:00
Yukihiro "Matz" Matsumoto 23ce122fc2 vm.c (mrb_funcall_with_block): copy argv before prepare_missing(); fix #5704
Since prepare_missing() may call `missing` method internally.
2022-05-02 18:59:38 +09:00
Yukihiro "Matz" Matsumoto 651c872a71 Merge branch 'dearblue-exception' 2022-05-01 20:01:04 +09:00
Yukihiro "Matz" Matsumoto 06c4c76be8 Merge branch 'exception' of https://github.com/dearblue/mruby into dearblue-exception 2022-05-01 20:00:37 +09:00
Yukihiro "Matz" Matsumoto a243cf4d68 codedump.c: adjust integer size.
* uint32_t and ptrdiff_t
* uint16_t and uint8_t
2022-04-30 16:51:38 +09:00
Yukihiro "Matz" Matsumoto 49f3a028d1 AUTHORS: update entries [ci skip] 2022-04-29 16:52:34 +09:00
Yukihiro "Matz" Matsumoto 32fb8b19aa class.c: fix integer size mixtures (int, mrb_ssize and mrb_int). 2022-04-28 14:22:11 +09:00
Yukihiro "Matz" Matsumoto 6499efb8dd fmt_fp.c: add type cast to remove a warning. 2022-04-27 13:01:30 +09:00
Yukihiro "Matz" Matsumoto 132d55c924 symbol.c: fix size_t and uint32_t mixture. 2022-04-27 12:52:51 +09:00
Yukihiro "Matz" Matsumoto 4f14ada88a Merge pull request #5701 from jbampton/fix-grammar-and-spelling
docs: fix grammar and spelling
2022-04-26 17:40:32 +09:00
Yukihiro "Matz" Matsumoto a31cfff838 Merge pull request #5702 from jbampton/update-minimum-pre-commit-version
Update minimum `pre-commit` version to latest `2.18.1`
2022-04-26 17:37:14 +09:00
John Bampton c4bfbb2079 Update minimum pre-commit version to latest 2.18.1
Conda, Homebrew and PyPI all have `2.18.1`

https://github.com/pre-commit/pre-commit/releases
https://pypi.org/project/pre-commit/#history
https://formulae.brew.sh/formula/pre-commit
https://anaconda.org/conda-forge/pre-commit

Also run `pre-commit autoupdate`

https://pre-commit.com/#pre-commit-autoupdate
2022-04-26 15:50:49 +10:00
John Bampton c391d94da9 docs: fix grammar and spelling 2022-04-26 13:48:05 +10:00
Yukihiro "Matz" Matsumoto a31ff629ba Merge pull request #5700 from jbampton/codeql-on-pull-request-only
Avoid triggering CodeQL on the "push" event for Dependabot branches
2022-04-26 11:09:42 +09:00
Yukihiro "Matz" Matsumoto 50d1bf6214 Merge pull request #5699 from mruby/dependabot/github_actions/github/codeql-action-2
build(deps): bump github/codeql-action from 1 to 2
2022-04-26 08:45:55 +09:00
John Bampton 68ce424889 Avoid triggering CodeQL on the "push" event for Dependabot branches 2022-04-26 01:15:10 +10:00
dependabot[bot] d20ee7298a build(deps): bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-25 14:08:22 +00:00
Yukihiro "Matz" Matsumoto dd4da14772 symbol.c: remove type mismatch warnings. 2022-04-25 19:14:16 +09:00
Yukihiro "Matz" Matsumoto 73db8c5861 Merge branch 'dearblue-bigint-gem' 2022-04-25 11:21:12 +09:00
Yukihiro "Matz" Matsumoto 118ff0a529 Merge branch 'bigint-gem' of https://github.com/dearblue/mruby into dearblue-bigint-gem 2022-04-25 11:03:39 +09:00
Yukihiro "Matz" Matsumoto f225db4ed6 string.c: move compilation condition to remove unreachable code. 2022-04-25 10:04:39 +09:00
Yukihiro "Matz" Matsumoto 39c8c051f8 numeric.c: mrb_integer_to_str now supports big integers. 2022-04-25 10:03:47 +09:00
Yukihiro "Matz" Matsumoto df09838503 numeric.c: mrb_float_to_integer can return a big integer. 2022-04-25 10:02:54 +09:00
Yukihiro "Matz" Matsumoto 61700dbb0a mruby-sprintf/sprintf.c: raise an error with MRB_NO_FLOAT. 2022-04-25 10:01:09 +09:00
Yukihiro "Matz" Matsumoto b835979bf3 bigint.c: update the error message for too big integers. 2022-04-25 07:31:39 +09:00
Yukihiro "Matz" Matsumoto 0f4769536b src/numeric.c: use mrb_ensure_float_type().
Instead of obsolete `mrb_to_float()` or the combination of
`mrb_float_value(mrb_as_float())`.
2022-04-25 07:29:55 +09:00
Yukihiro "Matz" Matsumoto f45ac65532 fixup! mruby-kernel-ext/kernel.c: use mrb_ensure_integer_type(). 2022-04-25 07:29:21 +09:00
Yukihiro "Matz" Matsumoto 425097c7be mruby-kernel-ext/kernel.c: use mrb_ensure_integer_type().
Instead of obsolete `mrb_to_integer()`.
2022-04-25 07:26:42 +09:00
Yukihiro "Matz" Matsumoto ede3bed9e6 object.c: add new function mrb_ensure_integer_type().
that checks if the value is an `Integer` which may be a big integer,
where existing `mrb_ensure_int_type()` checks if the value is an Integer
**and** fits in `mrb_int`.
2022-04-25 07:21:40 +09:00
Yukihiro "Matz" Matsumoto 2bea39f339 mruby-range-ext/range.c: Range#cover?() takes a range too. 2022-04-24 14:02:00 +09:00
Yukihiro "Matz" Matsumoto 56a35131a4 numeric.c (mrb_cmp): should not raise NoMethodError.
Even when `obj1` does not have `<=>` method.
2022-04-24 14:02:00 +09:00
Yukihiro "Matz" Matsumoto 083691dbd1 variable.c (const_get): stop searching constant before Object.
`String::String` should raise `NameError` exception.
2022-04-24 14:02:00 +09:00
Yukihiro "Matz" Matsumoto 17b4d82f65 variable.c: remove mrb_ prefix from a static function. 2022-04-24 14:02:00 +09:00
Yukihiro "Matz" Matsumoto 8bd77ca332 vm.c: target_class should be retrieved from callinfo. 2022-04-24 14:01:59 +09:00
Yukihiro "Matz" Matsumoto 4afbf8ff01 Merge pull request #5697 from dearblue/mrb_alloca
Hides the class of string objects allocated by `mrb_alloca()`
2022-04-24 14:00:49 +09:00
dearblue 889f1b898f Hides the class of string objects allocated by mrb_alloca()
Prevents retrieval with the `ObjectSpace.each_object` method.
2022-04-23 22:13:30 +09:00
dearblue cc3a213fef Move bigint implementation files to mruby-bigint
Users can now switch to their own implementation of GEM.
However, we do not guarantee that this will not be a problem in the current situation.
This may need to be improved in the future.
2022-04-23 21:19:12 +09:00
dearblue e3e85df13a Removed duplicate prototype declarations for bigint
A part of `include/mruby/bigint.h` has been removed because it duplicates `include/mruby/internal.h`.
2022-04-23 21:11:42 +09:00
Yukihiro "Matz" Matsumoto a4d97934d5 vm.c: check if target_class is NULL (when prepended). 2022-04-22 08:32:18 +09:00
Yukihiro "Matz" Matsumoto bdc244e9b0 mruby-errno/errno.c: fix integer size mixtures. 2022-04-21 14:47:15 +09:00
Yukihiro "Matz" Matsumoto 3be461077d mruby-pack/pack.c: fix integer size mixtures. 2022-04-21 14:47:15 +09:00
Yukihiro "Matz" Matsumoto 9dd45df804 numeric.c (int_pow): should not overflow. 2022-04-21 11:35:52 +09:00
Yukihiro "Matz" Matsumoto e7d0e6fd5a vm.c: fix integer size mixtures. 2022-04-20 16:18:18 +09:00
Yukihiro "Matz" Matsumoto b07ce286f1 fmt_fp.c: fix int and size_t mixture. 2022-04-20 16:11:32 +09:00
Yukihiro "Matz" Matsumoto dd582069ed bigint.c: simplify a loop in mrb_bint_new_float(). 2022-04-20 14:47:40 +09:00
Yukihiro "Matz" Matsumoto b0be2b0176 bigint.c: fix integer size mixture warnings. 2022-04-20 14:47:40 +09:00
Yukihiro "Matz" Matsumoto 791635a8d1 Merge pull request #5695 from dearblue/mrbc-build
Setting `Command#build` correctly in automatic "mrbc" build for presym
2022-04-20 14:47:25 +09:00
Yukihiro "Matz" Matsumoto eb8f7e1b77 Merge pull request #5694 from dearblue/method_added
Move `method_added` method into the `Module`
2022-04-20 08:05:54 +09:00
dearblue be782b7d36 Setting Command#build correctly in automatic "mrbc" build for presym
This was the cause of the command line flag being affected by changes in the parent build.
So, for example, if `mruby-rational` was included, even the automatically added `mrbc` builds included `MRB_USE_RATIONAL`.
2022-04-19 21:48:50 +09:00
dearblue 8bd924c905 Move method_added method into the Module
Previously defined as `BasicObject#method_added`.
2022-04-19 21:00:45 +09:00
Yukihiro "Matz" Matsumoto 4ce0f6dc05 Merge pull request #5692 from jbampton/update-lint-workflow
Fix step names in lint workflow
2022-04-19 07:45:47 +09:00
Yukihiro "Matz" Matsumoto 94585a5902 mruby-binding/bindinc.c: should not mix int and size_t. 2022-04-18 17:47:10 +09:00
Yukihiro "Matz" Matsumoto b38a766427 numeric.c (flo_to_i): use bigint if the value is bigger than mrb_int. 2022-04-18 12:31:15 +09:00
Yukihiro "Matz" Matsumoto 96ff3c31c4 bigint.c: cast to unsigned integer to avoid undefined behavior. 2022-04-18 11:34:30 +09:00
Yukihiro "Matz" Matsumoto 25e6e24c19 bigint.c: adjust integer types to remove warnings. 2022-04-18 11:33:53 +09:00
Yukihiro "Matz" Matsumoto a89130561b bigint.c: remove unused function prototypes. 2022-04-18 11:32:09 +09:00
Yukihiro "Matz" Matsumoto c0b829acce bigint.h: remove unused macro OVMASK. 2022-04-18 11:30:50 +09:00
Yukihiro "Matz" Matsumoto cb353af9ad Merge pull request #5693 from dearblue/each_byte
Improvements to `String#each_byte`
2022-04-18 09:58:59 +09:00
Yukihiro "Matz" Matsumoto c0ef940c90 numeric.c: add boundary checks in Float#to_f.
- check_num_exact() before rounding the float value
- check integer (mrb_int) overflow.
2022-04-17 09:32:04 +09:00
Yukihiro "Matz" Matsumoto 790910b50a codegen.c: genop_3 to take uint16_t instead of uint8_t. 2022-04-17 09:32:04 +09:00
Yukihiro "Matz" Matsumoto 6df1e68e70 Merge pull request #5691 from dearblue/newlit
Avoid creating temporary objects with `new_lit()` in `codegen.c`
2022-04-17 09:18:25 +09:00
dearblue 76d3ea8458 Improvements to String#each_byte
Each byte value is now retrieved inside the loop.
2022-04-16 22:23:34 +09:00
John Bampton d1f754cc19 Fix step names in lint workflow 2022-04-16 22:40:03 +10:00
dearblue 1354ad96ec Avoid creating temporary objects with new_lit() in codegen.c
At the same time, the saving and restoration of unwanted object arenas was removed.
In addition, the common code to extend the pool that existed before has been grouped together and newly established as `lit_pool_extend()`.
Note that previously the variable `i` was updated at that time, but since it is the same as the value at the end of a `for` statement, it has been omitted.

The original catalyst was that `bin/mrbc` with the `MRB_WORD_BOXING` + not `MRB_BOXWORD_NO_FLOAT_TRUNCATE` configuration caused `bin/mrbtest` with the `MRB_NO_BOXING` configuration to fail.
Upon investigation, I concluded that avoiding the creation of temporary objects would prevent the truncation of floating point numbers.
Therefore, this patch also prevents the `rake test` from failing with the following configuration.

```console
% cat test_config.rb
bootstrap_mrbc = nil

MRuby::Build.new do |conf|
  conf.toolchain
  conf.enable_debug
  conf.enable_test
  conf.disable_presym
  conf.defines << %w(MRB_WORD_BOXING)
  #conf.defines << %w(MRB_WORDBOX_NO_FLOAT_TRUNCATE)
  gem core: "mruby-bin-mrbc"
  gem core: "mruby-kernel-ext"
  bootstrap_mrbc = File.join(conf.build_dir, "bin/mrbc")
end

MRuby::Build.new("nobox") do |conf|
  conf.toolchain
  conf.enable_debug
  conf.enable_test
  conf.defines << %(MRB_NO_BOXING)
  conf.mrbcfile = bootstrap_mrbc
  gem core: "mruby-kernel-ext"
end
```
2022-04-16 18:22:32 +09:00
Yukihiro "Matz" Matsumoto b352e462cf Merge pull request #5690 from jbampton/enable-MD010
Enable markdownlint rule MD010 no-hard-tabs
2022-04-15 14:22:04 +09:00
John Bampton 2e35a88c7b Enable markdownlint rule MD010 no-hard-tabs 2022-04-15 12:19:27 +10:00
Yukihiro "Matz" Matsumoto 528335ee99 Merge pull request #5689 from jbampton/case-and-grammar
Fix grammar and case of Ruby
2022-04-15 10:46:49 +09:00
John Bampton 888931c103 Fix grammar and case of Ruby 2022-04-15 11:32:32 +10:00
Yukihiro "Matz" Matsumoto 5f1ed381ae Merge pull request #5688 from jbampton/fix-spelling
Fix spelling in `doc/mruby3.2.md`
2022-04-15 07:44:50 +09:00
John Bampton aa4049e5e6 Fix spelling in doc/mruby3.2.md 2022-04-15 07:06:23 +10:00
Yukihiro "Matz" Matsumoto eba74c038e string.c: avoid a local variable. 2022-04-14 10:55:00 +09:00
Yukihiro "Matz" Matsumoto 15af07562a variable.c: use size_t to avoid integer type mismatch. 2022-04-14 10:54:37 +09:00
Yukihiro "Matz" Matsumoto 3c96ee704b fiber.c: cast integer to avoid a warning. 2022-04-14 10:53:58 +09:00
Yukihiro "Matz" Matsumoto fef7deabd5 doc/mruby3.2.md: add description about multi-precision integers. 2022-04-12 20:28:47 +09:00
Yukihiro "Matz" Matsumoto 2f918f1926 errno.c: fix int and mrb_int mixture.
`strerror(3) takes `int` not `mrb_int`.
2022-04-12 16:11:01 +09:00
Yukihiro "Matz" Matsumoto 0e975c1571 bigint.h: simplified the condition. 2022-04-12 15:06:28 +09:00
Yukihiro "Matz" Matsumoto ff2b21ddf3 Merge pull request #5687 from dearblue/sysfail
Must the `mrb_sys_fail()` function raise an exception
2022-04-12 08:59:50 +09:00
Yukihiro "Matz" Matsumoto 0ec5c3e493 bigint.c (mrb_bint_cmp): avoid object allocation for comparison. 2022-04-11 11:12:47 +09:00
Yukihiro "Matz" Matsumoto f63f57391f bigint.c: fix bugs caused by integer size variety. 2022-04-11 11:04:22 +09:00
Yukihiro "Matz" Matsumoto 30f6669d09 bigint.h: use int64_t as mp_limb if MRB_INT64 is set. 2022-04-11 11:03:08 +09:00
Yukihiro "Matz" Matsumoto bafca84c54 dump.c: should dump INT64 with MRB_32BIT. 2022-04-11 11:00:49 +09:00
dearblue ef5ae084d7 Must the mrb_sys_fail() function raise an exception
Normal return of control from the `mrb_sys_fail()` function has unexpected results.
Example: double free, malloc with huge size used as error integer

The following is an example of an actual crash:

```console
% cat crash.rb
def SystemCallError._sys_fail(*a)
  nil
end

File.readlink("/404")

% bin/mruby crash.rb
zsh: segmentation fault (core dumped)  bin/mruby crash.rb
```
2022-04-10 21:36:59 +09:00
Yukihiro "Matz" Matsumoto 676e9bcf81 bigint.h: use LL suffix for bigger integer literals. 2022-04-10 19:55:45 +09:00
Yukihiro "Matz" Matsumoto dda1626105 bigint.c: wrong position of break statement. 2022-04-10 19:55:22 +09:00
Yukihiro "Matz" Matsumoto 2f832f4479 bigint.c: fix infinite loop bugs. 2022-04-10 19:04:20 +09:00
Yukihiro "Matz" Matsumoto e14782e8a1 vm.c: fixed wrong compilation condition for MRB_INT32. 2022-04-10 19:03:37 +09:00
Yukihiro "Matz" Matsumoto 17a31efa8a vm.c: adjust size of int types. 2022-04-10 19:03:01 +09:00
Yukihiro "Matz" Matsumoto b3420faafd class.c: use mrb_ssize to keep the array length. 2022-04-10 19:02:17 +09:00
Yukihiro "Matz" Matsumoto b22044fca6 vm.c: cipush() to take uint16_t argc. 2022-04-10 17:36:03 +09:00
Yukihiro "Matz" Matsumoto 4260ce83a9 vm.c: avoid bare macro constant reference. wrap it by defined(). 2022-04-09 23:43:03 +09:00
Yukihiro "Matz" Matsumoto bbf4423f4c bigint.c: y->sz > 2 can be fit in mrb_int. 2022-04-09 18:21:45 +09:00
Yukihiro "Matz" Matsumoto 88e0c64ffc class.c: fix bugs in inline method cache. 2022-04-09 17:16:12 +09:00
Yukihiro "Matz" Matsumoto b1d0296a93 class.c: clear method cache after remove_method. 2022-04-09 17:16:12 +09:00
Yukihiro "Matz" Matsumoto c30e6ebe12 gc.c: add red (persistent no scan) color in the comment [ci skip] 2022-04-09 17:16:12 +09:00
Yukihiro "Matz" Matsumoto c8c083cb75 codegen.c: need to pack argument when n==13 too.
Because we have extra 2 arguments coming (kw and rhs).
2022-04-09 17:16:12 +09:00
Yukihiro "Matz" Matsumoto 55b526167b test/bigint.rb: add test for multi-precision integers. 2022-04-09 17:16:11 +09:00
Yukihiro "Matz" Matsumoto f33537f4fd dump.c: fix a bug in dump data size of BIGINT pool.
Was dumping extra NUL (\0) after the data.
2022-04-09 17:16:11 +09:00
Yukihiro "Matz" Matsumoto a252893292 load.c: should not skip bigint literal length. 2022-04-09 17:16:11 +09:00
Yukihiro "Matz" Matsumoto dcaf4083d5 src/bigint.c: implement multi-precision integer.
To enable multi-precision integer support, you need to link
`mruby-bigint` mrbgem. The gem itself is empty but it turns on
the "bigint" support.
2022-04-09 17:16:10 +09:00
Yukihiro "Matz" Matsumoto e3c20b7319 build_config: use full-core gembox on host configuration (except default) 2022-04-06 22:51:47 +09:00
Yukihiro "Matz" Matsumoto 5a27b69aa6 numeric.c: remove duplicated code in int_divmod. 2022-04-06 17:04:40 +09:00
Yukihiro "Matz" Matsumoto 5bef8e4135 numeric.c: the result of -5.div(2) should be -3 as CRuby does. 2022-04-06 17:04:40 +09:00
Yukihiro "Matz" Matsumoto 6ed21ead21 Merge pull request #5682 from dearblue/heap_p
Fixed bounds check for `heap_p()` function in `src/gc.c`
2022-04-06 17:04:32 +09:00
Yukihiro "Matz" Matsumoto f9378f45b9 Merge pull request #5684 from jbampton/run-super-linter-once
Run Super-Linter only once
2022-04-05 14:12:43 +09:00
Yukihiro "Matz" Matsumoto c9c63846e9 Merge pull request #5683 from mruby/dependabot/github_actions/github/super-linter-4.9.2
build(deps): bump github/super-linter from 4.9.1 to 4.9.2
2022-04-05 14:11:59 +09:00
John Bampton b4c70fbe51 Run Super-Linter only once 2022-04-05 00:18:29 +10:00
dependabot[bot] 70aded64f7 build(deps): bump github/super-linter from 4.9.1 to 4.9.2
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.1 to 4.9.2.
- [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.9.1...v4.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-04 14:08:43 +00:00
Yukihiro "Matz" Matsumoto 3cf291f722 vm.c: create break object before clearing GC arena.
Otherwise it possibly cause use-after-free.
2022-04-04 12:26:52 +09:00
dearblue 87c9bd0754 Fixed bounds check for heap_p() function in src/gc.c
One extra element was included.
2022-04-03 22:14:42 +09:00
Yukihiro "Matz" Matsumoto 8aec568fc5 range.c: detect integer overflow. 2022-04-03 18:39:40 +09:00
Yukihiro "Matz" Matsumoto 3dabd18dcc errno.c: resolve signedness warning. 2022-04-02 18:25:13 +09:00
Yukihiro "Matz" Matsumoto b99c389ec3 internal.h: aggregate internal functions.
Internal functions can only be called from within the library.
Functions listed in `mruby/internal.h` can be called from:

* core (src/*.c)
* gems (mrbgems/**/*.c)

But not from the application linked with `libmruby`.
2022-04-02 18:25:13 +09:00
dearblue 92ef9f1a9e Store backtrace to field of struct RException
Since the possible values of the backtrace are limited to `nil`, `RData`, and `RAray`, they are now stored as object pointers.

This change saves memory by eliminating the need to use instance variables for common exceptions.

ref. #2485
2022-04-01 23:27:19 +09:00
dearblue 7d85092bc4 Reorganize the struct RException::mesg member
There is no need to limit the type to `struct RString`.
Also, the `MRB_EXC_MESG_STRING_FLAG` flag can be eliminated by checking if `struct RException::mesg` is `NULL` or not.

ref. #2485
2022-04-01 23:25:20 +09:00
Yukihiro "Matz" Matsumoto 00acae117d vm.c: target class may be NULL. 2022-04-01 16:40:06 +09:00
Yukihiro "Matz" Matsumoto d1f1b4ea38 cdump.c: add const qualifier for line number arrays. 2022-04-01 15:02:39 +09:00
Yukihiro "Matz" Matsumoto 9de6065ae2 Merge pull request #5680 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2022-04-01 14:57:08 +09:00
John Bampton cc380c6546 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2022-04-01 08:26:40 +10:00
mimaki 7d3bc5c3d7 Update version to 3.1.0RC2. 2022-03-31 15:17:17 +09:00
Yukihiro "Matz" Matsumoto f71d389649 codegen.c: fix the negative division regression; fix #5678 2022-03-31 13:05:06 +09:00
Yukihiro "Matz" Matsumoto eaadc5e79f parse.y: empty here-doc delimiter caused infinite loop; fix #5676 2022-03-31 13:01:27 +09:00
Yukihiro "Matz" Matsumoto c627e3b2ab codegen.c: fix a bug in super with keyword arguments; fix #5660 2022-03-31 13:00:34 +09:00
Yukihiro "Matz" Matsumoto 9424e4d4cf parse.y: revert 9e064f2; fix #5647
Need to declare unnamed parameter when argument decomposition used.
2022-03-31 12:59:44 +09:00
Yukihiro "Matz" Matsumoto 64d3f4c730 vm.c: need to adjust argument after packing keyword args; fix #5632
It was caused by #5628.
2022-03-31 12:58:48 +09:00
Yukihiro "Matz" Matsumoto a3f2c95334 codegen.c: skip overwritten MOVE instructions. 2022-03-30 15:34:40 +09:00
Yukihiro "Matz" Matsumoto 60cf382ff9 codegen.c: peephole optimize consecutive MOVE instructions. 2022-03-29 22:36:40 +09:00
Yukihiro "Matz" Matsumoto 9593c15603 AUTHORS: update entries [ci skip] 2022-03-28 17:21:10 +09:00
Yukihiro "Matz" Matsumoto bb5f6a8b56 Merge pull request #5679 from dearblue/expiration-code
Remove old compatibility code
2022-03-27 19:13:26 +09:00
dearblue f9d72908ca Remove old compatibility code
The `mrb_voidp()` related macros have been removed in mruby-1.1.0.
2022-03-27 11:26:43 +09:00
Yukihiro "Matz" Matsumoto 91255c7e9f mrblib/array.rb: Array#<=> to handle NoMethodError exception.
Array element may not respond to `<=>` method.
2022-03-26 22:57:41 +09:00
Yukihiro "Matz" Matsumoto 7f5a490d09 vm.c: vm.c: stack may be reallocated in functions calls; aaa28a5
`mrb_range_new()` also calls VM recursively.
2022-03-26 21:06:02 +09:00
Yukihiro "Matz" Matsumoto bf5bbf0a4b test/integer: test negative integer divisions; ref #5678 2022-03-26 11:26:57 +09:00
Yukihiro "Matz" Matsumoto a91b55f5ca codegen.c: allow constant folding for multiply with zero. 2022-03-26 11:20:59 +09:00
Yukihiro "Matz" Matsumoto 90969cef4c codegen.c: fix the negative division regression; fix #5678 2022-03-26 11:20:59 +09:00
Yukihiro "Matz" Matsumoto 8afdf78928 Merge pull request #5677 from mruby/dependabot/github_actions/github/super-linter-4.9.1
build(deps): bump github/super-linter from 4.9.0 to 4.9.1
2022-03-26 10:52:24 +09:00
dependabot[bot] 4b118fcb0c build(deps): bump github/super-linter from 4.9.0 to 4.9.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.0 to 4.9.1.
- [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.9.0...v4.9.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-25 14:08:20 +00:00
Yukihiro "Matz" Matsumoto aaa28a5089 vm.c: stack may be reallocated in functions calls.
Probably due to recursive VM calls via `mrb_funcall()`.
2022-03-25 12:54:45 +09:00
Yukihiro "Matz" Matsumoto b4168c9b68 parse.y: empty here-doc delimiter caused infinite loop; fix #5676 2022-03-25 07:45:06 +09:00
Yukihiro "Matz" Matsumoto d53a991b07 Merge pull request #5668 from dearblue/gcred
No need to protect red objects
2022-03-24 10:33:40 +09:00
Yukihiro "Matz" Matsumoto ad568ebee5 Merge pull request #5674 from jbampton/fix-markdown-tables
Format Markdown tables
2022-03-24 09:37:45 +09:00
John Bampton 7e4eaaa11a Format Markdown tables 2022-03-24 01:00:24 +10:00
Yukihiro "Matz" Matsumoto 9debdf5a37 Merge pull request #5673 from mruby/dependabot/github_actions/actions/cache-3
build(deps): bump actions/cache from 2.1.7 to 3
2022-03-23 10:20:21 +09:00
Yukihiro "Matz" Matsumoto a153315975 Merge pull request #5665 from dearblue/benchmark1
Update benchmark task
2022-03-23 10:19:46 +09:00
dependabot[bot] be229d666f build(deps): bump actions/cache from 2.1.7 to 3
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.7 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.7...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-21 14:09:17 +00:00
Yukihiro "Matz" Matsumoto 982a4769a1 metaprog.c: add undefined_instance_methods method. 2022-03-21 11:15:23 +09:00
Yukihiro "Matz" Matsumoto 74597c6159 numeric.c: fix compile errors with MRB_NO_FLOAT; fix #5672 2022-03-20 19:04:00 +09:00
Yukihiro "Matz" Matsumoto 59d95352d6 doc/mruby3.2.md: new file to describe 3.2 changes. 2022-03-19 14:37:55 +09:00
Yukihiro "Matz" Matsumoto 4f869f3367 numeric.c: enhance float division to support Complex. 2022-03-18 14:23:17 +09:00
Yukihiro "Matz" Matsumoto e45081d310 mrbc/stub.c: define stub functions in a separated file. 2022-03-18 12:29:47 +09:00
Yukihiro "Matz" Matsumoto fe03e01078 numeric.c: enhance integer division to support Rational and Complex.
No longer need to override division methods in mrbgems.
2022-03-18 12:27:46 +09:00
Yukihiro "Matz" Matsumoto 4dcdf78f8a numeric_ext.c: add Integer#pow() method.
Which takes optional second argument of modulo.
2022-03-17 23:25:50 +09:00
Yukihiro "Matz" Matsumoto 6b2f08d933 Merge pull request #5670 from dearblue/exc-message
Reimplement `Exception#message` in Ruby
2022-03-16 22:17:55 +09:00
Yukihiro "Matz" Matsumoto 13d014ab5e complex.c: rename static functions to remove abbreviations.
- `flo_`
- `cpx_`
2022-03-15 19:14:45 +09:00
Yukihiro "Matz" Matsumoto a869e4e540 numeric.h: remove obsolete functions.
- mrb_flo_to_fixnum()
- mrb_to_flo()

This commit removes weird abbreviation `_flo`.
2022-03-15 19:10:49 +09:00
Yukihiro "Matz" Matsumoto 4e1cf3293b string.h: replace obsolete functions with macros.
- mrb_string_value_ptr()
- mrb_string_value_len()
2022-03-15 19:08:25 +09:00
Yukihiro "Matz" Matsumoto 6aa5d53867 numeric.c: avoid mrb_float with MRB_NO_FLOAT; fix #5671
`MRB_USE_COMPLEX` is exclusive with `MRB_NO_FLOAT`, so we only need to
check the former.
2022-03-15 19:07:28 +09:00
Yukihiro "Matz" Matsumoto 37d6506972 string.c: remove unused API mrb_str_strlen().
Compatibility macro is provided for safety.
2022-03-14 14:11:25 +09:00
Yukihiro "Matz" Matsumoto 7cd8641645 Merge pull request #5666 from dearblue/annotation.1
Correct truncated `SystemStackError` [ci skip]
2022-03-14 12:52:31 +09:00
Yukihiro "Matz" Matsumoto c5f2ac896c array.c: refactoring allocation size error. 2022-03-13 19:58:57 +09:00
Yukihiro "Matz" Matsumoto daebdb8a7a Merge pull request #5669 from dearblue/donothing
Change function name `mrb_bob_init` to `mrb_do_nothing`
2022-03-13 19:58:46 +09:00
dearblue 75371b8831 Reimplement Exception#message in Ruby
Suppresses the possibility of `mrb_vm_exec()` being called recursively.
2022-03-13 18:56:23 +09:00
dearblue 98d90d83cc Change function name mrb_bob_init to mrb_do_nothing
This is because it is not limited to the `BasicObject#initialize` method.
2022-03-13 16:45:20 +09:00
dearblue c3eac4fe5c No need to protect red objects
The object in `GC_RED` does not need to be marked, and the objects connected to this object should also not need to be marked.
2022-03-13 16:28:43 +09:00
dearblue 34048abcfc Correct truncated SystemStackError [ci skip] 2022-03-13 14:56:56 +09:00
Yukihiro "Matz" Matsumoto a2e9005286 parse.y: add type cast to integer comparison. 2022-03-12 13:31:46 +09:00
Yukihiro "Matz" Matsumoto 4beebc73a7 complex.c: avoid mrb_funcall; call functions directly. 2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto 2772e07dc8 rational.c: avoid mrb_funcall; call functions directly. 2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto 062c2128a3 numops.c: avoid mrb_funcall; call functions directly. 2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto 7659b3b271 numeric.c: avoid mrb_funcall; call functions directly.
When you try to call functions defined in mrbgems, you need to add the
names of functions to `mrbc.c`, since `mrbc` does not link any mrbgem
regardless of the configuration.
2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto b0d6413f2d numops.c: rename functions for addition and subtraction.
To more consistent names.

* mrb_num_plus() -> mrb_num_add()
* mrb_num_minus() -> mrb_num_sub()

Since no one seems to use those functions, there should be no problem.
We added migration macros for compatibility for safety.
2022-03-12 10:54:11 +09:00
Yukihiro "Matz" Matsumoto a20064bcb7 numops.c: separate API functions not used from mruby.
* mrb_num_plus()
* mrb_num_minus()
* mrb_num_mul()
2022-03-12 10:53:59 +09:00
Yukihiro "Matz" Matsumoto 5636e6ab54 numeric.c: rename and expose integer arithmetic functions.
* mrb_int_add()
* mrb_int_sub()
* mrb_int_mul()
2022-03-12 08:44:04 +09:00
Yukihiro "Matz" Matsumoto 10001ff67f rational.c, complex.c: expose arithmetic operation functions.
* mrb_{rational,complex}_{add,sub,mul,div}
2022-03-12 08:35:07 +09:00
Yukihiro "Matz" Matsumoto 55476efb62 error.c: use mrb_funcall_id and presym to call _sys_fail method. 2022-03-11 10:25:32 +09:00
Yukihiro "Matz" Matsumoto b3416832f4 vm.c: refactor block type checking. 2022-03-10 10:43:51 +09:00
Yukihiro "Matz" Matsumoto 0293037b21 proc.c: refactor proc type checking. 2022-03-10 10:43:22 +09:00
Yukihiro "Matz" Matsumoto 6ca1e5c8e0 kernel.c: use preallocated symbol. 2022-03-09 17:14:57 +09:00
Yukihiro "Matz" Matsumoto da48e7dbb2 fiber.c: should pack 15+ arguments in an array. 2022-03-09 15:21:15 +09:00
Yukihiro "Matz" Matsumoto 6e964bd1c6 array.c: check size bound by ARY_MAX_SIZE not MRB_INT_MAX. 2022-03-09 15:21:15 +09:00
Yukihiro "Matz" Matsumoto 6fa5aaf694 socket.c: unify error handling code. 2022-03-09 15:21:14 +09:00
Yukihiro "Matz" Matsumoto 2cb82803b3 socket.c: reorganize error condition in mrb_ipsocket_ntop(). 2022-03-09 15:21:14 +09:00
Yukihiro "Matz" Matsumoto 50f357ee5d mruby-sleep: make error messages consistent. 2022-03-09 15:21:14 +09:00
Yukihiro "Matz" Matsumoto 22a98a0ba7 pack.c: unify duplicated error handling code. 2022-03-09 15:21:14 +09:00
Yukihiro "Matz" Matsumoto 19b9184aa3 string.c: remove unnecessary goto. 2022-03-09 15:21:13 +09:00
Yukihiro "Matz" Matsumoto c2f7ed514d Merge pull request #5663 from dearblue/include-prepend
Small improvements to `Module#{include,prepend}`
2022-03-07 18:57:25 +09:00
Yukihiro "Matz" Matsumoto 2f8eba325a Merge pull request #5664 from dearblue/extend
Reimplement `Kernel.extend` in Ruby
2022-03-07 11:21:59 +09:00
Yukihiro "Matz" Matsumoto dc98988482 string.c: small refactoring regarding check_null_byte. 2022-03-06 23:49:40 +09:00
dearblue 267dd15767 Allow build settings to define if benchmarks are covered or not
Each build target can be explicitly disabled from benchmarking with `MRuby::Build#disable_benchmark`.

Also, the build target "host", which was previously excluded, is now included in the benchmark.
2022-03-06 15:35:05 +09:00
dearblue 1f0d265a83 Raise an exception if there is no benchmark target 2022-03-06 15:29:35 +09:00
dearblue e39581242d Display file paths for benchmark results 2022-03-06 15:28:56 +09:00
dearblue dfddb04063 Use standardized approach for get build configuration name 2022-03-06 15:27:50 +09:00
dearblue ac0d27d1a9 Reimplement Kernel.extend in Ruby 2022-03-06 13:48:04 +09:00
dearblue 9d04183ce1 Small improvements to Module#{include,prepend}
Array objects obtained as splat arguments are generated within the method.
Therefore, it is safe to perform destructive operations.
2022-03-06 13:43:31 +09:00
Yukihiro "Matz" Matsumoto 2dff7ed6a2 mrbc.c: add --no-optimize option to disable optimization; close #5661 2022-03-05 08:04:34 +09:00
Yukihiro "Matz" Matsumoto 41f5f464ae codegen.c: disable constant folding if no_optimize is set; ref #5661 2022-03-05 08:04:33 +09:00
Yukihiro "Matz" Matsumoto 7528c25aae string.c: remove unnecessary mrb_assert_int_fit(). 2022-03-05 08:04:33 +09:00
Yukihiro "Matz" Matsumoto 47cb831369 Merge pull request #5662 from mruby/dependabot/github_actions/actions/upload-artifact-3
build(deps): bump actions/upload-artifact from 2.3.1 to 3
2022-03-04 23:08:59 +09:00
dependabot[bot] d6e69ffef8 build(deps): bump actions/upload-artifact from 2.3.1 to 3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2.3.1 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2.3.1...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-04 14:07:02 +00:00
Yukihiro "Matz" Matsumoto 278f46f971 unpack.c: check if srcidx is shorter than srclen for safety. 2022-03-04 14:19:10 +09:00
Yukihiro "Matz" Matsumoto bc9476e7ca unpack.c: unpack_BER() did assume the string length is not zero. 2022-03-04 14:18:20 +09:00
Yukihiro "Matz" Matsumoto 31d4bbcfea string.c: improve size/capacity check before allocations. 2022-03-04 14:17:21 +09:00
Yukihiro "Matz" Matsumoto 876bcba694 string.c: avoid integer type mixture in mrb_str_cat(). 2022-03-03 16:29:54 +09:00
Yukihiro "Matz" Matsumoto 85c347c3af codegen.c: fix a bug in super with keyword arguments; fix #5660 2022-03-03 14:48:39 +09:00
Yukihiro "Matz" Matsumoto ef3a56c92b error.c: (mrb_exc_new) use mrb_int instead of size_t. 2022-03-03 14:48:39 +09:00
Yukihiro "Matz" Matsumoto b6531fa691 error.h: remove obsolete macro mrb_exc_new_str_lit(). 2022-03-03 14:48:39 +09:00
Yukihiro "Matz" Matsumoto c3f0f84da5 string.c: remove code duplication using str_init_modifiable(). 2022-03-03 14:48:29 +09:00
Yukihiro "Matz" Matsumoto 1a9991f165 string.c: remove unnecessary size check before string initialization. 2022-03-03 08:08:02 +09:00
Yukihiro "Matz" Matsumoto a9bde42641 string.c: small refactoring (open else clause after return). 2022-03-03 08:08:02 +09:00
Yukihiro "Matz" Matsumoto a4f740ff9a string.c: use mrb_int instead of size_t. 2022-03-03 08:08:02 +09:00
Yukihiro "Matz" Matsumoto 51a3317c5b string.c: check integer overflow using mrb_int_mul_overflow(). 2022-03-03 08:08:01 +09:00
Yukihiro "Matz" Matsumoto 0bf1ed9f2c array-ext/array.c: remove unused local variable. 2022-03-03 08:08:01 +09:00
Yukihiro "Matz" Matsumoto 84b5b4c6bf Merge pull request #5658 from mruby/dependabot/github_actions/actions/checkout-3
build(deps): bump actions/checkout from 2.4.0 to 3
2022-03-03 08:06:39 +09:00
dependabot[bot] d6ac7a3a7d build(deps): bump actions/checkout from 2.4.0 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.4.0 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.4.0...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-02 14:10:07 +00:00
Yukihiro "Matz" Matsumoto 1508da4740 array.c: check integer overflow in mrb_ary_set(). 2022-03-01 15:04:08 +09:00
Yukihiro "Matz" Matsumoto 9d8f3c60ff kernel.c: inline mrb_obj_extend() that is called only from one place. 2022-02-28 19:07:31 +09:00
Yukihiro "Matz" Matsumoto 740083eb72 AUTHORS: update entries [ci skip] 2022-02-27 23:42:45 +09:00
Yukihiro "Matz" Matsumoto 57540fbf6c object.c: improve handling of the broken inspect method.
When `inspect` method returns non-string value, it will return a string
given from `to_s` (and if `to_s` fails, will raise an exception).
2022-02-26 22:01:52 +09:00
Yukihiro "Matz" Matsumoto 5305c5c84d array.c: call mrb_ary_delete_at() directly from Array#slice!.
Avoid `mrb_funcall()`.
2022-02-26 14:21:35 +09:00
Yukihiro "Matz" Matsumoto b118ba9fb3 rational.c: avoid indirect calls using mrb_funcall(). 2022-02-25 17:53:55 +09:00
Yukihiro "Matz" Matsumoto 64d9808575 Merge pull request #5656 from suetanvil-misc/bug-missing-yaml
Added a dependency on 'yaml' to load_gems.rb.
2022-02-24 18:45:24 +09:00
Chris Reuter 73df87f7bd Added a dependency on 'yaml' to load_gems.rb.
It appears that some execution paths no longer load YAML before it is
needed so we explicitly `require` it here.
2022-02-23 14:23:57 -05:00
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
dearblue 0a4f21c60f Support disable_presym for mrbgems/mruby-errno
The `mrbgems/mruby-errno/src/known_errors_def.cstub` file has been extended, so the `mrbgems/mruby-errno/src/known_errors_e2c.cstub` file is no longer needed.
2022-02-06 18:39:46 +09:00
dearblue a82220211d Support MRB_NO_STDIO for mrbgems/mruby-errno 2022-02-06 16:12:41 +09:00
dearblue d6773cbd71 Avoid direct access to error messages as instance variables
ref. #2485

The `SystemCallError#to_s` method also needed to be modified, but since it has no functional difference from the `Exception#to_s` method, it will be removed.
2022-02-06 15:45:13 +09:00
dearblue faffc0c4d3 Pinning the Visual Studio version in GitHub Actions
Until now, `windows-latest` meant `windows-2019`, but now it seems that it is being replaced by `windows-2022` in stages.
At the same time, Visual Studio 2019 will be replaced by Visual Studio 2022.

Since mruby's CI is configured to assume Visual Studio 2019, we'll update this and explicitly specify `windows-2022`.
2022-02-05 21:42:54 +09:00
Yukihiro "Matz" Matsumoto b7adf61fe2 Merge pull request #5640 from dearblue/rest-keywords
Check the type of the keyword rest argument
2022-02-05 18:30:58 +09:00
dearblue 6dfc47f5d4 Check the type of the keyword rest argument
If a non-hash object is passed in `OP_SEND` and `OP_SUPER`, an error should occur.

```ruby
kwd = "string"
p(**kwd)  #  => expect raised TypeError
```
2022-02-05 17:41:01 +09:00
dearblue d0e8637e30 Integrate argument normalization for OP_SEND and OP_SUPER 2022-02-05 17:36:23 +09:00
Yukihiro "Matz" Matsumoto 903c5f978a vm.c: check object type before concatenating strings. 2022-02-03 10:41:09 +09:00
Yukihiro "Matz" Matsumoto ae3c99767a codegen.c: fixed a bug in hash code generation with !val. 2022-02-03 10:40:05 +09:00
Yukihiro "Matz" Matsumoto 8d06e79c57 codedump.c: remove unnecessary condition.
`(irep->pool[b].tt & IREP_TT_NFLAG) == 0` is always true ensured by
the assertion.
2022-02-02 20:57:43 +09:00
Yukihiro "Matz" Matsumoto f9f2d4c4e3 codedump.c: adjust OP_HASHCAT variable label position. 2022-02-02 20:51:37 +09:00
Yukihiro "Matz" Matsumoto f0af96c130 mruby-class-ext: add Class#subclasses method. 2022-02-01 22:37:49 +09:00
Yukihiro "Matz" Matsumoto d9bf7982e9 class.c: set MRB_FL_CLASS_IS_INHERITED flag for bootstrapped classes. 2022-02-01 22:36:42 +09:00
Yukihiro "Matz" Matsumoto 00f2b74ab2 kernel.c, binding.c: use MRB_SYM() instead of mrb_intern_lit(). 2022-01-31 16:20:52 +09:00
Yukihiro "Matz" Matsumoto 92fb6d3526 Merge pull request #5639 from suetanvil-misc/project-mruby-errno-readme
Updated mruby-errno/README.md to pass the lint checks.
2022-01-31 15:45:18 +09:00
Yukihiro "Matz" Matsumoto 8252352d7b parse.y: fix buffer overflow with tweaked mruby binary. 2022-01-31 15:42:52 +09:00
Chris Reuter 198e10473b Updated mruby-errno/README.md to pass the lint checks. 2022-01-29 18:40:05 -05:00
Yukihiro "Matz" Matsumoto 0cd12c6d6f Merge pull request #5637 from mruby/dependabot/github_actions/github/super-linter-4.8.7
build(deps): bump github/super-linter from 4.8.6 to 4.8.7
2022-01-29 09:09:36 +09:00
dependabot[bot] 319340f309 build(deps): bump github/super-linter from 4.8.6 to 4.8.7
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.6 to 4.8.7.
- [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.6...v4.8.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-28 14:06:26 +00:00
Yukihiro "Matz" Matsumoto 8b443aa43b Merge pull request #5636 from mruby/dependabot/github_actions/github/super-linter-4.8.6
build(deps): bump github/super-linter from 4.8.5 to 4.8.6
2022-01-28 11:24:46 +09:00
dependabot[bot] 912925eab7 build(deps): bump github/super-linter from 4.8.5 to 4.8.6
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.5 to 4.8.6.
- [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.5...v4.8.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-27 14:09:18 +00:00
Yukihiro "Matz" Matsumoto c5bdfe1bd4 mruby-errno: add errno constants to known_errors.def.
Add unlisted errno constants found in macOS and FreeBSD.
If you see unlisted errno, please report.
2022-01-26 12:58:52 +09:00
Yukihiro "Matz" Matsumoto b7cdb59f26 errno.c: stop generating Errno::Exxx error classes on the fly. 2022-01-26 12:29:19 +09:00
Yukihiro "Matz" Matsumoto dd93dd7419 errno.c: refactor _sys_fail to avoid mrb_funcall. 2022-01-25 16:01:33 +09:00
Yukihiro "Matz" Matsumoto 9892742d27 errno.c: use C array instead of a hash table to lookup a errno class.
To reduce memory consumption by avoiding allocating Ruby objects.
2022-01-25 11:15:34 +09:00
Yukihiro "Matz" Matsumoto 194d0c6f46 mruby-errno: change the format of known_errors_e2c.cstub. 2022-01-25 11:08:52 +09:00
Yukihiro "Matz" Matsumoto 4176e8e88f error.c: use MRB_SYM() in mrb_sys_fail. 2022-01-25 11:08:05 +09:00
Yukihiro "Matz" Matsumoto 5c7338491c errno.c: use mrb_fixnum_p() instead of mrb_type(). 2022-01-25 10:39:13 +09:00
Yukihiro "Matz" Matsumoto 6744d69d3d errno.c: replace string literals by MRB_SYM(). 2022-01-25 10:39:13 +09:00
Yukihiro "Matz" Matsumoto 1e866dffc4 errno.c: bundled mrbgem need not to support mruby 1.x. 2022-01-25 10:28:50 +09:00
Yukihiro "Matz" Matsumoto 0f5829795e errno.c: use MRB_SYM() instead of mrb_intern_lit(). 2022-01-25 10:26:34 +09:00
Yukihiro "Matz" Matsumoto 3b5486e3ae mruby-errno/test: update test suites not to report warnings. 2022-01-25 10:22:28 +09:00
Yukihiro "Matz" Matsumoto 3a15d18ebb errno.c: hide internal _sys_fail from backtrace. 2022-01-24 18:14:28 +09:00
Yukihiro "Matz" Matsumoto c8d96ed782 stdlib.gembox: add mruby-errno 2022-01-24 18:13:28 +09:00
Yukihiro "Matz" Matsumoto a60073d7b9 mruby-errno: remove .gitkeep. 2022-01-24 18:07:59 +09:00
Yukihiro "Matz" Matsumoto 0a6d57ab3c Merge remote-tracking branch 'mruby-errno/master' 2022-01-24 17:58:41 +09:00
Yukihiro "Matz" Matsumoto 2adf32a3f4 add mruby-errno directory 2022-01-24 16:42:36 +09:00
Yukihiro "Matz" Matsumoto 7bedd5e05d codegen.c: generate OP_SETIDX from attribute assignments. 2022-01-24 11:18:27 +09:00
Yukihiro "Matz" Matsumoto cda4d9bcb4 codegen.c: refactor gen_call and gen_values.
Remove no longer used arguments from the functions.
2022-01-22 16:40:21 +09:00
Yukihiro "Matz" Matsumoto b611c43a5d codegen.c: no OP_HASHADD required when val is false. 2022-01-21 15:42:51 +09:00
Yukihiro "Matz" Matsumoto adb16fc6df codegen.c: adjust indentation after OP_STRCAT. 2022-01-21 10:51:07 +09:00
Yukihiro "Matz" Matsumoto ebb5287e29 codedump.c: omit raw c operand for OP_SEND etc. 2022-01-21 10:41:14 +09:00
Yukihiro "Matz" Matsumoto b53cd3ce25 codegen.c: fix evaluation order of attribute assignment. 2022-01-21 10:41:14 +09:00
Yukihiro "Matz" Matsumoto f8944792be parse.y: consistent argument pass for new_call(). 2022-01-21 10:41:13 +09:00
Yukihiro "Matz" Matsumoto ef98eb2c29 codegen.c: fix evaluation order of constant initialization.
`a::B = c` should evaluate `a` then `c`. It used to be `c` then `a`. The
`OP_SETMCNST` instruction operands are designed for older order in mind.
Should we changed the operand order?
2022-01-21 10:41:13 +09:00
Yukihiro "Matz" Matsumoto b68ba2df49 Merge pull request #5634 from hasumikin/fix_mruby-bin-example_tree
Fix tree of mruby-bin-example
2022-01-17 23:27:29 +09:00
HASUMI Hitoshi fb9bba34fb Fix tree of mruby-bin-example 2022-01-17 22:36:41 +09:00
mimaki 6f2efebbb9 Merge commit '7e7f1b2' into stable 2022-01-17 21:36:52 +09:00
Yukihiro "Matz" Matsumoto 31fa330404 class.c: add obj->c check before prepare_singleton_class(). 2022-01-16 22:22:46 +09:00
Yukihiro "Matz" Matsumoto 475b868b72 time.c: remove duplicated UTC condition check. 2022-01-15 18:24:39 +09:00
Yukihiro "Matz" Matsumoto 171d32c007 time.c: 1969-12-31 23:59:59 is a valid time.
But `mktime(3)` for the date returns `-1` which happen to be the
error value.
2022-01-14 11:40:52 +09:00
Yukihiro "Matz" Matsumoto 8f09d8feb4 time.c: check year range before creating Time object. 2022-01-13 15:40:09 +09:00
Yukihiro "Matz" Matsumoto 9f012724fb vm.c: need to adjust argument after packing keyword args; fix #5632
It was caused by #5628.
2022-01-12 12:44:23 +09:00
Yukihiro "Matz" Matsumoto 7e7f1b2f1d parse.y: numbered parameters should not appear on toplevel.
Toplevel includes the top of the method/class/module definitions.
2022-01-11 14:52:05 +09:00
Yukihiro "Matz" Matsumoto 3a30cc27da parse.y: move numbered parameter indexing to lexer. 2022-01-11 14:49:41 +09:00
Yukihiro "Matz" Matsumoto 5dfbfb3ecd parse.y: p->nvar (numbered argument index list) may be NULL. 2022-01-10 15:44:15 +09:00
Yukihiro "Matz" Matsumoto 8c7b995962 AUTHORS: update entries [ci skip] 2022-01-10 12:33:01 +09:00
Yukihiro "Matz" Matsumoto 69b1667b5b Merge pull request #5630 from dearblue/dumps
Fixes file header in src/{cdump,dump}.c [ci skip]
2022-01-09 21:46:40 +09:00
dearblue 178daf1a75 Fixes file header in src/{cdump,dump}.c [ci skip]
The file headers were pointing to each other's files.
2022-01-09 16:30:06 +09:00
mimaki f29924c838 Update version to 3.1.0RC. 2022-01-07 14:15:50 +09:00
Yukihiro "Matz" Matsumoto 696589cf27 Merge pull request #5628 from dearblue/super-kwargs
Fixing keyword arguments with `super`
2022-01-06 10:05:05 +09:00
Yukihiro "Matz" Matsumoto b1fc0dd5a4 Merge pull request #5629 from dearblue/nanbox
Allows handling of unaligned cptrs for `MRB_NAN_BOXING`
2022-01-06 10:02:49 +09:00
Yukihiro "Matz" Matsumoto dfa21f2e58 class.c: cancel #5620 which is no longer needed since #5622
This reverts commit d3b7601af9.
2022-01-05 19:40:55 +09:00
Yukihiro "Matz" Matsumoto aaa3bd0e80 mrbc.c: simplify place holder functions; #5622 2022-01-05 19:39:39 +09:00
Yukihiro "Matz" Matsumoto c088af87b8 object.c: Call functions directly from mrb_ensure_int_type(); #5622 2022-01-05 19:00:14 +09:00
dearblue 88b1654725 Allows handling of unaligned cptrs for MRB_NAN_BOXING
It seems to be preferable to be able to handle pointers of type `char` as well.
For this purpose, `mrb_nanbox_tt_inline` has been reorganized.

- `MRB_NANBOX_TT_POINTER` has been split into `MRB_NANBOX_TT_OBJECT` and `MRB_NANBOX_TT_CPTR`
- `MRB_NANBOX_TT_SYMBOL` has been merged into `MRB_NANBOX_TT_MISC`
2022-01-05 17:23:35 +09:00
dearblue 55b2e45a26 Fixing keyword arguments with super
fix #5627
2022-01-05 16:40:13 +09:00
Yukihiro "Matz" Matsumoto d34e1cb84c Merge pull request #5623 from dearblue/more-presym
Improves presym scanning
2022-01-04 11:54:09 +09:00
Yukihiro "Matz" Matsumoto 6c68b516ff Merge pull request #5624 from dearblue/powerof2
Assert that `MRB_METHOD_CACHE_SIZE` is a power of 2
2022-01-04 11:51:00 +09:00
Yukihiro "Matz" Matsumoto 5c75dc9edc Merge pull request #5625 from dearblue/proc_new
Assign after `mrb_irep_incref()` in `mrb_proc_new()`
2022-01-03 08:54:01 +09:00
Yukihiro "Matz" Matsumoto 4e0b162253 Merge pull request #5622 from dearblue/to_f
Call functions directly from `mrb_ensure_float_type()`
2022-01-02 18:04:18 +09:00
Yukihiro "Matz" Matsumoto ab4baba283 Merge pull request #5620 from dearblue/adjust-stacks
Adjusting the stack for after it enters the virtual machine
2022-01-02 18:01:53 +09:00
dearblue bee9665400 Assign after mrb_irep_incref() in mrb_proc_new()
ref. 28ccc664e5
2022-01-02 16:43:43 +09:00
dearblue 82a1b00eb6 Assert that MRB_METHOD_CACHE_SIZE is a power of 2
The `mrb_static_assert_powerof2()` macro has been introduced for this purpose.
2022-01-02 14:59:55 +09:00
dearblue f2d19aaaac Improves presym scanning
The main purpose is to increase the chances of finding presym and to prevent errors due to C++11 lambda expressions.

- The argument to receive the class may be written, for example, `mrb_class_get()`.
- The argument that receives the implementation function of the method may be a C++ lambda expression.
  In this case, if multiple variable declarations are separated by colons, the preprocessor will recognize them as argument delimiters and report an error.
  This patch prevents it from happening.

  ```c++
  // When preprocessing...
  func([] { int x, y, z; })
    // ^^^^^^^^^^          1st argument?
    //             ^       2nd argument?
    //                ^^^^ 3rd argument?
  ```
2022-01-02 11:52:19 +09:00
Yukihiro "Matz" Matsumoto 28ccc664e5 proc.c: should not reference irep when copying failed.
It may cause broken reference count numbers.
2022-01-01 21:02:58 +09:00
dearblue ac22a63ae3 Call functions directly from mrb_ensure_float_type()
ref. commit 7f40b645d2

Currently, the build configurations `MRB_USE_COMPLEX` and `MRB_USE_RATIONAL` are not listed in the documentation.
In other words, they are hidden settings.
They are defined in `mrbgems/mruby-{complex,rational}/mrbgem.rake`.
So this patch assumes that it is safe to refer to these functions in core-gems directly from core functions.

However, applications that link with `libmruby_core.a` will have compatibility issues.
In fact, `mrbgems/mruby-bin-mrbc` links with `libmruby_core.a`, so I had to prepare a dummy function.
2021-12-31 19:12:11 +09:00
Yukihiro "Matz" Matsumoto 3de9ddfb39 vm.c: use prepare_missing in mrb_funcall_with_block
Remove code duplication.
2021-12-31 18:15:41 +09:00
Yukihiro "Matz" Matsumoto 5ca17c2dce Merge pull request #5621 from dearblue/ci-cygwin
Extend the Cygwin CI time limit to 15 minutes.
2021-12-31 16:32:33 +09:00
Yukihiro "Matz" Matsumoto 9fc26eacd1 Merge pull request #5619 from dearblue/properties
Get object properties after `mrb_get_args()`
2021-12-31 15:28:11 +09:00
Yukihiro "Matz" Matsumoto b9e1b9b328 numeric.c: merge mrb_as_float implementation to mrb_ensure_float_type.
Since they are basically duplicated functionality. `mrb_as_float` is now
a macro defined using `mrb_ensure_float_type`; #5620
2021-12-31 15:14:37 +09:00
Yukihiro "Matz" Matsumoto 566a8d3fcb object.c: add conversion to Float from Rational, Complex; #5620 2021-12-31 15:13:04 +09:00
Yukihiro "Matz" Matsumoto 7f40b645d2 numeric.c: mrb_as_float should not call to_f for generic objects.
It should only call `to_f` for Rational and Complex numbers.
Ref #5540 #5613 #5620
2021-12-31 10:54:28 +09:00
Yukihiro "Matz" Matsumoto eea418bcce class.c, variable,c: replace size_t by int.
That reduce memory consumption by iv/mt tables.
2021-12-31 10:54:28 +09:00
dearblue 4c8a8818ec Extend the Cygwin CI time limit to 15 minutes.
The main reason for failure is to exceed the time limit, and even when it succeeds, there is less than a minute left.
The 10-minute time limit seems to be too short.
2021-12-30 22:58:41 +09:00
dearblue d3b7601af9 Adjusting the stack for after it enters the virtual machine
ref. #5613.

I mentioned in #5540 that there was no reentrant to the virtual machine, but in fact it was still a possibility at that point.
Also, the variable `ci` needs to be recalculated at the same time.
2021-12-30 22:45:19 +09:00
dearblue a137ef12f9 Get object properties after mrb_get_args()
ref. #5613

I checked with Valgrind, and the methods that can cause use-after-free are `Array#rotate`, `Array#rotate!`, and `String#byteslice`.
Since `String#rindex` uses `RSTRING_LEN()` indirectly inside the function, no reference to the out-of-bounds range is generated.
2021-12-30 22:34:22 +09:00
Yukihiro "Matz" Matsumoto 77f4a8b669 object.c: move string to float conversion to mrb_f_float. 2021-12-29 16:58:05 +09:00
Yukihiro "Matz" Matsumoto 66a099b1b3 string.c: reorganize str_convert_range using mrb_ensure_int_type 2021-12-29 16:44:35 +09:00
Yukihiro "Matz" Matsumoto b6d31810fe string.c: use mrb_as_int macro. 2021-12-29 16:39:56 +09:00
Yukihiro "Matz" Matsumoto 4f297ac29c object.c: introduce mrb_ensure_{int,float}_type.
Since `mrb_to_integer` and `mrb_to_float` does not convert the object
but checks types, they are named so by historical reason. We introduced
properly named functions.

This commit obsoletes the following functions:

* mrb_to_integer()
* mrb_to_int()
* mrb_to_float()

Use `mrb_ensure_int_type()` instead for the first 2 functions. Use
`mrb_ensure_float_type()` for the last.
2021-12-29 16:39:29 +09:00
Yukihiro "Matz" Matsumoto b6283978c5 object.c: avoid implicit to_i and to_f calls.
mruby have removed `to_int` implicit conversion, so `mrb_to_integer`
should not call `to_i` for conversion.
2021-12-29 16:21:29 +09:00
Yukihiro "Matz" Matsumoto 41e8b210b8 common.h: include <sys/types.h> for ssize_t; #5617 2021-12-29 15:57:45 +09:00
Yukihiro "Matz" Matsumoto 27d1e0132a array.c: fix mrb_ary_shift_m initialization bug.
The `ARY_PTR` and `ARY_LEN` may be modified in `mrb_get_args`.
2021-12-29 15:50:28 +09:00
Yukihiro "Matz" Matsumoto 83f2e75d17 Merge pull request #5616 from mimaki/refine-ssize_t-on-msvc
Fix build error and refine definition of `ssize_t` on MSVC.
2021-12-29 12:58:43 +09:00
mimaki 1f3a385ec5 Fix build error and refine definition of ssize_t on MSVC. 2021-12-28 17:18:59 +09:00
Yukihiro "Matz" Matsumoto 6f5c211c78 Merge pull request #5614 from jbampton/patch-1
Fix word casing in the README
2021-12-28 16:19:52 +09:00
Yukihiro "Matz" Matsumoto 8933a6fcbf Merge pull request #5615 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2021-12-28 16:19:14 +09:00
John Bampton 69affd6983 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2021-12-28 10:28:14 +10:00
John Bampton c997229ecf Fix word casing in the README
Changed `Actual` to `actual` mid sentence
2021-12-28 10:22:20 +10:00
Yukihiro "Matz" Matsumoto 6de0fcbda2 class.c: remove mt_elem structure to avoid alignment gaps. 2021-12-27 11:15:34 +09:00
Yukihiro "Matz" Matsumoto a388d609ae variable.c: need to initialize size of iv table. 2021-12-27 10:55:17 +09:00
Yukihiro "Matz" Matsumoto 27e57aad0b parse.y: prohibit numbered parameters as arguments; fix #5605 2021-12-27 10:55:17 +09:00
Yukihiro "Matz" Matsumoto e6b6413932 Merge pull request #5612 from dearblue/compar-ext
Fix summary typo for `mrbgems/mruby-compar-ext`
2021-12-26 08:13:23 +09:00
dearblue 65195cd784 Fix summary typo for mrbgems/mruby-compar-ext 2021-12-25 20:46:25 +09:00
Yukihiro "Matz" Matsumoto 39191cd9fa parse.y: allow arguments start with _ to appear multiple times; fix #5604 2021-12-24 07:41:37 +09:00
Yukihiro "Matz" Matsumoto 3b59c95ead pack.c: check integer overflow in unpacking BER; fix #5611 2021-12-23 07:57:58 +09:00
Yukihiro "Matz" Matsumoto 42a6872c2b parse.y: adjust void_expr_error(); fix #5606
Allow void expression on some places e.g. right hand of `rescue`
modifier. In addition, checks added on some places, e.g. left hand of
logical operators.
2021-12-22 14:08:04 +09:00
Yukihiro "Matz" Matsumoto 4e8d376417 Merge pull request #5610 from mruby/dependabot/github_actions/github/super-linter-4.8.5
build(deps): bump github/super-linter from 4.8.4 to 4.8.5
2021-12-21 23:13:43 +09:00
dependabot[bot] 916fbcce2c build(deps): bump github/super-linter from 4.8.4 to 4.8.5
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.4 to 4.8.5.
- [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.4...v4.8.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-21 14:11:38 +00:00
Yukihiro "Matz" Matsumoto 8a5f18a1d8 codegen.c: generate OP_SETIDX; close #5608
Note that the current implantation only calls `[]=` method. No
performance improvement. Just 2 bytes less byte code per assignment.
2021-12-20 17:46:57 +09:00
Yukihiro "Matz" Matsumoto a42b676ae9 vm.c: fix a half-baked implementation of OP_SETIDX; ref #5608 2021-12-20 17:45:10 +09:00
Yukihiro "Matz" Matsumoto 5774a7a38b codedump.c: adjust the position of local variable labels. 2021-12-20 17:44:31 +09:00
Yukihiro "Matz" Matsumoto a17955259e Merge pull request #5602 from dearblue/no-ext-ops
Add `bin/mrbc --no-ext-ops` switch
2021-12-19 19:11:51 +09:00
Yukihiro "Matz" Matsumoto d7812bd3d6 Merge pull request #5603 from dearblue/codegen_error
Print error before cleanup in `codegen_error()`
2021-12-18 19:42:31 +09:00
dearblue 26338fe640 Print error before cleanup in codegen_error()
Previously, it always pointed to the highest scope as the location of the error.

  - example code `code.rb`

    ```ruby
    huge_num = "1" + "0" * 300; eval <<CODE, nil, "test.rb", 1
    class Object
      module A
        #{huge_num}
      end
    end
    CODE
    ```

  - Before this patch

    ```console
    % bin/mruby code.rb
    test.rb:1: integer too big
    trace (most recent call last):
            [1] code.rb:1
    code.rb:1:in eval: codegen error (ScriptError)
    ```

  - After this patch

    ```console
    % bin/mruby code.rb
    test.rb:3: integer too big
    trace (most recent call last):
            [1] code.rb:1
    code.rb:1:in eval: codegen error (ScriptError)
    ```
2021-12-17 23:03:27 +09:00
dearblue 6b8582c95d Add bin/mrbc --no-ext-ops switch
Print an error if `OP_EXT[123]` is needed when generating mruby binary.
This may be useful for mruby/c.

Inspired by #5590.
2021-12-17 23:02:04 +09:00
Yukihiro "Matz" Matsumoto 9b65d0dc86 Merge pull request #5601 from mruby/dependabot/github_actions/actions/upload-artifact-2.3.1
build(deps): bump actions/upload-artifact from 2.2.4 to 2.3.1
2021-12-17 07:49:53 +09:00
dependabot[bot] a7aa0b1da2 build(deps): bump actions/upload-artifact from 2.2.4 to 2.3.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2.2.4 to 2.3.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2.2.4...v2.3.1)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-16 14:08:05 +00:00
Yukihiro "Matz" Matsumoto 57d93c4d76 string-ext.c: fix memory leak in tr_parse_pattern. 2021-12-16 11:39:35 +09:00
Yukihiro "Matz" Matsumoto 0fbdd71dcf boxing_nan.h: remove false description in the comment [ci skip]
Ref #5597
2021-12-15 23:07:34 +09:00
Yukihiro "Matz" Matsumoto a3d240c2ed Merge pull request #5599 from dearblue/loss-digits
Avoid losing the upper digits for mruby binary
2021-12-15 23:07:13 +09:00
Yukihiro "Matz" Matsumoto f5e10c5a79 proc.c: add mrb_state argument to mrb_proc_copy().
The function may invoke the garbage collection and it requires
`mrb_state` to run.
2021-12-14 13:35:18 +09:00
dearblue fa33a5bb0c Avoid losing the upper digits for mruby binary
- `rlen` keeps 16 bits.
- `ilen` keeps 32 bits.

Note that this change will break mruby binary format compatibility.
2021-12-13 22:58:57 +09:00
Yukihiro "Matz" Matsumoto 8a74b2a25d string-ext/string.c: fixed memory leak from tr on exception.
With some refactoring.

* `ret` argument is always non-nil, so no check needed.
* move allocation check right after malloc().
* simplify conditions.
2021-12-13 10:29:16 +09:00
Yukihiro "Matz" Matsumoto d01707d4cf benchmark/bm_ao_render.rb: enable specifying the size of the image. 2021-12-13 10:29:16 +09:00
Yukihiro "Matz" Matsumoto 7b84fd4ce8 variable.c: resurrect size member in iv_tbl.
The existence of this member reduces memory and execution time.
2021-12-13 10:29:15 +09:00
Yukihiro "Matz" Matsumoto 786156d48c class.c: increase first allocated page size. 2021-12-13 10:29:15 +09:00
Yukihiro "Matz" Matsumoto bd4268210e class.c: implement method cache (off by default). 2021-12-13 10:29:15 +09:00
Yukihiro "Matz" Matsumoto 523197c831 Merge pull request #5598 from dearblue/array-combinations
Add `Array#{repeated_combination,repeated_permutation}` methods
2021-12-13 10:28:50 +09:00
Jonas Minnberg c6f0452d13 Added comments about removal of objects[]
Made mrb_get_args_v() static
2021-12-12 16:14:53 +01:00
dearblue 586525f99a Add Array#{repeated_combination,repeated_permutation} methods
Ruby 1.9.2 feature.

ref: https://docs.ruby-lang.org/ja/3.1.0/method/Array/i/repeated_combination.html
ref: https://docs.ruby-lang.org/ja/3.1.0/method/Array/i/repeated_permutation.html
2021-12-12 21:28:03 +09:00
Jonas Minnberg b1cf973186 Added mrb_get_args_a() - an array version of mrb_get_args() 2021-12-11 14:24:36 +01:00
Jonas Minnberg 24939723d7 Remove zero length array since it is not C++ compatible 2021-12-11 14:23:59 +01:00
Yukihiro "Matz" Matsumoto 7349902d5b irep.h: c operand may require 16 bits for BSS operand type.
fix #5593
2021-12-09 14:28:47 +09:00
Yukihiro "Matz" Matsumoto d2a904c884 vm.c (check_method_noarg): the value at kidx may not be a hash. 2021-12-08 16:43:02 +09:00
Yukihiro "Matz" Matsumoto c593e3e30a vm.c: use check_method_noarg() to reduce code duplication; ref #5584 2021-12-08 16:42:23 +09:00
Yukihiro "Matz" Matsumoto 5bad1c7429 vm.c: fix mrb_ci_kidx.
It used to return wrong value for 14 positional arguments.
2021-12-08 16:22:24 +09:00
Yukihiro "Matz" Matsumoto 0b6b042fe8 variable.c: fix clang integer warning. 2021-12-08 13:27:10 +09:00
Yukihiro "Matz" Matsumoto 47092ccfa5 mruby-compiler/mrbgem.rake: fix regexp pattern; close #5591 2021-12-07 23:57:32 +09:00
Yukihiro "Matz" Matsumoto 9935cf1aef variable.c: avoid redundant iv scan in mrb_mod_cv_set().
Now `iv_get()` returns `pos+1` if it finds the entry, so you don't need
to call `iv_put()`. You can replace the entry value by assigning to
`t->ptr[pos-1]`.
2021-12-07 08:19:16 +09:00
Yukihiro "Matz" Matsumoto 856ae52021 bm_ao_rendar.rb: use instance variables instead of class variables.
Class variables are slower than instance variables of classes.
2021-12-06 21:12:23 +09:00
Yukihiro "Matz" Matsumoto e5810db1ad variable.c: reduce array access in iv hash table. 2021-12-04 10:43:58 +09:00
Yukihiro "Matz" Matsumoto 9d554017f0 variable.c: avoid mrb_undef_value() for delete entries.
Instead embed deleted flag in the key (`mrb_sym` only occupies 30bits).
2021-12-03 18:36:29 +09:00
Yukihiro "Matz" Matsumoto 4f2a153ada variable.c: remove size member from iv_tbl to reduce memory.
`iv_size()` is approximated by the allocated table size.
2021-12-03 16:06:25 +09:00
Yukihiro "Matz" Matsumoto d3ebe4894b variable.c: first iv allocation size should be 4 instead of 1. 2021-12-03 15:38:16 +09:00
Yukihiro "Matz" Matsumoto a20c2a08ab variable.c: should not access NULL[0] to avoid asan warnings. 2021-12-03 15:04:14 +09:00
Yukihiro "Matz" Matsumoto 6ac26e4442 parse.y: support anonymous block argument introduced by Ruby3.1. 2021-12-02 18:24:48 +09:00
Yukihiro "Matz" Matsumoto bd88870afb codegen.c: ADDI/SUBI should not be prefixed by OP_EXT; fix #5590
As a general principles numeric instructions should not be prefixed by
`OP_EXT` instructions since they are not supported by "mruby/c".
2021-12-01 14:33:52 +09:00
Yukihiro "Matz" Matsumoto 76659a66ae codegen.c: skip ADDI/SUBI for zero operand. 2021-12-01 14:29:44 +09:00
Yukihiro "Matz" Matsumoto 7d6b8024b5 codegen.c: fix a bug in OP_ADDI and OP_SUBI regarding negative values. 2021-12-01 14:28:27 +09:00
Yukihiro "Matz" Matsumoto 2e2f81a443 codegen.c: get_int_operand to retrieve negative values correctly. 2021-12-01 14:26:22 +09:00
Yukihiro "Matz" Matsumoto 7a31a1743a codedump.c: print OP_EXT explicitly again for debugging purpose. 2021-12-01 13:42:40 +09:00
Yukihiro "Matz" Matsumoto b5842dea58 variable.c: reduce memory usage of instance variable table
This is a fundamentally simplified reimplementation of #5317
by @shuujii

Instead of having array of `struct iv_elem`, we have sequences of keys
and values packed in single chunk of malloc'ed memory. We don't have to
worry about gaps from alignment, especially on 64 bit architecture,
where `sizeof(struct iv_elem)` probably consumes 16 bytes, but
`sizeof(mrb_sym)+sizeof(mrb_value)` is 12 bytes.

In addition, this change could improve memory access locality.

close #5317
2021-12-01 12:27:19 +09:00
Yukihiro "Matz" Matsumoto b137eb2678 vm.c: remove duplicate code in VM. 2021-11-29 23:18:57 +09:00
Yukihiro "Matz" Matsumoto a245c34210 Merge pull request #5589 from dearblue/argerr
Align "wrong number of arguments" messages
2021-11-29 10:14:59 +09:00
Yukihiro "Matz" Matsumoto a0f38005fb Merge pull request #5588 from dearblue/cmath+clang++
Fixed compile error for `mrbgems/mruby-cmath` with `clang++`
2021-11-28 19:04:57 +09:00
Yukihiro "Matz" Matsumoto 6bb2af9666 Merge pull request #5587 from dearblue/args-pass.1
Fix `args_unshift()` in `mrbgems/mruby-method`
2021-11-28 19:03:33 +09:00
dearblue c4bca7cbb3 Align "wrong number of arguments" messages
Make "N for M" into the form "given N, expected M".

As I worked, I noticed that the `argnum_error()` function had a part to include the method name in the message.
I think this part is no longer needed by https://github.com/mruby/mruby/pull/5394.

  - Before this patch

    ```console
    % bin/mruby -e '[1, 2, 3].each 0'
    trace (most recent call last):
            [1] -e:1
    -e:1:in each: 'each': wrong number of arguments (1 for 0) (ArgumentError)
    ```

  - After this patch

    ```console
    % bin/mruby -e '[1, 2, 3].each 0'
    trace (most recent call last):
            [1] -e:1
    -e:1:in each: wrong number of arguments (given 1, expected 0) (ArgumentError)
    ```
2021-11-28 18:21:29 +09:00
dearblue f81bc3de38 Fixed compile error for mrbgems/mruby-cmath with clang++
If the preprocessor check part is only `__clang__`, CI's such as `Ubuntu-2004-clang` will fail to compile.
This is why we limited the addition to FreeBSD and OpenBSD, which have `clang++` in their base systems.
DragonFly BSD and NetBSD have GCC built into their base systems, so nothing is changed.
2021-11-28 17:28:44 +09:00
dearblue 58a9621df7 Fix args_unshift() in mrbgems/mruby-method
Both keyword arguments and block arguments were being destroyed when there were no arguments.
The cause of this is #5585. I' m sorry.
2021-11-28 14:10:37 +09:00
Yukihiro "Matz" Matsumoto e4d6917786 test/kernel.rb: remove duplicate tests; ref #5584 2021-11-26 12:18:41 +09:00
dearblue 668b12e756 Check more MRB_ARGS_NONE()
The `__id__` method implemented in the C function has `MRB_ARGS_NONE()` specified, but it is also effective in the following cases.

```ruby
p nil.__id__ opts: 1 rescue p :a
p nil.method(:__id__).call 1 rescue p :b
p nil.method(:__id__).call opts: 1 rescue p :c
p nil.method(:__id__).to_proc.call 1 rescue p :d
p nil.method(:__id__).to_proc.call opts: 1 rescue p :e
p nil.method(:__id__).unbind.bind_call nil, 1 rescue p :f
p nil.method(:__id__).unbind.bind_call nil, opts: 1 rescue p :g
p nil.__send__ :__id__, 1 rescue p :h
p nil.__send__ :__id__, opts: 1 rescue p :i
```

After applying this patch, all items will output symbols in the same way as CRuby.

For this purpose, add `MRB_PROC_NOARG` to `struct RProc::flags`.
2021-11-26 12:18:41 +09:00
Yukihiro "Matz" Matsumoto b631c226eb Merge pull request #5585 from dearblue/args-pass
Fixed some methods where keyword arguments are not passed
2021-11-25 17:08:32 +09:00
dearblue 16e388863a Fixed some methods where keyword arguments are not passed 2021-11-24 23:35:42 +09:00
Yukihiro "Matz" Matsumoto d6e1114f71 Merge pull request #5581 from mruby/dependabot/github_actions/actions/cache-2.1.7
build(deps): bump actions/cache from 2.1.6 to 2.1.7
2021-11-24 09:39:50 +09:00
dependabot[bot] 9ae657520b build(deps): bump actions/cache from 2.1.6 to 2.1.7
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.6 to 2.1.7.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.6...v2.1.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-23 14:12:20 +00:00
Yukihiro "Matz" Matsumoto d627c22924 AUTHORS: update entries [ci skip] 2021-11-23 10:05:16 +09:00
Yukihiro "Matz" Matsumoto 4a84fa5db5 Merge pull request #5580 from dearblue/static-proc
Fixed occurs `SIGSEGV` with `mrbgems/mruby-method`
2021-11-23 10:03:44 +09:00
dearblue b02bd63dc5 Fixed occurs SIGSEGV with mrbgems/mruby-method
Calling the `Method#{parameters,source_location}` method on a static `Proc` object resulted in `SIGSEGV`.
The trigger is https://github.com/mruby/mruby/pull/5402.

The original implementation of the `Method#{parameters,source_location}` method was to temporarily rewrite the object and then call the method of the same name in `Proc`.
Rewriting of objects placed in the ROM section by #5402 above is prohibited by hardware such as the CPU.
This caused a `SIGSEGV`.
2021-11-22 21:55:02 +09:00
Yukihiro "Matz" Matsumoto 01cadd3e70 parse.y: check duplicated argument names; fix #5575 2021-11-21 19:05:50 +09:00
Yukihiro "Matz" Matsumoto f69eafc6bd doc/internal/opcode.md: moved from doc/opcode.md 2021-11-20 14:56:59 +09:00
Yukihiro "Matz" Matsumoto 28f00b23bf doc/opcode.md: update according to #5579 2021-11-20 14:55:09 +09:00
Yukihiro "Matz" Matsumoto a04d2a8865 fixup! parse.y: unnamed rest argument should be mul (*). 2021-11-20 08:50:52 +09:00
Yukihiro "Matz" Matsumoto 2e41b20590 parse.y: unnamed rest argument should be mul (*). 2021-11-20 08:50:52 +09:00
Yukihiro "Matz" Matsumoto 9e064f2353 parse.y: skip unnecessary local_add_f(p, 0). 2021-11-20 08:50:51 +09:00
Yukihiro "Matz" Matsumoto 4c28356b71 Merge pull request #5578 from dearblue/OP_SENDB
Fixes keywords are lost with the `OP_SENDB`
2021-11-20 08:50:42 +09:00
Yukihiro "Matz" Matsumoto c6c789d2e8 Merge pull request #5579 from dearblue/OP_ASET
Fixed a discrepancy in `OP_ASET`
2021-11-20 08:48:05 +09:00
dearblue 6fba0dbece Fixed a discrepancy in OP_ASET
There was a discrepancy in the actual behavior, assertions, and documentation.
Therefore, I modified it based on the actual behavior.
2021-11-19 22:53:01 +09:00
dearblue 279e0122da Fixes keywords are lost with the OP_SENDB
If a splat argument was passed, it could write out of range on the VM stack.

```console
% bin/mruby -e 'def m(*args, **opts, &blk) p [args, opts, blk] end; m(*%w(X Y Z), r: 1, g: 2, b: 3) {}'
[["X", "Y", "Z"], {}, #<Proc:0x80077d7d0>]
```
2021-11-19 22:35:47 +09:00
Yukihiro "Matz" Matsumoto 1a1ff6b3ff Merge pull request #5577 from mruby/dependabot/github_actions/github/super-linter-4.8.4
build(deps): bump github/super-linter from 4.8.3 to 4.8.4
2021-11-18 10:28:35 +09:00
dependabot[bot] a66db89a5d build(deps): bump github/super-linter from 4.8.3 to 4.8.4
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.3 to 4.8.4.
- [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.3...v4.8.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-17 14:09:11 +00:00
Yukihiro "Matz" Matsumoto f4e18a5d84 codegen.c: fixed a bug in post mandatory arguments. 2021-11-17 16:34:44 +09:00
Yukihiro "Matz" Matsumoto f5d9aab372 codegen.c: should not emit the MOVE instruction to the same register. 2021-11-17 16:33:53 +09:00
Yukihiro "Matz" Matsumoto e3e54453a7 Merge pull request #5576 from mruby/dependabot/github_actions/github/super-linter-4.8.3
build(deps): bump github/super-linter from 4.8.1 to 4.8.3
2021-11-16 16:59:10 +09:00
dependabot[bot] 927812a7e6 build(deps): bump github/super-linter from 4.8.1 to 4.8.3
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.1 to 4.8.3.
- [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.1...v4.8.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-15 14:08:13 +00:00
Yukihiro "Matz" Matsumoto e0a3800e5d string-ext/string.c: fixed a memory leak. 2021-11-15 09:49:05 +09:00
Yukihiro "Matz" Matsumoto a0b58eed46 doc/internal/boxing.md: describe how mrb_value represents values. 2021-11-14 17:45:21 +09:00
Yukihiro "Matz" Matsumoto 1fe722cd78 boxing_word.h: fix the error in the comment [ci skip] 2021-11-13 20:59:54 +09:00
Yukihiro "Matz" Matsumoto 4e3df65d6f test/syntax.rb: test argument forwarding without parentheses. 2021-11-12 15:02:49 +09:00
Yukihiro "Matz" Matsumoto 7c1878669a parse.y: should allow newline after .... 2021-11-12 15:02:04 +09:00
Yukihiro "Matz" Matsumoto 885a87e408 parse.y: allow ... in formal arguments without parentheses. 2021-11-10 22:25:02 +09:00
Yukihiro "Matz" Matsumoto 2e0c1b4361 etc.c: improve mrb_obj_id with NaN boxing and Word boxing. 2021-11-09 17:24:53 +09:00
Yukihiro "Matz" Matsumoto a5567fbad4 boxing_nan.h: update mrb_immediate_p and related macros. 2021-11-08 14:33:50 +09:00
Yukihiro "Matz" Matsumoto 5dc91029d1 TODO.md: update. 2021-11-08 14:33:50 +09:00
Yukihiro "Matz" Matsumoto 5c8e184fcf Merge pull request #5437 from dearblue/parse.y
Run the task only once when `parse.y` is updated
2021-11-06 19:58:28 +09:00
Yukihiro "Matz" Matsumoto c3a1456cc8 mruby3.1.md: update. 2021-11-06 18:18:38 +09:00
Yukihiro "Matz" Matsumoto 879f074cd0 mruby3.1.md: update new methods description. 2021-11-05 15:08:44 +09:00
Yukihiro "Matz" Matsumoto d6f6467ad7 boxing_nan.h (mrb_float_p): wrap macro argument by parenthesis. 2021-11-04 20:49:19 +09:00
Yukihiro "Matz" Matsumoto c21a094a7f hash.c: avoid mrb_obj_id to get the hash value if possible. 2021-11-04 15:54:31 +09:00
Yukihiro "Matz" Matsumoto 877e82eb92 Merge pull request #5570 from dearblue/random-bytes
Added `Random.#bytes` method
2021-11-04 15:54:22 +09:00
Yukihiro "Matz" Matsumoto 8f67a0d0e1 Merge pull request #5569 from dearblue/array-product
Added `Array#product` method
2021-11-04 15:54:09 +09:00
Yukihiro "Matz" Matsumoto b940ed69d9 Merge pull request #5571 from mruby/dependabot/github_actions/actions/checkout-2.4.0
build(deps): bump actions/checkout from 2.3.5 to 2.4.0
2021-11-04 07:48:14 +09:00
dependabot[bot] b8b5d4094f build(deps): bump actions/checkout from 2.3.5 to 2.4.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.5 to 2.4.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.5...v2.4.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-03 14:06:38 +00:00
Yukihiro "Matz" Matsumoto 36efd018e2 Merge pull request #5565 from dearblue/class.new
Improved `Class#new` method
2021-11-03 19:38:11 +09:00
Yukihiro "Matz" Matsumoto 59b7846ab0 Merge pull request #5568 from dearblue/nan+cxx_abi
Fix failed build with `MRB_NAN_BOXING` and `enable_cxx_abi`
2021-11-01 13:54:15 +09:00
Yukihiro "Matz" Matsumoto a0dd466840 object.c: fast implementation of mrb_obj_eq.
For `MRB_NAN_BOXING` and `MRB_WORD_BOXING`.
2021-11-01 13:35:10 +09:00
dearblue 7bb4a57e56 Added Random.#bytes method
ref: https://docs.ruby-lang.org/ja/3.0.0/method/Random/i/bytes.html
2021-10-31 23:36:10 +09:00
dearblue 5ea26260fa Added Array#product method
Ruby-1.9.0 feature.

ref: https://docs.ruby-lang.org/ja/3.0.0/method/Array/i/product.html
2021-10-31 23:02:37 +09:00
dearblue 1de662cb8b Fix failed build with MRB_NAN_BOXING and enable_cxx_abi
```console
% c++ -xc++ -std=c++03 -S -Iinclude -DMRB_NAN_BOXING -DMRB_NO_PRESYM -o- src/array.c > /dev/null
In file included from src/array.c:7:
In file included from include/mruby.h:115:
In file included from include/mruby/value.h:201:
include/mruby/boxing_nan.h:95:12: error: cannot initialize return object of type 'enum mrb_vtype' with an rvalue of type 'int'
    return (enum mrb_vtype)(o.u >> 8) & 0x1f;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
```
2021-10-31 22:17:15 +09:00
Yukihiro "Matz" Matsumoto d8204d51af Merge pull request #5566 from dearblue/no_float_truncate
Avoid redefining `MRB_WORDBOX_NO_FLOAT_TRUNCATE`
2021-10-31 17:29:20 +09:00
Yukihiro "Matz" Matsumoto f0b0f9d69d Merge pull request #5567 from dearblue/mrb_static_assert.1
Avoid violations of the `mrb_static_assert()` standard
2021-10-30 17:46:40 +09:00
Yukihiro "Matz" Matsumoto 9f0410789d boxing_nan.h: allow MRB_INT64 with MRB_NAN_BOXING.
Integers out of 32 bit range will be allocated in the heap.
2021-10-30 17:44:46 +09:00
Yukihiro "Matz" Matsumoto 85fcd2dc6f boxing_nan.h: implement Favor pointer NaN Boxing.
Favor pointer means encode NaN boxed values to keep pointer values
unmodified, to reduce the cost of far frequent pointer value retrievals.
2021-10-30 17:43:35 +09:00
dearblue 61ee857178 Avoid violations of the mrb_static_assert() standard
ref: #5564

```console
% cc -pedantic -S -Iinclude -DMRB_NO_PRESYM -o- src/array.c > /dev/null
In file included from src/array.c:7:
In file included from include/mruby.h:115:
In file included from include/mruby/value.h:204:
include/mruby/boxing_word.h:133:1: warning: must specify at least one argument for '...' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]
mrb_static_assert(sizeof(mrb_value) == sizeof(union mrb_value_));
^
include/mruby.h:109:108: note: expanded from macro 'mrb_static_assert'
    mrb_static_assert_expand(mrb_static_assert_selector(__VA_ARGS__, mrb_static_assert2, mrb_static_assert1)(__VA_ARGS__))
                                                                                                           ^
include/mruby.h:100:10: note: macro 'mrb_static_assert_selector' defined here
# define mrb_static_assert_selector(a, b, name, ...) name
         ^
1 warning generated.
```
2021-10-30 13:22:35 +09:00
dearblue fa8bd00b57 Avoid redefining MRB_WORDBOX_NO_FLOAT_TRUNCATE
Adding `MRB_WORDBOX_NO_FLOAT_TRUNCATE` to the build configuration in 32-bit CPU mode had a double definition.

```console
% cat myconf.rb
MRuby::Build.new do
  toolchain "clang"
  defines << "MRB_WORDBOX_NO_FLOAT_TRUNCATE"
  cc.flags << "-m32"
  linker.flags << "-m32"
  enable_debug
end

% rake CONFIG=myconf.rb
CPP   src/array.c -> build/host/src/array.pi
In file included from /var/tmp/mruby/src/array.c:7:
In file included from /var/tmp/mruby/include/mruby.h:115:
In file included from /var/tmp/mruby/include/mruby/value.h:203:
/var/tmp/mruby/include/mruby/boxing_word.h:11:10: warning:
      'MRB_WORDBOX_NO_FLOAT_TRUNCATE' macro redefined [-Wmacro-redefined]
# define MRB_WORDBOX_NO_FLOAT_TRUNCATE
         ^
<command line>:3:9: note: previous definition is here
#define MRB_WORDBOX_NO_FLOAT_TRUNCATE 1
        ^
1 warning generated.
...SNIP...
```
2021-10-30 09:55:35 +09:00
dearblue 33792c2a02 Improved Class#new method
The number of registers used is reduced.

Also, previously `R6` and` R7` were used, which exceeded the limit of `new_irep.nregs = 6`.
This could cause the VM stack to overrun.
2021-10-29 22:20:20 +09:00
Yukihiro "Matz" Matsumoto 0069e6738a boxing_nan.h: refactor NaN Boxing.
Preparation for:

* 64 bit integer with NaN Boxing
* Favor pointer NaN Boxing
2021-10-28 12:22:21 +09:00
Yukihiro "Matz" Matsumoto fca63c6060 boxing_nan.h: revert part of dccd66f
WIP code was mistakenly committed.
2021-10-26 17:33:49 +09:00
Yukihiro "Matz" Matsumoto abf2d653d7 Merge pull request #5564 from dearblue/static_assert
Make `mrb_static_assert()` a variable argument
2021-10-25 07:59:01 +09:00
dearblue b774832ee1 Make mrb_static_assert() a variable argument
`mrb_static_assert()` extends the macro function to take one or two arguments.
If the argument is other than that, an error will occur.

References:
- static_assert のメッセージ省略を許可 - cpprefjp C++日本語リファレンス
  https://cpprefjp.github.io/lang/cpp17/extending_static_assert.html
- c - Overloading Macro on Number of Arguments - Stack Overflow
  https://stackoverflow.com/a/11763277
2021-10-24 23:11:52 +09:00
Yukihiro "Matz" Matsumoto 5c6e8b32a3 doc/mruby3.1.h: separate mruby3.0 changes and mruby3.1 changes. 2021-10-24 13:21:54 +09:00
Yukihiro "Matz" Matsumoto 7850549a5e string.c: use FNV1a algorithm for the string hash function. 2021-10-23 09:31:01 +09:00
Yukihiro "Matz" Matsumoto 74b02fba81 Merge pull request #5563 from suetanvil-misc/project-bintest-emulator-4-flat
Added testing support for cross-MinGW builds.
2021-10-22 13:41:50 +09:00
Chris Reuter 5c4273f944 Added testing support for cross-MinGW builds.
This adds a build_config that will cross-build a Windows executable
using the MinGW cross-compiler and will also run the unit (i.e.
'rake test') using Wine.

For this to work, I made some modifications to the underlying test
scripts as well as some minor changes to a couple of the tests
themselves.
2021-10-21 21:58:45 -04:00
Yukihiro "Matz" Matsumoto fabe8212fe codedump.c: add indentation for OP_MOVE. 2021-10-21 15:35:25 +09:00
Yukihiro "Matz" Matsumoto dc0d5db699 doc/mruby3.md: updated to the most recent mruby3.1 (to be). 2021-10-20 09:40:17 +09:00
Yukihiro "Matz" Matsumoto f653556731 dump.h: bump RITE_BINARY_MAJOR_VER to 03.
Since we have added several new instructions.
2021-10-19 15:27:29 +09:00
Yukihiro "Matz" Matsumoto d965d90edf codedump.c: remove OP_ prefix from disasm output. 2021-10-19 12:29:06 +09:00
Yukihiro "Matz" Matsumoto 90484cac63 codegen.c: skip OP_LOADSELF using OP_SSEND. 2021-10-19 12:13:05 +09:00
Yukihiro "Matz" Matsumoto 5d5e4f5214 ops.h: add new instructions OP_SSEND and OP_SSENDB.
These instructions call methods of the receiver.
2021-10-19 12:03:12 +09:00
Yukihiro "Matz" Matsumoto 45491cdd8c ops.h: update descriptions for array-like accesses.
* `R(a)` -> `R[a]`
* `Pool(a)` -> `Pool[a]`
* `Syms(a)` -> `Syms[a]`
* `Irep(a)` -> `Irep[a]`
2021-10-19 11:49:02 +09:00
Yukihiro "Matz" Matsumoto ab986ff108 ops.h: update OP_SEND description. 2021-10-19 11:37:59 +09:00
Yukihiro "Matz" Matsumoto b6b4ac8270 Merge pull request #5560 from mruby/dependabot/github_actions/actions/checkout-2.3.5
build(deps): bump actions/checkout from 2.3.4 to 2.3.5
2021-10-19 08:06:28 +09:00
dependabot[bot] cdccb5ea13 build(deps): bump actions/checkout from 2.3.4 to 2.3.5
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.4...v2.3.5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-18 14:05:53 +00:00
Yukihiro "Matz" Matsumoto 10edda9698 Merge pull request #5559 from igrep/fix-commented-out-example
Fix a syntax error in commented-out code
2021-10-18 13:07:32 +09:00
YAMAMOTO Yuji 66e61c5ab8 Fix a syntax error in commented-out code
By uncommenting the line changed by this commit, `ruby -c build_config/default.rb` complains of a syntax error due to the illegally nested double quotes
2021-10-18 12:45:55 +09:00
Yukihiro "Matz" Matsumoto 0d08f89159 codegen.c: Reduce MRB_CODEGEN_LEVEL_MAX from 1024 to 256.
1024 was too big.  Some deep recursion could not be detected before
actual stack overflow.
2021-10-18 12:01:07 +09:00
Yukihiro "Matz" Matsumoto de2b4bd0dc codegen.c: fixed a bug regarding attribute assignment with kargs. 2021-10-18 08:01:26 +09:00
Yukihiro "Matz" Matsumoto be189ae9f9 codegen.c: forgot to check s2 extensively in super codegen. 2021-10-17 08:03:24 +09:00
Yukihiro "Matz" Matsumoto 2b19a6c1b4 AUTHORS: update. 2021-10-17 08:02:36 +09:00
Yukihiro "Matz" Matsumoto 36bca25e58 codegen.c: s2 may be NULL.
Since `s2` is `NULL` on top-level, it will be an error. No need to
generate strict bytecode.
2021-10-16 11:09:52 +09:00
Yukihiro "Matz" Matsumoto 0dc5fcec7b parse.y: check car part of return node. 2021-10-16 10:33:35 +09:00
Yukihiro "Matz" Matsumoto 0b095406bf Merge pull request #5558 from jbampton/fix-grammar
Fix grammar in doc/guides/mrbgems.md
2021-10-15 09:47:23 +09:00
Yukihiro "Matz" Matsumoto a9a2dcd3cc rational.c: avoid recursion between rational_eq and complex_eq. 2021-10-14 22:48:54 +09:00
Yukihiro "Matz" Matsumoto 7010ed0f0a vm.c: need to ensure the stack size is sufficient.
Need to add `n` because the stack will be shifted in the `mrb_funcall`.
2021-10-14 22:47:19 +09:00
John Bampton a3da482683 Fix grammar in doc/guides/mrbgems.md 2021-10-14 19:55:57 +10:00
Yukihiro "Matz" Matsumoto 6b3b1012ca codegen.c: skip OP_ARGARY before super if the method has no arguments. 2021-10-13 07:06:17 +09:00
Yukihiro "Matz" Matsumoto a1027812bd error.c: small refactoring regarding #2485 2021-10-12 22:38:59 +09:00
Yukihiro "Matz" Matsumoto 3c8f0ac14b Merge branch 'take-cheeze-exc_mesg' 2021-10-12 22:16:21 +09:00
Yukihiro "Matz" Matsumoto 291234c7aa Merge branch 'exc_mesg' of https://github.com/take-cheeze/mruby into take-cheeze-exc_mesg 2021-10-12 22:14:11 +09:00
Yukihiro "Matz" Matsumoto 5004d9a282 codegen.c: should not assign negative number to ainfo (size_t). 2021-10-12 20:16:36 +09:00
Yukihiro "Matz" Matsumoto dccd66f9ef Support Ruby3.0 keyword arguments.
The Difference

Since Ruby1.9, the keyword arguments were emulated by Ruby using the hash
object at the bottom of the arguments. But we have gradually moved toward
keyword arguments separated from normal (positinal) arguments.

At the same time, we value compatibility, so that Ruby3.0 keyword
arguments are somewhat compromise. Basically, keyword arguments are
separated from positional arguments, except when the method does not
take any formal keyword arguments, given keyword arguments (packed
in the hash object) are considered as the last argument.

And we also allow non symbol keys in the keyword arguments. In that
case, those keys are just passed in the `**` hash (or raise
`ArgumentError` for unknown keys).

The Instruction Changes

We have changed `OP_SEND` instruction. `OP_SEND` instruction used to
take 3 operands, the register, the symbol, the number of (positional)
arguments. The meaning of the third operand has been changed. It is now
considered as `n|(nk<<4)`, where `n` is the number of positional
arguments, and `nk` is the number of keyword arguments, both occupies
4 bits in the operand.

The number `15` in both `n` and `nk` means variable sized arguments are
packed in the object. Positional arguments will be packed in the array,
and keyword arguments will be packed in the hash object. That means
arguments more than 14 values are always packed in the object.

Arguments information for other instructions (`OP_SENDB` and `OP_SUPER`)
are also changed. It works as the third operand of `OP_SEND`. the
difference between `OP_SEND` and `OP_SENDB` is just trivial. It assigns
`nil` to the block hidden arguments (right after arguments).

The instruction `OP_SENDV` and `OP_SENDVB` are removed. Those
instructions are replaced by `OP_SEND` and `OP_SENDB` respectively with
the `15` (variable sized) argument information.

Calling Convention

When calling a method, the stack elements shall be in the order of the
receiver of the method, positional arguments, keyword arguments and the
block argument. If the number of positional or keyword arugument (`n` or
`nk`) is zero, corresponding arguments will be empty. So when `n=0` and
`nk=0` the stack layout (from bottom to top) will be:

+-----------------------+
| recv | block (or nil) |
+-----------------------+

The last elements `block` should be explicitly filled before `OP_SEND`
or assigned to `nil` by `OP_SENDB` internally. In other words, the
following have exactly same behavior:

OP_SENDB clears `block` implicitly:

```
OP_SENDB reg sym 0
```

OP_SEND clears `block` implicitly:

```
OP_LOADNIL  R2
OP_SEND     R2 sym 0
```

When calling a method with only positional arguments (n=0..14) without
keyword arguments, the stack layout will be like following:

+--------------------------------------------+
| recv | arg1 | ... | arg_n | block (or nil) |
+--------------------------------------------+

When calling a method with arguments packed in the array (n=15) which
means argument splat (*) is used in the actual arguments, or more than
14 arguments are passed the stack layout will be like following:

+-------------------------------+
| recv | array | block (or nil) |
+-------------------------------+

The number of the actual arguments is determined by the length of the
argument array.

When keyword arguments are given (nk>0), keyword arguments are passed
between positional arguments and the block argument. For example, when
we pass one positional argument `1` and one keyword argument `a: 2`,
the stack layout will be like:

+------------------------------------+
| recv | 1 | :a | 2 | block (or nil) |
+------------------------------------+

Note that keyword arguments consume `2*nk` elements in the stack when
`nk=0..14` (unpacked).

When calling a method with keyword arguments packed in the hash object
(nk=15) which means keyword argument splat (**) is used or more than
14 keyword arguments in the actual arguments, the stack layout will
be like:

+------------------------------+
| recv | hash | block (or nil) |
+------------------------------+

Note for mruby/c

When mruby/c authors try to support new keyword arguments, they need
to handle the new meaning of the argument information operand. If they
choose not to support keyword arguments in mruby/c, it just raise
error when `nk` (taken by `(c>>4)&0xf`) is not zero. And combine
`OP_SENDV` behavior with `OP_SEND` when `n` is `15`.

If they want to support keyword arguments seriously, contact me at
<matz@ruby.or.jp> or `@yukihiro_matz`. I can help you.
2021-10-12 20:16:36 +09:00
Yukihiro "Matz" Matsumoto c6df4bf9a8 Merge pull request #5557 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2021-10-12 20:16:18 +09:00
John Bampton 843d3d4e41 pre-commit autoupdate
https://pre-commit.com/index.html#pre-commit-autoupdate
2021-10-12 19:03:35 +10:00
Yukihiro "Matz" Matsumoto 8e5d89df7f vm.c: unify mrb_gc_arena_restore and mrb_gc_arena_shrink. 2021-10-10 20:12:11 +09:00
Yukihiro "Matz" Matsumoto 5cdf1eabdd Merge pull request #5555 from dearblue/str-ref-regexp
Partially allow overriding of `String#[]` methods
2021-10-09 14:15:06 +09:00
Yukihiro "Matz" Matsumoto 07f805aa88 Merge pull request #5556 from dearblue/setidx
Fix typo for `OP_SETIDX`
2021-10-09 14:00:09 +09:00
dearblue e8205ec906 Fix typo for OP_SETIDX 2021-10-09 13:36:19 +09:00
Yukihiro "Matz" Matsumoto 87b673fc9a codegen.c: peephole optimization OP_MOVE after OP_AREF. 2021-10-09 13:31:07 +09:00
dearblue 8c355ec7e3 Partially allow overriding of String#[] methods
This is for the purpose of supporting `Regexp`.

- configuration and build

  ```console
  % cat regexp_config.rb
  MRuby::Lockfile.disable
  MRuby::Build.new do
    toolchain "clang"
    enable_debug
    gem core: "mruby-bin-mruby"
    gem core: "mruby-print"
    gem mgem: "mruby-onig-regexp"
    #gem mgem: "mruby-regexp-pcre"
  end

  % rake MRUBY_CONFIG=regexp_config.rb
  ```

- mruby HEAD (bec074e)

  ```console
  % build/host/bin/mruby -e 'p "abcdefg"[/.(?=...$)/]'
  -e:1: can't convert OnigRegexp into Integer (TypeError)
  ```

- with this patch

  ```console
  % build/host/bin/mruby -e 'p "abcdefg"[/.(?=...$)/]'
  "d"
  ```
2021-10-09 13:28:10 +09:00
Yukihiro "Matz" Matsumoto bec074e6a3 vm.c: check call stack depth before pushing the frame.
Existing call stack depth checks are unified into this check in
`cipush()`. The maximum depth is now specified by `MRB_CALL_LEVEL_MAX`
(the default is 512).  The older `MRB_FUNCALL_DEPTH_MAX` is no longer
used.
2021-10-08 15:35:33 +09:00
Yukihiro "Matz" Matsumoto fd6d911b53 codegen.c: peephole optimize OP_MOVE after OP_ARRAY or OP_HASH.
When the length operand is zero, we don't need `OP_MOVE` but adjust the
destination operand instead.
2021-10-08 12:09:05 +09:00
Yukihiro "Matz" Matsumoto 7018286453 Merge pull request #5554 from mruby/dependabot/github_actions/github/super-linter-4.8.1
build(deps): bump github/super-linter from 4.8.0 to 4.8.1
2021-10-07 10:30:12 +09:00
Yukihiro "Matz" Matsumoto 376e84c9d7 codedump.c: remove trailing extra newline.
The bug was introduced in 8be78bd.
2021-10-06 07:36:44 +09:00
Yukihiro "Matz" Matsumoto 9aa3c26221 io.c: hide internal method names in backtrace. 2021-10-05 07:11:59 +09:00
dependabot[bot] 4ef612a586 build(deps): bump github/super-linter from 4.8.0 to 4.8.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.8.0 to 4.8.1.
- [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.0...v4.8.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 14:08:09 +00:00
Yukihiro "Matz" Matsumoto ab1047b445 codegen.c: no OP_ARGARY is needed here. 2021-10-04 07:45:46 +09:00
Yukihiro "Matz" Matsumoto 09336c5d49 mruby/ops.h: add new instructions OP_GETIDX and OP_SETIDX.
Which represent `obj[int]` and `obj[int]=val` respectively where `obj`
is either `string`, `array` or `hash`, so that index access could be
faster. When `obj` is not assumed type or `R(a+1)` is not integer, the
instructions fallback to method calls.
2021-10-03 17:14:00 +09:00
Yukihiro "Matz" Matsumoto d64d8ca8e4 Merge branch 'dearblue-inline-struct-gem' 2021-10-02 20:11:32 +09:00
Yukihiro "Matz" Matsumoto 31e3dbc5a8 Merge branch 'inline-struct-gem' of https://github.com/dearblue/mruby into dearblue-inline-struct-gem 2021-10-02 20:09:20 +09:00
Yukihiro "Matz" Matsumoto 4e504eaca1 SECURITY.md: add scope description. 2021-10-01 19:13:07 +09:00
Yukihiro "Matz" Matsumoto d96f53f8f8 TODO.md: update. 2021-09-30 17:15:29 +09:00
Yukihiro "Matz" Matsumoto eea605bfc5 dreamcast_shelf.rb: remove unnecessary gem lines.
- `mruby-binding-core` should be handle through dependency
- `mruby-inline-struct` is only for tests
2021-09-30 12:46:45 +09:00
Yukihiro "Matz" Matsumoto bb3cd69aff value.h: introduce MRB_TT_STRUCT for mruby-struct. 2021-09-30 12:46:45 +09:00
Yukihiro "Matz" Matsumoto f1a5c050f4 Merge pull request #5553 from mruby/dependabot/github_actions/github/super-linter-4.8.0
build(deps): bump github/super-linter from 4.7.3 to 4.8.0
2021-09-28 23:14:39 +09:00
dependabot[bot] 1b53b973e5 build(deps): bump github/super-linter from 4.7.3 to 4.8.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.7.3 to 4.8.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/master/docs/release-process.md)
- [Commits](https://github.com/github/super-linter/compare/v4.7.3...v4.8.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>
2021-09-28 14:07:15 +00:00
Yukihiro "Matz" Matsumoto 906f9f2ba7 parse.y: __ENCODING__ should be determined in run-time; fix #5552
It used to be compiled to the static string in the compiler. But the
encoding status actually depends on the runtime configuration. A new
method `Kernel#__ENCODING__` is introduced to implement the feature.
2021-09-27 10:10:35 +09:00
Yukihiro "Matz" Matsumoto 368e8ce3d5 codegen.c: should not loop_push() before constant folding.
Otherwise, the following code will crash:

```ruby
1.times{{}until 1; break}
```
2021-09-26 16:58:40 +09:00
Yukihiro "Matz" Matsumoto 89ea41f15e mrbconf.h: rename a configuration macro for no truncate floats.
Rename `MRB_WORDBOX_USE_HEAP_FLOAT` to `MRB_WORDBOX_NO_FLOAT_TRUNCATE'.
2021-09-25 14:44:43 +09:00
Yukihiro "Matz" Matsumoto c70159b356 Revert "vm.c: add assertions instead of mrb_ensure_hash_type()."
This reverts commit 913a0a5a03.
In some cases, `OP_HASHADD` operand may not be `Hash`. We should check
explicitly in those cases.
2021-09-24 17:10:11 +09:00
Yukihiro "Matz" Matsumoto ab54ca272a codegen.c: refactor NODE_WHILE and NODE_UNTIL. 2021-09-24 11:39:00 +09:00
Yukihiro "Matz" Matsumoto 7c6c4ebb56 codegen.c: add short circuit constant folding for NODE_AND, NODE_OR. 2021-09-24 11:38:02 +09:00
Yukihiro "Matz" Matsumoto 863671c89f codegen.c: refactor NODE_IF generation for boolean constants.
In addition, add `NODE_SYM` for always true expression.
2021-09-24 11:36:27 +09:00
Yukihiro "Matz" Matsumoto a844f89655 codegen.c: need to check no_peephole() before constant folding. 2021-09-23 21:19:36 +09:00
Yukihiro "Matz" Matsumoto 4c196dbba5 codegen.c: separate maximum stack size from GEN_LIT_ARY_MAX. 2021-09-23 20:11:30 +09:00
Yukihiro "Matz" Matsumoto fd7896e579 error.c: stop calling initialize from VM exceptions.
The invocation of `initialize` hook can cause infinite recursion too
easily. We stop invoking the method for safety, at the cost of less
flexibility.

The `initialize` methods (e.g. ones defined in `mrblib/10error.rb`) are
called only from `NoMethodError.new(args..)` forms.
2021-09-22 11:41:38 +09:00
Yukihiro "Matz" Matsumoto 913a0a5a03 vm.c: add assertions instead of mrb_ensure_hash_type(). 2021-09-21 16:47:55 +09:00
Yukihiro "Matz" Matsumoto dd0caf8728 Create SECURITY.md 2021-09-20 19:44:41 +09:00
Yukihiro "Matz" Matsumoto d6dd6f0e7b Update struct initializer to work with relatively older C++. 2021-09-20 19:13:17 +09:00
Yukihiro "Matz" Matsumoto 8be78dbf9d codedump.c: add cosmetic tabs before variable labels. 2021-09-20 17:33:07 +09:00
Yukihiro "Matz" Matsumoto c29822f80c codegen.c (gen_addsub): use mrb_int_sub_overflow(). 2021-09-20 17:32:38 +09:00
Yukihiro "Matz" Matsumoto 0455313a9b codegen.c: avoid constant folding OP_LOADI16 across branch target. 2021-09-20 17:30:14 +09:00
Yukihiro "Matz" Matsumoto ca7228ad42 codegen.c: gen_move should generate proper OP_LOADI16. 2021-09-20 16:58:27 +09:00
Yukihiro "Matz" Matsumoto 1baf08f174 codegen.c: rename loopinfo->acc to reg.
`acc` meant `accumulator` but it is not an accumulator but just a
register position.
2021-09-20 10:40:30 +09:00
Yukihiro "Matz" Matsumoto 2083d99392 codegen.c: check no_peephole(s) before mrb_last_insn(s). 2021-09-20 10:37:11 +09:00
Yukihiro "Matz" Matsumoto f85c50543b codegen.c (mrb_last_insn): no previous instruction on top. 2021-09-20 10:35:01 +09:00
Yukihiro "Matz" Matsumoto 938af8a8ff vm.c: add array assertions. 2021-09-19 23:17:19 +09:00
Yukihiro "Matz" Matsumoto 8bfa99975c codegen.c: unify OP_ARYPUSH and OP_ARYPUSH_N.
- `OP_ARYPUSH` now takes operand for the number of pushing elements
- the code generator consume the stack no more than `64` for `mruby/c`
2021-09-19 09:07:20 +09:00
Yukihiro "Matz" Matsumoto 7c99df8416 ops.h: add OP_ARYPUSH_N instruction.
Add n elements at once. Reduces instructions for huge array
initialization. In addition, `gen_value` function in `codegen.c` was
refactored and clarified.
2021-09-17 07:49:47 +09:00
Yukihiro "Matz" Matsumoto 6f044de578 AUTHORS: update. [ci skip] 2021-09-17 07:47:45 +09:00
Yukihiro "Matz" Matsumoto f7063ccd1b AUTHORS: update. [ci skip] 2021-09-16 20:24:29 +09:00
Yukihiro "Matz" Matsumoto 8619ba6a38 Use struct initializer instead of memset. 2021-09-15 13:02:15 +09:00
Yukihiro "Matz" Matsumoto e5e7bd29ef sprintf.c: width may have been INT_MAX.
Now `width` is limited to `INT16_MIN..INT16_MAX`.
2021-09-14 14:12:56 +09:00
Yukihiro "Matz" Matsumoto 6dbf49fdb4 parse.y: cons_free unused node (empty string node). 2021-09-13 12:20:11 +09:00
Yukihiro "Matz" Matsumoto 100eac3fec parse.y: allow non-local variable access from hash value omission.
For example, `{p:}` (means `{p:p}`) and `{String:}` (`{String:String}`)
should be allowed like CRuby.
2021-09-13 12:15:10 +09:00
Yukihiro "Matz" Matsumoto 6c76926d05 parse.y: allow value omission in Hash literals introduced in Ruby3.1.
`{x:, y:}` now is a syntax sugar of `{x: x, y: y}`.

This fix also includes the update of #4815 fix.
2021-09-13 11:04:27 +09:00
Yukihiro "Matz" Matsumoto 31fc74f5a8 parse.y: fix nint (int to node) and intn (node to int). 2021-09-12 23:14:43 +09:00
Yukihiro "Matz" Matsumoto 9e86d204e5 parse.y: avoid adding zero length strings. 2021-09-12 07:58:57 +09:00
Yukihiro "Matz" Matsumoto e1a865f272 codedump.c: avoid printing OP_EXT? prefix. 2021-09-11 11:00:11 +09:00
Yukihiro "Matz" Matsumoto 648a774ef6 ops.h: update OP_HASHADD description. 2021-09-10 19:11:56 +09:00
Yukihiro "Matz" Matsumoto da749d870f array.c: forgot to adjust tail position in mrb_ary_splice. 2021-09-10 17:34:40 +09:00
Yukihiro "Matz" Matsumoto cd0ffd6f1c codegen.c: fixed gen_setxv bug with taking assignment value; fix #5550 2021-09-10 15:39:24 +09:00
Yukihiro "Matz" Matsumoto 69da192eec codegen.c: gen_move refactoring. 2021-09-10 15:38:51 +09:00
Yukihiro "Matz" Matsumoto 7df31d9451 mruby.h: remove acc from callinfo; add cci instead.
`acc` was used as an index of the receiver (if positive), or a flag for
methods implemented in C. We replace `regs[ci->acc]` by `ci[1].stack[0]`.
And renamed `acc` (originally meant accumulator position) to `cci`
(means callinfo for C implemented method).
2021-09-10 12:39:51 +09:00
Yukihiro "Matz" Matsumoto 3050630b69 vm.c, codedump.c: add IREP_TT_NFLAG assertions.
The pool specified by `OP_STRING` (and `OP_SYMBOL`) should represent a
string, so that `IREP_TT_NFLAG` should be zero.
2021-09-10 10:25:07 +09:00
Yukihiro "Matz" Matsumoto 28b5c30b96 ops.h: add OP_SYMBOL instruction.
It generates a symbol by interning from the pool string.
2021-09-10 10:23:28 +09:00
Yukihiro "Matz" Matsumoto b34713304a fixup! codegen.c: resurrect s->lastpc to reduce iseq scans. 2021-09-10 10:22:49 +09:00
Yukihiro "Matz" Matsumoto 5fbea87fe5 codegen.c: resurrect s->lastpc to reduce iseq scans.
When parsing scripts frequent scans could cost too much.
2021-09-10 10:15:55 +09:00
Yukihiro "Matz" Matsumoto 3693187beb vm.c: ci->acc (int16_t) may overflow. 2021-09-10 10:15:32 +09:00
Yukihiro "Matz" Matsumoto c0f39bcaaf Merge pull request #5549 from mruby/dependabot/github_actions/github/super-linter-4.7.3
build(deps): bump github/super-linter from 4.7.2 to 4.7.3
2021-09-10 10:15:20 +09:00
dependabot[bot] a7e85bb7e9 build(deps): bump github/super-linter from 4.7.2 to 4.7.3
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.7.2 to 4.7.3.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/master/docs/release-process.md)
- [Commits](https://github.com/github/super-linter/compare/v4.7.2...v4.7.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-09 14:04:06 +00:00
Yukihiro "Matz" Matsumoto 7e612b1c89 string.c: check integer overflow in str_replace_partial. 2021-09-09 19:12:59 +09:00
Yukihiro "Matz" Matsumoto 8a41d2b876 string.c: check integer overflow in mrb_str_aset(). 2021-09-09 19:12:36 +09:00
Yukihiro "Matz" Matsumoto 5777e33c2a doc/guides/mrbconf.rb: add RO_DATA configuration description; #5547 2021-09-09 16:20:29 +09:00
Yukihiro "Matz" Matsumoto 49602f636d value.h: add configuration macros around mrb_ro_data_p(); close #5547
- `MRB_USE_ETEXT_RO_DATA_P`: use `etext` and `edata`
- `MRB_NO_DEFAULT_RO_DATA_P`: not use the default `mrb_ro_data_p()`
2021-09-09 16:15:25 +09:00
Yukihiro "Matz" Matsumoto 5dd8b04d91 load.c: no need for conditional compilation; #5547
`mrb_ro_data_p()` is available anyway.
2021-09-09 11:07:19 +09:00
Yukihiro "Matz" Matsumoto a503484cb3 value.h: use etext and edata which are more widely available; #5547 2021-09-09 10:12:50 +09:00
Yukihiro "Matz" Matsumoto a3fe04eda2 Merge pull request #5548 from mruby/dependabot/github_actions/github/super-linter-4.7.2
build(deps): bump github/super-linter from 4.7.1 to 4.7.2
2021-09-09 07:34:02 +09:00
dependabot[bot] ddf2a49622 build(deps): bump github/super-linter from 4.7.1 to 4.7.2
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.7.1 to 4.7.2.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/master/docs/release-process.md)
- [Commits](https://github.com/github/super-linter/compare/v4.7.1...v4.7.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 14:04:32 +00:00
Yukihiro "Matz" Matsumoto e4a0728b24 array.c: refactor mrb_ary_splice. 2021-09-08 07:33:08 +09:00
Yukihiro "Matz" Matsumoto 1d1a89874f value.h: fixed address comparison on macOS. 2021-09-07 18:51:04 +09:00
Yukihiro "Matz" Matsumoto cbfaa5e20f object.c: rename mrb_to_int to mrb_to_integer.
Consistent naming: `integer` to represent integer packed in `mrb_value`
instead of `int`.
2021-09-07 14:31:56 +09:00
Yukihiro "Matz" Matsumoto 79bc8e2539 string.h: rename mrb_str_to_inum to mrb_str_to_integer.
Consistent naming: `integer` to represent integer packed in `mrb_value`
instead of `inum`.
2021-09-07 14:31:56 +09:00
Yukihiro "Matz" Matsumoto 674d841ead eval.c: if the parser raises an exception without an error message
`eval` would have crashed in formatting.
2021-09-07 07:37:19 +09:00
Yukihiro "Matz" Matsumoto 711f06a562 eval.c: check length of the file name.
It should be lexx than `UINT16_MAX`. If you don't check here, the parser
would raise an exception.
2021-09-07 07:35:35 +09:00
Yukihiro "Matz" Matsumoto 6fc6880f1f codegen.c: improve exception handling in generate_code.
- remove `mrb_jmpbuf` from `codegen_scope`
- unify exception handling of `mrb_state` and `codegen_scope`
2021-09-07 07:33:28 +09:00
Yukihiro "Matz" Matsumoto 2fb06aabe6 parse.y: refactor mrb_parser_parse().
- remove `mrb_jmpbuf` from `truct mrb_parser_state`
- unify exception handling of `mrb_state` and `mrb_parser_state`.
2021-09-07 07:31:21 +09:00
Yukihiro "Matz" Matsumoto ad3404229f parse.y: refactoring mrb_parser_parser(). 2021-09-06 13:58:01 +09:00
Yukihiro "Matz" Matsumoto fc1f7c4bf0 numeric.c: shortcut overflowing operation when ndigit is too small. 2021-09-06 10:21:42 +09:00
Yukihiro "Matz" Matsumoto ab3db07752 boxing_word.h: avoid mrb_float_p() when MRB_NO_FLOAT is on; fix #5546 2021-09-05 20:59:49 +09:00
Yukihiro "Matz" Matsumoto 43abf36f00 array.c: check integer overflow before addition. 2021-09-05 16:41:08 +09:00
Yukihiro "Matz" Matsumoto 7552b9322a codegen.c: avoid integer overflow. 2021-09-05 09:25:44 +09:00
Yukihiro "Matz" Matsumoto 28c4f2f683 kernel.c: add __method__; ref #4468 2021-09-04 17:57:35 +09:00
Yukihiro "Matz" Matsumoto 09f686cd7b Merge branch 'shuujii-rename-Kernel-__method__-to-Kernel-__callee__' 2021-09-04 16:18:20 +09:00
KOBAYASHI Shuji 8a9f891fd3 Rename Kernel#__method__ to Kernel#__callee__
Because the current behavior of `__method__` is equivalent to `__callee__`.

Example:

  # example.rb
  def src
    __send__(ARGV[0])
  end
  alias dst src
  %w[src dst].each {|n| puts "call #{n} => #{__send__(n).inspect}"}

  Ruby:

    $ ruby example.rb __method__
    call src => :src
    call dst => :src

    $ ruby example.rb __callee__
    call src => :src
    call dst => :dst

  mruby:

    $ mruby example.rb __method__
    call src => :src
    call dst => :dst
2021-09-04 16:17:06 +09:00
Yukihiro "Matz" Matsumoto 2d8f4fa92f proc.c: need to preserve target_class in callinfo.
Otherwise `target_class` can be lost when it differs from `proc`'s
`target_class`, e.g. when called from `instance_eval`.

Also we should not pass `target_class` to `MRB_OBJ_ALLOC` since it
checks instance type from the class, and `target_class` may not have
proper information. ref #5272
2021-09-04 13:50:32 +09:00
Yukihiro "Matz" Matsumoto 5acf7e7cf7 vm.c: remove duplicated calls of mrb_vm_ci_target_class(). 2021-09-04 12:54:04 +09:00
Yukihiro "Matz" Matsumoto e02350dd02 range.c: len = b - a may overflow. 2021-09-03 16:30:42 +09:00
Yukihiro "Matz" Matsumoto dc4b60291a range.c: hide internal `__num_to_a' method from backtrace. 2021-09-03 16:30:42 +09:00
Yukihiro "Matz" Matsumoto 161f2403b3 Merge pull request #5545 from mruby/dependabot/github_actions/github/super-linter-4.7.1
build(deps): bump github/super-linter from 4.6.3 to 4.7.1
2021-09-02 07:26:25 +09:00
dependabot[bot] a6bb53f65a build(deps): bump github/super-linter from 4.6.3 to 4.7.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.6.3 to 4.7.1.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/master/docs/release-process.md)
- [Commits](https://github.com/github/super-linter/compare/v4.6.3...v4.7.1)

---
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>
2021-09-01 14:06:39 +00:00
Yukihiro "Matz" Matsumoto de9bf86432 Merge pull request #5544 from stuarth/change-language
Use gender-neutral pronouns
2021-09-01 13:59:04 +09:00
Stuart Hinson 2c167361d5 use gender-neutral pronouns 2021-08-31 19:17:49 -07:00
Yukihiro "Matz" Matsumoto 5211a3f209 Merge pull request #5543 from mruby/dependabot/github_actions/github/super-linter-4.6.3
build(deps): bump github/super-linter from 4.6.2 to 4.6.3
2021-09-01 07:03:01 +09:00
Yukihiro "Matz" Matsumoto 41d0b343e6 string.c: need to adjust index for UTF-8. 2021-09-01 07:00:56 +09:00
Yukihiro "Matz" Matsumoto 7ffffbfe01 build_config/ci/gcc-clang.rb: enable MRB_UTF8_STRING. 2021-09-01 07:00:55 +09:00
Yukihiro "Matz" Matsumoto 3622f2c4b5 string.c: implement __sub_replace() in C.
To reduce number of string allocation.
2021-09-01 07:00:55 +09:00
Yukihiro "Matz" Matsumoto 2c41739b66 mruby.h: obsolete mrb_to_str().
Replace them by `mrb_ensure_string_type()`.
2021-09-01 07:00:55 +09:00
Yukihiro "Matz" Matsumoto 082882da69 string.rb: avoid internal __to_str calls.
`__to_str` was a mere type check method despite its name.
2021-09-01 07:00:55 +09:00
Yukihiro "Matz" Matsumoto 8c296a3818 object.c: remove `mrb_convert_to_integer()' function.
And merged to `mrb_f_integer()` which is only usage of the function.
2021-09-01 07:00:54 +09:00
Yukihiro "Matz" Matsumoto 37a7ff228b string-ext/string.c: implement casecmp in C.
* should not raise error for non-string arguments
* avoid allocating case converted string internally
2021-09-01 07:00:54 +09:00
Yukihiro "Matz" Matsumoto f6e5c902f0 string.h: obsolete mrb_str_to_str(), even from examples. 2021-09-01 07:00:54 +09:00
Yukihiro "Matz" Matsumoto e86c9cb57c Do no use return values from mrb_ensure_ functions.
They return the checking argument without modification, so the values
are already there. Maybe we should change the return type to `void` but
keep them unchanged for compatibility.
2021-09-01 07:00:54 +09:00
Yukihiro "Matz" Matsumoto 572a43de84 mruby.h: reorganize mrb_ensure/check functions in headers. 2021-09-01 07:00:53 +09:00
dependabot[bot] ad5c90e556 build(deps): bump github/super-linter from 4.6.2 to 4.6.3
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.6.2 to 4.6.3.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.6.2...v4.6.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-31 14:07:23 +00:00
Yukihiro "Matz" Matsumoto 64d5a40cde Merge pull request #5542 from dearblue/mrb_get_args-cI
Allow `nil` for `c!` and `I!` specifiers of `mrb_get_args()`
2021-08-30 07:38:45 +09:00
Yukihiro "Matz" Matsumoto 84e36d748c Merge pull request #5541 from dearblue/mrb_get_args-oCSAH
Integrate the processing of similar specifiers of `mrb_get_args()`
2021-08-29 08:32:05 +09:00
dearblue f99620436d Allow nil for c! and I! specifiers of mrb_get_args() 2021-08-28 15:54:30 +09:00
dearblue c9f7bcc0cf Integrate the processing of similar specifiers of mrb_get_args()
It is `o`, `C`, `S`, `A` and `H` specifiers that are integrated.
As a side effect, the `C!` Specifier can now be used.
2021-08-28 15:52:37 +09:00
Yukihiro "Matz" Matsumoto 07f12fe890 Merge pull request #5540 from dearblue/mrb_get_args
Refactor the `mrb_get_args()` function
2021-08-28 12:50:47 +09:00
dearblue 6ac8d14b7b Refactor the mrb_get_args() function
- Removed the `ARGV` macro.
  The current path doesn't go into the mruby VM and there's also no need to separate variables.
- Use common functions to check object types.
  - Use `mrb_ensure_string_type()` to check the string instead of `mrb_to_str()`.
    This is for consistency with array and hash.
  - Use `mrb_ensure_array_type()` to check the array instead of `to_ary()`.
  - Use `mrb_ensure_hash_type()` to check the hash instead of `to_hash()`.
  - Add and use `ensure_class_type()` to check class and module.
- Changed the argument index type from `mrb_int` to `int`.
  Even if it is `int16_t`, it is enough.
  `mrb_int` is overkill, especially if `MRB_32BIT` and `MRB_INT64` are defined.
2021-08-27 22:43:25 +09:00
Yukihiro "Matz" Matsumoto 12a483c1bc Merge pull request #5539 from mruby/dependabot/github_actions/github/super-linter-4.6.2
build(deps): bump github/super-linter from 4.6.1 to 4.6.2
2021-08-27 07:43:48 +09:00
dependabot[bot] 86c5414dc1 build(deps): bump github/super-linter from 4.6.1 to 4.6.2
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.6.1 to 4.6.2.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.6.1...v4.6.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-26 14:05:40 +00:00
Yukihiro "Matz" Matsumoto 4654de9074 etc.c: keep full float32 with MRB_64BIT and MRB_USE_FLOAT32. 2021-08-26 16:06:02 +09:00
Yukihiro "Matz" Matsumoto ba6e121537 boxing_nan.h: rename prefix BOXNAN to NANBOX. 2021-08-26 16:06:02 +09:00
Yukihiro "Matz" Matsumoto 9d6755569e boxing_word.h: rename prefix BOXWORD to WORDBOX. 2021-08-26 16:06:01 +09:00
Yukihiro "Matz" Matsumoto fdfa0caa46 boxing_word.h: rename configuration macro name.
`MRB_WORDBOX_USE_HEAP_FLOAT` instead of `MRB_USE_FLOAT_FULL_PRECISION`.
2021-08-26 16:06:01 +09:00
Yukihiro "Matz" Matsumoto e9c6e52f5b value.h: reconstruct mrb_ro_data_p().
* use predefined `mrb_ro_data_p()` for user-mode Linux and macOS
* define `MRB_LINK_TIME_RO_DATA_P` if predefined one is used
* configure macro `MRB_USE_LINK_TIME_RO_DATA_P` is no longer used
* contributions for new platforms are welcome
2021-08-26 16:06:01 +09:00
Yukihiro "Matz" Matsumoto d00ae8d166 Merge pull request #5538 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2021-08-26 11:11:04 +09:00
John Bampton db884a05e8 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2021-08-25 18:24:02 +10:00
Yukihiro "Matz" Matsumoto b8b86d1976 Merge pull request #5535 from dearblue/get-args-frozen
Checks the frozen object with `mrb_get_args()`
2021-08-24 16:33:15 +09:00
dearblue 66aa184a82 Checks the frozen object with mrb_get_args()
This now works with the `+` modifier that can be added after each specifier.

- `nil` is bypassed.
- The `s` and `z` specifiers are received in C as a `const char *`, so adding a `+` modifier will raise an exception.
- The `a` specifier is received in C as `const mrb_value *`, so adding a `+` modifier will raise an exception.
- The `|`, `*`, `&`, `?` and `:` specifiers with `+` modifier raises an exception.

If `!`/`+` exceeds one for each specifier, an exception will occur in the subsequent processing.
This is the same behavior as before.
2021-08-23 21:58:57 +09:00
dearblue 6415faabaa Integrate each element expansion process of the argument
The previously used `given` variable will be merged into the `pickarg` pointer variable, which points to the argument currently being processed for each loop.
2021-08-23 21:58:51 +09:00
Yukihiro "Matz" Matsumoto 6f46f88873 numeric.c: fix: -0.0.abs returned -0.0. 2021-08-23 10:53:23 +09:00
Yukihiro "Matz" Matsumoto 11cfe77eb1 Merge pull request #5537 from dearblue/header-files
Organize the include of header files
2021-08-23 07:34:37 +09:00
Yukihiro "Matz" Matsumoto 0f36710445 Merge pull request #5536 from dearblue/random-seed
Stirs internal state when `seed` is set in `Random`
2021-08-22 12:37:34 +09:00
dearblue 5a57602860 Organize the include of header files
- `#include <math.h>` is done in `mruby.h`.
  Eliminate the need to worry about the `MRB_NO_FLOAT` macro.

- Include mruby header files before standard header files.
  If the standard header file is already placed before `mruby.h`, the standard header file added in the future tends to be placed before `mruby.h`.

This change should some reduce the chances of macros that must be defined becoming undefined in C++ or including problematic header files in a particular mruby build configuration.
2021-08-21 15:42:57 +09:00
dearblue 2121b6e689 Stirs internal state when seed is set in Random
This is to avoid the approximation of `Random#rand` when `seed`s are close together.

For example, the first `#rand` values after doing `Random#srand(0)` and `Random#srand(1)` are very similar.

Below is the sequence of mruby before this patch was given a `seed` of `0...20`:

```console
% bin/mruby -e 'r = Random.new; 20.times { |i| r.srand(i); puts "seed=%2d  %s" % [i, 10.times.map { "%0.3f" % r.rand }.join(" ")] }'
seed= 0  0.643 0.585 0.198 0.732 0.087 0.605 0.548 0.468 0.573 0.966
seed= 1  0.643 0.585 0.198 0.607 0.370 0.605 0.633 0.593 0.395 0.439
seed= 2  0.643 0.585 0.197 0.981 0.652 0.730 0.875 0.713 0.529 0.269
seed= 3  0.643 0.585 0.198 0.857 0.934 0.730 0.960 0.216 0.286 0.523
seed= 4  0.643 0.585 0.197 0.231 0.217 0.605 0.959 0.958 0.478 0.482
seed= 5  0.643 0.585 0.197 0.106 0.249 0.605 0.044 0.330 0.925 0.047
seed= 6  0.643 0.585 0.197 0.481 0.781 0.731 0.285 0.960 0.804 0.725
seed= 7  0.643 0.585 0.197 0.356 0.813 0.731 0.370 0.711 0.937 0.448
seed= 8  0.643 0.585 0.198 0.732 0.329 0.108 0.243 0.974 0.766 0.936
seed= 9  0.643 0.585 0.198 0.607 0.611 0.108 0.827 0.102 0.962 0.597
seed=10  0.643 0.585 0.198 0.981 0.393 0.233 0.569 0.723 0.472 0.805
seed=11  0.643 0.585 0.198 0.857 0.676 0.233 0.154 0.222 0.603 0.371
seed=12  0.643 0.585 0.198 0.231 0.458 0.108 0.654 0.979 0.928 0.577
seed=13  0.643 0.585 0.198 0.106 0.490 0.108 0.239 0.355 0.749 0.831
seed=14  0.643 0.585 0.198 0.481 0.523 0.233 0.981 0.486 0.505 0.131
seed=15  0.643 0.585 0.198 0.356 0.555 0.234 0.565 0.233 0.011 0.666
seed=16  0.643 0.585 0.197 0.730 0.573 0.611 0.904 0.512 0.971 0.153
seed=17  0.643 0.585 0.197 0.605 0.855 0.611 0.240 0.636 0.041 0.509
seed=18  0.643 0.585 0.196 0.979 0.137 0.736 0.229 0.765 0.674 0.832
seed=19  0.643 0.585 0.197 0.855 0.420 0.736 0.566 0.268 0.183 0.219
```
2021-08-21 15:37:12 +09:00
Yukihiro "Matz" Matsumoto 886055b3fb etc.c: clear mrb_value if sizeof(void*) is bigger than sizeof(mrb_float). 2021-08-21 15:25:59 +09:00
Yukihiro "Matz" Matsumoto 8ca40da3fe test/float.rb: avoid 1.0e16 in tests without precision specified. 2021-08-21 15:25:59 +09:00
Yukihiro "Matz" Matsumoto 3b4c4caddc mruby-test/driver.c: change FLOAT_TOLERANCE bigger for inline floats. 2021-08-21 15:25:59 +09:00
Yukihiro "Matz" Matsumoto 36632f55f4 boxing_word.h: embed mrb_float in mrb_value if possible.
Embedding reduce memory consumption, sacrificing precision. It clips least
significant 2 bits from `mrb_float`, so if you need to keep float precision,
define `MRB_USE_FLOAT_FULL_PRECISION`.

`MRB_WORD_BOXING` and `MRB_INT64`:

`mrb_float` (`double`) is embedded in `mrb_value` clipped last 2 bits.

`MRB_WORD_BOXING` and `MRB_INT64` and `MRB_USE_FLOAT_FULL_PRECISION`:

`mrb_float` is allocated in the heaps wrapped by `struct RFloat`.

`MRB_WORD_BOXING` and `MRB_INT32` and `MRB_USE_FLOAT32`:

`mrb_float` (`float`) is embedded in `mrb_value` clipped last 2 bits.
In addition, to reserve bit space in the `mrb_value`, maximum inline
symbol length become 4 (instead of 5) in the configuration.

`MRB_WORD_BOXING` and `MRB_INT32`:

Assume `MRB_USE_FLOAT_FULL_PRECISION` and allocate Float values in heap.
2021-08-21 15:25:58 +09:00
Yukihiro "Matz" Matsumoto 4ea80913c2 Merge pull request #5533 from dantecatalfamo/serenity-32bit-crossbuild
Add SerenityOS crossbuild
2021-08-21 15:25:46 +09:00
Dante Catalfamo 7f290bebaf Specify potential values for SERENITY_ARCH 2021-08-20 22:27:50 -04:00
Dante Catalfamo 5e030491e7 Replace 32-bit serenity config with 64-bit compatible version. 2021-08-20 14:48:49 -04:00
Dante Catalfamo 124c4d617f Add serenity-32bit crossbuild
Cross compile mruby for SerenityOS (https://github.com/SerenityOS/serenity)
2021-08-19 23:34:30 -04:00
Yukihiro "Matz" Matsumoto ca295a2c23 symbol.c: reduce memory by avoiding alignment gaps.
In additions:

* use bitmap for flags
* BER integer compression for length
2021-08-19 20:39:34 +09:00
Yukihiro "Matz" Matsumoto 7f8b30261f gc.c: remove unused structs from RVALUE. 2021-08-19 16:06:17 +09:00
Yukihiro "Matz" Matsumoto 6f305c01a2 value.h: fixed warnings on __APPLE__. 2021-08-19 13:08:39 +09:00
Yukihiro "Matz" Matsumoto 959383df75 value.h: enable mrb_ro_data_p() on __linux__ and __APPLE__.
Probably we should add conditions for FreeBSD, etc.
2021-08-19 12:52:10 +09:00
Yukihiro "Matz" Matsumoto ef66406c50 string.c: mrb_str_to_cstr() should always return a mutable string. 2021-08-18 21:40:10 +09:00
Yukihiro "Matz" Matsumoto 20635e6bdc debug.c: export integer compressing functions.
- mrb_packed_int_len()
- mrb_packed_int_encode()
- mrb_packed_int_decode()
2021-08-18 17:18:04 +09:00
Yukihiro "Matz" Matsumoto 96a8703ca8 boxing_word.h: simplifies inline symbols on MRB_64BIT. 2021-08-17 16:03:42 +09:00
Yukihiro "Matz" Matsumoto 80cf293bf6 pack.c: rename pack/unpack functions for readability. 2021-08-17 13:04:11 +09:00
Yukihiro "Matz" Matsumoto 57b347088d fixup! pack.c: reduce dispatch in pack_unpack(). 2021-08-17 13:04:06 +09:00
Yukihiro "Matz" Matsumoto 4385590d31 pack.c: reduce dispatch in pack_unpack(). 2021-08-17 12:52:56 +09:00
Yukihiro "Matz" Matsumoto bfe2bd4960 pack.c: fix M packing bug. 2021-08-16 10:56:44 +09:00
Yukihiro "Matz" Matsumoto 8d85d4ac9b AUTHORS: update. [ci skip] 2021-08-15 07:07:08 +09:00
Yukihiro "Matz" Matsumoto 40c4c5d344 random.c: use I specifier for mrb_get_args(); ref #5530 2021-08-14 15:28:38 +09:00
Yukihiro "Matz" Matsumoto 8e5e96239c pack.c: fixed a overwriting bug in pack_w and pack_M. 2021-08-14 14:58:09 +09:00
Yukihiro "Matz" Matsumoto ad194bd46b error.c: the error message may contain NUL character. 2021-08-14 13:01:47 +09:00
Yukihiro "Matz" Matsumoto 73798bff65 Merge pull request #5532 from dantecatalfamo/rhel-doxygen
Add instructions for installing doxygen on RHEL/Fedora/CentOS
2021-08-14 08:18:11 +09:00
Dante Catalfamo 89ea8fa34a Add instructions for installing doxygen on RHEL/Fedora/CentOS 2021-08-13 14:53:20 -04:00
Yukihiro "Matz" Matsumoto 32c30c35b2 Merge pull request #5530 from dearblue/mrb_get_args-I
Check the class with `I` specifier of `mrb_get_args()`
2021-08-13 18:11:26 +09:00
dearblue 01da5e1392 Check the class with I specifier of mrb_get_args()
Previously, the `I` specifier only checked if the object was `MRB_TT_ISTRUCT`.
So it was at risk of getting pointers to different C structs if multiple classes were to use the `MRB_TT_ISTRUCT` instance.

Change this behavior and change the C argument corresponding to the `I` specifier to `(void *, struct RClass)`.

This change is not compatible with the previous mruby.
Please note that if the user uses the previous specifications, `SIGSEGV` may occur or the machine stack may be destroyed.

resolve #5527
2021-08-13 15:04:19 +09:00
Yukihiro "Matz" Matsumoto 9e74aad43c codegen.c: fixed a bug in mrb_decode_insn(). 2021-08-13 12:38:10 +09:00
Yukihiro "Matz" Matsumoto 7907c184be codegen.c: add a comment that notice rewind_pc calling convention.
`rewind_pc` should not be called when `s->pc` is `0` (top).
2021-08-13 10:11:36 +09:00
Yukihiro "Matz" Matsumoto 9c3d305530 codegen.c: refactor mrb_last_insn().
Last commit made `mrb_decode_insn()` to take `NULL` as `pc`.
2021-08-13 10:10:17 +09:00
Yukihiro "Matz" Matsumoto cbdc4f2c5c codegen.c: mrb_prev_pc can return NULL at the top of iseq. 2021-08-13 10:02:01 +09:00
Yukihiro "Matz" Matsumoto 013365498d test/eval.c: add test for #5528 2021-08-12 11:57:56 +09:00
Yukihiro "Matz" Matsumoto 43f9901ec2 Revert "Drop unnecessary upper procs linked from class/module/def syntax"
Fix #5528
This reverts commit 59201b59046b9e73c309508350cd3c0fafd20e4d; #5497
2021-08-12 11:42:27 +09:00
Yukihiro "Matz" Matsumoto 80893811c0 class.c: const_missing do not have to be in the backtrace; ref #5528 2021-08-12 08:10:09 +09:00
Yukihiro "Matz" Matsumoto e1b170160b codegen.c: avoid signedness warning of int comparison. 2021-08-11 16:10:32 +09:00
Yukihiro "Matz" Matsumoto a85f2299c0 codegen.c: avoid cross initialization of mrb_insn_data. 2021-08-11 16:09:51 +09:00
Yukihiro "Matz" Matsumoto fd597d2655 codedump.c: print local variable name for `ADDI/SUBI/ instructions.
Recent peephole optimization made `ADDI/SUBI` destinations possibly
local variables.
2021-08-11 10:48:18 +09:00
Yukihiro "Matz" Matsumoto b1b9b157f8 codegen.c: more peephole optimization.
`a=10; a+=1` to generate:

```
    1 000 OP_LOADI      R1      11              ; R1:a
```

instead of:

```
    1 000 OP_LOADI      R1      10              ; R1:a
    1 003 OP_MOVE       R2      R1              ; R1:a
    1 006 OP_ADDI       R2      1
    1 009 OP_MOVE       R1      R2              ; R1:a
```
2021-08-11 10:48:18 +09:00
Yukihiro "Matz" Matsumoto 52eb2af7d0 Merge pull request #5526 from mruby/dependabot/github_actions/github/super-linter-4.6.1
build(deps): bump github/super-linter from 4.6.0 to 4.6.1
2021-08-11 06:27:53 +09:00
dependabot[bot] b83eb8dcff build(deps): bump github/super-linter from 4.6.0 to 4.6.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.6.0...v4.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-10 14:06:15 +00:00
Yukihiro "Matz" Matsumoto 3909281126 Merge pull request #5524 from dearblue/gem-headers
Expose all header files of the gems for small compilation
2021-08-10 06:21:18 +09:00
dearblue 4c25ace8b3 Expose all header files of the gems for small compilation
After building mruby, if the user compiles and links to `libmruby.a`, expose the included directory of the captured gems.
This is a change to the `<build-dir> /lib/libmruby.flags.mak` file and will result in being added to `bin/mruby-config --cflags`.
This eliminates the need for the user to look up the path and add the compiler flag if the user wants to take advantage of her gems publishing features.

In the main build with `rake CONFIG=...`, there is no problem because it can only be seen from the gems that depends directly and indirectly as before.
However, when compiling independently by the user using `bin/mruby-config`, a header file name collision may occur if a unique header directory is added.
2021-08-09 21:16:45 +09:00
Yukihiro "Matz" Matsumoto e8dbf1db9a Merge pull request #5525 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2021-08-09 11:38:31 +09:00
John 530a91752f pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2021-08-09 10:10:09 +10:00
Yukihiro "Matz" Matsumoto 0b2ebf4868 Merge pull request #5522 from dearblue/pack-EOF
Fixed compilation error of "mruby-pack" with `MRB_NO_STDIO`
2021-08-09 08:39:12 +09:00
Yukihiro "Matz" Matsumoto 1e1d296497 Merge pull request #5523 from jbampton/patch-1
docs: fix case of mruby
2021-08-08 09:25:23 +09:00
John Bampton 0516d94c83 docs: fix case of mruby 2021-08-07 16:51:04 +10:00
dearblue 18ef4e35f3 Fixed compilation error of "mruby-pack" with MRB_NO_STDIO 2021-08-07 14:29:55 +09:00
Yukihiro "Matz" Matsumoto 35d230a669 codedump.c: print two operands R(x) and R(x+1) for clarity. 2021-08-07 12:12:24 +09:00
Yukihiro "Matz" Matsumoto 06f49b3f84 codegen.c: need to push the value when the loop was eliminated. 2021-08-07 12:11:38 +09:00
Yukihiro "Matz" Matsumoto cd02cef465 array.h: avoid duplicated defined of MRB_ARY_NO_EMBED; fix #5520 2021-08-07 06:48:03 +09:00
Yukihiro "Matz" Matsumoto ce0b38fb72 Merge pull request #5521 from mruby/dependabot/github_actions/github/super-linter-4.6.0
build(deps): bump github/super-linter from 4.5.1 to 4.6.0
2021-08-07 06:46:35 +09:00
dependabot[bot] d0b214c269 build(deps): bump github/super-linter from 4.5.1 to 4.6.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.5.1 to 4.6.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.5.1...v4.6.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>
2021-08-06 14:05:46 +00:00
Yukihiro "Matz" Matsumoto 46a1c40fe3 numeric_ext.c: fix a bug regarding MRB_INT_MIN. 2021-08-06 11:16:12 +09:00
Yukihiro "Matz" Matsumoto ff2da0b66e numeric.c: fix a bug regarding MRB_INT_MIN. 2021-08-06 11:15:46 +09:00
Yukihiro "Matz" Matsumoto 37dbb91b96 codegen.c: -9223372036854775808 % -1 overflows 64 bit integer. 2021-08-06 10:35:06 +09:00
Yukihiro "Matz" Matsumoto 7ecc16f97a codegen.c: remove code duplication from NODE_ARRAY. 2021-08-05 16:59:32 +09:00
Yukihiro "Matz" Matsumoto 9cb44f5ae3 codegen.c: detect integer overflow in division.
`MRB_INT_MIN / -1` overflows.
2021-08-04 12:25:14 +09:00
Yukihiro "Matz" Matsumoto 9f37733382 numeric.c: fix a bug in left shift of negative integer.
`-1 * (1<<63)` causes overflow, but `-1<<63` is a valid value.
2021-08-04 12:05:09 +09:00
dearblue e5108a6291 Fixed local variables not separated between copied binding objects
This is because I forgot to implement the `Binding#initialize_copy` method.
2021-08-03 23:20:34 +09:00
Yukihiro "Matz" Matsumoto 9b3b2a4c95 numeric.c: check zero division before modulo. 2021-08-03 16:45:08 +09:00
Yukihiro "Matz" Matsumoto caaa07f2da codegen.c: check zero division before constant folding. 2021-08-03 16:43:50 +09:00
Yukihiro "Matz" Matsumoto c480ac4457 numeric_ext.c: modulo and remainder should handle infinite argument. 2021-08-03 16:35:31 +09:00
Yukihiro "Matz" Matsumoto e75572af6a numeric_ext.c: add Float#modulo and #remainder methods. 2021-08-03 16:30:47 +09:00
Yukihiro "Matz" Matsumoto f4afcbef67 numeric_ext.c: update Integer#remainder method.
- need to detect zero division error
- support floating point number argument (as `%`)
2021-08-03 16:28:11 +09:00
Yukihiro "Matz" Matsumoto b70fd09f47 Revert "numeric.c: simplifies int_mod definition."
This reverts commit 3738d62a86.
The change changed the behavior with floating point numbers.
2021-08-03 16:11:02 +09:00
Yukihiro "Matz" Matsumoto 2092bc7fe8 codegen.c: avoid division by zero in constant folding. 2021-08-03 15:57:01 +09:00
Yukihiro "Matz" Matsumoto fad47a98a7 numeric_ext.c: use mrb_integer instead of mrb_as_int.
`mrb_as_int` implicitly converts the value into the integer, but those
methods are defined for Integer class so that the value should always be
integers.
2021-08-03 13:15:34 +09:00
Yukihiro "Matz" Matsumoto 3738d62a86 numeric.c: simplifies int_mod definition. 2021-08-03 13:14:23 +09:00
Yukihiro "Matz" Matsumoto df6ef39d1c numeric_ext.c: define modulo and remainder methods for Integer. 2021-08-03 13:13:42 +09:00
Yukihiro "Matz" Matsumoto b9d2b47f16 Replace mrb_fixnum_value() with mrb_int_value().
Use `mrb_fixnum_value()` only when you are absolutely sure that the
value is within `Fixnum` range, i.e. 31 bits signed integer at least.
2021-08-03 13:00:11 +09:00
Yukihiro "Matz" Matsumoto 23e7cb41e5 Replace fixnum references with int.
The `Fixnum` class is no longer provided by `mruby`.
2021-08-03 13:00:10 +09:00
Yukihiro "Matz" Matsumoto 019b006ee5 numeric_ext.c: remove unnecessary prefix mrb_ from static functions. 2021-08-03 10:33:04 +09:00
Yukihiro "Matz" Matsumoto 1f0238a928 numeric.c: rename fixdivmod to intdivmod. 2021-08-03 07:30:59 +09:00
Yukihiro "Matz" Matsumoto 4fa24e4ff9 codegen.c: allow constant folding for negative integer modulo. 2021-08-02 16:48:16 +09:00
Yukihiro "Matz" Matsumoto 81d56477f2 numeric.c: simpler integer modulo calculation. 2021-08-02 16:47:50 +09:00
Yukihiro "Matz" Matsumoto 504d05232d mrdb.c: do not skip OP_JMP on step execution. 2021-08-02 16:19:08 +09:00
Yukihiro "Matz" Matsumoto e93642d53f codegen.c: refactor readint() to read MRB_INT_MIN. 2021-08-02 14:10:38 +09:00
Yukihiro "Matz" Matsumoto 6ea0c04c06 numeric.c: use C's modulo operator if both operands are positive. 2021-08-02 14:09:38 +09:00
Yukihiro "Matz" Matsumoto a5ac9c8790 test/driver.c: remove unused constants related to FIXNUM. 2021-08-02 08:56:38 +09:00
Yukihiro "Matz" Matsumoto 9902ab50fc codegen.c: fix a bug in bit shift constant folding. 2021-08-02 08:53:50 +09:00
Yukihiro "Matz" Matsumoto a9d721ea8f numeric.c: refactor integer bit shift operations. 2021-08-02 08:53:14 +09:00
Yukihiro "Matz" Matsumoto 907df715ef codegen.c: refactor unary operator optimization. 2021-08-02 08:51:39 +09:00
Yukihiro "Matz" Matsumoto 188c150f44 codegen.c: constant folding binary operators, <<, >>, %, &, |, ^. 2021-08-02 07:34:54 +09:00
Yukihiro "Matz" Matsumoto 1315e8751e codegen.c: eliminate loop if condition is constant.
For example, `while false; ...; end` should be removed.
2021-08-01 20:33:41 +09:00
Yukihiro "Matz" Matsumoto 9dc801a798 codegen.c: peephole optimize OP_JMPxxx. 2021-08-01 20:31:19 +09:00
Yukihiro "Matz" Matsumoto b1cb6c3c69 codegen.c: allow constant folding for mul / div. 2021-07-31 21:14:54 +09:00
Yukihiro "Matz" Matsumoto 43999492a7 codegen.c: mrb_prev_pc() to take previous instruction position.
It rescans `s->iseq` so that peephole optimizer can take multiple
previous instructions for constant folding, etc.
2021-07-31 21:11:36 +09:00
Yukihiro "Matz" Matsumoto 4306893971 codedump.c: instruction length should be ilen, not iseq. 2021-07-30 17:50:24 +09:00
Yukihiro "Matz" Matsumoto 517071e3fa codegen.c: order instructions in natural order for loops.
`while` and `until` generates in `cond` `jmpif` `body` `jmp` order.
It used to be in `jmp` `body` `cond` `jmpif` order.
2021-07-29 17:38:18 +09:00
Yukihiro "Matz" Matsumoto 5cde5983d9 debug.c: uses most space efficient packed map for line information. 2021-07-28 23:08:58 +09:00
Yukihiro "Matz" Matsumoto 64358c09d9 codegen.c: labels should be uint32_t. 2021-07-28 23:08:58 +09:00
Yukihiro "Matz" Matsumoto adfd29c1b0 codegen.c: fix loopinfo structure members.
- `pc0`: `next` destination
- `pc1`: `redo` destination (renamed from `pc2`)
- `pc3`: `break` destination (renamed from `pc3`)

old `pc1` was unused so removed.
2021-07-28 23:08:58 +09:00
Yukihiro "Matz" Matsumoto e81d497155 codegen.c: removed bytecode when the value of while is not used. 2021-07-28 23:08:58 +09:00
Yukihiro "Matz" Matsumoto 2910af0010 codegen.c: fixed a bug when value is taken from while and until.
```ruby
p ((while true; p 1; break; end))
```

should print `1 nil` but was `1`.
2021-07-28 23:08:57 +09:00
Yukihiro "Matz" Matsumoto 9dd3e23fc9 Merge pull request #5518 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2021-07-28 23:08:10 +09:00
John Bampton cbd54782c6 pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2021-07-28 21:21:57 +10:00
Yukihiro "Matz" Matsumoto 1f1dca1746 parse.y: fix an integer cast warning. 2021-07-26 11:46:22 +09:00
Yukihiro "Matz" Matsumoto 984161e6bb parse.y: mrb_int_read() returns mrb_int not unsigned long.
Also, now too big capture group index just gives `nil`, not error.
2021-07-26 11:20:59 +09:00
Yukihiro "Matz" Matsumoto 4803718b14 parse.y: unify redundant functions yywarn() and yywarning(). 2021-07-26 11:12:10 +09:00
Yukihiro "Matz" Matsumoto f6b37ff44d debug.c: small refactoring. 2021-07-26 11:10:20 +09:00
Yukihiro "Matz" Matsumoto b4696c3935 debug.c: remove type cast warnings. 2021-07-26 11:09:42 +09:00
Yukihiro "Matz" Matsumoto 642497fe19 fmt_fp.c: add implicit cast from mrb_float to int8_t. 2021-07-26 10:57:42 +09:00
Yukihiro "Matz" Matsumoto 966aa476d1 vm.c: fix integer type error in mrb_protect_error. 2021-07-26 10:49:12 +09:00
Yukihiro "Matz" Matsumoto 6175db2746 irep.h: operand c should be fit in uint8_t. 2021-07-26 10:47:40 +09:00
Yukihiro "Matz" Matsumoto 22b24d5d76 test/binding.rb: remove a duplicated test. 2021-07-26 10:46:36 +09:00
Yukihiro "Matz" Matsumoto 26340a8818 time.c: fixed a potential buffer overflow in time_zonename. 2021-07-25 16:43:00 +09:00
Yukihiro "Matz" Matsumoto c2c0250063 time.c: fixed time_zonename buffer size bug. 2021-07-25 16:38:37 +09:00
Yukihiro "Matz" Matsumoto 368b75d81b time.c: stop returning LOCAL for the zone name from Time.zone. 2021-07-25 13:07:11 +09:00
Yukihiro "Matz" Matsumoto 2bed2fabae time.c: update the document for Time#usec; close #5515 2021-07-25 13:07:11 +09:00
Yukihiro "Matz" Matsumoto 47eca476e8 pack.c: fixed sign comparison warning. 2021-07-25 13:07:11 +09:00
Yukihiro "Matz" Matsumoto 8de8521cb6 parse.y: replace strtoul() by mrb_int_read(). 2021-07-25 13:07:10 +09:00
Yukihiro "Matz" Matsumoto 5c804cf68f Remove redundant include headers.
- stdlib.h
- stddef.h
- stdint.h
- stdarg.h
- limits.h
- float.h
2021-07-25 13:07:10 +09:00
Yukihiro "Matz" Matsumoto 1f90a39799 Merge pull request #5514 from mruby/dependabot/github_actions/github/super-linter-4.5.1
build(deps): bump github/super-linter from 4.5.0 to 4.5.1
2021-07-24 13:21:08 +09:00
dependabot[bot] 5b3a4b36c7 build(deps): bump github/super-linter from 4.5.0 to 4.5.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.5.0...v4.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-23 14:06:33 +00:00
Yukihiro "Matz" Matsumoto 9c43276eb5 codegen.c: fixed a bug in OP_LOADI32 peephole optimization. 2021-07-23 11:20:18 +09:00
Yukihiro "Matz" Matsumoto 598c97ef76 codegen.c: get_int_operand() to support OP_LOADL (int in pool). 2021-07-22 11:49:47 +09:00
Yukihiro "Matz" Matsumoto d0fed63414 codegen.c: add constant folding for unary numeric operators (+, -, ~). 2021-07-22 11:39:52 +09:00
Yukihiro "Matz" Matsumoto 3e9ed1cca2 codegen.c: compare symbol names directly avoiding string conversion. 2021-07-22 11:21:00 +09:00
Yukihiro "Matz" Matsumoto e42f192827 codegen.c: skip -@ call if the argument is a literal integer. 2021-07-21 13:20:34 +09:00
Yukihiro "Matz" Matsumoto 2ef6e94489 codegen.c: move gen_setxv() after new_sym(). 2021-07-21 13:15:27 +09:00
Yukihiro "Matz" Matsumoto 81b384e3fb codegen.c: introduce gen_int() to generate integer instructions. 2021-07-21 13:15:27 +09:00
Yukihiro "Matz" Matsumoto 47fca90069 codegen.c: add peephole optimization for OP_LOADI32 before OP_MOVE. 2021-07-21 08:00:02 +09:00
Yukihiro "Matz" Matsumoto 28bf950e01 codegen.c: add peephole optimization for OP_LOADI16 before OP_MOVE. 2021-07-21 07:54:08 +09:00
Yukihiro "Matz" Matsumoto 275fe8c94b codegen.c: a new function get_int_operand. 2021-07-21 07:52:39 +09:00
Yukihiro "Matz" Matsumoto 5066e2370d codegen.c: negative zero equals to positive zero.
`OP_LOADI Rn -0` should be `OP_LOADI_0`.
2021-07-20 18:24:33 +09:00
Yukihiro "Matz" Matsumoto cdf54f3159 codegen.c: allow OP_EXT before OP_ADDI and OP_SUBI.
This is preparation for integer constant folding.
2021-07-20 11:07:37 +09:00
Yukihiro "Matz" Matsumoto 43f6f765b0 Remove unused prototypes for mrb_proc_merge_lvar(); ref #5511 2021-07-19 07:42:49 +09:00
Yukihiro "Matz" Matsumoto ed2a6a160e Merge pull request #5511 from dearblue/binding.3
Explicit write barrier for binding
2021-07-19 07:40:22 +09:00
Yukihiro "Matz" Matsumoto 71c778dbfc Merge pull request #5510 from dearblue/check-stdint
Output an error if the `INTPTR_MAX` macro is undefined in C++
2021-07-18 14:34:48 +09:00
Yukihiro "Matz" Matsumoto 86f8edca64 Merge pull request #5509 from dearblue/cast-c++
Avoid implicit casting from void pointers for C++
2021-07-17 20:55:18 +09:00
dearblue de4523f793 Explicit write barrier for binding 2021-07-17 20:43:19 +09:00
dearblue dbd249cace Output an error if the INTPTR_MAX macro is undefined in C++
When doing `conf.enable_cxx_abi` and compiling with FreeBSD + clang or MinGW, such as `INTPTR_MAX` constant macro is not defined if `#include <stdint.h>` precedes `#include <mruby.h>`.
Currently I get a warning when I use an undefined macro, but if I don't notice it I get confused in a link error.
It can be expected that the problem will be easier to understand by making a clear error.

Adding `-Werror=undef` as a compiler flag can also result in an error, but this can be a problem if the system header file itself uses undefined macros, for example.
This patch does minimal confirmation only, but has no side effects.
2021-07-17 20:32:38 +09:00
dearblue c8750048be Avoid implicit casting from void pointers for C++ 2021-07-17 20:21:30 +09:00
Yukihiro "Matz" Matsumoto d4e22c2cec codedump.c: update some instructions.
- OP_GETGV
- OP_SETGV
- OP_GETSV
- OP_SETSV
- OP_GETIV
- OP_SETIV
- OP_GETCV
- OP_SETCV
- OP_GETCONST
- OP_SETCONST
- OP_GETMCNST
- OP_SETMCNST
- OP_GETUPVAR
- OP_SETUPVAR
2021-07-17 19:51:25 +09:00
Yukihiro "Matz" Matsumoto 887df090cb codegen.c: optimize variable assignments after OP_MOVE.
- `OP_SETGV`
- `OP_SETIV`
- `OP_SETCV`
- `OP_SETCONST`
2021-07-17 19:51:25 +09:00
Yukihiro "Matz" Matsumoto 4dda97502b codegen.c: optimize OP_SETUPVAR after OP_MOVE. 2021-07-17 19:51:24 +09:00
Yukihiro "Matz" Matsumoto 3401396a16 Merge pull request #5508 from mruby/dependabot/github_actions/github/super-linter-4.5.0
build(deps): bump github/super-linter from 4.4.1 to 4.5.0
2021-07-16 07:57:58 +09:00
Yukihiro "Matz" Matsumoto 70f31d4bb4 codegen.c: add new peephole optimization for OP_MOVE.
If `OP_MOVE` comes after `OP_GETUPVAR`, you can skip move and redirect
the destination register of `OP_GETUPVAR`.
2021-07-16 07:55:25 +09:00
Yukihiro "Matz" Matsumoto 1a3564f2f1 codegen.c: add new peephole optimization for OP_GETUPVAR.
When `OP_GETUPVAR` is generated right after `OP_SETUPVAR`, there is no
need to read the upvar back to the register, e.g.

    3 008 OP_ADDI       R2      1
    3 011 OP_SETUPVAR   R2      1       0
    4 015 OP_GETUPVAR   R2      1       0
    4 019 OP_LOADI_2    R3

`OP_GETUPVAR` at the address `015` is useless. We can skip it like:

    3 008 OP_ADDI       R2      1
    3 011 OP_SETUPVAR   R2      1      0
    4 015 OP_LOADI_2    R3
2021-07-16 07:52:21 +09:00
dependabot[bot] 1284c0615e build(deps): bump github/super-linter from 4.4.1 to 4.5.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.4.1 to 4.5.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.4.1...v4.5.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>
2021-07-15 14:06:05 +00:00
Yukihiro "Matz" Matsumoto d4abbf1b77 test/syntax.rb: add tests for break and redo. 2021-07-15 15:22:23 +09:00
Yukihiro "Matz" Matsumoto b7d75591f3 codegen.c: gen_jmpdst always needs to generate relative address. 2021-07-15 14:08:17 +09:00
Yukihiro "Matz" Matsumoto b8863c69dc Merge pull request #4141 from udzura/add-test-for-attr-nil-guard
Add a testcase of #4137 fix
2021-07-15 07:27:48 +09:00
Yukihiro "Matz" Matsumoto f5eeb76a85 Merge pull request #5507 from mruby/dependabot/github_actions/github/super-linter-4.4.1
build(deps): bump github/super-linter from 4.3.0 to 4.4.1
2021-07-15 07:25:53 +09:00
dependabot[bot] b2f3327ade build(deps): bump github/super-linter from 4.3.0 to 4.4.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.3.0 to 4.4.1.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.3.0...v4.4.1)

---
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>
2021-07-14 14:05:53 +00:00
Yukihiro "Matz" Matsumoto 70aee96050 Merge pull request #5506 from mruby/dependabot/github_actions/github/super-linter-4.3.0
build(deps): bump github/super-linter from 4.2.2 to 4.3.0
2021-07-14 08:11:56 +09:00
dependabot[bot] b89678b30d build(deps): bump github/super-linter from 4.2.2 to 4.3.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.2.2 to 4.3.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.2.2...v4.3.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>
2021-07-13 14:06:38 +00:00
Yukihiro "Matz" Matsumoto 0712a5406a load.c: call mrb_top_run() from mrb_load_proc(); fix #5504
So that the function behave consistently with `mrb_load_proc()`.
2021-07-12 08:17:43 +09:00
Yukihiro "Matz" Matsumoto bb94082fa5 TODO.md: update. 2021-07-11 18:16:17 +09:00
Yukihiro "Matz" Matsumoto ce2d7c2e01 numeric.c: self should always be an integer in __coerce_step_counter. 2021-07-10 17:04:57 +09:00
Yukihiro "Matz" Matsumoto be6d559853 Update internal methods not to be listed in backtraces.
- String#__lines
- Array#__ary_eq
- Array#__ary_cmp
- Hash#__delete
- Kernel#__case_eqq
- Integer#__coerce_step_counter
2021-07-10 14:15:43 +09:00
Yukihiro "Matz" Matsumoto ce6319af61 Merge pull request #5503 from ntl/correct-header-files-when-cdump-disabled
Mrbgem gem_init.c: add headers for irep loading when cdump is disabled, but presym is enabled
2021-07-10 07:53:53 +09:00
Yukihiro "Matz" Matsumoto 13c0dc98f7 Merge pull request #5505 from dearblue/stdint
Do not include `stdint.h` before `mruby.h`
2021-07-10 07:42:25 +09:00
dearblue a7e41c74de Do not include stdint.h before mruby.h 2021-07-09 23:20:30 +09:00
Nathan Ladd 6598607fea Mrbgem gem_init.c compilation correction
When `disable_cdump` is declared on a Mrbgem spec, the procedure for
loading MRuby code from the gem's `mrblib` directory is slightly
different; instead of loading the mrblib code as a Proc built from the
compiled irep, the compiled irep is loaded directly. The header files
`mruby.h` and `mruby/proc.h` are needed only when the irep is loaded
directly. They are currently included only when presym is disabled, they
should be included whenever either presym is disabled *or* when
`disable_cdump` is called. The `cdump?` predicate method happens to
return true in either case (presym disabled *or* cdump disabled), so
this change should be safe.
2021-07-09 08:16:12 -05:00
Yukihiro "Matz" Matsumoto 93cce94e06 debug.h: use uint8_t instead of char for BER compressed binary.
A change in `load.c` is left uncommitted.
2021-07-09 21:11:28 +09:00
Yukihiro "Matz" Matsumoto b5039fdb6c debug.h: use uint8_t instead of char for BER compressed binary. 2021-07-09 14:10:48 +09:00
Yukihiro "Matz" Matsumoto 29556a49a0 cdump.c: avoid uninitialized local variable. 2021-07-09 14:10:17 +09:00
Yukihiro "Matz" Matsumoto b5aa08fc9e range.c: avoid implicit conversion from mrb_float to mrb_int. 2021-07-09 09:10:06 +09:00
Yukihiro "Matz" Matsumoto a1ba6cb728 codegen.c: avoid uninitialized local variable. 2021-07-09 09:09:11 +09:00
Yukihiro "Matz" Matsumoto b3fe9da329 range.c: should not include internal __num_to_a in the backtrace. 2021-07-08 10:07:18 +09:00
Yukihiro "Matz" Matsumoto 38c9c5c627 backtrace.c: skip C method without mid set.
That means it's a method not to be included in the backtrace, for
example `raise`.
2021-07-08 10:06:01 +09:00
Yukihiro "Matz" Matsumoto f9303699d1 pack.c: fix integer signedness mixture. 2021-07-08 09:59:14 +09:00
Yukihiro "Matz" Matsumoto 06b1662807 mruby-bin-debugger: remove unused local variables. 2021-07-08 09:58:44 +09:00
Yukihiro "Matz" Matsumoto c572165292 mruby-bin-debugger: support mrb_debug_line_packed_map. 2021-07-08 09:54:11 +09:00
Yukihiro "Matz" Matsumoto f16ea05a17 debug.c: new debug line information format mrb_debug_line_packed_map.
It uses BER number compression of delta of instruction positions and line
numbers. BER compression is a variable length number representation.

* `mrb_debug_line_ary`: array of line numbers represented in `uint16_t`.
  `[lineno, lineno, ...]`

* `mrb_debug_line_flat_map`: array of `mrb_irep_debug_info_line`, which
  is `struct {uint32_t pos; uint16_t lineno}`, for each line.

* `mrb_debug_line_packed_map` [new]: sequence of BER compressed 2
  numbers, `pos_delta, lineno_delta`. Deltas are differences from
  previous values (starting `0`). `line_entry_counts` represents total
  length of a packed map string for this type.
2021-07-08 07:24:12 +09:00
Yukihiro "Matz" Matsumoto fb1d4ff682 mruby-bin-debugger: rename prefix 'mrb_debug_' to mrdb_. 2021-07-08 07:24:12 +09:00
Yukihiro "Matz" Matsumoto 5f61b36a21 Merge pull request #5502 from jbampton/add-docs-yamllint
Add information on yamllint as comments
2021-07-08 07:24:00 +09:00
John Bampton 6b892e652b Add information on yamllint as comments 2021-07-07 23:18:00 +10:00
Yukihiro "Matz" Matsumoto 9079082b88 Merge pull request #5501 from jbampton/update-contributing-guide
Style the CONTRIBUTING guide
2021-07-07 22:05:50 +09:00
John Bampton c9db3ec7c3 Style the CONTRIBUTING guide 2021-07-07 22:26:19 +10:00
Yukihiro "Matz" Matsumoto 17748ecd1a Merge branch 'cremno-mrb_debug_strdup-and-strndup' 2021-07-06 17:02:31 +09:00
Yukihiro "Matz" Matsumoto 7c362ee723 Merge branch 'mrb_debug_strdup-and-strndup' of https://github.com/cremno/mruby into cremno-mrb_debug_strdup-and-strndup 2021-07-06 17:01:37 +09:00
Yukihiro "Matz" Matsumoto 7fa0a704e0 Make LocalJumpError a direct subclass of StandardError.
To be compatible with CRuby.
2021-07-05 11:57:04 +09:00
Yukihiro "Matz" Matsumoto a6657afab9 codegen.c: jump address should be generated by gen_jmpdst(). 2021-07-04 00:08:17 +09:00
Yukihiro "Matz" Matsumoto 39aed39139 ops.h: made terms consistent.
- `Lit` -> `Pool`
- `SEQ` -> `Irep`
2021-07-03 12:06:44 +09:00
Yukihiro "Matz" Matsumoto 2519659100 Update .git-blame-ignore-revs to skip a reformatting commit. 2021-07-03 06:51:35 +09:00
Yukihiro "Matz" Matsumoto 61e8a54086 doc/opcode.md: table reformatted. 2021-07-03 06:42:26 +09:00
Yukihiro "Matz" Matsumoto d9a8981c26 vm.c: OP_DEF to push a symbol to a register.
The code generator no longer need to emit `OP_LOADSYM` after `OP_DEF`.
`doc/opcode.md` is also updated.
2021-07-03 06:40:05 +09:00
Yukihiro "Matz" Matsumoto a624da6fdb vm.c: need to adjust pc for OP_EXT[123]. 2021-07-02 21:57:52 +09:00
Yukihiro "Matz" Matsumoto 040d1799ec error.c: mrb_obj_as_string and mrb_inspect may return non-object (undef). 2021-07-02 14:24:20 +09:00
Yukihiro "Matz" Matsumoto e60ddc431d AUTHORS: update. 2021-07-01 07:35:11 +09:00
Yukihiro "Matz" Matsumoto 99dbcec89c Revert "Remove OP_EXT[123] from operands."
This reverts commit fd10c72319.

I thought it was OK to restrict index value within 1 byte, but in some
cases index value could be 16 bits (2 bytes). I had several ideas to
address the issue, but reverting `fd10c72` is the easiest way. The
biggest reason is `mruby/c` still supports `OP_EXT[123]`, so that they
don't need any additional work.
2021-06-30 22:41:13 +09:00
Yukihiro "Matz" Matsumoto b2b0329d29 string.rb: upto to break when the string length is longer than end. 2021-06-29 16:49:16 +09:00
Yukihiro "Matz" Matsumoto f09eb196da Merge pull request #5497 from dearblue/drop-upper
Drop unnecessary upper procs linked from class/module/def syntax
2021-06-29 09:49:59 +09:00
Yukihiro "Matz" Matsumoto f05f6963f8 Merge pull request #5498 from dearblue/ruby-warns
Avoid warnings with `ruby -cw`
2021-06-29 09:48:32 +09:00
dearblue 2d0b50f6f3 Avoid warnings with ruby -cw
```console
% for rb in `git ls-files '*/mrblib/*.rb' 'mrblib'`; do ruby30 -cw $rb > /dev/null; done
mrbgems/mruby-array-ext/mrblib/array.rb:389: warning: assigned but unused variable - ary
mrbgems/mruby-array-ext/mrblib/array.rb:663: warning: assigned but unused variable - len
mrbgems/mruby-hash-ext/mrblib/hash.rb:119: warning: possibly useless use of a variable in void context
mrbgems/mruby-hash-ext/mrblib/hash.rb:259: warning: assigned but unused variable - keys
mrbgems/mruby-io/mrblib/io.rb:229: warning: literal in condition
mrbgems/mruby-io/mrblib/io.rb:280: warning: literal in condition
mrbgems/mruby-string-ext/mrblib/string.rb:347: warning: assigned but unused variable - len
mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb:2: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument
```
2021-06-28 23:21:47 +09:00
dearblue 59201b5904 Drop unnecessary upper procs linked from class/module/def syntax
It does not need to hold an anonymous proc for constant search.
Also, this change can be expected to cause an anonymous proc to be GC'd.

This is useful for metaprogramming that makes heavy use of the `class`/`module`/`def` syntax in the `class_eval`/`eval` method.

Example:

- code

  ```ruby
  p ObjectSpace.count_objects

  String.class_eval do
    def a
    end
  end

  p ObjectSpace.count_objects

  String.class_eval do
    eval <<~CODE
      def b
      end
    CODE
  end

  p ObjectSpace.count_objects
  ```

- result of building mruby-head (d63c0df6b) with `build_config/default.rb`

  ```
  {:TOTAL=>1024, :FREE=>262, :T_PROC=>495, :T_ENV=>61, ...}
  {:TOTAL=>1024, :FREE=>259, :T_PROC=>497, :T_ENV=>62, ...}
  {:TOTAL=>1024, :FREE=>255, :T_PROC=>500, :T_ENV=>63, ...}
  ```

- result of building mruby with this patch and `build_config/default.rb`

  ```
  {:TOTAL=>1024, :FREE=>264, :T_PROC=>494, :T_ENV=>60, ...}
  {:TOTAL=>1024, :FREE=>262, :T_PROC=>495, :T_ENV=>61, ...}
  {:TOTAL=>1024, :FREE=>261, :T_PROC=>496, :T_ENV=>61, ...}
  ```
2021-06-28 23:04:43 +09:00
Yukihiro "Matz" Matsumoto d63c0df6bc Merge pull request #5493 from dearblue/binding.2
Fixed finding variables from `proc` in `binding.eval` failed
2021-06-28 09:13:54 +09:00
Yukihiro "Matz" Matsumoto e462b42ff0 Merge pull request #5495 from dearblue/eval.2
Fixed finding variables defined in the upper proc failed
2021-06-27 14:32:43 +09:00
dearblue c182903ea0 Fixed finding variables from proc in binding.eval failed
Previously the following code did not produce the expected results:
```ruby
bx = binding
block = bx.eval("a = 1; proc { a }")
bx.eval("a = 2")
p block.call  # Expect 2 but return 1 due to a bug
```

The previous implementation of `Binding#eval` evaluated the code and then merged the top layer variables.
This patch will parse and expand the variable space before making a call to `eval`.
This means that the call to `Binding#eval` will do the parsing twice.

In addition, the following changes will be made:
- Make `mrb_parser_foreach_top_variable()`, `mrb_binding_extract_proc()` and `mrb_binding_extract_env()` functions private global functions.
- Remove the `posthook` argument from `mrb_exec_irep()`.
  The `posthook` argument was introduced to implement the `binding` method.
  This patch is unnecessary because it uses a different implementation method.

ref #5362
fixed #5491
2021-06-26 13:43:36 +09:00
Yukihiro "Matz" Matsumoto 912b2f8df3 Merge pull request #5494 from dearblue/eval.1
Fix memory leak in `Kernel#eval`
2021-06-26 12:17:14 +09:00
dearblue 52b29f41a3 Fixed finding variables defined in the upper proc failed
If no new variable was defined in the `eval` method, the variable was hidden from the nested `eval` method.

```ruby
a = 1
p eval %(b = 2; eval %(a)) # => 1 (good)
p eval %(eval %(a)) # => undefined method 'a' (NoMethodError)
```

This issue has occurred since mruby 3.0.0.
2021-06-26 11:00:32 +09:00
dearblue cf38fc2f9e Fix memory leak in Kernel#eval
The `mrbc_context` remained unreleased when the `mrb_parse_nstring()` function returned `NULL`.
2021-06-26 10:59:39 +09:00
Yukihiro "Matz" Matsumoto 5fc301f07d class.c: call method_added hooks on alias definitions; #2339 2021-06-25 10:10:34 +09:00
Yukihiro "Matz" Matsumoto 888be9611b class.c: call hook methods on method definitions; close #2339
- `Module#method_added`
- `BasicObject#singleton_method_added`
2021-06-24 13:13:59 +09:00
Yukihiro "Matz" Matsumoto f314a5132e Remove unused build configuration file benchmark/build_config_cc.rb. 2021-06-24 13:13:59 +09:00
Yukihiro "Matz" Matsumoto d0e07b5fdb Merge pull request #5492 from jbampton/add-file-contents-sorter-pre-commit
Add official pre-commit file-contents-sorter
2021-06-23 10:54:51 +09:00
John Bampton 7d2a2e10b3 Add official pre-commit file-contents-sorter
Remove unneeded bash script sort-codespell-wordlist.sh

https://github.com/pre-commit/pre-commit-hooks#file-contents-sorter
2021-06-23 10:55:26 +10:00
Yukihiro "Matz" Matsumoto 388bcb15e8 Rename two files for consistency; close #5488
* android_arm64-v8a.rb -> android_arm64_v8a.rb
* no-float.rb -> host-nofloat.rb
2021-06-22 16:36:26 +09:00
Yukihiro "Matz" Matsumoto fc6210763c Merge pull request #5487 from jbampton/lint-markdown
Enable markdownlint rules MD003,MD005,MD007
2021-06-22 13:14:34 +09:00
Yukihiro "Matz" Matsumoto 40ca240c4c Merge pull request #5489 from jbampton/pre-commit-autoupdate
pre-commit autoupdate
2021-06-22 13:13:13 +09:00
John Bampton 34b8dc211d pre-commit autoupdate
https://pre-commit.com/#pre-commit-autoupdate
2021-06-22 13:17:40 +10:00
John Bampton 188e9b6fb0 Enable markdownlint rules MD003,MD005,MD007
Lint Markdown

https://github.com/DavidAnson/markdownlint#rules--aliases
2021-06-22 06:57:03 +10:00
Yukihiro "Matz" Matsumoto 8416e706ba numeric.c: add optional ndigits argument to rounding methods.
- `truncate`
- `floor`
- `ceil`

`round` already takes `ndigits`.
2021-06-21 10:24:55 +09:00
Yukihiro "Matz" Matsumoto e893f805b1 Merge pull request #5486 from dearblue/alloc-castfree
Added `MRB_OBJ_ALLOC()` macro that does not require a cast
2021-06-21 10:24:44 +09:00
dearblue 0c5c04d7c8 Use MRB_VTYPE_FOREACH() in src/object.c 2021-06-20 11:11:37 +09:00
dearblue cc95e346fd Added MRB_OBJ_ALLOC() macro that does not require a cast
The `MRB_OBJ_ALLOC()` macro function returns a pointer of the type corresponding to the constant literal defined in `enum mrb_vtype`.
2021-06-20 11:08:28 +09:00
Yukihiro "Matz" Matsumoto f678620a43 Merge branch 'dearblue-block_given' 2021-06-19 21:19:42 +09:00
Yukihiro "Matz" Matsumoto 1fca58f7ca codegen.c: stop uninitialized warning. 2021-06-19 21:18:27 +09:00
dearblue c40802865a Added MRB_API function to get block arguments info.
- ` mrb_block_given_p()` -- The name comes from CRuby's `rb_block_given_p ()`

At the same time, it applies to `f_instance_eval()` and `f_class_eval()` of `mruby-eval`.
2021-06-19 21:15:02 +09:00
Yukihiro "Matz" Matsumoto 43eddfd4d5 Merge pull request #5484 from jbampton/enable-markdownlint-rule
Enable markdownlint rule MD046 code-block-style
2021-06-19 11:06:03 +09:00
John Bampton 625210f67c Enable markdownlint rule MD046 code-block-style
Fix C Markdown code block style
2021-06-19 08:38:58 +10:00
Yukihiro "Matz" Matsumoto e1637e716a Merge pull request #5434 from jbampton/add-markdownlint-rules-as-comments
Add the rules to the markdownlint config file as comments
2021-06-18 10:55:04 +09:00
Yukihiro "Matz" Matsumoto e812b1ccb3 Merge pull request #5483 from mruby/dependabot/github_actions/actions/upload-artifact-2.2.4
build(deps): bump actions/upload-artifact from 2.2.3 to 2.2.4
2021-06-18 07:26:35 +09:00
dependabot[bot] d3be93129e build(deps): bump actions/upload-artifact from 2.2.3 to 2.2.4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2.2.3 to 2.2.4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2.2.3...v2.2.4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-17 14:05:11 +00:00
Yukihiro "Matz" Matsumoto 4fcb5e8e4f variable.c: add skip argument to skip base class in lookup.
`mrb_vm_const_get` function looks up the constant first in the base
class, so that fallback `const_get` need not to search from the base.
2021-06-17 16:53:54 +09:00
Yukihiro "Matz" Matsumoto 63bafca7f5 variable.c: refactor mrb_vm_const_get function. 2021-06-17 16:53:21 +09:00
Yukihiro "Matz" Matsumoto 090356ec3b variable.c: skip prepended module for constant lookup.
```ruby
module M
  FOO = 'm'
end
class A
  FOO = 'a'
  prepend M
end
class B < A
  def foo
    p FOO
  end
end
B.new.foo  # should print `m` not `a`
```
2021-06-17 16:35:39 +09:00
Yukihiro "Matz" Matsumoto 62754a4739 class.c: use MRB_FLAG_TEST() macro. 2021-06-17 16:34:51 +09:00
Yukihiro "Matz" Matsumoto 02aed7af10 Merge pull request #5480 from jbampton/add-more-pre-commit-hooks
Add two more pre-commit hooks
2021-06-17 11:44:21 +09:00
Yukihiro "Matz" Matsumoto dee895ae79 Merge pull request #5482 from jbampton/standardize-backtick-commands
Standardize commands inside backticks
2021-06-17 11:43:07 +09:00
John Bampton d08ea8a92c Standardize commands inside backticks
Remove whitespace
2021-06-17 12:02:21 +10:00
Yukihiro "Matz" Matsumoto 7b0eb1f9b3 Merge pull request #5481 from jbampton/fix-shebang
Fix shebang by removing whitespace
2021-06-17 10:26:47 +09:00
John Bampton 233366a00c Fix shebang by removing whitespace 2021-06-17 10:26:38 +10:00
John Bampton f1aaa5ee2b Add two more pre-commit hooks 2021-06-17 10:13:56 +10:00
John Bampton 96bc39e527 Add the rules to the markdownlint config file as comments
Enable MD011 no-reversed-links - Reversed link syntax
2021-06-17 09:46:52 +10:00
Yukihiro "Matz" Matsumoto a528834df7 Revert "instance_eval for classes and modules should behave as class_eval."
This reverts commit ee3017496b.

I misunderstood something and the new behavior was different from CRuby.
The issue was reported by @dearblue, regarding #5478
2021-06-17 07:54:54 +09:00
Yukihiro "Matz" Matsumoto 7893cbb523 Merge pull request #5444 from jbampton/add-misspell-docs
Add documentation on spell checking with misspell
2021-06-16 09:17:36 +09:00
Yukihiro "Matz" Matsumoto 2341e4f5e5 Merge pull request #5445 from jbampton/add-codespell-pre-commit-hook
Run pre-commit with GitHub Actions
2021-06-16 09:15:07 +09:00
Yukihiro "Matz" Matsumoto 651c234f9c eval.c: implement class_eval with string; close #5478 2021-06-16 09:12:03 +09:00
John Bampton dab5502e8a Run pre-commit with GitHub Actions
Running pre-commit with GitHub Actions now gives us more tests and coverage

Remove duplicate GitHub Actions for merge conflicts and trailing whitespace

Remove duplicate checks for markdownlint and yamllint from the GitHub Super-Linter

Add new custom pre-commit hook running with a shell script to sort alphabetically and uniquify codespell.txt

Add new pre-commit hook to check spelling with codespell

https://github.com/codespell-project/codespell

Fix spelling
2021-06-16 08:34:54 +10:00
Yukihiro "Matz" Matsumoto 7c8a91ff5a numeric.c: restore fmt argument for backward compatibility.
`mrb_float_to_str()` used to take `fmt` argument. We thought no one used
the function, and OK to remove the argument. But at least `mruby-redis`
gem used the function.
2021-06-15 16:19:16 +09:00
Yukihiro "Matz" Matsumoto 50b6fafddf pack.c: support `w' directive (BER integer compression). 2021-06-14 11:20:52 +09:00
Yukihiro "Matz" Matsumoto 1ed01a8d47 pack.c: count should not be negative for directives xX@. 2021-06-13 20:13:50 +09:00
Yukihiro "Matz" Matsumoto bf2b06ced7 pack.c: raise error for unsupported w directive. 2021-06-13 14:21:51 +09:00
Yukihiro "Matz" Matsumoto eaaa9148b5 readint.c: fixed typo. 2021-06-12 16:18:45 +09:00
Yukihiro "Matz" Matsumoto 96ad60b9aa pack.c: support `@' directive (absolute position). 2021-06-12 16:18:45 +09:00
Yukihiro "Matz" Matsumoto 952e7efdd7 pack.c: refactor pack/unpack 'X'. 2021-06-12 16:18:45 +09:00
Yukihiro "Matz" Matsumoto 3ddc57ed6e pack.c: add X directive (back up byte). 2021-06-12 16:18:44 +09:00
Yukihiro "Matz" Matsumoto fb013595ed pack.c: count should be always positive. no check needed. 2021-06-12 16:18:44 +09:00
Yukihiro "Matz" Matsumoto 203495ccea pack.c: fix long/int mixtures. 2021-06-12 16:18:44 +09:00
Yukihiro "Matz" Matsumoto 72ea85c8da pack.c: remove unused arguments from static functions. 2021-06-12 16:18:44 +09:00
Yukihiro "Matz" Matsumoto f764467c19 pack.c: wrong position after count read. 2021-06-12 16:18:43 +09:00
Yukihiro "Matz" Matsumoto 56593764c8 Merge pull request #5476 from dearblue/eval+super
Raise `TypeError` with `super` inside `instance_eval` / `class_eval`
2021-06-12 16:18:35 +09:00
dearblue b45d95fa9e Raise TypeError with super inside instance_eval / class_eval
Commit d0f60182af introduced an exception as a limitation of mruby.

Subsequent CRuby-2.7 has changed its behavior to raise an exception.
ref: https://github.com/ruby/ruby/commit/55b7ba368696033f2e89b77cbcd4a05dec97b139
2021-06-12 16:08:21 +09:00
Yukihiro "Matz" Matsumoto f7777f64e6 codegen.c: refactor readint()
* renamed from redundant `readint_mrb_int()`
* supports only base upto 16
* no base validation (already done in parser)
* no negative read (negate after read)
* overflow detection using `mrb_int_{mul,add}_overflow()`
2021-06-11 16:44:47 +09:00
Yukihiro "Matz" Matsumoto 49af1fca03 readint.c: add new function mrb_int_read.
Difference from `strtoul(3)`:

* reads `mrb_int` based on configuration
* specifies the end of the string
* no sign interpretation
* base 10 only
2021-06-11 15:14:17 +09:00
Yukihiro "Matz" Matsumoto 14a69c6ffd Merge pull request #5475 from mruby/dependabot/github_actions/github/super-linter-4.2.2
build(deps): bump github/super-linter from 4.2.1 to 4.2.2
2021-06-11 15:14:00 +09:00
dependabot[bot] 0271972e0f build(deps): bump github/super-linter from 4.2.1 to 4.2.2
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.2.1...v4.2.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-11 05:50:49 +00:00
Yukihiro "Matz" Matsumoto 62f4cc8cd1 sprintf.c: check value range before type casting. 2021-06-10 18:42:51 +09:00
Yukihiro "Matz" Matsumoto df549c12e5 readflt.c: renamed from strtod.c
The file provides `mrb_read_float()` renamed from `vim_strtod()`.
2021-06-10 15:04:35 +09:00
Yukihiro "Matz" Matsumoto f2f6f2179b Merge pull request #5474 from mruby/dependabot/github_actions/github/super-linter-4.2.1
build(deps): bump github/super-linter from 4.2.0 to 4.2.1
2021-06-10 15:04:10 +09:00
dependabot[bot] d46e7c759f build(deps): bump github/super-linter from 4.2.0 to 4.2.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.2.0...v4.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-10 05:55:58 +00:00
Yukihiro "Matz" Matsumoto 82428de5f9 Merge pull request #5473 from mruby/dependabot/github_actions/github/super-linter-4.2.0
build(deps): bump github/super-linter from 4.1.0 to 4.2.0
2021-06-09 17:11:23 +09:00
dependabot[bot] 670fa8607b build(deps): bump github/super-linter from 4.1.0 to 4.2.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.1.0...v4.2.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>
2021-06-09 06:03:03 +00:00
Yukihiro "Matz" Matsumoto 3acc09ae61 string.c: make mrb_str_len_{inum,dbl}() static. 2021-06-08 17:19:31 +09:00
Yukihiro "Matz" Matsumoto d8ec544564 string.c: remove two unused functions.
* `mrb_cstr_to_inum()`
* `mrb_cstr_to_dbl()`
2021-06-08 17:00:54 +09:00
Yukihiro "Matz" Matsumoto a5f323835e string.c: add base>36 check to String#to_i. 2021-06-08 16:59:57 +09:00
Yukihiro "Matz" Matsumoto 972cc8b5a8 sprintf.c: fix mrb_int and int mixture errors. 2021-06-07 23:26:06 +09:00
Yukihiro "Matz" Matsumoto b10a6fd472 pack.c: fix 'void* to char*` assignment. 2021-06-07 22:42:31 +09:00
Yukihiro "Matz" Matsumoto 32e96a1d4a pack.c: add default to switch statement to silence warnings. 2021-06-07 09:06:37 +09:00
Yukihiro "Matz" Matsumoto 0afa651363 pack.c: support M specifier (quoted-printable). 2021-06-07 09:03:25 +09:00
Yukihiro "Matz" Matsumoto bba044cfc8 test/pack.c: reorganize test suits. 2021-06-07 08:54:54 +09:00
Yukihiro "Matz" Matsumoto cd64ddf372 pack.c: raise exception for unsupported specifiers. 2021-06-07 07:18:17 +09:00
Yukihiro "Matz" Matsumoto e112c46281 pack.c: check overflow before calling pack_x. 2021-06-06 08:01:58 +09:00
Yukihiro "Matz" Matsumoto d518294f20 pack.c: check overflow before reading count. 2021-06-06 08:01:01 +09:00
Yukihiro "Matz" Matsumoto af3e0ddfc0 pack.c: failed to detect overflow when ch is zero in read_tmpl. 2021-06-06 08:00:24 +09:00
Yukihiro "Matz" Matsumoto f01c29b0ec pack.c: hold enum values in enum variables not int. 2021-06-05 20:04:59 +09:00
Yukihiro "Matz" Matsumoto abb288f5cb codedump.c: fix a compiler condition bug with MRB_NO_FLOAT. 2021-06-05 08:09:04 +09:00
Yukihiro "Matz" Matsumoto cb7d351bfb ops.h: fix term consistency. Lit -> Pool. 2021-06-05 08:08:25 +09:00
Yukihiro "Matz" Matsumoto c2d3718b6e Merge branch 'mirichi-test' 2021-06-04 22:26:57 +09:00
mirichi a997e41d17 add block argument test #2144 2021-06-04 22:25:33 +09:00
Yukihiro "Matz" Matsumoto 001fb58698 Merge branch 'test' of https://github.com/mirichi/mruby into mirichi-test 2021-06-04 22:22:16 +09:00
Yukihiro "Matz" Matsumoto 45dd6b140a Merge pull request #5469 from mruby/dependabot/github_actions/github/super-linter-4.1.0
build(deps): bump github/super-linter from 4.0.2 to 4.1.0
2021-06-04 16:41:18 +09:00
dependabot[bot] 8d6f3595c3 build(deps): bump github/super-linter from 4.0.2 to 4.1.0
Bumps [github/super-linter](https://github.com/github/super-linter) from 4.0.2 to 4.1.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v4.0.2...v4.1.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>
2021-06-04 06:54:20 +00:00
Yukihiro "Matz" Matsumoto 01a21085f6 add a few regressions test from #2313
The code was contributed from Carson McDonald (@carsonmcdonald)
2021-06-03 16:47:04 +09:00
Yukihiro "Matz" Matsumoto 9775315240 vm.c: unify JUMP instructions in OP_SEND. 2021-06-02 18:53:22 +09:00
Yukihiro "Matz" Matsumoto 843abc5c7b cdump.c: rename dump_ prefix to cdump for static functions. 2021-06-01 22:21:04 +09:00
Yukihiro "Matz" Matsumoto ff93854c4a cdump.c: separate irep dump in C feature. 2021-06-01 16:47:06 +09:00
Yukihiro "Matz" Matsumoto a41174aa86 Merge pull request #5464 from shuujii/fix-typo-in-lib-mruby-presym.rb
Fix typo in `lib/mruby/presym.rb`
2021-05-31 09:16:34 +09:00
KOBAYASHI Shuji 2a4d340ce4 Fix typo in lib/mruby/presym.rb 2021-05-31 08:25:42 +09:00
Yukihiro "Matz" Matsumoto cf2e78de44 numeric.c: fixed a silly bug related to pointer decrement. 2021-05-31 02:59:33 +09:00
Yukihiro "Matz" Matsumoto be647acd3e sprintf.c: avoid object allocation in integer formatting. 2021-05-30 19:57:56 +09:00
Yukihiro "Matz" Matsumoto 8a4bcc58c9 numeric.c: introduce mrb_int_to_cstr() to dump mrb_int.
* refactor `mrb_integer_to_str()`
* refactor `mrb_str_format()`
2021-05-30 08:15:51 +09:00
Yukihiro "Matz" Matsumoto 60aa2192a8 codegen.c: just raise the exception on broken node for assignments. 2021-05-29 15:46:30 +09:00
Yukihiro "Matz" Matsumoto 8aa15b0096 Merge pull request #5463 from mruby/dependabot/github_actions/actions/cache-2.1.6
build(deps): bump actions/cache from 2.1.5 to 2.1.6
2021-05-28 16:33:09 +09:00
dependabot[bot] fc7a00f12f build(deps): bump actions/cache from 2.1.5 to 2.1.6
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.5 to 2.1.6.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.5...v2.1.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-28 06:02:32 +00:00
Yukihiro "Matz" Matsumoto 269470babc kernel.c: avoid recursive VM call in mrb_f_caller. 2021-05-28 07:39:34 +09:00
Yukihiro "Matz" Matsumoto 4e683c20a2 kernel.c: caller should not include the frame for itself. 2021-05-28 07:38:21 +09:00
Yukihiro "Matz" Matsumoto 2a717cf2aa backtrace.c: do not skip frames for C function calls. 2021-05-28 07:36:20 +09:00
Yukihiro "Matz" Matsumoto cefbc21e67 vm.c: skip actual method_missing call unless it's overridden.
So that `mruby -e 'a'` does not print backtrace history, i.e.

```
% mruby -e 'a'
-e:1: undefined method 'a' (NoMethodError)
```

Instead of

```
% mruby -e 'a'
trace (most recent call last):
        [1] -e:1
-e:1: undefined method 'a' (NoMethodError)
```
2021-05-28 07:30:43 +09:00
Yukihiro "Matz" Matsumoto d9c8626bb1 kernel.c: clear mid for raise and method_missing
Method names need not to be printed in backtrace history.
2021-05-27 21:48:26 +09:00
Yukihiro "Matz" Matsumoto cb92f9ce0b backtrace.c: do not print trace line if there's no backtrace history 2021-05-27 21:44:55 +09:00
Yukihiro "Matz" Matsumoto 48b08fecba array.c: unify mrb_ary_ref and mrb_ary_entry
Use only `mrb_ary_entry` hereafter.
2021-05-27 21:43:43 +09:00
Yukihiro "Matz" Matsumoto 9a72869043 array.c: check for negative shift size. 2021-05-27 08:13:49 +09:00
Yukihiro "Matz" Matsumoto c019d8d34d fmt_fp.c: move mruby specific mrb_float_to_str to numeric.c 2021-05-26 17:29:18 +09:00
Yukihiro "Matz" Matsumoto 05cc3a8d99 Merge pull request #5461 from mruby/dependabot/github_actions/github/super-linter-4.0.2
build(deps): bump github/super-linter from 3.17.1 to 4.0.2
2021-05-26 15:09:52 +09:00
dependabot[bot] 705632c99d build(deps): bump github/super-linter from 3.17.1 to 4.0.2
Bumps [github/super-linter](https://github.com/github/super-linter) from 3.17.1 to 4.0.2.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v3.17.1...v4.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-26 05:58:37 +00:00
Yukihiro "Matz" Matsumoto 063b49ab8e fmt_fp.c: truncate precision to prevent buffer overflow. 2021-05-25 13:32:29 +09:00
Yukihiro "Matz" Matsumoto afbc199ed3 fmt_fp.c: use constant that depends on mrb_float size. 2021-05-25 13:31:41 +09:00
Yukihiro "Matz" Matsumoto 5ed3a3475e fmt_fp.c: use a const int instead of a macro constant. 2021-05-25 13:30:17 +09:00
Yukihiro "Matz" Matsumoto bf523b71d1 strtod.c: new public domain implementation of strtod; ref #5448
Instead of using copyrighted `strtod`, now use the public domain
implementation of `strtod` by Yasuhiro Matsumoto (@mattn). The function
has been renamed to `mrb_float_read()`; ref #5460 as well.
2021-05-24 12:10:14 +09:00
Yukihiro "Matz" Matsumoto a44ca2e9be fmt_fp.c: exponential may be bigger than 100. 2021-05-24 11:50:30 +09:00
Yukihiro "Matz" Matsumoto d121075e49 class.c: no need to create aliases if both symbols are same. 2021-05-24 11:50:30 +09:00
Yukihiro "Matz" Matsumoto e323cd0c6e class.c: add write barrier for aliases. 2021-05-24 11:50:29 +09:00
Yukihiro "Matz" Matsumoto a3f779c5b6 Merge pull request #5459 from shuujii/fix-typo-in-src-fmt_fp.c
Fix typo in `src/fmt_fp.c` [ci skip]
2021-05-23 00:02:55 +09:00
KOBAYASHI Shuji 6cfe184d39 Fix typo in src/fmt_fp.c [ci skip] 2021-05-22 17:00:14 +09:00
Yukihiro "Matz" Matsumoto b9bde0c918 mruby-sprintf: reduce float digits to avoid test failure.
Too many digits to fit in single precision float numbers, so that tests
fail when `MRB_USE_FLOAT32` defined.
2021-05-22 14:46:37 +09:00
Yukihiro "Matz" Matsumoto 5c7fe225a6 fp_fmt.c: remove mrb_float_to_cstr().
The function was intended to be a utility function for `mruby-sprintf`.
The functionality was integrated into `sprintf.c`.
2021-05-22 14:16:55 +09:00
Yukihiro "Matz" Matsumoto 328563995f fmt_fp.c: replace with public domain float format routine; ref #5448
The original code can be found in `https://github.com/dhylands/format-float`.

Changes:
- support `double`
- support `#` (alt_form) modifier
- small refactoring
2021-05-22 09:35:27 +09:00
Yukihiro "Matz" Matsumoto fa29bb3bb4 fmt_fp.c: remove fmt argument from mrb_float_to_str().
With major refactoring to prepare removing `snprintf(3) calls.
2021-05-21 08:13:38 +09:00
Yukihiro "Matz" Matsumoto beaf365dd4 numeric.h: remove 2 functions from MRB_API
- `mrb_float_to_str()`
- `mrb_float_to_cstr()`

Both functions will be replaced to support new coming `format-float.c`.
2021-05-21 08:13:38 +09:00
Yukihiro "Matz" Matsumoto 03c4e114a9 test/syntax.rb: fix endless def warning (no assertion). 2021-05-21 08:13:37 +09:00
Yukihiro "Matz" Matsumoto f0e1d575f2 sprintf.c: remove specifiers %a and %A.
`fmt_fp.c` does not support those specifiers. In addition, I believe no
one uses hexadecimal representation of float values.
2021-05-21 08:13:37 +09:00
Yukihiro "Matz" Matsumoto 8f73ee2e82 Merge pull request #5456 from shuujii/support-load-64-bit-integer-from-mrb-format-with-MRB_32BIT-and-MRB_INT64
Support load 64-bit integer from mrb format with MRB_32BIT and MRB_INT64
2021-05-21 08:12:54 +09:00
KOBAYASHI Shuji e9e720eab9 Support load 64-bit integer from mrb format with MRB_32BIT and MRB_INT64 2021-05-20 19:39:08 +09:00
Yukihiro "Matz" Matsumoto 07c8470278 parse.y: allow "command" syntax in endless method definition.
This change allows `def hello = puts "Hello"` without parentheses.
This syntax has been introduced since Ruby3.1.
2021-05-18 16:26:36 +09:00
Yukihiro "Matz" Matsumoto d50c83cca7 parse.y: endless singleton method definition can omit parens. 2021-05-18 16:25:53 +09:00
Yukihiro "Matz" Matsumoto 5eebbd7df2 Global renaming regarding integer and float.
Consistent number conversion function names:
* `mrb_value` to immediate (C) value
  * `mrb_int()` -> `mrb_as_int()`
  * `mrb_to_flo()` -> `mrb_as_float()`
* `mrb_value` to `mrb_value` (converted)
  * `mrb_to_int()'
  * `mrb_Integer()` - removed
  * `mrb_Float()` -> `mrb_to_float`

Consistent function name (avoid `_flo` suffix):
* `mrb_div_flo()` -> `mrb_div_float`
2021-05-17 15:07:05 +09:00
Yukihiro "Matz" Matsumoto ea7f1953c3 Rename mrb_fixnum_to_str to mrb_integer_to_str. 2021-05-17 13:59:01 +09:00
Yukihiro "Matz" Matsumoto 080fdbf9e8 Rename mrb_flo_to_fixnum to mrb_float_to_integer. 2021-05-17 13:58:54 +09:00
Yukihiro "Matz" Matsumoto fbbcee835f rational.c: update function prefixes.
To be consistent, functions with `rational_` prefix implements methods,
functions with `rat_` prefix are utility functions.
2021-05-17 13:39:51 +09:00
Yukihiro "Matz" Matsumoto e7db158321 numeric.h: reduce conditional compilation branch on MRB_NO_FLOAT. 2021-05-16 18:21:08 +09:00
Yukihiro "Matz" Matsumoto 361b380eaf AUTHORS: update authors information as of 2021-05-15. 2021-05-15 17:27:23 +09:00
Yukihiro "Matz" Matsumoto ae4c952d2e mruby-array-ext/array.c: implement Array#rotate in C.
The Ruby version of `Array#rotate!` generated a rotated array and
replaced the receiver, but the C version rotates the receiver array
in-place. So the performance is improved a lot both in speed and memory
consumption. Look for the comments in `array.c` for the in-place rotating
algorithm, if you are interested.
2021-05-15 17:26:36 +09:00
Yukihiro "Matz" Matsumoto 9422fdbc87 mruby-array-ext/array.c: implement Array#compact in C. 2021-05-14 10:39:41 +09:00
Yukihiro "Matz" Matsumoto bdb5d85adc array.rb: replace can't with cannot.
To avoid editor coloring failures.
2021-05-14 10:34:11 +09:00
Yukihiro "Matz" Matsumoto 364f275997 range.c: implement (part of) Range#to_a in C.
Mostly for performance reason.
2021-05-14 08:39:14 +09:00
Yukihiro "Matz" Matsumoto 99f0adc3f4 range.c: refactor conditional compilation code.
So that auto indentation works.
2021-05-14 08:28:27 +09:00
Yukihiro "Matz" Matsumoto dfac706ac2 range.c: rename RANGE_INITIALIZED_MASK to RANGE_INITIALIZED_FLAG. 2021-05-14 08:27:21 +09:00
Yukihiro "Matz" Matsumoto 1d0cfb359c Update mrb_bool definition; close #2385
- move `TRUE/FALSE` definition from `mrbconf.h` (not configurable)
- use C/C++ definition of boolean type for `mrb_bool`

The fix is originally written by @take-cheeze.
2021-05-13 19:30:41 +09:00
Yukihiro "Matz" Matsumoto 3a3761ec69 string.c: remove unnecessary branch in the internal method. 2021-05-13 16:08:25 +09:00
Yukihiro "Matz" Matsumoto 5c7aa4f299 Simplify module inclusion for Array, Hash and Range. 2021-05-13 16:07:09 +09:00
Yukihiro "Matz" Matsumoto 2597e5192f Merge pull request #5451 from mruby/dependabot/github_actions/github/super-linter-3.17.1
build(deps): bump github/super-linter from 3.17.0 to 3.17.1
2021-05-13 15:55:34 +09:00
Yukihiro "Matz" Matsumoto 2bed750eb0 range.c: avoid use of mrb_fixnum_p.
`mrb_int` may not fit in `fixnum` (inline integer).
2021-05-13 15:35:34 +09:00
Yukihiro "Matz" Matsumoto 4d6f5be1df mruby-test: MRB_INT_MAX etc. may not fit in Fixnum (inline int). 2021-05-13 15:34:20 +09:00
dependabot[bot] 649600ba9f build(deps): bump github/super-linter from 3.17.0 to 3.17.1
Bumps [github/super-linter](https://github.com/github/super-linter) from 3.17.0 to 3.17.1.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v3.17.0...v3.17.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-13 06:24:44 +00:00
Yukihiro "Matz" Matsumoto 5f9f26f6e6 backtrace.c: stop skipping frame with file/line information.
Instead, copy them from the outer frame as CRuby does.
2021-05-13 08:00:05 +09:00
Yukihiro "Matz" Matsumoto bd04630710 Merge pull request #5450 from mruby/dependabot/github_actions/actions/checkout-2.3.4
build(deps): bump actions/checkout from 2 to 2.3.4
2021-05-12 16:49:02 +09:00
dependabot[bot] 800b534a35 build(deps): bump actions/checkout from 2 to 2.3.4
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 2.3.4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v2.3.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-12 05:53:03 +00:00
Yukihiro "Matz" Matsumoto 032d11de1b range.rb: add Range#entries as an alias to Range#to_a. 2021-05-12 11:09:03 +09:00
Yukihiro "Matz" Matsumoto 955c7f703e array.rb: add Array#entries as an alias to Array#to_a.
The performance of `Enumerable#entries` are significantly slower than
`Array#to_a`.
2021-05-12 07:17:49 +09:00
Yukihiro "Matz" Matsumoto 2a280a8f70 Remove the obsolete term Fixnum.
Except for compatibility code.
2021-05-11 07:36:34 +09:00
Yukihiro "Matz" Matsumoto 23019213b7 doc/limitation.md: update the limitation.
- `puts` behavior changed as CRuby
- fix wrong behavior in re-raising in `rescue`
2021-05-10 17:39:50 +09:00
Yukihiro "Matz" Matsumoto 033aa98cf4 time.c: Windows API provides clock_gettime.
`gettimeofday` emulation needed no longer.
2021-05-08 10:34:38 +09:00
Yukihiro "Matz" Matsumoto f8345dbc44 Add .git-blame-ignore-revs file to ignore whitespace fixes. 2021-05-07 17:28:52 +09:00
Yukihiro "Matz" Matsumoto 6eedb6173b Merge pull request #5447 from dearblue/tab
Extend the tab with 8 whitespace
2021-05-07 17:25:44 +09:00
Yukihiro "Matz" Matsumoto bc620824be Merge pull request #5443 from jbampton/order-editorconfig-properties
Order the EditorConfig properties
2021-05-07 17:25:05 +09:00
Yukihiro "Matz" Matsumoto 4458000404 symbol.c: add Symbol#name method
`Symbol#name` is similar to `#to_s` but returns a frozen string.
2021-05-06 16:45:54 +09:00
Yukihiro "Matz" Matsumoto a93d9d8585 symbol.c: rename sym_name to sym_cstr. 2021-05-06 16:45:27 +09:00
dearblue 6fc5dc986a Extend the tab with 8 whitespace
This work was done as follows:
- check:   `git grep $'\011' -- :^oss-fuzz`
- convert: `ruby -pi -e 'nil while $_.sub!(/^(.*?)\t/) { $1 + " " * (8 - $1.size % 8) }'`

The `doc/guide/{compile,mrbgems}.md` file adds and removes whitespace to make the directory tree look the same.
In `mrbgems/mruby-socket/src/socket.c`, there is a part where the indent is changed from 4 to 2 at the same time as the tab is changed.
2021-05-05 22:16:03 +09:00
Yukihiro "Matz" Matsumoto 1c9260db6b Merge pull request #5446 from mruby/dependabot/github_actions/github/super-linter-v3.17.0
build(deps): bump github/super-linter from v3 to v3.17.0
2021-05-05 19:05:39 +09:00
dependabot[bot] 7460e165dc build(deps): bump github/super-linter from v3 to v3.17.0
Bumps [github/super-linter](https://github.com/github/super-linter) from v3 to v3.17.0.
- [Release notes](https://github.com/github/super-linter/releases)
- [Commits](https://github.com/github/super-linter/compare/v3...28cfebb84fd6dd9e8773b5efe5ac0f8f3714f228)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-05 07:11:09 +00:00
Yukihiro "Matz" Matsumoto 35a6dfe905 Merge pull request #5442 from dearblue/mruby-pack
Fix documents for `mruby-io`
2021-05-05 09:38:45 +09:00
Yukihiro "Matz" Matsumoto b50be31d2b Merge pull request #5441 from dearblue/mruby-sleep
Update gem spec for `mruby-sleep`
2021-05-05 09:38:18 +09:00
John Bampton f4d9a9beec Add documentation on spell checking with misspell 2021-05-04 09:16:22 +10:00
Yukihiro "Matz" Matsumoto b517274921 Merge pull request #5440 from jbampton/fix-whitespace-in-src-symbol-c
Fix whitespace in `src/symbol.c`
2021-05-04 07:59:55 +09:00
John Bampton 1d5d912148 Order the EditorConfig properties 2021-05-04 08:14:12 +10:00
dearblue 8eb5a8867b Fix documents for mruby-io 2021-05-03 23:27:40 +09:00
dearblue eca990b2ec Update gem spec for mruby-sleep
To align the spec like any other core mrbgems:
- Delete `spec.version`
- Set `spec.summary`
2021-05-03 23:17:04 +09:00
John Bampton 356e1740f2 Fix whitespace in src/symbol.c 2021-05-03 21:15:29 +10:00
Yukihiro "Matz" Matsumoto 0c8cd60097 symbol.c: remove id2name reference from documents. 2021-05-03 15:33:39 +09:00
Yukihiro "Matz" Matsumoto ce054bd078 symbol.c: remove Symbol#id2sym.
In the ancient Ruby, symbols are represented by integers. In that era,
to get string representation from integers, we used `Integer#id2sym`
method. Later, `Symbol` was introduced, and `id2sym` was used for
compatibility. Today, no one uses `id2sym` any longer. It is described
in ISO 30170:2012 standard but I consider it as a mistake.
2021-05-03 15:30:59 +09:00
Yukihiro "Matz" Matsumoto 24dcd252f8 Merge pull request #5439 from dearblue/opcode.md
Enclose the table contents of `opcode.md` as code
2021-05-02 20:41:43 +09:00
Yukihiro "Matz" Matsumoto 4626348e47 array.c: mrb_ary_shift_m should be static. 2021-05-02 20:30:41 +09:00
dearblue 3e5ff7543a Enclose the table contents of opcode.md as code 2021-05-02 20:06:16 +09:00
dearblue ce973685d0 Rename mrbgems/mruby-inline-struct with mrbgems/mruby-test-inline-struct
This gem contains only tests.
2021-05-02 18:25:00 +09:00
Yukihiro "Matz" Matsumoto 14c13bb4d2 symbol.c: remove mrb_sym_static_p() function that no one use. 2021-05-02 17:57:34 +09:00
dearblue 66a55fb4df Run the task only once when parse.y is updated
Previously, the task was executed as many times as there were targets, including `mruby-compiler`.

```console
% rm mrbgems/mruby-compiler/core/y.tab.c
% rake `pwd`/mrbgems/mruby-compiler/core/y.tab.c
YACC  mrbgems/mruby-compiler/core/parse.y -> mrbgems/mruby-compiler/core/y.tab.c
YACC  mrbgems/mruby-compiler/core/parse.y -> mrbgems/mruby-compiler/core/y.tab.c
```
2021-05-02 16:52:50 +09:00
Yukihiro "Matz" Matsumoto 8f362eaf8a io.rb,print.rb: puts to expand array arguments.
As CRuby behaves.
2021-05-01 00:00:14 +09:00
Yukihiro "Matz" Matsumoto 519dc3d19c Merge pull request #5432 from shuujii/fix-typo-in-mrbgems-mruby-io-mrblib-io.rb
Fix typo in `mrbgems/mruby-io/mrblib/io.rb`; ref cb55e7eca
2021-04-29 11:17:41 +09:00
KOBAYASHI Shuji a633f0f9f6 Fix typo in mrbgems/mruby-io/mrblib/io.rb; ref cb55e7eca 2021-04-29 09:27:12 +09:00
Yukihiro "Matz" Matsumoto 2ad5d4f53d string.c: add a new method String#center. 2021-04-28 21:44:19 +09:00
Yukihiro "Matz" Matsumoto e5e5acefaf string.{c,rb}: fix type of return values from some methods as Ruby3.0
When the receiver is the instance of subclass of `String`.

- `String#each_char`
- `String#each_line`
- `String#partition`
2021-04-28 21:41:01 +09:00
Yukihiro "Matz" Matsumoto 6666b4fa62 doc/opcode.md: stop reversed link syntax check from markdownlint. 2021-04-28 21:37:06 +09:00
Yukihiro "Matz" Matsumoto cb55e7eca9 io.rb: reimplement IO#each_char.
It used to be an alias to `IO#each_byte` but those methods should have
behave differently.
2021-04-28 21:37:05 +09:00
Yukihiro "Matz" Matsumoto aff3743c12 array.rb: Array#uniq to return always Array.
Even called for subclass of `Array`, according to new Ruby3.0 behavior.
Other methods of `Array` behave as Ruby3.0 from the first hand.
2021-04-28 17:45:19 +09:00
Yukihiro "Matz" Matsumoto 9f77232b71 array.c: update Array#shift to take optional argument; close #5428 2021-04-27 16:37:24 +09:00
Yukihiro "Matz" Matsumoto 2e165b9e20 Merge pull request #5425 from dearblue/exc_to_s
Fix symbol leak in `exc_to_s()`
2021-04-26 23:13:22 +09:00
Yukihiro "Matz" Matsumoto f22535045a mruby.c: specify file names for libraries set by -r; fix #5427 2021-04-26 19:00:49 +09:00
Yukihiro "Matz" Matsumoto 14bd07f831 backtrace.c: skip innermost frame only when the method is in C; #5394 2021-04-26 16:46:44 +09:00
Yukihiro "Matz" Matsumoto b937463706 Merge pull request #5424 from dearblue/new_iseq
Fix annotations for inline iseq of `Class.new` [ci skip]
2021-04-26 14:29:46 +09:00
Yukihiro "Matz" Matsumoto 2ead8a0520 Merge pull request #5423 from dearblue/gc-red
Introduce `MRB_GC_RED`
2021-04-26 07:29:08 +09:00
Yukihiro "Matz" Matsumoto 8cd51578fb build_config/no-float.rb: unify two build configurations; #5421
- stop cross building
- add more gems for tests
- add `bintest`
2021-04-26 07:25:21 +09:00
Yukihiro "Matz" Matsumoto 767577efb1 Merge pull request #5422 from dearblue/binding1
Avoid ill-advised `goto`
2021-04-25 14:36:17 +09:00
dearblue c0cd004b21 Fix symbol leak in exc_to_s() 2021-04-25 10:49:33 +09:00
dearblue 8f66dd278b Fix annotations for inline iseq of Class.new [ci skip] 2021-04-24 21:31:50 +09:00
Yukihiro "Matz" Matsumoto 4d249c28d9 Skip tests that use Float inside; ref #5421 2021-04-24 12:04:08 +09:00
Yukihiro "Matz" Matsumoto f46b4056f8 numeric.c: remove duplicated definitions; #5421
Following functions are defined in `mrblib/numeric.c`:

- `Integer#ceil`
- `Integer#floor`
- `Integer#round`
- `Integer#truncate`
2021-04-24 11:56:50 +09:00
Yukihiro "Matz" Matsumoto 4b4622f711 time.c: fixable_time_t_p is not used with MRB_NO_FLOAT; #5421 2021-04-24 11:38:56 +09:00
Yukihiro "Matz" Matsumoto 237f3339bf random.c: refactoring; #5421
- `Random.rand` with `MRB_NO_FLOAT` behaves as `Random.rand(100)`
- `Random.rand(i)` where `i<0` raises `ArgumentError`
2021-04-24 11:15:53 +09:00
Yukihiro "Matz" Matsumoto 2e49a25740 build_config/nofloat.rb: build configuration with MRB_NO_FLOAT; #5421 2021-04-24 10:54:42 +09:00
dearblue 94c5c8f44c Introduce MRB_GC_RED
Replaces the magic number `7` except in `src/gc.c`.
2021-04-24 10:31:21 +09:00
Yukihiro "Matz" Matsumoto 90a59efbec numeric.c: fix errors from MRB_NO_FLOAT; close #5421 2021-04-24 10:23:40 +09:00
dearblue b18fd23cef Avoid ill-advised goto
ref #5362
2021-04-23 22:54:12 +09:00
Yukihiro "Matz" Matsumoto 39dc7b7901 vm.c: fix errors with MRB_NO_FLOAT; fix #5421 2021-04-23 11:28:17 +09:00
Yukihiro "Matz" Matsumoto dc88a87f9b time.c: time_t may be unsigned on some platforms. 2021-04-23 07:53:17 +09:00
Yukihiro "Matz" Matsumoto 1a82bab1b0 error.h: rename mrb_protect_raw to mrb_protect_error; #5415
- `_raw` does not describe the nature of the function
- the function protect errors during C function execution
2021-04-22 17:01:33 +09:00
Yukihiro "Matz" Matsumoto 91c4ac8d66 numeric.c: update error messages in int_pow; ref #5420 2021-04-21 22:08:07 +09:00
Yukihiro "Matz" Matsumoto 5cf1de5b31 numeric.c: fix int_pow to detect integer overflow; fix #5420 2021-04-21 22:05:52 +09:00
Yukihiro "Matz" Matsumoto 2268405fe6 test/math.rb: 10**30 could cause integer overflow; ref #5420 2021-04-21 22:04:20 +09:00
Yukihiro "Matz" Matsumoto bf11f87599 Merge pull request #5419 from shuujii/remove-unused-struct-in-include-mruby-variable.h
Remove unused struct in `include/mruby/variable.h`
2021-04-20 17:41:26 +09:00
Yukihiro "Matz" Matsumoto bd66115257 Merge pull request #5418 from shuujii/remove-unused--include-in-complex.c-and-rational.c
Remove unused `#include` in `complex.c` and `rational.c`
2021-04-20 17:41:01 +09:00
Yukihiro "Matz" Matsumoto ca744e77c4 Merge pull request #5417 from shuujii/remove-MRB_API-from-mrb_get_backtrace-definition
Remove `MRB_API` from `mrb_get_backtrace` definition
2021-04-20 17:40:33 +09:00
KOBAYASHI Shuji 903fbd767a Remove unused struct in include/mruby/variable.h 2021-04-20 16:53:11 +09:00
KOBAYASHI Shuji c6911c54e5 Remove unused #include in complex.c and rational.c 2021-04-20 16:42:40 +09:00
KOBAYASHI Shuji 0d8b025d9b Remove MRB_API from mrb_get_backtrace definition 2021-04-20 16:07:48 +09:00
Yukihiro "Matz" Matsumoto ff366b65eb Merge pull request #5415 from dearblue/unwind-mrb_protect
Introducing the `mrb_protect_raw()` API function
2021-04-19 22:34:20 +09:00
dearblue 891e852286 Introducing the mrb_protect_raw() API function
The purpose is two-fold:

 1. to be able to specify a pointer directly when user data is used

    When using `mrb_protect()`, it is necessary to allocate objects by `mrb_obj_cptr()` function when using user data.

    Adding `mrb_protect_raw()` will make it simpler to reimplement `mrbgems/mruby-error`.

 2. to correctly unwind callinfo when an exception is raised from a C function defined as a method (the main topic)

    If a method call is made directly under `mrb_protect()` and a C function is called, control is returned from `mrb_protect()` if an exception occurs there.
    In this case, callinfo is not restored, so it is out of sync.
    Moreover, returning to mruby VM (`mrb_vm_exec()` function) in this state will indicate `ci->pc` of C function which is equal to `NULL`, and subsequent `JUMP` will cause `SIGSEGV`.

    Following is an example that actually causes `SIGSEGV`:

    - `crash.c`

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

      static mrb_value
      level1_body(mrb_state *mrb, mrb_value self)
      {
        return mrb_funcall(mrb, self, "level2", 0);
      }

      static mrb_value
      level1(mrb_state *mrb, mrb_value self)
      {
        return mrb_protect(mrb, level1_body, self, NULL);
      }

      static mrb_value
      level2(mrb_state *mrb, mrb_value self)
      {
        mrb_raise(mrb, E_RUNTIME_ERROR, "error!");
        return mrb_nil_value();
      }

      int
      main(int argc, char *argv[])
      {
        mrb_state *mrb = mrb_open();
        mrb_define_method(mrb, mrb->object_class, "level1", level1, MRB_ARGS_NONE());
        mrb_define_method(mrb, mrb->object_class, "level2", level2, MRB_ARGS_NONE());
        mrb_p(mrb, mrb_load_string(mrb, "p level1"));
        mrb_close(mrb);
        return 0;
      }
      ```

    - compile & run

      ```console
      % `bin/mruby-config --cc --cflags --ldflags` crash.c `bin/mruby-config --libs`

      % ./a.out
      zsh: segmentation fault (core dumped)  ./a.out
      ```

    After applying this patch, it will print exception object and exit normally.

The `mrb_protect()`, `mrb_ensure()` and `mrb_rescue_exceptions()` in `mrbgems/mruby-error` have been rewritten using `mrb_protect_raw()`.
2021-04-19 22:11:57 +09:00
Yukihiro "Matz" Matsumoto 9d362f2c27 backtrace.c: remove MRB_API from internal functions.
- `mrb_exc_backtrace` to implement `Exception#backtrace`
- `mrb_get_backtrace` to implement `#caller`
2021-04-19 15:49:51 +09:00
Yukihiro "Matz" Matsumoto 13eba43100 backtrace.c: small refactoring in mrb_exc_backtrace(); ref #5394
- add comment for unpacking
- avoid saving the symbol in a local variable
2021-04-19 15:49:51 +09:00
Yukihiro "Matz" Matsumoto 2275e76262 backtrace.c: pedantic check for empty backtrace; ref #5394 2021-04-19 15:49:50 +09:00
Yukihiro "Matz" Matsumoto 85808e50b0 backtrace.c: should skip first (innermost) frame w/out position; #5394
Otherwise we suffer `(unknown):0:` errors.
2021-04-19 15:49:50 +09:00
Yukihiro "Matz" Matsumoto 049ec9056e time.c: add integer boundary check for year.
On configurations where `sizeof(mrb_int) > sizeof(int)`.
2021-04-19 15:49:50 +09:00
Yukihiro "Matz" Matsumoto 713fb53bbf Merge pull request #5414 from shuujii/mRubyPresym-no-longer-needs-RakeDSL
`MRuby::Presym` no longer needs `Rake::DSL`
2021-04-18 08:24:15 +09:00
Yukihiro "Matz" Matsumoto 737254588b array.rb: add Array#intersect? from Ruby3.0.1. 2021-04-17 17:38:44 +09:00
KOBAYASHI Shuji f0318aca23 MRuby::Presym no longer needs Rake::DSL 2021-04-17 16:42:08 +09:00
John Bampton 9d32d440eb feat(CI): add the GitHub Super Linter
The GitHub Super Linter is a more robust and better supported
tool than the current GitHub Actions we are using.

Running these checks:

ERROR_ON_MISSING_EXEC_BIT: true
VALIDATE_BASH: true
VALIDATE_BASH_EXEC: true
VALIDATE_EDITORCONFIG: true
VALIDATE_MARKDOWN: true
VALIDATE_SHELL_SHFMT: true
VALIDATE_YAML: true

https://github.com/marketplace/actions/super-linter
https://github.com/github/super-linter

Added the GitHub Super Linter badge to the README.

Also updated the pre-commit framework and added
more documentation on pre-commit.

Added one more pre-commit check: check-executables-have-shebangs

Added one extra check for merge conflicts to our
GitHub Actions.

EditorConfig and Markdown linting.

Minor grammar and spelling fixes.

Update linter.yml
2021-04-16 16:37:52 +09:00
Yukihiro "Matz" Matsumoto ac9038121b Merge pull request #5413 from shuujii/fix-enable_debug_info-in-mrbgems-mruby-proc-ext-test-proc.rb
Fix `enable_debug_info?` in `mrbgems/mruby-proc-ext/test/proc.rb`
2021-04-15 16:55:43 +09:00
KOBAYASHI Shuji 35b2798a5d Fix enable_debug_info? in mrbgems/mruby-proc-ext/test/proc.rb 2021-04-15 15:49:23 +09:00
Yukihiro "Matz" Matsumoto 3c5467af63 Merge pull request #5411 from artichoke/mrb_protect_atexit_prototype_mismatch
Fix incorrect prototype on declaration of mrb_protect_atexit
2021-04-14 07:27:12 +09:00
Yukihiro "Matz" Matsumoto 5a8f0bdaf2 Merge pull request #5410 from mruby/dependabot/github_actions/actions/cache-v2.1.5
build(deps): bump actions/cache from v2.1.4 to v2.1.5
2021-04-14 07:25:07 +09:00
Ryan Lopopolo 7fe6f3976e Fix incorrect prototype on declaration of mrb_protect_atexit
`state.c` makes a prototype declaration for the private
`mrb_protect_atexit` which is defined in `error.c`. `error.c` defines
this function with a void return type, but `state.c` defines the
prototype with an `int` return type.

This mismatch prevents mruby from compiling on stricter compilers like
emscripten.
2021-04-13 07:57:09 -07:00
dependabot[bot] 99bd84e76b build(deps): bump actions/cache from v2.1.4 to v2.1.5
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-13 07:16:35 +00:00
Yukihiro "Matz" Matsumoto 1a3846b492 mrbgem.rake: avoid implicit receivers in mrbgem.rake. 2021-04-13 07:35:39 +09:00
Yukihiro "Matz" Matsumoto dd89a618b3 mruby-io: fix IO#ungetbyte; ref #5389
- remove `Integer#chr` (thus `mruby-sting-ext`) dependency
- fix the behavior when `c.is_a? String`
- fix the behavior when `c > 255`
2021-04-13 07:24:56 +09:00
Yukihiro "Matz" Matsumoto 9a9c842cb0 Rakefile: remove GitLab configuration; close #5409
This CI could consume too much CPU time on GitLab. Maybe we should add
resource concious CI configuration on GitLab.
2021-04-13 07:16:21 +09:00
Yukihiro "Matz" Matsumoto 475fc6ed26 AUTHORS: update authors information as of 2021-04-12. 2021-04-12 19:04:57 +09:00
Yukihiro "Matz" Matsumoto ff2ffe3b07 proc.h: add type cast to silence warning; ref #5402 2021-04-12 15:21:54 +09:00
Yukihiro "Matz" Matsumoto 2cb9a0653a Merge branch 'io_getbyte' close #5389 2021-04-10 19:08:51 +09:00
Yukihiro "Matz" Matsumoto 5cac9c8478 io.rb: fix IO#getbyte to work with UTF-8 characters; ref #5389 2021-04-10 19:08:15 +09:00
Yukihiro "Matz" Matsumoto 8fa1ff9a03 io.rb: add IO#readbyte; ref #5389 2021-04-10 19:08:15 +09:00
Yukihiro "Matz" Matsumoto 167e0b3f4f io.c: add assertions to mrb_io_bufread(); ref #5389 2021-04-10 19:08:14 +09:00
Yukihiro "Matz" Matsumoto 5342b5cfef io.rb: @buf should be empty on EOF; #4983, #5389 2021-04-10 19:08:14 +09:00
take-cheeze bf455fd582 Add IO#getbyte 2021-04-10 19:08:14 +09:00
Yukihiro "Matz" Matsumoto 44d5e214cc Rename some internal functions; ref #5401 2021-04-10 17:33:50 +09:00
Yukihiro "Matz" Matsumoto f7493b73cb Merge pull request #5400 from jbampton/fix-spelling
chore: fix spelling
2021-04-09 22:07:50 +09:00
Yukihiro "Matz" Matsumoto c2c37e1451 Merge pull request #5401 from dearblue/mcall
Reorganize `mcall()` in `mruby-method`
2021-04-09 21:46:09 +09:00
Yukihiro "Matz" Matsumoto 6d3c022749 mruby-config.bat: update as the shell version. [ci skip] 2021-04-08 07:32:35 +09:00
Yukihiro "Matz" Matsumoto cbe061c2f4 codeql-analysis.yml: remove git checkout HEAD^2.
According to CodeQL instruction, `HEAD^2` is no longer needed.
2021-04-08 07:32:34 +09:00
Yukihiro "Matz" Matsumoto 77405e11b6 Merge pull request #5407 from mruby/dependabot/github_actions/actions/upload-artifact-v2.2.3
build(deps): bump actions/upload-artifact from v2.2.2 to v2.2.3
2021-04-07 16:22:08 +09:00
dependabot[bot] 2544e7f0d1 build(deps): bump actions/upload-artifact from v2.2.2 to v2.2.3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from v2.2.2 to v2.2.3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2.2.2...ee69f02b3dfdecd58bb31b4d133da38ba6fe3700)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-07 07:12:15 +00:00
Yukihiro "Matz" Matsumoto fa2ad34792 Removing trailing white spaces; ref #5406 [ci skip] 2021-04-07 11:02:47 +09:00
Yukihiro "Matz" Matsumoto 32ae96af1f Merge pull request #5406 from sizious/dreamcast-shelf-build-config-update
Updating dreamcast_shelf build configuration.
2021-04-07 11:00:51 +09:00
SiZiOUS 03f7e88ee9 dreamcast_shelf: typo fix. 2021-04-06 20:49:03 +02:00
SiZiOUS 7ad2827900 Updating dreamcast_shelf build configuration. 2021-04-06 17:30:02 +02:00
Yukihiro "Matz" Matsumoto 71bf362a5b doc/link.md: update mruby-config description. 2021-04-06 17:25:54 +09:00
Yukihiro "Matz" Matsumoto 58ab97e300 mruby-config: add --cc and --ld options.
* `--cc` print compiler name
* `--ld` print linker name
2021-04-06 17:25:53 +09:00
Yukihiro "Matz" Matsumoto e19346fd8b Merge pull request #5405 from shuujii/fix-heading-level-in-doc-guides-link.md
Fix heading level in `doc/guides/link.md` [ci skip]
2021-04-06 13:14:34 +09:00
Yukihiro "Matz" Matsumoto 339216b5ec Merge pull request #5404 from shuujii/fix-typo-in-doc-guides-link.md
Fix typo in `doc/guides/link.md` [ci skip]
2021-04-06 12:52:14 +09:00
KOBAYASHI Shuji 6844ef7131 Fix heading level in doc/guides/link.md [ci skip] 2021-04-06 12:52:07 +09:00
KOBAYASHI Shuji 516756d538 Fix typo in doc/guides/link.md [ci skip] 2021-04-06 12:44:58 +09:00
Yukihiro "Matz" Matsumoto 1f03d34fd7 link.md: add new document for linking libmruby; ref #5393 2021-04-05 22:26:15 +09:00
Yukihiro "Matz" Matsumoto 27d3747faa Merge pull request #5402 from dearblue/catch1
Making a proc object static for a method with static irep
2021-04-04 17:56:25 +09:00
dearblue caeacea86e Making a proc object static for a method with static irep
The following methods will be made static.

  - `Class#new`
  - `Proc#call`
  - `Kernel#catch`

Previously, static const RProc could not be registered as a method, but this has been changed to allow it.
2021-04-04 15:44:19 +09:00
dearblue 4c196dcdaa Reorganize mcall() in mruby-method.
Use `mrb_exec_irep()`. If possible, re-entry into the VM will be suppressed.

Note that due to the effect of being a tail-call, the backtrace of `Method#call` will be lost, and it will look as if the target method was called directly.

This change fixes the problem of infinite loops when redefining methods that make block calls using `mruby-method`.

```console
% bin/mruby -e 'mm = method(:proc); define_method(:proc, ->(*a, &b) { mm.call(*a, &b) }); p proc { 1 }'
trace (most recent call last):
        [257] -e:1
        [256] -e:1:in proc
        [255] -e:1:in proc
        ...SNIP...
        [1] -e:1:in proc
-e:1:in proc: stack level too deep (SystemStackError)
```
2021-04-03 21:20:59 +09:00
dearblue dd34ac647f Make mrb_exec_irep() allow non-VM to enter.
Change the old `mrb_exec_irep()` as-is to static `mrb_exec_irep_vm()`.
Extract the VM entry part from the old `exec_irep()` in `mruby-eval/src/eval.c` and make it the core of the new `mrb_exec_irep()`.
2021-04-03 21:17:48 +09:00
John Bampton d8622fc68b chore: fix spelling 2021-04-03 19:51:01 +10:00
Yukihiro "Matz" Matsumoto fb8e12f37c Merge pull request #5397 from dearblue/c++dump
Fix build failures with `enable_debug` and `enable_cxx_abi`
2021-04-03 18:44:17 +09:00
Yukihiro "Matz" Matsumoto 474ec3e5c6 Merge pull request #5398 from jbampton/fix-authors-link
Fix the Authors link in the README
2021-04-03 17:58:30 +09:00
Yukihiro "Matz" Matsumoto 7561bed32a Merge pull request #5399 from jbampton/fix-spelling
chore: fix spelling
2021-04-03 17:57:08 +09:00
John Bampton ce2b8aa05e chore: fix spelling 2021-04-03 18:14:25 +10:00
John Bampton 049c1d0a45 Fix the Authors link in the README 2021-04-03 17:43:04 +10:00
dearblue 3e48f4eebc Fix build failures with enable_debug and enable_cxx_abi
Under C++, there is no implicit conversion from `int` to `enum`, which caused a compilation error.
2021-04-03 16:22:40 +09:00
Yukihiro "Matz" Matsumoto aca59de88e Merge branch 'shuujii-define-MRB_NO_GEMS-if-disable_libmruby-is-specified' 2021-04-02 07:55:43 +09:00
Yukihiro "Matz" Matsumoto ade9368510 Merge branch 'define-MRB_NO_GEMS-if-disable_libmruby-is-specified' of https://github.com/shuujii/mruby into shuujii-define-MRB_NO_GEMS-if-disable_libmruby-is-specified 2021-04-02 07:53:27 +09:00
Yukihiro "Matz" Matsumoto f68c0d092c Merge pull request #5396 from shuujii/fix-build-with-MRB_USE_ALL_SYMBOLS
Fix build with `MRB_USE_ALL_SYMBOLS`
2021-04-02 07:44:14 +09:00
Yukihiro "Matz" Matsumoto bda242a135 vm.c: change the default error message for undefined super method.
- (old) `undefined method 'foo'`
- (new) `no superclass method 'foo'`
2021-04-01 08:42:30 +09:00
KOBAYASHI Shuji 4309a5b1f4 Fix build with MRB_USE_ALL_SYMBOLS 2021-03-31 19:10:39 +09:00
Yukihiro "Matz" Matsumoto d5a4d5e393 codegen.c: s->ainfo should be zero along with OP_ENTER(0). 2021-03-31 17:20:14 +09:00
Yukihiro "Matz" Matsumoto 9f85c5e483 codegen.c: yield outside of method is now SyntaxError. 2021-03-31 15:57:43 +09:00
Yukihiro "Matz" Matsumoto a7ca5a9b6e backtrace.c: change missing-lineno to 0 for cosmetic reason; #5394 2021-03-31 15:41:19 +09:00
Yukihiro "Matz" Matsumoto f2da051367 Merge pull request #5394 from fundamental/partial-backtrace
Add support for partial backtraces
2021-03-31 15:39:47 +09:00
Yukihiro "Matz" Matsumoto b7c23a4a14 vm.c: resolve int and mrb_int mixture. 2021-03-31 11:46:21 +09:00
Yukihiro "Matz" Matsumoto 9038a1ca40 rational.c: add explicit cast from mrb_int to mrb_float. 2021-03-31 11:39:59 +09:00
Yukihiro "Matz" Matsumoto 590c1073fc should have removed codegen error: prefix from the test. 2021-03-31 11:35:56 +09:00
Yukihiro "Matz" Matsumoto cb8dabeb8c codegen.c: remove codegen error: prefix from error messages. 2021-03-31 10:48:18 +09:00
Yukihiro "Matz" Matsumoto 4428ce6050 codegen.c: ainfo may be negative.
When argument information is not available. So it should not happen for
`yield` (error). In contrast, the error from `super` should be handled
in run time (ignored).
2021-03-31 10:48:17 +09:00
Yukihiro "Matz" Matsumoto 87f113e19d Merge pull request #5395 from fundamental/mrbc-debug-cstruct
mrbc: Dump debug info with -g option
2021-03-31 10:48:01 +09:00
fundamental c146e81c4a Disable tests on backtraces w/ unknown line numbers 2021-03-30 20:26:10 -04:00
fundamental 5266f76346 mrbc: Dump debug info with -g option
Adds debug source information (line/file) when mrbc uses -g.
This commit results in usable backtraces for all gems when build_config
is setup with enable_debug.
2021-03-30 19:26:12 -04:00
fundamental 49f0da6821 Add support for partial backtraces
When debug information is omitted within ireps, show that a stack
frame existed rather than silently hiding it.
2021-03-30 19:16:15 -04:00
Yukihiro "Matz" Matsumoto a963e29b67 src/vm.c: calling C function may raise global jumps; fix #5391 2021-03-29 17:28:32 +09:00
Yukihiro "Matz" Matsumoto 3c2186f050 Merge pull request #5392 from mruby/revert-5391-throw
Revert "Fix `SIGSEGV` with mruby-method + mruby-catch"
2021-03-29 17:27:17 +09:00
Yukihiro "Matz" Matsumoto 4d3a1198f8 Revert "Fix SIGSEGV with mruby-method + mruby-catch" 2021-03-29 17:26:42 +09:00
Yukihiro "Matz" Matsumoto 76e4de7486 Merge pull request #5391 from dearblue/throw
Fix `SIGSEGV` with mruby-method + mruby-catch
2021-03-29 17:11:21 +09:00
Yukihiro "Matz" Matsumoto a5244b02c5 numeric.c: function renaming.
- `mrb_num_div_int(mrb,x,y)` -> `mrb_div_int(mrb,x,y)`
- `mrb_num_div_flo(mrb,x,y)` -> `mrb_div_flo(x,y)`

They are internal function not supposed to be used outside of the core.
2021-03-28 08:35:29 +09:00
dearblue 6c097c7113 Fix SIGSEGV with mruby-method + mruby-catch
Previously, the following code would cause a `SIGSEGV`.

```ruby
mm = method(:throw)
define_method(:throw, ->(*args) { mm.call(*args) })
catch { |tag| throw tag }
```

I think the reason is in the `mrb_yield_with_class()` function:
- Even if a C function is called, `CI_ACC_SKIP` is used
- `cipop()` is not done if globally jumping from a C function
2021-03-27 17:35:02 +09:00
Yukihiro "Matz" Matsumoto c2f929ad0f Move default Integer#/ from rational.c to complex.c. 2021-03-27 12:38:16 +09:00
Yukihiro "Matz" Matsumoto 01a8edea35 complex.rb: add test for arithmetic operators. [ci skip]
Tests for (`Float` or `Integer`) `op` `Complex`. Also added test
dependency to `mruby-rational` since `int_div` definition relies on
`Rational` when `MRB_USE_RATIONAL` is defined.
2021-03-26 17:20:25 +09:00
Yukihiro "Matz" Matsumoto 9492e389b8 rational.rb: add test for arithmetic operators.
Tests for (`Float` or `Integer`) `op` `Rational`.
2021-03-26 07:37:50 +09:00
Yukihiro "Matz" Matsumoto 6d89047637 rational.c: fix wrong funcall method in rational_mul. 2021-03-25 22:31:32 +09:00
Yukihiro "Matz" Matsumoto 0aff83dcdc rational.c: inline mrb_rational_eq().
It removes non-static function, so that strictly saying, it's
an incompatible change. But the function was added recently and I am
sure no one uses it yet.
2021-03-25 08:28:41 +09:00
Yukihiro "Matz" Matsumoto 4a0c14e3bd rational.c: implement Rational#<=> in C. 2021-03-24 19:49:20 +09:00
Yukihiro "Matz" Matsumoto 3a2075343c rational.c: implement Rational#/ and #quo in C. 2021-03-24 19:21:38 +09:00
Yukihiro "Matz" Matsumoto f05f6f4d11 rational.c: implement Rational#* in C. 2021-03-24 19:11:02 +09:00
Yukihiro "Matz" Matsumoto 9d058342a5 rational.c: implement Rational#- in C. 2021-03-24 19:01:58 +09:00
Yukihiro "Matz" Matsumoto 7a35b64251 fixup! rational.c: prepare utility function rat_to_flo(). 2021-03-24 19:01:38 +09:00
Yukihiro "Matz" Matsumoto ac4fe26fbb rational.c: prepare utility function rat_to_flo().
This function takes `struct mrb_rational*` and returns converted
`mrb_float` value.
2021-03-24 18:59:35 +09:00
Yukihiro "Matz" Matsumoto 7ca7bee9b3 rational.c: implement Rational#+ in C. 2021-03-24 13:57:49 +09:00
Yukihiro "Matz" Matsumoto 5a4958af26 complex.c: use mrb_num_div_flo to avoid copying function.
This change relies that `mrb_num_div_flo` does not use `mrb` inside.
2021-03-24 13:56:08 +09:00
Yukihiro "Matz" Matsumoto 092bba64e7 rational.c: check integer overflow in rational_minus. 2021-03-24 13:28:01 +09:00
Yukihiro "Matz" Matsumoto 49f75703cc complex.rb: unary plus (+@) to return self avoiding copying. 2021-03-24 11:06:48 +09:00
Yukihiro "Matz" Matsumoto 9ed212ef9e complex.c: implement Complex addition and subtraction in C. 2021-03-24 11:06:14 +09:00
Yukihiro "Matz" Matsumoto fa3ac351ff complex.c: override float division to support Complex. 2021-03-24 11:04:58 +09:00
Yukihiro "Matz" Matsumoto afb3c00e8c Use div_flo (copy of mrb_num_div_flo) for float division. 2021-03-24 10:56:01 +09:00
Yukihiro "Matz" Matsumoto ec456e5b18 Use mrb_num_div_flo for float division.
This function handles zero division properly. Also fixed bugs that multiply
numbers instead of division.
2021-03-24 10:54:24 +09:00
Yukihiro "Matz" Matsumoto 98799aa6b8 Fix infinite recursive call bugs in integer division. 2021-03-24 10:52:31 +09:00
Yukihiro "Matz" Matsumoto 3deb62d653 complex.c: implement Complex#/ and #quo in C. 2021-03-24 10:27:49 +09:00
Yukihiro "Matz" Matsumoto 5573707d7f complex.c: implement Complex#* in C. 2021-03-24 09:53:39 +09:00
Yukihiro "Matz" Matsumoto dc5d74dda8 rational.rb: avoid 'NaNi` representation.
Use `NaN*i` as CRuby does.
2021-03-24 09:52:15 +09:00
Yukihiro "Matz" Matsumoto 6e1a13360f Add `timeout-minutes' to GitHub workflow. [ci skip] 2021-03-23 15:02:48 +09:00
Yukihiro "Matz" Matsumoto 30576bf3c6 Merge pull request #5387 from shuujii/use-global-defines-for-mruby-bin-debugger
Use global defines for `mruby-bin-debugger`
2021-03-22 12:43:58 +09:00
Yukihiro "Matz" Matsumoto 2e87d83d8d Merge pull request #5388 from shuujii/reorganize-types-for-ObjectSpace.count_objects
Reorganize types for `ObjectSpace.count_objects`
2021-03-22 12:43:13 +09:00
Yukihiro "Matz" Matsumoto 7479ae307b nintendo_switch.rb: remove trailing white spaces; #5386 2021-03-22 12:39:48 +09:00
KOBAYASHI Shuji c0fb675526 Reorganize types for ObjectSpace.count_objects
#### Addition

- T_COMPLEX
- T_RATIONAL

#### Deletion

- T_FALSE
- T_FREE
- T_TRUE
- T_SYMBOL
- T_UNDEF
2021-03-22 12:24:42 +09:00
Yukihiro "Matz" Matsumoto dc6e7d5414 Merge pull request #5386 from LanzaSchneider/master
Add example for cross-compiling to Nintendo Switch
2021-03-22 12:06:59 +09:00
Yukihiro "Matz" Matsumoto cd047b2989 Merge pull request #5385 from shuujii/add-configuration-for-MinGW-cross-compilation
Add configuration for MinGW cross compilation [ci skip]
2021-03-22 12:05:03 +09:00
KOBAYASHI Shuji 00a13e22dd Use global defines for mruby-bin-debugger 2021-03-22 12:02:26 +09:00
Yukihiro "Matz" Matsumoto 68cf8346cd Use global defines for Rational and Complex. 2021-03-22 10:59:35 +09:00
Yukihiro "Matz" Matsumoto 384865997d build: provide global defines by build.defines. 2021-03-22 10:58:47 +09:00
Yukihiro "Matz" Matsumoto fbc629c56f codegen.c: fix integer size warnings.
along with repeated calls of `strlen()`.
2021-03-22 10:57:36 +09:00
Lanza ad09c39514 Add example for cross-compiling to Nintendo Switch
Cross Compiling configuration for the Nintendo Switch, it requires Nintendo SDK
2021-03-21 16:58:42 +08:00
KOBAYASHI Shuji b2c3ab8f3f Add configuration for MinGW cross compilation [ci skip]
With this cross compiler configuration, all tests for full-core gembox on
Windows on GitHub Actions were successful.
2021-03-21 16:43:04 +09:00
Yukihiro "Matz" Matsumoto 5764ff0740 command.rb: replace %w() to plain []. 2021-03-21 13:23:35 +09:00
Yukihiro "Matz" Matsumoto 73056aeb2b complex.c: define Complex#== in C.
This change also fixes the error caused by `rational.c` that calls
`mrb_complex_eq()`, which had been undefined.
2021-03-21 08:30:52 +09:00
Yukihiro "Matz" Matsumoto a6d4477a09 memsize.c: handle MRB_TT_RATIONAL and MRB_TT_COMPLEX. 2021-03-21 08:29:05 +09:00
Yukihiro "Matz" Matsumoto e21f293de5 rational.c: fix MRB_TT_RATIONAL and MRB_TT_COMPLEX confusion. 2021-03-20 18:03:11 +09:00
Yukihiro "Matz" Matsumoto 98821d2725 random.c: fixed seed underflow bug.
`MRB_INT_MIN` does not have a corresponding positive value.
2021-03-20 14:40:54 +09:00
Yukihiro "Matz" Matsumoto d3184e4a6d complex.c: overhaul complex operators.
- define `MRB_TT_COMPLEX`
- change object structure (`struct RComplex`)
- add memory management for `MRB_TT_COMPLEX`
- avoid operator overloading as much as possible
- as a result, performance improved a log
- should work with and without `Rational` defined
2021-03-19 10:37:10 +09:00
Yukihiro "Matz" Matsumoto 08f9d5bab5 rational.c: overhaul rational operators.
- define `MRB_TT_RATIONAL`
- change object structure (`struct RRational`)
- add memory management for `MRB_TT_RATIONAL`
- avoid operator overloading as much as possible
- implement division overloading in C
- as a result, performance improved a lot
2021-03-19 10:37:10 +09:00
Yukihiro "Matz" Matsumoto eb07030308 numeric.c: avoid integer overflow; close #5384
Since `mruby` does not have `Bignum`, `Float#divmod` could overflow, so
it will return `Float` values when the divided value does not fit in
`mrb_int`. This behavior will be changed when `Bignum` is introduced to
`mruby` in the future.
2021-03-19 07:15:05 +09:00
Yukihiro "Matz" Matsumoto 087e1719e4 Float#divmod with zero should cause ZeroDivisionError; #5384 2021-03-19 07:13:19 +09:00
Yukihiro "Matz" Matsumoto 0d96c1bb40 Merge branch 'dearblue-break-in-conf' 2021-03-18 22:48:11 +09:00
Yukihiro "Matz" Matsumoto 0e4f438eca lib/mruby/build.rb: refactoring ensure clause; ref #5381 2021-03-18 22:47:00 +09:00
Yukihiro "Matz" Matsumoto 99f00de040 Merge branch 'break-in-conf' of https://github.com/dearblue/mruby into dearblue-break-in-conf 2021-03-18 22:34:31 +09:00
Yukihiro "Matz" Matsumoto e5a3a37ae9 Merge pull request #5383 from shuujii/floatNAN-0-should-be-FloatNAN
`Float::NAN/0` should be `Float::NAN`; ref a0b3378b3
2021-03-18 20:54:56 +09:00
KOBAYASHI Shuji 6731f935cc Float::NAN/0 should be Float::NAN; ref a0b3378b3
#### Before this patch:

```console
$ bin/mruby -e 'p(Float::NAN/0)'
Infinity
```

#### After this patch (same as Ruby):

```console
$ bin/mruby -e 'p(Float::NAN/0)'
NaN
```
2021-03-18 17:10:51 +09:00
Yukihiro "Matz" Matsumoto a0b3378b36 numeric.c: float zero division should be infinity with sign kept; fix #5382 2021-03-18 15:24:31 +09:00
dearblue 199bbd73a3 Allow break in build_config.
If I break out of a block given to `MRuby::Build.new` with `break` or `throw`, I will get a seemingly inexplicable error because the `presym`-related initialization is not done.

```console
% cat build_config1.rb
MRuby::Build.new do
  toolchain
  break
end

% rake CONFIG=build_config1.rb
rake aborted!
external mrbc or mruby-bin-mrbc gem in current('host') or 'host' build is required
/var/tmp/mruby/lib/mruby/build.rb:332:in `mrbcfile'
/var/tmp/mruby/tasks/mrblib.rake:9:in `block in <top (required)>'
/var/tmp/mruby/lib/mruby/build.rb:18:in `instance_eval'
/var/tmp/mruby/lib/mruby/build.rb:18:in `block in each_target'
/var/tmp/mruby/lib/mruby/build.rb:17:in `each'
/var/tmp/mruby/lib/mruby/build.rb:17:in `each_target'
/var/tmp/mruby/tasks/mrblib.rake:1:in `<top (required)>'
/var/tmp/mruby/Rakefile:27:in `load'
/var/tmp/mruby/Rakefile:27:in `<top (required)>'
(See full trace by running task with --trace)
```

If a non-exceptional global jump occurs, it can be initialized by `ensure` to solve this problem.
2021-03-17 23:01:52 +09:00
Yukihiro "Matz" Matsumoto c0d63ea09f hash.c: Hash#shift to return nil when a hash is empty.
It used to be return the default value if available, but it should
ignore the default value for behavior consistency. CRuby will adopt
this behavior too in the future. [ruby-bugs:16908]
2021-03-17 15:14:23 +09:00
Yukihiro "Matz" Matsumoto 75ae3d3e23 range.c: fixed a begin-less ranges issue. 2021-03-17 09:48:27 +09:00
Yukihiro "Matz" Matsumoto 80f6b14ac1 AUTHORS: add the commit hash as of we counted. 2021-03-16 19:32:08 +09:00
Yukihiro "Matz" Matsumoto f576482082 Merge pull request #5379 from shuujii/fix-typo-in-AUTHORS
Fix typo in `AUTHORS` [ci skip]
2021-03-15 12:41:33 +09:00
KOBAYASHI Shuji def2ba56fd Fix typo in AUTHORS [ci skip] 2021-03-15 12:29:30 +09:00
Yukihiro "Matz" Matsumoto 266eccdf91 AUTHOR: fixed typos. 2021-03-15 11:57:49 +09:00
Yukihiro "Matz" Matsumoto d433a4e825 AUTHORS: add 2 new GitHub accounts. 2021-03-15 11:23:41 +09:00
Yukihiro "Matz" Matsumoto a3e73de2ba AUTHORS: re-renamed from AUTHOR.md. 2021-03-15 11:03:26 +09:00
Yukihiro "Matz" Matsumoto 5158b73ab4 AUTHORS.md: add GitHub accounts if available. 2021-03-15 10:32:55 +09:00
Yukihiro "Matz" Matsumoto be2bdce17d Remove mail addresses from AUTHORS.md. 2021-03-14 19:14:43 +09:00
Yukihiro "Matz" Matsumoto bf524e7002 time.c: calendar clock should use CLOCK_REALTIME; 5e95f11
The issue was reported by @shuujii
2021-03-14 14:54:53 +09:00
Yukihiro "Matz" Matsumoto f92a27f918 codegen.c: fix memory leak from new_litbn(). 2021-03-13 09:33:16 +09:00
Yukihiro "Matz" Matsumoto bf2110d206 codegen.c: need to preserve neg info. 2021-03-12 18:34:29 +09:00
Yukihiro "Matz" Matsumoto 01fdf03bce codegen.c: fixed a typo. 2021-03-12 18:34:09 +09:00
Yukihiro "Matz" Matsumoto b52078aa92 codegen.c: avoid integer comparison of different sign. 2021-03-12 16:26:51 +09:00
Yukihiro "Matz" Matsumoto 4ae5ae3535 codegen.c: no integer overflow error in codegen; close #5376
Add new pool value type `IREP_TT_BIGINT` and generate integer overflow
error in the VM. In the future, `mruby` will support `Bignum` for
integers bigger than `mrb_int` (probably using `mpz`).
2021-03-12 16:21:32 +09:00
Yukihiro "Matz" Matsumoto 84e27d3b51 Rename AUTHORS to AUTHORS.md. 2021-03-11 10:37:48 +09:00
Yukihiro "Matz" Matsumoto c45fc556f5 AUTHORS: update according to git log commit entries. 2021-03-11 10:34:10 +09:00
Yukihiro "Matz" Matsumoto 14f531355f Use relative path for files under doc directory [ci skip] 2021-03-10 18:39:21 +09:00
Yukihiro "Matz" Matsumoto a62a07f40e Merge pull request #5375 from artichoke/mrb_cmp-presym-op-maro
bug(presym): Fix mrb_cmp declaration of <=> symbol for funcall
2021-03-09 16:09:58 +09:00
Yukihiro "Matz" Matsumoto adbdbbb779 Merge pull request #5378 from jbampton/update-node-version
chore: upgrade markdownlint GitHub Action node version to 14
2021-03-09 15:29:21 +09:00
Yukihiro "Matz" Matsumoto 405b5225ae Merge pull request #5377 from jbampton/fix-grammar
chore: fix grammar
2021-03-09 15:03:35 +09:00
John Bampton 32261c96fa chore: upgrade markdownlint GitHub Action node version to 14
Upgrade to  markdownlint-cli version 0.27.1
2021-03-09 05:05:17 +10:00
John Bampton 3c1ce680a3 chore: fix grammar 2021-03-09 04:35:03 +10:00
Yukihiro "Matz" Matsumoto f2b3529441 time.c: fix errors on Windows and macOS; ref #5354
`gmtime_r` detection logic was too strict.
2021-03-08 15:23:29 +09:00
Ryan Lopopolo b199f6fc5a bug(presym): Fix mrb_cmp declaration of <=> symbol for funcall 2021-03-07 21:29:11 -08:00
Yukihiro "Matz" Matsumoto cb3a6dd168 ISO C99 doesn't support unnamed unions; fix #5354 2021-03-08 11:50:52 +09:00
Yukihiro "Matz" Matsumoto 833f556c70 Merge pull request #5374 from jbampton/fix-spelling
chore: fix spelling
2021-03-07 18:12:16 +09:00
John Bampton 15f7b0182d chore: fix spelling 2021-03-07 04:58:15 +10:00
Yukihiro "Matz" Matsumoto 111e4e1ba8 Merge pull request #5373 from mruby/stable
Merge mruby 3.0.0
2021-03-05 17:36:12 +09:00
Yukihiro "Matz" Matsumoto a712755036 Merge pull request #5372 from shuujii/fix-load-64-bit-integer-from-mrb-format
Fix load 64-bit integer from mrb format; fix #5369
2021-03-05 14:39:42 +09:00
KOBAYASHI Shuji cb10469dee Fix load 64-bit integer from mrb format; fix #5369 2021-03-05 13:41:13 +09:00
Yukihiro "Matz" Matsumoto 25f604635d Merge pull request #5371 from shuujii/update-minimal-build-configuration
Update minimal build configuration [ci skip]
2021-03-04 22:47:09 +09:00
Yukihiro "Matz" Matsumoto 32f66d4616 Merge pull request #5370 from shuujii/remove-unused-mrblib-init_mrblib.c
Remove unused `mrblib/init_mrblib.c`
2021-03-04 22:46:09 +09:00
KOBAYASHI Shuji 5296e0f5af Update minimal build configuration [ci skip] 2021-03-04 22:18:26 +09:00
KOBAYASHI Shuji c065002b51 Remove unused mrblib/init_mrblib.c 2021-03-04 21:54:00 +09:00
Yukihiro "Matz" Matsumoto 2f335e1a58 Fix mrb_pool_value to keep int64 on 32 bit platforms; fix #5366 2021-03-04 17:17:13 +09:00
Yukihiro "Matz" Matsumoto 2be1a9c3c7 time.c: timespec_get() never fails. 2021-03-03 12:01:49 +09:00
Yukihiro "Matz" Matsumoto 42afafbd23 time.c: fixed wrong condition to include unistd.h. 2021-03-03 10:15:50 +09:00
Yukihiro "Matz" Matsumoto 79e2ad9a44 time.c: Windows does not have unistd.h. 2021-03-03 10:01:32 +09:00
Yukihiro "Matz" Matsumoto 5e95f11756 time.c: use clock_gettime() if possible. 2021-03-03 09:53:11 +09:00
Yukihiro "Matz" Matsumoto 0c631a4c08 time.c: adjust buffer size in mrb_time_asctime(). 2021-03-03 09:52:26 +09:00
Yukihiro "Matz" Matsumoto 384209b8dd time.c: fix compile errors in mrb_time_asctime(). 2021-03-03 09:51:27 +09:00
Yukihiro "Matz" Matsumoto 187384124b Merge pull request #5368 from jbampton/add-pre-commit-framework
feat: add pre-commit framework
2021-03-02 16:53:33 +09:00
Yukihiro "Matz" Matsumoto 55ac5dba86 dump.c: remove operator_table if MRB_NO_STDIO is defined. 2021-03-01 14:57:58 +09:00
Yukihiro "Matz" Matsumoto 37e206472a minimal.rb: add minimal configuration; ref #1225 2021-03-01 14:54:29 +09:00
Yukihiro "Matz" Matsumoto f3507818e7 binding-core.c: add cast to remove warnings; ref #5362 2021-03-01 11:38:30 +09:00
Yukihiro "Matz" Matsumoto 935a135553 time.c: fixed a bug on no builtin overflow (e.g. VC). 2021-03-01 11:35:15 +09:00
John Bampton 1c9b1bfeb7 feat: add pre-commit framework 2021-03-01 10:06:17 +10:00
Yukihiro "Matz" Matsumoto 65add8c650 time.c: avoid using mrb_int_{add,sub}_overflow().
The size and signedness of `mrb_int` and `time_t` may differ.
2021-03-01 07:58:14 +09:00
Yukihiro "Matz" Matsumoto eb68adafa1 Merge pull request #5367 from dearblue/libedit
Support libedit on mirb for FreeBSD
2021-02-28 20:26:33 +09:00
Yukihiro "Matz" Matsumoto 03eb3b5e87 time.c: check overflow in addition and subtraction of Time. 2021-02-28 19:33:57 +09:00
Yukihiro "Matz" Matsumoto 8684abd697 Remove periods from error messages according to the convention. 2021-02-28 19:32:52 +09:00
Yukihiro "Matz" Matsumoto b61766473b time.c: change RuntimeError to ArgumentError. 2021-02-28 19:26:40 +09:00
dearblue 15a7d5be3d Support libedit on mirb for FreeBSD 2021-02-28 16:23:37 +09:00
Yukihiro "Matz" Matsumoto 4dbbe14117 state.c: remove stdint.h inclusion.
Fixes C++03 compilation.
2021-02-27 16:40:05 +09:00
Yukihiro "Matz" Matsumoto 3da372b30f pack.c: add more checks for pack_pack(). 2021-02-27 12:00:24 +09:00
Yukihiro "Matz" Matsumoto 30b1287df5 state.c: check irep reference count overflow. 2021-02-26 22:16:07 +09:00
Yukihiro "Matz" Matsumoto 5d37160455 Use MRB_SYM() more extensively. 2021-02-26 15:05:55 +09:00
Yukihiro "Matz" Matsumoto 192f3df9a1 Merge pull request #5362 from dearblue/binding
Binding
2021-02-25 21:15:24 +09:00
Yukihiro "Matz" Matsumoto f1c2096f8e parse.y: endless_method_name should allow ==.
e.g. `def ==(v) = true`. The issue is reported by @shuujii
2021-02-24 22:20:16 +09:00
Yukihiro "Matz" Matsumoto 386b53e6d9 parse.y: upgrade endless def syntax.
- prohibit defining setter method
- allow endless def without parentheses
2021-02-24 16:56:55 +09:00
Yukihiro "Matz" Matsumoto a9ebd4703f Merge pull request #5364 from mruby/dependabot/github_actions/actions/setup-node-v2.1.5
Bump actions/setup-node from v2.1.4 to v2.1.5
2021-02-23 16:43:37 +09:00
dependabot[bot] 09ebfc43a6 Bump actions/setup-node from v2.1.4 to v2.1.5
Bumps [actions/setup-node](https://github.com/actions/setup-node) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.1.4...46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-23 07:17:23 +00:00
dearblue 927615e1f0 Added other methods for Binding
- Added to `mruby-binding-core`
  - `Binding#local_variable_defined?`
  - `Binding#local_variable_get`
  - `Binding#local_variable_set`
  - `Binding#local_variables`
  - `Binding#receiver`
  - `Binding#source_location`
  - `Binding#inspect`
- Added to `mruby-proc-binding`
  - `Proc#binding`

The reason for separating `Proc#binding` is that core-mrbgems has a method that returns a closure object to minimize possible problems with being able to manipulate internal variables.
By separating it as different mrbgem, each user can judge this problem and incorporate it arbitrarily.
2021-02-22 23:32:43 +09:00
dearblue 792f6ac670 Adjustment of the current HEAD and bindings, and separation
Make changes to make `Binding` work.
At the same time, it separates `Binding#eval`, which depends on `mruby-eval`, from `mruby-binding-core`.
2021-02-22 23:32:18 +09:00
dearblue 935ffa46a3 Change mruby-binding to mruby-binding-core 2021-02-22 22:15:46 +09:00
dearblue 297c5ac598 Merge branch 'binding' of https://github.com/ksss/mruby into HEAD 2021-02-22 22:14:46 +09:00
Yukihiro "Matz" Matsumoto d64c7330bc print.c: fix a compilation errors with MRB_NO_STDIO; fix #5361 2021-02-22 13:39:37 +09:00
Yukihiro "Matz" Matsumoto 60f9028612 Merge pull request #5360 from dearblue/opcode
Updated `doc/opcode.md` to match `include/mruby/ops.h` [ci skip]
2021-02-21 20:26:28 +09:00
dearblue 07874a3d29 Updated doc/opcode.md to match include/mruby/ops.h [ci skip] 2021-02-21 19:30:19 +09:00
Yukihiro "Matz" Matsumoto 6b8393081a Merge pull request #5359 from dearblue/warn
Comment out `warn` used in the `Array#fetch` method
2021-02-20 20:56:30 +09:00
dearblue 7ef4e54370 Comment out warn used in the Array#fetch method
I get an error because the current mruby does not have a `Kernel#warn` method.
But the warning itself is useful and I'll just comment it out in case it's implemented in the future.
2021-02-20 18:19:00 +09:00
Yukihiro "Matz" Matsumoto 0d7f5b8216 metaprog.c: fix a methods() bug with false argument; fix #5351 2021-02-20 14:56:55 +09:00
Yukihiro "Matz" Matsumoto 8ed15c078b metaprog.c: remove unused argument from a private function. 2021-02-20 13:20:14 +09:00
Yukihiro "Matz" Matsumoto 16fe040479 mruby/value.h: MRB_TT_CPTR is immediate with MRB_NO_BOXING.
The issue is reported by @shuujii.
2021-02-19 23:23:18 +09:00
Yukihiro "Matz" Matsumoto e5559184e0 Fix mrb_immediate_p() definition for MRB_NO_BOXING; ref #5352 2021-02-19 21:02:31 +09:00
Yukihiro "Matz" Matsumoto 787487b16d Check MRB_TT_* before object allocation; ref #5352 2021-02-19 15:36:41 +09:00
Yukihiro "Matz" Matsumoto ce0a381406 Merge pull request #5352 from shuujii/fix-type-tag-that-set-to-NilClass-and-FalseClass
Fix type tag that set to `NilClass` and `FalseClass`
2021-02-18 21:51:07 +09:00
Yukihiro "Matz" Matsumoto bdf2cf005e Merge pull request #5357 from k0kubun/lock-depth
Skip --depth=1 when it's locked
2021-02-17 15:23:24 +09:00
Takashi Kokubun 6ac79a2c44 Skip --depth=1 when it's locked 2021-02-16 20:56:13 -08:00
Yukihiro "Matz" Matsumoto cb43dda009 Merge pull request #5347 from shuujii/add--s-option-to-mrbc-for-make-variable-static
Add `-s` option to `mrbc` for make variable static
2021-02-17 12:43:45 +09:00
Yukihiro "Matz" Matsumoto dee9168882 Merge pull request #5356 from mruby/dependabot/github_actions/actions/upload-artifact-v2.2.2
Bump actions/upload-artifact from v1 to v2.2.2
2021-02-16 13:54:24 +09:00
Yukihiro "Matz" Matsumoto cb9225bcbf Merge pull request #5355 from mruby/dependabot/github_actions/actions/cache-v2.1.4
Bump actions/cache from v2 to v2.1.4
2021-02-16 13:54:00 +09:00
dependabot[bot] cf2fce93ec Bump actions/upload-artifact from v1 to v2.2.2
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from v1 to v2.2.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v1...e448a9b857ee2131e752b06002bf0e093c65e571)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-16 04:23:03 +00:00
dependabot[bot] 1c8e1e20e4 Bump actions/cache from v2 to v2.1.4
Bumps [actions/cache](https://github.com/actions/cache) from v2 to v2.1.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2...26968a09c0ea4f3e233fdddbafd1166051a095f6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-16 04:23:03 +00:00
Yukihiro "Matz" Matsumoto e2d4bedb7b Merge pull request #5343 from jbampton/add-dependabot-config
feat: add Dependabot config file
2021-02-16 13:08:39 +09:00
Yukihiro "Matz" Matsumoto d6164817f5 Use full-core gembox for clang-asan configuration.
For better coverage.
2021-02-16 12:55:19 +09:00
Yukihiro "Matz" Matsumoto 7470337a82 Update URL explaining alignment issue; close #5344 2021-02-16 12:50:31 +09:00
Yukihiro "Matz" Matsumoto 61370ca98c Merge pull request #5350 from shuujii/refine-checking-for-trailing-whitespace
Refine checking for trailing whitespace [skip travis][skip appveyor]
2021-02-15 13:49:52 +09:00
Yukihiro "Matz" Matsumoto 2725755bc5 Merge pull request #5349 from shuujii/remove-trailing-tab-in-build_config-dreamcast_shelf.rb
Remove trailing tab in `build_config/dreamcast_shelf.rb` [ci skip]
2021-02-15 10:54:29 +09:00
Yukihiro "Matz" Matsumoto 330dd3f450 Merge pull request #5353 from dearblue/editorconfig
Introduce EditorConfig [skip ci]
2021-02-15 10:53:48 +09:00
dearblue 9b38dddc61 Introduce EditorConfig [skip ci] 2021-02-14 22:19:20 +09:00
KOBAYASHI Shuji 68daa3bf96 Fix type tag that set to NilClass and FalseClass 2021-02-14 20:55:46 +09:00
Yukihiro "Matz" Matsumoto 3217febfe9 Merge pull request #5348 from dearblue/optable
Place optable in ROM
2021-02-14 17:49:00 +09:00
KOBAYASHI Shuji 4203e574e3 Refine checking for trailing whitespace [skip travis][skip appveyor]
* Include tabs in checking.
* Use `git grep` to avoid including `.git` directory.
* Avoid running `grep` multiple times.
2021-02-14 16:07:04 +09:00
KOBAYASHI Shuji 29dfadf0de Remove trailing tab in build_config/dreamcast_shelf.rb [ci skip] 2021-02-14 16:02:02 +09:00
dearblue 297df70bc1 Place optable in ROM 2021-02-14 13:53:51 +09:00
KOBAYASHI Shuji a6a76d8fd2 Add -s option to mrbc for make variable static 2021-02-14 11:55:53 +09:00
Yukihiro "Matz" Matsumoto c3ec5861ac Merge pull request #5346 from jbampton/clean-up-linters
refactor: add the spell checker Action to the Lint Action file
2021-02-13 18:25:27 +09:00
John Bampton c263aec748 refactor: add the spell checker Action to the Lint Action file
Order jobs in workflow.
2021-02-13 18:58:48 +10:00
Yukihiro "Matz" Matsumoto da6c4ed169 Merge pull request #5345 from jbampton/fix-missing-https-on-links
chore: fix missing HTTPS on links
2021-02-13 17:21:12 +09:00
John Bampton 6204244b41 chore: fix missing HTTPS on links 2021-02-13 18:17:47 +10:00
Yukihiro "Matz" Matsumoto d04c651405 Merge pull request #5342 from jbampton/fix-spelling
chore: fix spelling
2021-02-13 16:38:02 +09:00
John Bampton d52da3fe77 feat: add Dependabot config file
Set for GitHub Actions to check for update everyday.

When you add or update the dependabot.yml file, this triggers an immediate check for version updates. Any options that also affect security updates are used the next time a security alert triggers a pull request for a security update.

https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates
2021-02-13 17:37:30 +10:00
John Bampton be40e9c783 chore: fix spelling
Normally a single spell checker can't find all the mistakes or check all types of code.

These mistakes were found by another spell checker inside my editor with a more manual sift / find.
2021-02-13 17:21:17 +10:00
Yukihiro "Matz" Matsumoto 9a9c95986a Merge pull request #5341 from jbampton/check-for-trailing-whitespace
feat(CI): check for trailing whitespace
2021-02-13 15:46:51 +09:00
John Bampton d55a74c418 feat(CI): check for trailing whitespace
Run on pull request only.
Use a shell script to check for trailing whitespace in all files.
Fail if trailing whitespace is found.
2021-02-13 16:37:46 +10:00
Yukihiro "Matz" Matsumoto 8e01fc8933 Merge pull request #5340 from jbampton/use-certified-actions
refactor: only use certified GitHub Actions to increase security
2021-02-13 15:19:34 +09:00
John Bampton 4c7ecbb8a6 refactor: only use certified GitHub Actions to increase security
Official -> "The individual jobs in a workflow can interact with (and compromise) other jobs. For example, a job querying the environment variables used by a later job, writing files to a shared directory that a later job processes, or even more directly by interacting with the Docker socket and inspecting other running containers and executing commands in them.

This means that a compromise of a single action within a workflow can be very significant, as that compromised action would have access to all secrets configured on your repository, and can use the GITHUB_TOKEN to write to the repository. Consequently, there is significant risk in sourcing actions from third-party repositories on GitHub. "

https://docs.github.com/en/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions
2021-02-13 16:13:30 +10:00
Yukihiro "Matz" Matsumoto acdd939d80 Merge pull request #5339 from shuujii/update-compile-prerequisites-in-doc-guides-compile.md
Update compile prerequisites in `doc/guides/compile.md` [ci skip]
2021-02-13 14:17:58 +09:00
Yukihiro "Matz" Matsumoto 94fb86f89b parse.y: string buffer (tokbuf) can overflow.
Check if `esclen` is smaller than `len` (original string length).
2021-02-13 14:06:37 +09:00
KOBAYASHI Shuji d470163b22 Update compile prerequisites in doc/guides/compile.md [ci skip]
Bison and gperf are optional.
2021-02-13 11:53:52 +09:00
Yukihiro "Matz" Matsumoto adb50df71a Update GitHub Actions.
- Remove Ubuntu-16.04
- Add Ubuntu-20.04 {gcc,clang}
2021-02-12 21:14:06 +09:00
Yukihiro "Matz" Matsumoto 5ba37db981 Merge pull request #5336 from shuujii/fix-build-mruby-catch-gem-without-presym
Fix build `mruby-catch` gem without presym
2021-02-12 21:11:59 +09:00
Yukihiro "Matz" Matsumoto d3fbac4d53 Merge pull request #5335 from shuujii/add-UncaughtThrowError-tagvalue-for-Ruby-compatibility
Add `UncaughtThrowError#{tag,value}` for Ruby compatibility
2021-02-12 21:10:53 +09:00
Yukihiro "Matz" Matsumoto 5f71e0e754 Merge pull request #5337 from shuujii/remove-skip-ci-hack-to-GitHub-Actions
Remove "skip ci" hack to GitHub Actions [skip travis][skip appveyor]
2021-02-12 21:09:07 +09:00
KOBAYASHI Shuji 28729deed6 Remove "skip ci" hack to GitHub Actions [skip travis][skip appveyor]
GitHub Actions now supports "skip ci" natively:
https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/
2021-02-12 19:44:41 +09:00
KOBAYASHI Shuji 8ba7be0999 Fix build mruby-catch gem without presym 2021-02-12 19:19:32 +09:00
KOBAYASHI Shuji 955464ca3c Add UncaughtThrowError#{tag,value} for Ruby compatibility 2021-02-12 19:09:18 +09:00
Yukihiro "Matz" Matsumoto 2af8e16cc6 include/mruby/array.h: ARY_LEN() should return mrb_int.
It used to return `mrb_ssize` but its size may differ from `mrb_int`,
e.g. `MRB_INT64` on `MRB_32BIT` architecture.
2021-02-12 16:57:33 +09:00
Yukihiro "Matz" Matsumoto 31051fd656 doc/mruby3.md: use relative path. 2021-02-12 15:39:19 +09:00
Yukihiro "Matz" Matsumoto ca7cac8b31 Merge pull request #5334 from shuujii/avoid-possibility-of-reading-uninitialized-areas-in-h_check_modified
Avoid possibility of reading uninitialized areas in `h_check_modified()`
2021-02-12 15:38:59 +09:00
KOBAYASHI Shuji 453296a729 Avoid possibility of reading uninitialized areas in h_check_modified()
In `h_check_modified()`, in the case of `MRB_NO_BOXING`, `ht_ea()` or
`ht_ea_capa()` for AR may read uninitialized area. Therefore, do not use
those macros for AR in `MRB_NO_BOXING` (but in the case of `MRB_64BIT`,
`ht_ea_capa()` is the same as `ar_ea_capa()`, so use it).

fix #5332
2021-02-12 15:00:06 +09:00
Yukihiro "Matz" Matsumoto 22ffc1108b src/print.c: stop warning with MRB_NO_STDIO. 2021-02-12 11:14:25 +09:00
Yukihiro "Matz" Matsumoto 793fbab7d5 Rename mrb_sleep.c to sleep.c in mruby-sleep gem. 2021-02-12 11:11:10 +09:00
Yukihiro "Matz" Matsumoto a96bd02127 Update docs/guides/mrbgems.md; ref #5210
Binary gems description added, along with a few cosmetic changes.
2021-02-12 11:07:45 +09:00
Yukihiro "Matz" Matsumoto 5c130e8e7b Do not collect linker options from binary gems; close #5210
Binary gems are mrbgems that set `spec.bins` in their `mrbgem.rake`,
and usually their names are prefixed with `mruby-bin-`.
2021-02-12 10:33:53 +09:00
Yukihiro "Matz" Matsumoto 69f8a52866 Update docs/guides/compile.md.
Especially description regarding the build process and `build` directory
structures, along with some typo fixes and cosmetic changes.
2021-02-12 10:27:10 +09:00
Yukihiro "Matz" Matsumoto 0db6e3eb6f Rename mruby-catch.c to catch.c; ref #5328 2021-02-12 10:09:19 +09:00
Yukihiro "Matz" Matsumoto d178e147f5 Merge pull request #5333 from shuujii/fix-heap-buffer-overflow-for-small-Hash-HT-in-Hash-rehash
Fix heap-buffer-overflow for small `Hash` (HT) in `Hash#rehash`
2021-02-11 08:26:33 +09:00
Yukihiro "Matz" Matsumoto 5735d7c2fd Merge branch 'dearblue-mruby-catch' 2021-02-10 20:11:40 +09:00
Yukihiro "Matz" Matsumoto c7809ca025 Refactor mruby-catch; ref #5328
- Move `#catch` definition to `mruby-catch.c` to avoid tweaking
- Remove `#__preserve_catch_method`
- Implement whole `#throw` method in C
2021-02-10 20:09:00 +09:00
KOBAYASHI Shuji 28eb6271ba Fix heap-buffer-overflow for small Hash (HT) in Hash#rehash
### Example

##### example.rb

```ruby
h = {}
(1..17).each{h[_1] = _1}
(1..16).each{h.delete(_1)}
h.rehash
```

##### ASAN report

```console
$ bin/mruby example.rb
==52587==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000006998 at pc 0x55a29cddf96b bp 0x7fff7b1b1720 sp 0x7fff7b1b1710
READ of size 4 at 0x602000006998 thread T0
    #0 0x55a29cddf96a in ib_it_next /mruby/src/hash.c:639
    #1 0x55a29cde2ca2 in ht_rehash /mruby/src/hash.c:900
    #2 0x55a29cde379f in h_rehash /mruby/src/hash.c:996
    #3 0x55a29cde7f3d in mrb_hash_rehash /mruby/src/hash.c:1735
    #4 0x55a29ce77b62 in mrb_vm_exec /mruby/src/vm.c:1451
    #5 0x55a29ce5fa88 in mrb_vm_run /mruby/src/vm.c:981
    #6 0x55a29ceb87e1 in mrb_top_run /mruby/src/vm.c:2874
    #7 0x55a29cf36bdf in mrb_load_exec mrbgems/mruby-compiler/core/parse.y:6805
    #8 0x55a29cf36f25 in mrb_load_detect_file_cxt mrbgems/mruby-compiler/core/parse.y:6848
    #9 0x55a29cdba0a2 in main /mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:347
    #10 0x7f24ef43b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
    #11 0x55a29cdb4a6d in _start (/mruby/bin/mruby+0x2a3a6d)

0x602000006998 is located 0 bytes to the right of 8-byte region [0x602000006990,0x602000006998)
allocated by thread T0 here:
    #0 0x7f24f01cfffe in __interceptor_realloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10dffe)
    #1 0x55a29ceb9440 in mrb_default_allocf /mruby/src/state.c:68
    #2 0x55a29cdba747 in mrb_realloc_simple /mruby/src/gc.c:228
    #3 0x55a29cdba928 in mrb_realloc /mruby/src/gc.c:242
    #4 0x55a29cde12e5 in ht_init /mruby/src/hash.c:749
    #5 0x55a29cde2b8e in ht_rehash /mruby/src/hash.c:897
    #6 0x55a29cde379f in h_rehash /mruby/src/hash.c:996
    #7 0x55a29cde7f3d in mrb_hash_rehash /mruby/src/hash.c:1735
    #8 0x55a29ce77b62 in mrb_vm_exec /mruby/src/vm.c:1451
    #9 0x55a29ce5fa88 in mrb_vm_run /mruby/src/vm.c:981
    #10 0x55a29ceb87e1 in mrb_top_run /mruby/src/vm.c:2874
    #11 0x55a29cf36bdf in mrb_load_exec mrbgems/mruby-compiler/core/parse.y:6805
    #12 0x55a29cf36f25 in mrb_load_detect_file_cxt mrbgems/mruby-compiler/core/parse.y:6848
    #13 0x55a29cdba0a2 in main /mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:347
    #14 0x7f24ef43b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
```
2021-02-10 20:03:34 +09:00
Yukihiro "Matz" Matsumoto f0e25121fd Merge branch 'mruby-catch' of https://github.com/dearblue/mruby into dearblue-mruby-catch 2021-02-10 15:43:24 +09:00
Yukihiro "Matz" Matsumoto 20342714ea Upgrade supported Ruby version to 2.5.
Ruby 2.5 is the oldest maintained version.
2021-02-09 22:29:42 +09:00
Yukihiro "Matz" Matsumoto aa5b7fbd80 i_gcd() does not work for MRB_INT_MIN. 2021-02-08 21:18:50 +09:00
Yukihiro "Matz" Matsumoto db1172b48c Allow the case MRB_32BIT and MRB_NO_BOXING and MRB_USE_FLOAT32; #4382 2021-02-08 17:46:38 +09:00
Yukihiro "Matz" Matsumoto bc21278a7c Merge pull request #5331 from shuujii/explicit-top-level-task-to-clarify-in-tasks-test.rake
Explicit top level task to clarify in `tasks/test.rake`
2021-02-08 07:19:05 +09:00
KOBAYASHI Shuji 3cf0e85ed7 Explicit top level task to clarify in tasks/test.rake 2021-02-07 19:11:54 +09:00
Yukihiro "Matz" Matsumoto 530afca2d7 Move F(x) definition inside of #ifdef; fix #5330 2021-02-07 15:28:23 +09:00
Yukihiro "Matz" Matsumoto 1cc20978cf Enlarge tolerance limit for float32; close #5329
Along with some refactoring on `mruby-math` tests.
2021-02-07 14:56:34 +09:00
Yukihiro "Matz" Matsumoto 3252518a3c Fix tests to work with MRB_USE_FLOAT32; fix #5329 2021-02-07 14:55:45 +09:00
Yukihiro "Matz" Matsumoto 70b7ebd72f Add host-f32 config to test MRB_USE_FLOAT32; ref #5329 2021-02-07 14:54:01 +09:00
dearblue 232e07ad61 Reimplement mruby-catch; ref #5321
When there is a corresponding tag, the `RBreak` object is used to make a global jump.

Like CRuby, it can't be caught by `rescue`.
It is also the same as CRuby that it can be canceled in the middle by `ensure`.

 ### How to find the corresponding tag with `throw`

The called `catch` method remains in the call stack, and the tag also remains in the stack at that time.
So it is possible to find the called location by searching the two.

Note that no method can be given to the `proc` object specified in `RBreak`.
Therefore, inside the `catch` method, the argument block is called in a seemingly meaningless closure.

Also, as a countermeasure against `alias` etc., the `proc` object, which is the body of the `catch` method, is saved when mrbgem is initialized.
2021-02-06 21:41:08 +09:00
Yukihiro "Matz" Matsumoto ef8f475722 MinGW does not need MSVC hack.
Both MinGW and MSVC provide _WIN32 macro.
2021-02-06 19:30:59 +09:00
Yukihiro "Matz" Matsumoto c6c632cf97 Merge pull request #5325 from dearblue/c++-exc.2
`compile_as_cxx` should generate a path under` conf.build_dir`
2021-02-06 18:36:25 +09:00
Yukihiro "Matz" Matsumoto 94d8dfed66 Merge pull request #5327 from dearblue/notest
Ignore if `conf.enable_test` does not exist
2021-02-06 18:28:53 +09:00
Yukihiro "Matz" Matsumoto 6d0b5102cf Merge pull request #5326 from dearblue/struct
No need to check class definition
2021-02-06 18:25:49 +09:00
dearblue 9d1a659bc7 Ignore if conf.enable_test does not exist
Because if the configuration file didn't contain any `conf.enable_test`, `rake test` would report an exception and exit.

```console
% cat my_config.rb
MRuby::Build.new { toolchain }

% rake MRUBY_CONFIG=my_config.rb test

  ...SNIP...

rake aborted!
NoMethodError: undefined method `invoke' for nil:NilClass
/var/tmp/mruby/tasks/test.rake:24:in `block (3 levels) in <top (required)>'
Tasks: TOP => test => test:build => test:build:lib
(See full trace by running task with --trace)
```
2021-02-06 18:09:27 +09:00
dearblue 0f8d3d8777 No need to check class definition
Because now the `Struct` class is always defined when this file is included.
2021-02-06 18:05:05 +09:00
dearblue e0d2f4e0ae compile_as_cxx should generate a path under conf.build_dir
If the current directory is different from `MRUBY_ROOT` and it has` conf.build_dir` and `conf.enable_cxx_exception` set, it was generating a pathname outside of` build_dir`.
As a result, in some cases files unrelated to mruby could be linked.

```console
% pwd
/tmp/mruby/1/2/3/4/5/6

% mruby_dir=/tmp/mruby/a/b/c/d/mruby

% cat my_config.rb
MRuby::Build.new("host", "build/to/custom/directory") do
  toolchain
  enable_cxx_exception
end

% rake MRUBY_CONFIG=my_config.rb -f $mruby_dir/Rakefile > logs
% grep CXX logs
CXX   a/b/c/d/mruby/src/error-cxx.cxx -> a/b/c/d/mruby/src/error-cxx.o
CXX   a/b/c/d/mruby/src/gc-cxx.cxx -> a/b/c/d/mruby/src/gc-cxx.o
CXX   a/b/c/d/mruby/src/vm-cxx.cxx -> a/b/c/d/mruby/src/vm-cxx.o
CXX   a/b/c/d/mruby/mrbgems/mruby-compiler/core/codegen-cxx.cxx -> a/b/c/d/mruby/mrbgems/mruby-compiler/core/codegen-cxx.o
CXX   a/b/c/d/mruby/mrbgems/mruby-compiler/core/y.tab-cxx.cxx -> a/b/c/d/mruby/mrbgems/mruby-compiler/core/y.tab-cxx.o
CXX   ../a/b/c/d/mruby/src/error-cxx.cxx -> ../a/b/c/d/mruby/src/error-cxx.o
CXX   ../a/b/c/d/mruby/src/gc-cxx.cxx -> ../a/b/c/d/mruby/src/gc-cxx.o
CXX   ../a/b/c/d/mruby/src/vm-cxx.cxx -> ../a/b/c/d/mruby/src/vm-cxx.o
```
2021-02-06 17:27:23 +09:00
Yukihiro "Matz" Matsumoto 88113df098 Fixed compile errors in cmath.c in MinGW and macOS. 2021-02-06 17:00:03 +09:00
Yukihiro "Matz" Matsumoto 2a69f5105c Merge pull request #5324 from dearblue/c++-exc
Exclude `<build-dir>/mrbc/**/*` from rake target rules
2021-02-06 16:58:27 +09:00
Yukihiro "Matz" Matsumoto 0bd01c545f Merge pull request #5323 from shuujii/make-the-argument-of-Kernel-catch-optional-as-Ruby-does
Make the argument of `Kernel#catch` optional as Ruby does
2021-02-06 16:57:36 +09:00
dearblue 5c3b5f4221 Exclude <build-dir>/mrbc/**/* from rake target rules
Prevents the auto-generated mrbc target source code from being compiled under host conditions.

This is because a build error occurred when `conf.enable_cxx_exception` was set.
2021-02-06 16:37:15 +09:00
KOBAYASHI Shuji 1ea4c51245 Make the argument of Kernel#catch optional as Ruby does
Also implement the following changes.

* Add tests
* Use `Object#equal?` to compare tags for Ruby compatibility
* Use `attr_reader`
2021-02-06 13:28:47 +09:00
Yukihiro "Matz" Matsumoto 4bf4650321 Avoid implicit conversion from mrb_float to mrb_complex. 2021-02-06 00:50:13 +09:00
Yukihiro "Matz" Matsumoto 8945afe38e Merge pull request #5322 from shuujii/fix-message-of-ThrowCatchJump-in-mruby-catch-gem
Fix message of `ThrowCatchJump` in `mruby-catch` gem
2021-02-06 00:42:51 +09:00
Yukihiro "Matz" Matsumoto 8ecd38d648 Reimplement complex division. 2021-02-06 00:40:18 +09:00
Yukihiro "Matz" Matsumoto ea0737ecfd Define M_E for some platforms. 2021-02-06 00:39:53 +09:00
Yukihiro "Matz" Matsumoto a6994f51c8 Update mruby-cmath to support MSVC complex.
* Use `_Complex` instead of `complex` (MSYS2 do not support `complex`)
* Use `_Dcomplex` instead of `_Complex` on MSCV
* Avoid operator division and multiplication of complex
2021-02-06 00:08:25 +09:00
KOBAYASHI Shuji 80965fe2d7 Fix message of ThrowCatchJump in mruby-catch gem
### Example

```ruby
begin
  throw 1
rescue Exception => e
  puts e.message
end
```

#### Before this patch:

```console
$ bin/mruby example.rb
uncaught throw :1
```
#### After this patch (same as Ruby):

```console
$ bin/mruby example.rb
uncaught throw 1
```
2021-02-05 23:14:58 +09:00
Yukihiro "Matz" Matsumoto a0050541d1 Add mruby-cmath gem to the core.
This gem uses C99 `_Complex` features. You need a C compiler that
supports `_Complex` to enable this gem. All `gcc`, `clang`, `VC` support
`_Complex` so there should not be a big problem.
2021-02-05 22:27:27 +09:00
Yukihiro "Matz" Matsumoto d898002096 Add a few new API for complex access. 2021-02-05 21:54:49 +09:00
Yukihiro "Matz" Matsumoto c6149370b0 Refactor method overriding.
* Use `class_eval` instead of `instance_eval`.
* Reduce `class_eval` calls
* define `Numeric#i`
* undefine `Complex#i`
2021-02-05 21:54:11 +09:00
Yukihiro "Matz" Matsumoto 7ce03e32b7 Add Complex#to_c method. 2021-02-05 21:42:42 +09:00
Yukihiro "Matz" Matsumoto ee3017496b instance_eval for classes and modules should behave as class_eval. 2021-02-05 21:39:44 +09:00
KOBAYASHI Shuji 5e814ea912 Define MRB_NO_GEMS if disable_libmruby is specified 2021-02-05 18:52:00 +09:00
Yukihiro "Matz" Matsumoto 043fe9d9f5 Merge pull request #5319 from shuujii/check-if-.pi-build-rules-are-defined
Check if `.pi` build rules are defined
2021-02-04 22:19:19 +09:00
KOBAYASHI Shuji 67a28b56ab Check if .pi build rules are defined
`.pi` files are created for `.o` files that `build.products` depends on, but
an error will occur if the build rule is unknown, so add a check.

I don't think this situation would normally arise. However, in
`mattn/mruby-onig-regexp`, when using bundled onigmo, onigmo's `.o` files
are added to dependency of `libmruby.a` in the second and subsequent builds,
and mruby does not know the build rule, so the following error had occured.

```console
rake aborted!
Don't know how to build task '/mruby/build/host/mrbgems/mruby-onig-regexp/onigmo-6.2.0/libonig_objs/ascii.pi' (See the list of available tasks with `rake --tasks`)
```
2021-02-04 21:17:58 +09:00
Yukihiro "Matz" Matsumoto 6f354322a8 Merge pull request #5318 from shuujii/fix-breakage-where-builds-except-host-dont-refer-mrbc-in-host
Fix breakage where builds except `host` don't refer` mrbc` in `host`
2021-02-04 15:24:05 +09:00
KOBAYASHI Shuji f92c1f1b7f Fix breakage where builds except host don't refer mrbc in host
Build error occurred under the following conditions.

* `host` build is presym enabled and unspecified `mruby-bin-mrbc` gem.
* Build except `host` unspecified `mruby-bin-mrbc` gem and mrbcfile.

### Example

#### Build configuration

```ruby
MRuby::Build.new{|conf| conf.toolchain}
MRuby::Build.new("host2"){|conf| conf.toolchain}
```

#### Error

```console
rake aborted!
external mrbc or mruby-bin-mrbc gem in current('host2') or 'host' build is required
/mruby/lib/mruby/build.rb:326:in `mrbcfile'
/mruby/tasks/mrblib.rake:9:in `block in <top (required)>'
/mruby/lib/mruby/build.rb:18:in `instance_eval'
/mruby/lib/mruby/build.rb:18:in `block in each_target'
/mruby/lib/mruby/build.rb:17:in `each'
/mruby/lib/mruby/build.rb:17:in `each_target'
/mruby/tasks/mrblib.rake:1:in `<top (required)>'
/mruby/Rakefile:27:in `load'
/mruby/Rakefile:27:in `<top (required)>'
```
2021-02-04 14:57:37 +09:00
Uchio KONDO 7c52734243 Add a testcase of #4137 fix 2018-10-15 14:46:24 +09:00
Tomoyuki Sahara 89dceefa12 s/__android__/__ANDROID__/. fixes #15.
mruby core uses __ANDROID__ to know whether the target system is
Android or not (in mrbgems/mruby-math).
2018-09-14 15:49:36 +09:00
ksss e8988197f2 Try Binding class 2017-02-24 11:06:47 +09:00
Tomoyuki Sahara 14bc5c3e51 Merge pull request #14 from masahino/add_pointer_casting
Add pointer casting
2016-12-16 23:02:28 +09:00
masahino b1ccf9764b Add pointer casting 2016-12-15 21:34:27 +09:00
Tomoyuki Sahara 0c3c538855 Merge pull request #13 from udzura/add-chroot
Implement Dir.chroot on mruby
2016-06-13 09:54:03 +09:00
Uchio KONDO 7318ae5977 Remove perror 2016-06-13 09:42:16 +09:00
Uchio KONDO e9c4b10446 Implement Dir.chroot on mruby 2016-06-10 15:59:20 +09:00
yui-knk 68334311ac Remove dependency to mruby-sprintf (Fix #3) 2016-02-11 21:47:13 +09:00
yui-knk fbf8c10a94 Merge pull request #5 from yui-knk/use_new_container_based_infrastructure
Use the new container-based test infrastructure on travis ci
2016-02-11 20:38:46 +09:00
yui-knk 4f0a509342 Use the new container-based test infrastructure on travis ci 2016-02-11 20:36:25 +09:00
yui-knk 96ea55d2f9 Add a test case for Set#inspect 2016-02-11 20:27:55 +09:00
yui-knk 24b09fca69 Remove src directory (Fix #2)
This gem does not have c implementation, so remove src directory.
2016-02-11 20:13:53 +09:00
yui-knk d39dcb4370 [ci skip] Fix indent 2016-02-11 20:13:26 +09:00
yui-knk ea9a99541a [ci skip] Update license year 2016-02-11 20:13:00 +09:00
yui-knk f48f6e01b5 Merge pull request #4 from yui-knk/fix_test_script
Reform build process on travis ci
2016-02-11 20:03:23 +09:00
yui-knk 604fd5c437 Reform build process on travis ci
* Change to create "mruby" directory in a repository
* Create Rakefile and use it in .travis.yml
  This enable us to write build script with Ruby syntax
2016-02-11 19:53:48 +09:00
yui-knk befc5a4d83 Merge pull request #1 from takahashim/add-dependency
add add_dependency
2016-02-05 01:38:39 +09:00
Tomoyuki Sahara b4415207ff Merge pull request #2 from kazuho/kazuho/mrbint64
cast `mrb_int` to `int` before applying sprintf "%d"
2016-01-07 13:24:03 +09:00
Kazuho Oku b14df08be6 cast mrb_int to int before applying sprintf "%d" 2016-01-06 12:10:21 +09:00
Tomoyuki Sahara b64c701c64 Merge pull request #11 from takahashim/fix-win-test
fix test for windows
2015-12-03 16:45:25 +09:00
takahashim 71f21845ca fix test for windows
* _mkdir() has only one argument
* use mktemp && mkdir instead of mkdtemp
* use _getcwd instead of P_tmpdir (sandbox is on current dir)
* test for Dir#tell and Dir#seek: skip when NotImplementedError
2015-12-03 15:48:37 +09:00
Tomoyuki Sahara 66c6f8b9d1 Merge pull request #10 from takahashim/notimplemented
use NotImplementedError instead of RuntimeError for Win
2015-12-03 15:32:13 +09:00
takahashim 6140cb158d use NotImplementedError instead of RuntimeError for Win 2015-12-03 15:25:12 +09:00
Tomoyuki Sahara d98ecabd90 Merge pull request #9 from takahashim/enable_test
add conf.enable_test into build_config.rb
2015-12-03 09:51:36 +09:00
takahashim 3501af9ba2 add conf.enable_test into build_config.rb 2015-12-03 00:10:19 +09:00
takahashim 7584d49aa3 add add_dependency 2015-09-13 15:16:28 +09:00
Tomoyuki Sahara 49f6fa51d9 Merge pull request #8 from joans321/master
disable dir_seek and dir_tell on android platform
2015-08-13 20:19:58 +09:00
xuejianqing 6e30353dfd disable dir_seek and dir_tell on android platform 2015-08-13 17:33:45 +08:00
Tomoyuki Sahara 444abbe5f9 Merge pull request #7 from furunkel/master
Use _WIN32 and _WIN64 to detect Windows instead of RUBY_PLATFORM
2015-06-02 09:27:33 +09:00
furunkel 9eec22cda1 Add missing declarations 2015-06-01 21:16:25 +02:00
furunkel 5542f7b0fc Use _WIN32 and _WIN64 to detect Windows instead of RUBY_PLATFORM 2015-06-01 21:06:59 +02:00
cremno f31733045f use mrb_debug_strdup() and mrb_debug_strndup()
As they are safer to use than mrb_malloc()+strlen()+strncpy() (see #2652).
2014-12-02 00:00:55 +01:00
cremno ce5a3dbcba add mrb_debug_strdup() and mrb_debug_strndup()
They behave similar to their POSIX equivalents, except
mrb_malloc_simple() is used for memory allocation and
errno might not be set since ISO C99 doesn't have ENOMEM.
2014-12-02 00:00:54 +01:00
Tomoyuki Sahara dfb471b40b type of 2nd argument was changed. 2014-09-19 13:49:39 +09:00
Tomoyuki Sahara f7a0946452 mrb_const_defined returns true if it is defined on a super class. 2014-09-19 13:22:56 +09:00
Tomoyuki Sahara 37105ef13b Merge pull request #1 from cremno/patch-1
use mrb_basic_ptr instead of obsolete mrb_basic
2014-09-01 09:29:31 +09:00
cremno baba54fb49 use mrb_basic_ptr instead of obsolete mrb_basic 2014-08-29 16:41:11 +02:00
yui-knk 93e1d2b992 implemente Set#divide (with 1 arity block) 2014-08-03 23:40:05 +09:00
yui-knk 93a8b08f59 implement #classify 2014-08-03 13:06:30 +09:00
yui-knk a442f232e9 Refactor #flatten_merge
Not to unnecessary recursive search.
2014-08-03 12:52:29 +09:00
yui-knk 0d89802877 fix typo 2014-08-03 12:50:51 +09:00
yui-knk 7861034bcf add test case to #flatten 2014-08-03 12:50:23 +09:00
yui-knk 2836acf045 implement flatten_merge, flatten, flatten! 2014-08-03 12:45:54 +09:00
take_cheeze f77fb11f4e Use RString in mesg instead. 2014-07-28 20:30:02 +09:00
take_cheeze e926b532ee Store exception message to mesg field of struct RException. 2014-07-28 16:34:01 +09:00
yui-knk dd10f722ad Delete unused code in .h .c 2014-07-24 08:39:47 +09:00
yui-knk 4f73ff51e2 Add not implemented methods to README.md 2014-07-24 08:35:42 +09:00
yui-knk b4e4d98125 Add some comment outed methods
+ classify
+ divide
2014-07-24 08:29:45 +09:00
yui-knk 5e10c11662 Comment out some method
+ freeze
+ taint
+ untaint
2014-07-24 08:27:48 +09:00
yui-knk fad2bd9617 Add example to README.md 2014-07-24 08:22:22 +09:00
yui-knk 500bd30d6c Initial commit 2014-07-24 08:15:57 +09:00
Tomoyuki Sahara 6cc24d0793 add tests for #tell and #seek. 2014-06-20 15:25:10 +09:00
Tomoyuki Sahara 193c82174f P_tmpdir does not have trailing / on Linux. 2014-06-17 11:47:16 +09:00
Tomoyuki Sahara 14e325348b copy-and-paste bug... 2014-06-17 11:37:57 +09:00
Tomoyuki Sahara 0d378be34e tests and documentation. 2014-06-17 11:33:10 +09:00
Tomoyuki Sahara 546d923e67 Merge pull request #5 from windwiny/patch-1
compatible 32 bit windows
2014-05-09 01:56:46 +09:00
windwiny 627282a5f6 compatible 32 bit windows 2014-05-07 20:43:12 +08:00
mirichi 670a457e06 add block argument test #2144 2014-04-28 13:49:50 +09:00
Akira Yumiyama 536e83614d Update .travis.yml 2014-04-04 11:31:28 +09:00
Akira Yumiyama 2a0423c11d Update .travis.yml 2014-04-04 11:30:38 +09:00
Akira Yumiyama 06b4dd56a4 Create .travis.yml 2014-04-04 11:24:52 +09:00
Akira Yumiyama a252681f39 Create .travis.yml 2014-04-04 11:24:07 +09:00
Tomoyuki Sahara 4800836dd4 On Windows platforms, users must agree on addional license. 2014-03-14 10:06:14 +09:00
Tomoyuki Sahara dc17037349 Merge pull request #3 from pbosetti/master
Can Build with VisualStudio
2014-03-14 09:45:44 +09:00
Tomoyuki Sahara c0abfaf69d catch up with mrb_class_get API change. 2014-02-13 16:32:52 +09:00
Paolo Bosetti 9768535582 Made compatible with VisualStudio 2013-12-10 14:33:36 +01:00
Tomoyuki Sahara 09d51f46a7 mrb_intern API change. 2013-12-03 10:06:32 +09:00
Paolo Bosetti d7e880d9b9 Fix for compilation under Win/MinGW 2013-12-02 12:15:21 +01:00
Akira Yumiyama a036be21bc fix chdir (pass the current directory) 2013-11-16 14:37:21 +09:00
Akira Yumiyama 12dce91db8 support Dir.chdir with block 2013-11-16 14:28:40 +09:00
Akira Yumiyama 797c1cc178 Merge pull request #2 from syuu1228/chdir
add Dir.chdir
2013-11-15 20:50:01 -08:00
Takuya ASADA 0380865a55 add chdir 2013-11-14 03:08:43 -08:00
Tomoyuki Sahara 487ab66ea0 ARGS_XXX macros was renamed to MRG_ARGS_XXX. 2013-08-21 09:23:56 +09:00
Tomoyuki Sahara 09ea0586ee catch up with DATA API changes. 2013-08-20 17:27:10 +09:00
Akira Yumiyama 838e4f975d add run_test.rb, .gitignore 2013-05-02 23:57:20 +09:00
Akira Yumiyama 5903e2f3bf rename mrb_class_obj_get -> mrb_class_get 2013-05-02 23:56:52 +09:00
Akira Yumiyama ee4fef5127 update run_test.rb 2013-05-02 23:38:50 +09:00
Akira Yumiyama 57296298e9 put MRB_ prefix before ARGS_XXX macros 2013-04-27 09:46:11 +09:00
Tomoyuki Sahara db5e3af473 mrb_str_new2 -> mrb_str_new_cstr 2013-04-09 15:47:12 +09:00
Akira Yumiyama 104b69d943 rename mrb_str_new2 -> mrb_str_new_cstr 2013-03-13 22:28:06 +09:00
Tomoyuki Sahara e56d53e354 Errno module for mruby. 2013-03-13 10:00:22 +09:00
Tomoyuki Sahara b6c71e4c68 Initial commit 2013-03-12 00:21:04 -07:00
Akira Yumiyama 5e296b24f3 remove Makefile 2013-03-06 12:59:19 +09:00
Akira Yumiyama 221296cb55 update README.md 2013-03-06 12:59:03 +09:00
Akira Yumiyama 1cde1f24ce fix with mruby/mruby support. 2013-03-06 12:51:04 +09:00
Akira Yumiyama f22a72e754 update README.md 2013-01-30 17:02:54 +09:00
Akira Yumiyama 04d51d9719 add mrbgem test runner 2013-01-30 15:11:53 +09:00
Akira Yumiyama ae5671369e update mrbgem.rake 2013-01-30 15:11:15 +09:00
Akira Yumiyama 6b7e81f75b update mrbgem.rake 2013-01-24 10:18:13 +09:00
Akira Yumiyama 2f486fbccb add mrb_mruby_dir_gem_final 2013-01-24 10:18:05 +09:00
Akira Yumiyama 2e2225e2d3 add mrbgem.rake 2013-01-04 00:19:04 +09:00
Tomoyuki Sahara 92ad6dc8c3 should not ignore Makefile... 2012-12-25 13:44:22 +09:00
Tomoyuki Sahara f210dd553e requires iij/mruby. 2012-12-25 13:34:52 +09:00
Tomoyuki Sahara 7a593bf2d4 Dir class for mruby (from iij/mruby) 2012-12-25 13:32:29 +09:00
Tomoyuki Sahara ca525d5482 Initial commit 2012-12-24 20:11:55 -08:00
419 changed files with 36942 additions and 23472 deletions
+14
View File
@@ -0,0 +1,14 @@
.DS_Store
.idea
.vscode
*.bak
*.iml
*.ipr
*.swp
*.tmp
/.yardoc
/bin
/build
/doc/api
/doc/capi
+34
View File
@@ -0,0 +1,34 @@
# About this file, see:
# Website: https://editorconfig.org/
# For Emacs users: https://github.com/editorconfig/editorconfig-emacs
# For Vim users: https://github.com/editorconfig/editorconfig-vim
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
tab_width = 8
trim_trailing_whitespace = true
[{Makefile,Makefile.*,makefile,*.mk}]
indent_style = tab
#max_line_length = 80
#[*.{c,cc,C,cxx,cpp,h,hh,H,hxx,hpp,inc,y}]
#max_line_length = 120
#[{*.rb,Rakefile,rakefile,*.rake,*.gemspec,*.gembox}]
#max_line_length = 120
# limitation to US-ASCII
[*.bat]
end_of_line = crlf
#max_line_length = 80
#[*.{yaml,yml}]
#[*.md]
+6
View File
@@ -0,0 +1,6 @@
# Extend the tab with 8 whitespace
6fc5dc986a5ffc1a74c63ad0617ea1dcc10d3cdd
# reformatted doc/opcode.md
61e8a540869c57ebddac53cf9d243db407d57fff
# reindent parse.y
650ffb9d8410e1ae2206890ef6e2a8643c600454
+4
View File
@@ -0,0 +1,4 @@
* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf
*.png binary
+13
View File
@@ -0,0 +1,13 @@
# Basic set up
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:
interval: "daily"
+50
View File
@@ -0,0 +1,50 @@
benchmark:
- any:
- changed-files:
- any-glob-to-any-file:
- benchmark/**/*
build:
- any:
- changed-files:
- any-glob-to-any-file:
- Makefile
- Rakefile
- build_config/**/*
- lib/**/*
- tasks/**/*
core:
- any:
- changed-files:
- any-glob-to-any-file:
- include/**/*
- mrblib/**/*
- src/**/*
- test/**/*
doc:
- any:
- changed-files:
- any-glob-to-any-file:
- CONTRIBUTING.md
- LEGAL
- LICENSE
- NEWS
- README.md
- SECURITY.md
- TODO.md
- doc/**/*
- examples/**/*
github:
- any:
- changed-files:
- any-glob-to-any-file:
- .github/**/*
mrbgems:
- any:
- changed-files:
- any-glob-to-any-file:
- mrbgems/**/*
oss-fuzz:
- any:
- changed-files:
- any-glob-to-any-file:
- oss-fuzz/**/*
+12
View File
@@ -0,0 +1,12 @@
{
"verbose": false,
"ignore_defaults": false,
"exclude": ["oss-fuzz/", "src/"],
"disable": {
"end_of_line": false,
"trim_trailing_whitespace": false,
"insert_final_newline": false,
"indent_size": true,
"indent_style": true
}
}
+29
View File
@@ -0,0 +1,29 @@
# https://github.com/DavidAnson/markdownlint#rules--aliases
# markdownlint -c .github/linters/.markdown-lint.yml .
# MD001 heading-increment/header-increment - Heading levels should only increment by one level at a time
MD001: false
# MD013 line-length - Line length
MD013: false
# MD014 commands-show-output - Dollar signs used before commands without showing output
MD014: false
# MD024 no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
MD024: false
# MD025 single-title/single-h1 - Multiple top-level headings in the same document
MD025: false
# MD026 no-trailing-punctuation - Trailing punctuation in heading
MD026: false
# MD033/no-inline-html - Inline HTML
MD033: false
# MD040 fenced-code-language - Fenced code blocks should have a language specified
MD040: false
# MD041 first-line-heading/first-line-h1 - First line in a file should be a top-level heading
MD041: false
+11
View File
@@ -0,0 +1,11 @@
---
# https://yamllint.readthedocs.io/en/stable/
# yamllint --strict -c .github/linters/.yaml-lint.yml .
extends: default
rules:
comments:
min-spaces-from-content: 1
document-start: disable
line-length: disable
truthy: false
+28 -124
View File
@@ -2,24 +2,33 @@ name: Build & Test
on: [push, pull_request]
permissions:
contents: read
jobs:
Check-Skip:
if: |
!contains(github.event.head_commit.message, '[ci skip]') &&
!contains(github.event.head_commit.message, '[skip ci]') &&
!contains(github.event.head_commit.message, '[skip gha]')
runs-on: ubuntu-latest
steps:
- run: echo not skip
Ubuntu-1604:
needs: Check-Skip
runs-on: ubuntu-16.04
GCC-CLANG:
name: "${{ matrix.os }}-${{ matrix.altname || matrix.cc }}"
runs-on: ${{ matrix.os }}
timeout-minutes: 10
strategy:
fail-fast: false
max-parallel: 8
matrix:
include:
- {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: windows-latest, cc: gcc, cxx: g++, altname: "mingw-gcc"}
env:
MRUBY_CONFIG: ci/gcc-clang
CC: gcc
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
LD: ${{ matrix.cc }}
steps:
- uses: actions/checkout@v2
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
- name: Ruby version
run: ruby -v
- name: Compiler version
@@ -27,123 +36,18 @@ jobs:
- name: Build and test
run: rake -m test:build && rake test:run
Ubuntu-1804-gcc:
needs: Check-Skip
runs-on: ubuntu-18.04
env:
MRUBY_CONFIG: ci/gcc-clang
CC: gcc
steps:
- uses: actions/checkout@v2
- name: Ruby version
run: ruby -v
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
run: rake -m test:build && rake test:run
Ubuntu-1804-clang:
needs: Check-Skip
runs-on: ubuntu-18.04
env:
MRUBY_CONFIG: ci/gcc-clang
CC: clang
steps:
- uses: actions/checkout@v2
- name: Ruby version
run: ruby -v
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
run: rake -m test:build && rake test:run
macOS:
needs: Check-Skip
runs-on: macos-latest
env:
MRUBY_CONFIG: ci/gcc-clang
CC: clang
steps:
- uses: actions/checkout@v2
- name: Ruby version
run: ruby -v
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
run: rake -m test:build && rake test:run
Windows-MinGW:
needs: Check-Skip
runs-on: windows-latest
env:
MRUBY_CONFIG: ci/gcc-clang
CC: gcc
steps:
- uses: actions/checkout@v2
- name: Ruby version
run: ruby -v
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
run: rake -m test:build && rake test:run
Windows-Cygwin:
needs: Check-Skip
runs-on: windows-latest
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
MRUBY_CONFIG: ci/gcc-clang
CC: gcc
installer-path: '%TMP%\cygwin-setup.exe'
cygwin-root: C:\cygwin
package-dir: C:\cygwin-package
cache-version: v1
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: ${{ env.package-dir }}
key: ${{ runner.os }}-cygwin-${{ env.cache-version }}
- name: Download Cygwin installer
shell: cmd
run: >
bitsadmin /transfer download /priority foreground
https://cygwin.com/setup-x86_64.exe ${{ env.installer-path }}
- name: Install Cygwin
shell: cmd
run: >
${{ env.installer-path }}
--quiet-mode --no-shortcuts --no-startmenu --no-desktop --no-admin
--only-site --site http://mirrors.kernel.org/sourceware/cygwin/
--root ${{ env.cygwin-root }}
--local-package-dir ${{ env.package-dir }}
--packages gcc-core,gcc-g++,ruby
- name: Set PATH for Cygwin
run: |
echo '::set-env name=PATH::${{ env.cygwin-root }}\bin;${{ env.cygwin-root }}\usr\bin'
- name: Ruby version
shell: cmd
run: ruby -v
- name: Compiler version
run: ${{ env.CC }} --version
- name: Build and test
shell: cmd
run: ruby /usr/bin/rake -m test:build && ruby /usr/bin/rake test:run
- name: Set PATH for cache archiving (tar)
# set Windows path so that Cygwin tar is not used for cache archiving
run: echo '::set-env name=PATH::C:\windows\System32'
Windows-VC:
needs: Check-Skip
runs-on: windows-latest
runs-on: windows-2022
timeout-minutes: 10
env:
MRUBY_CONFIG: ci/msvc
steps:
- uses: actions/checkout@v2
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
- name: Ruby version
run: ruby -v
- name: Build and test
shell: cmd
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
rake -m test:build && rake test:run
-55
View File
@@ -1,55 +0,0 @@
name: "Code scanning - action"
on:
push:
pull_request:
schedule:
- cron: '0 19 * * 4'
jobs:
CodeQL-Build:
if: |
!contains(github.event.head_commit.message, '[ci skip]') &&
!contains(github.event.head_commit.message, '[skip ci]') &&
!contains(github.event.head_commit.message, '[skip gha]')
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
# - run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
+15
View File
@@ -0,0 +1,15 @@
# https://github.com/actions/labeler
name: Pull Request Labeler
on:
- pull_request_target
jobs:
triage:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true
+20 -16
View File
@@ -1,23 +1,27 @@
name: ❄️ Lint
# https://pre-commit.com/
name: Lint
on: [pull_request]
permissions:
contents: read
jobs:
yamllint:
name: 🍶 YAML
pre-commit:
name: Run pre-commit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: 🧹 YAML Lint
uses: ibiqlik/action-yamllint@v3
markdownlint:
name: 🍸 Markdown
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: 🚀 Use Node.js
uses: actions/setup-node@v2.1.4
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
- name: Install
run: |
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
with:
node-version: '12.x'
- run: npm install -g markdownlint-cli@0.25.0
- run: markdownlint '**/*.md'
path: ~/.cache/pre-commit
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
- name: Run pre-commit
run: pre-commit run --all-files
+7 -7
View File
@@ -1,26 +1,26 @@
# https://github.com/google/oss-fuzz
name: CIFuzz
on: [pull_request]
permissions:
contents: read
jobs:
Fuzzing:
if: |
!contains(github.event.head_commit.message, '[ci skip]') &&
!contains(github.event.head_commit.message, '[skip ci]') &&
!contains(github.event.head_commit.message, '[skip gha]')
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'mruby'
oss-fuzz-project-name: "mruby"
dry-run: false
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'mruby'
oss-fuzz-project-name: "mruby"
fuzz-seconds: 600
dry-run: false
- name: Upload Crash
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
if: failure()
with:
name: artifacts
-17
View File
@@ -1,17 +0,0 @@
name: 💎 Spellchecker
on: [pull_request]
jobs:
misspell:
name: 🧹 Check Spelling
runs-on: ubuntu-latest
steps:
- name: 🍒 Check Out
uses: actions/checkout@v2
- name: 🍅 Install
run: |
wget -O - -q https://git.io/misspell | sh -s -- -b .
- name: 🌶️ Misspell
run: |
git ls-files --empty-directory | xargs ./misspell -error
+32
View File
@@ -0,0 +1,32 @@
# https://github.com/super-linter/super-linter
name: Super-Linter
on: [pull_request]
permissions:
contents: read
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
name: Lint Code Base
runs-on: ubuntu-latest
steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
with:
# 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
env:
ERROR_ON_MISSING_EXEC_BIT: true
VALIDATE_BASH: true
# VALIDATE_BASH_EXEC: true
# VALIDATE_EDITORCONFIG: true
# VALIDATE_SHELL_SHFMT: true
DEFAULT_BRANCH: master
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VALIDATE_ALL_CODEBASE: false
+12 -13
View File
@@ -1,8 +1,8 @@
*.lock
*.bak
*.bc
*.d
*.i
*.lock
*.o
*.orig
*.pdb
@@ -13,25 +13,24 @@
*.tmp
*~
.DS_Store
.ccls*
.ccmalloc
.svn
.vscode
.yardoc
.ccls*
compile_flags.txt
compile_commands.json
cscope.files
cscope.out
tags
/.git
/bin
/build
/mruby-source-*.gem
/benchmark/**/*.dat
/benchmark/*.pdf
/benchmark/*.png
/bin
/build
/doc/api
/doc/capi
/mruby-source-*.gem
compile_commands.json
compile_flags.txt
cscope.files
cscope.out
node_modules
tags
!Gemfile.lock
-4414
View File
File diff suppressed because it is too large Load Diff
-16
View File
@@ -1,16 +0,0 @@
MD001: false
MD003: false
MD004: false
MD005: false
MD007: false
MD010: false
MD011: false
MD013: false
MD014: false
MD024: false
MD025: false
MD026: false
MD034: false
MD040: false
MD041: false
MD046: false
+84
View File
@@ -0,0 +1,84 @@
---
default_stages: [commit, push]
default_language_version:
# force all unspecified Python hooks to run python3
python: python3
minimum_pre_commit_version: "2.18.1"
repos:
- repo: meta
hooks:
- id: identity
- id: check-hooks-apply
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
- id: check-executables-have-shebangs
exclude: ^test/t/lang\.rb$
- id: check-merge-conflict
- id: check-shebang-scripts-are-executable
- id: check-vcs-permalinks
- id: check-yaml
- id: detect-private-key
- id: end-of-file-fixer
- id: file-contents-sorter
args: [--unique]
files: ^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
hooks:
- id: forbid-tabs
exclude: Makefile$|Makefile\..+$|makefile$|\.mk$
- id: remove-tabs
args: [--whitespaces-count, "2"]
exclude: Makefile$|Makefile\..+$|makefile$|\.mk$
- repo: https://github.com/codespell-project/codespell
rev: v2.2.6
hooks:
- id: codespell
name: Run codespell
description: Check spelling with codespell
entry: codespell --ignore-words=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
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
hooks:
- id: markdownlint
name: Run markdownlint
description: Checks the style of Markdown files
entry: markdownlint -c .github/linters/.markdown-lint.yml .
types: [markdown]
files: \.(md|mdown|markdown)$
- repo: https://github.com/tcort/markdown-link-check
rev: v3.11.2
hooks:
- id: markdown-link-check
name: Run markdown-link-check
description: Checks hyperlinks in Markdown files
args: [-q]
types: [markdown]
files: \.(md|mdown|markdown)$
- repo: https://github.com/adrienverge/yamllint
rev: v1.33.0
hooks:
- id: yamllint
name: Run yamllint
description: Check YAML files with yamllint
entry: yamllint --strict -c .github/linters/.yaml-lint.yml
types: [yaml]
files: \.(yaml|yml)$
+3
View File
@@ -0,0 +1,3 @@
{
"bracketSpacing": false
}
-8
View File
@@ -1,8 +0,0 @@
---
extends: default
rules:
document-start: disable
line-length: disable
truthy: false
+8 -2
View File
@@ -11,7 +11,13 @@ mrbgems/*/src/**/*.c
mrbgems/*/mrblib/**/*.rb
mrbgems/*/include/**/*.h
-
AUTHORS
LICENSE
CONTRIBUTING.md
SECURITY.md
TODO.md
doc/*.md
doc/guides/*.md
doc/internal/*.md
AUTHORS
LEGAL
LICENSE
NEWS
+318 -41
View File
@@ -1,48 +1,325 @@
This is the (likely incomplete) list of "mruby developers".
If you submit a patch to mruby, please add your name to the end
of this list.
# Authors of mruby (mruby developers)
Yukihiro Matsumoto (Matz)
## The List of Contributors sorted by number of commits (as of 2023-12-28 67cb987)
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)*
234 Jun Hiroe (@suzukaze)
220 Cremno (@cremno)*
209 Yuki Kurihara (@ksss)+
166 John Bampton (@jbampton)
151 Yasuhiro Matsumoto (@mattn)*
113 Carson McDonald (@carsonmcdonald)
103 Tomasz Dąbrowski (@dabroz)*
84 Akira Yumiyama (@akiray03)*
84 skandhas (@skandhas)
81 Hiroshi Mimaki (@mimaki)*
80 Masamitsu MURASE (@masamitsu-murase)
74 Yuichiro MASUI (@masuidrive)
71 Tatsuhiko Kubo (@cubicdaiya)*
65 Yuichiro Kaneko (@yui-knk)+
64 Paolo Bosetti (@pbosetti)*
59 Kurebayashi, Takahiro (@crimsonwoods)*
56 h2so5 (@h2so5)
52 Ralph Desir (@Mav7)*
45 Rory O'Connell (@RoryO)*
42 fleuria (@flaneur2020)
40 Christopher Aue (@christopheraue)
40 Seba Gamboa (@sagmor)
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)*
22 Clayton Smith (@clayton-shopify)
22 Uchio Kondo (@udzura)*
22 Zachary Scott (@zzak)*
22 mirichi (@mirichi)
21 Jared Breeden (@jbreeden)*
21 Ryan Lopopolo (@lopopolo)
19 Bouke van der Bijl (@bouk)
19 Felix Jones (@felixjones)*
19 Hidetaka Takano (@TJ-Hidetaka-Takano)
19 go kikuta (@gkta)*
18 Corey Powell (@IceDragon200)
18 Jon Maken (@jonforums)+
18 Mitchell Blank Jr (@mitchblank)*
16 bggd (@bggd)
16 kano4 (@kano4)
14 Blaž Hrastnik (@archseer)*
14 Jose Narvaez (@goyox86)
14 Kazuki Tsujimoto (@k-tsj)
14 Tadashi FUKUZAWA (@FUKUZAWA-Tadashi)+
14 fn ⌃ ⌥ (@FnControlOption)
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 Seeker (@SeekingMeaning)
11 YAMAMOTO Masaya (pandax381)
11 takkaw (@takkaw)
10 Miura Hideki (@miura1729)
10 Narihiro Nakamura (@authorNari)
10 Yuichi Nishiwaki (@nyuichi)
9 Akira Mitsui (@murasesyuka)*
9 Frank Celler (@fceller)
9 Tatsuya Matsumoto (@tmash06)*
8 Takashi Sogabe (@sogabe)
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)
6 David Siaw (@davidsiaw)*
6 Frederick John Milens III (@fjmilens3)
6 Hiro Asari (@BanzaiMan)
6 INOUE Yasuyuki (@yasuyuki)
6 Junji Sawada (@junjis0203)
6 Kenji Okimoto (@okkez)+
6 Selman ULUG (@selman)
6 Yusuke Endoh (@mame)*
6 masahino (@masahino)
5 Chris Reuter (@suetanvil)
5 Davide D'Agostino (@DAddYE)
5 Eric Hodel (@drbrain)
5 Hendrik (@Asmod4n)
5 Ichito Nagata (@i110)
5 Keita Obo (@ktaobo)*
5 Max Anselm (@silverhammermba)
5 Rodrigo Malizia (@rmalizia44)+
5 Syohei YOSHIDA (@syohex)
5 TOMITA Masahiro (@tmtm)
5 Yurie Yamane (@yurie)+
5 dreamedge (@dreamedge)
5 nkshigeru (@nkshigeru)
5 xuejianqing (@joans321)
4 Dante Catalfamo (@dantecatalfamo)
4 Goro Kikuchi (@gorogit)
4 Herwin Weststrate (@herwinw)
4 Horimoto Yasuhiro (@komainu8)
4 Jon Moss (@maclover7)
4 Ken Muramatsu (@ken-mu)+
4 Kohei Suzuki (@eagletmt)
4 Lanza (@LanzaSchneider)
4 Li Yazhou (@flaneur2020)
4 Marcus Stollsteimer (@stomar)
4 NARUSE, Yui (@nurse)
4 Ravil Bayramgalin (@brainopia)*+
4 Satoshi Odawara (@SatoshiOdawara)
4 Yuhei Okazaki (@Yuuhei-Okazaki)*
4 Yuji Yamano (@yyamano)
4 kurodash (@kurodash)*
4 wanabe (@wanabe)*
3 Anton Davydov (@davydovanton)
3 Carlo Prelz (@asfluido)*
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 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)
3 Takashi Kokubun (@k0kubun)
3 Tatsuhiro Tsujikawa (@tatsuhiro-t)
3 Thiago Scalone (@scalone)
3 Vladimir Dementyev (@palkan)*
3 William Light (@wrl)
3 bamchoh (@bamchoh)
3 sasaki takeru (@takeru)
3 windwiny (@windwiny)
2 Akira Moroo (@retrage)
2 Artur K (@nemerle)
2 Christian Mauceri (@mauceri)
2 Craig Lehmann (@craiglrock)*
2 Dominic Sisneros (@dsisnero)*
2 Dusan D. Majkic (@dmajkic)
2 Emiliano Lesende (@3miliano)
2 Francois Chagnon (@EiNSTeiN-)*
2 Gilad Zohari (@gzohari)
2 Go Saito (@govm)
2 Hirohito Higashi (@HirohitoHigashi)
2 Hiroyuki Iwatsuki (@iwadon)
2 Huei-Horng Yo (@hiroshiyui)
2 Jonas Kulla (@Ancurio)
2 Jun Takeda (@takjn)
2 Kazuaki Tanaka (@kaz0505)
2 Kazuhiko Yamashita (@pyama86)+
2 Kazuhiro Sera (@seratch)
2 Kuroda Daisuke (@dycoon)+
2 Lothar Scholz (@llothar)
2 Lukas Joeressen (@kext)
2 Masahiro Wakame (@vvkame)+
2 Minao Yamamoto (@tarosay)+
2 Nihad Abbasov (@NARKOZ)
2 Robert Mosolgo (@rmosolgo)
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 SouthWolf (@southwolf)
2 TJ Singleton (@tjsingleton)
2 Taiyo Mizuhashi (@taiyoslime)+
2 Tomás Pollak (@tomas)*
2 Yutaka HARA (@yhara)*+
2 Zhang Xiaohui (@hifoolno)
2 icm7216 (@icm7216)
1 A-Sat (@asatou)+
1 Abinoam Praxedes Marques Junior (@abinoam)
1 Alex Wang (@nanamiwang)+
1 AlexDenisov (@AlexDenisov)
1 Andrew Nordman (@cadwallion)
1 Ashish Kurmi (@boahc077)
1 Atsushi Morimoto (@mynz)
1 Ben A Morgan (@BenMorganIO)
1 Benoit Daloze (@eregon)
1 Colin MacKenzie IV (@sinisterchipmunk)
1 Daehyub Kim (@lateau)
1 Daniel Varga (@vargad)
1 Edgar Boda-Majer (@eboda)
1 Fangrui Song (@MaskRay)
1 Flavio Medeiros (@flaviommedeiros)
1 Francis Bogsanyi (@fbogsany)
1 Guo Xiao (@guoxiao)
1 Gwen Boatrite (@boatrit)
1 Gwendolyn Boatrite (@boatrite)
1 HARADA Makoto (@haramako)
1 HAYASHI Kentaro (@kenhys)
1 Hiroki Mori (@yamori813)+
1 Hiromasa Ishii (@Hir0)+
1 Hiroyuki Matsuzaki (@Hiroyuki-Matsuzaki)
1 Hugo Logmans (@hlogmans)
1 Jack Danger Canty (@JackDanger)
1 Jeff Federman (@jefffederman)
1 Jeffrey Crowell (@crowell)
1 Jeremy Ong (@jeremyong)
1 Jiro Nishiguchi (@spiritloose)
1 Joachim Baran (@indiedotkim)
1 Joe Kutner (@jkutner)
1 Jun Aruga (@junaruga)
1 Junichi Kajiwara (@kjunichi)
1 Jurriaan Pruis (@jurriaan)
1 Katsuhiko Kageyama (@kishima)+
1 Katsuyoshi Ito (@katsuyoshi)
1 Kazuhiro NISHIYAMA (@znz)
1 Kei Sawada (@remore)
1 Kim H Madsen (@kimhmadsen)
1 Koichi ITO (@koic)
1 Konstantin Haase (@rkh)
1 Leo Neat (@Leo-Neat)
1 Lian Cheng (@liancheng)
1 Luis Lavena (@luislavena)
1 Lukas Elmer (@lukaselmer)
1 Lukas Stabe (@Ahti)
1 M.Naruoka (@fenrir-naru)
1 Mark Delk (@jethrodaniel)
1 Martin Bosslet (@emboss)+
1 Masahiko Sawada (@MasahikoSawada)
1 Matt Aimonetti (@mattetti)
1 Maxim Abramchuk (@MaximAbramchuck)
1 Megumi Tomita (@tomykaira)+
1 Mitchell Hashimoto (@mitchellh)
1 Mitsutaka Mimura (@takkanm)
1 Nathan Ladd (@ntl)
1 Nicholas (@knf)
1 Nozomi SATO (@nozomiS)
1 Okumura Takahiro (@hfm)
1 Patrick Ellis (@pje)
1 Patrick Pokatilo (@SHyx0rmZ)
1 Pavel Evstigneev (@Paxa)+
1 Prayag Verma (@pra85)
1 Ranmocy (@ranmocy)
1 Robert McNally (@wolfmcnally)
1 Ryan Scott Lewis (@RyanScottLewis)
1 Ryo Okubo (@syucream)
1 SAkira a.k.a. Akira Suzuki (@sakisakira)
1 Santiago Rodriguez (@sanrodari)
1 Satoh, Hiroh (@cho45)+
1 Sayed Abdelhaleem (@visualsayed)
1 Sergey Ukrainskiy (@ukrainskiysergey)
1 Shugo Maeda (@shugo)
1 Sorah Fukumori (@sorah)
1 Stephen Jothen (@sjothen)
1 Stuart Hinson (@stuarth)
1 Takuma Kume (@takumakume)+
1 Takuya ASADA (@syuu1228)
1 Thomas Schmidt (@digitaltom)
1 Timo Schilling (@timoschilling)
1 Tom Black (@blacktm)
1 Utkarsh Kukreti (@utkarshkukreti)
1 W (@graywolf)
1 Wuffers Lightwolf (@w-x-l)
1 YAMAMOTO Yuji (@igrep)
1 Yevhen Viktorov (@yevgenko)
1 Yoji SHIDARA (@darashi)
1 Yoshiori SHOJI (@yoshiori)
1 Yuji Yokoo (@yujiyokoo)
1 Yukang (@chenyukang)
1 Yurii Nakonechnyi (@inobelar)
1 Yusuke Suzuki (@Constellation)+
1 Yusuke Tanaka (@csouls)
1 alpha.netzilla (@alpha-netzilla)
1 arton (@arton)
1 duangsuse (@duangsuse)
1 fl0l0u (@fl0l0u)
1 hhc0null (@hhc0null)
1 iTitou (@titouanc)
1 javier ramírez (@javier)
1 liyuray (@liyuray)
1 lucas dicioccio (@lucasdicioccio)
1 n4o847 (@n4o847)
1 robert (@R-obert)
1 sbsoftware (@sbsoftware)
1 ssmallkirby (@smallkirby)
1 taku toyama (@tsuichu)
`*` - Entries unified according to names and addresses
`+` - Entries with names different from commits
## Contributors without named commits
Yuichi Osawa (Mitsubishi Electric Micro-Computer Application Software)
Shota Nakano (Manycolors)
Bjorn De Meyer
## Corporate contributors
Ministry of Economy, Trade and Industry, Japan
Kyushu Bureau of Economy, Trade and Industry
SCSK KYUSHU CORPORATION
Kyushu Institute of Technology
Network Applied Communication Laboratory, Inc.
Daniel Bovensiepen
Jon Maken
Bjorn De Meyer
Yuichiro MASUI
Masamitsu MURASE
Masaki Muranaka
Internet Initiative Japan Inc.
Tadashi FUKUZAWA
MATSUMOTO Ryosuke
Yasuhiro Matsumoto
Koji Yoshioka
Jun Hiroe
Narihiro Nakamura
Yuichi Nishiwaki
Tatsuhiko Kubo
Takeshi Watanabe
Yuki Kurihara
specified non-profit corporation mruby Forum
Kazuaki Tanaka
Hiromasa Ishii
Hiroshi Mimaki
Satoshi Odawara
Specified non-profit organization mruby Forum
Mitsubishi Electric Micro-Computer Application Software Co.,Ltd.
Ralph Desir(Mav7)
Hiroyuki Matsuzaki
Yuhei Okazaki
Manycolors, Inc.
Shota Nakano
Yuichi Osawa
Terence Lee
Zachary Scott
Tomasz Dąbrowski
Christopher Aue
Masahiro Wakame
YAMAMOTO Masaya
KOBAYASHI Shuji
RIZAL Reckordp
Rory O'Connell
John Bampton
Seeker
+134 -17
View File
@@ -8,16 +8,120 @@ Contributors agree to license their contribution(s) under MIT license.
To make it easy to review and understand your change please keep the following
things in mind before submitting your pull request:
* Work on the latest possible state of **mruby/master**
* Create a branch which is dedicated to your change
* Test your changes before creating a pull request (```rake test```)
* If possible write a test case which confirms your change
* Don't mix several features or bug-fixes in one pull request
* Create a meaningful commit message
* Explain your change (i.e. with a link to the issue you are fixing)
* Use mrbgem to provide non ISO features (classes, modules and methods) unless
- Work on the latest possible state of **mruby/master**
- Create a branch which is dedicated to your change
- Test your changes before creating a pull request (`rake test`)
- If possible write a test case which confirms your change
- Don't mix several features or bug-fixes in one pull request
- Create a meaningful commit message
- Explain your change (i.e. with a link to the issue you are fixing)
- Use mrbgem to provide non ISO features (classes, modules and methods) unless
you have a special reason to implement them in the core
## pre-commit
A framework for managing and maintaining multi-language `pre-commit` hooks.
`pre-commit` can be [installed](https://pre-commit.com/#installation) with `pip`, `curl`, `brew` or `conda`.
You need to first install `pre-commit` and then install the `pre-commit` hooks with `pre-commit install`.
Now `pre-commit` will run automatically on git commit!
It's usually a good idea to run the hooks against all the files when adding new hooks (usually `pre-commit`
will only run on the changed files during git hooks). Use `pre-commit run --all-files` to check all files.
To run a single hook use `pre-commit run --all-files <hook_id>`
To update use `pre-commit autoupdate`
Sometimes you might need to skip one or more hooks which can be done with the `SKIP` environment variable.
`$ SKIP=yamllint git commit -m "foo"`
For convenience, we have added `pre-commit run --all-files`, `pre-commit install` and `pre-commit autoupdate`
to both the Makefile and the Rakefile. Run them with:
- `make check` or `rake check`
- `make checkinstall` or `rake checkinstall`
- `make checkupdate` or `rake checkupdate`
To configure `pre-commit` you can modify the config file [.pre-commit-config.yaml](.pre-commit-config.yaml).
We use [GitHub Actions](.github/workflows/lint.yml) to run `pre-commit` on every pull request.
### pre-commit quick links
- [Quick start](https://pre-commit.com/#quick-start)
- [Usage](https://pre-commit.com/#usage)
- [pre-commit autoupdate](https://pre-commit.com/#pre-commit-autoupdate)
- [Temporarily disabling hooks](https://pre-commit.com/#temporarily-disabling-hooks)
## Docker
We have both a `Dockerfile` and `docker-compose.yml` files in the repository root.
You can run these with the command line or use
[Docker Desktop](https://www.docker.com/products/docker-desktop/).
The Docker image is running Debian bullseye with Ruby and Python installed.
You can build the Docker image with:
`$ docker-compose build test`
So far we just have one service: `test`. Running the default `docker-compose`
command will create the Docker image, spin up a container and then build and
run all mruby tests.
The default `docker-compose` command is:
`$ docker-compose -p mruby run test`
You can also use Make or Rake to run the default `docker-compose`
command from above:
- `make composetest`
- `rake composetest`
List your Docker images with:
```console
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mruby-test latest ec60f9536948 29 seconds ago 1.29GB
```
You can also run any custom `docker-compose` command which will override
the default. For example to run `pre-commit run --all-files` type:
`$ docker-compose -p mruby run test pre-commit run --all-files`
For convenience, you can also run `pre-commit` with:
- `make composecheck`
- `rake composecheck`
The bonus of running `pre-commit` with `docker-compose` is that you won't need
to install `pre-commit` and the hooks on your local machine. And that also
means you won't need to install `brew`, `conda` or `pip`.
Note limitation: currently running `pre-commit` with `docker-compose` we
skip the `check-executables-have-shebangs` hook.
Two more examples of custom `docker-compose` commands are:
- `$ docker-compose -p mruby run test ls`
- `$ docker-compose -p mruby run test rake doc:api`
If you want to test using a different `docker-compose` YAML config file you
can use the `-f` flag:
`$ docker-compose -p mruby -f docker-compose.test.yml run test`
- <https://docs.docker.com/compose/>
- <https://docs.docker.com/engine/reference/commandline/cli/>
## 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).
## Coding conventions
How to style your C and Ruby code which you want to submit.
@@ -32,7 +136,7 @@ C code:
mruby should be highly portable to other systems and compilers. For this it is
recommended to keep your code as close as possible to the C99 standard
(http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf).
(<http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf>).
Visual C++ is also an important target for mruby (supported version is 2013 or
later). For this reason features that are not supported by Visual C++ may not
@@ -48,13 +152,13 @@ on-demand.
#### Insert a break after the function return value:
```C
int
main(void)
{
...
}
```
```c
int
main(void)
{
...
}
```
### Ruby code
@@ -64,5 +168,18 @@ language itself. Please note the following hints for your Ruby code:
#### Comply with the Ruby standard (ISO/IEC 30170:2012)
mruby is currently targeting to execute Ruby code which complies to ISO/IEC
30170:2012 (https://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579),
30170:2012 (<https://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579>),
unless there's a clear reason, e.g. the latest Ruby has changed behavior from ISO.
## Building documentation
### mruby API
- [YARD](https://yardoc.org/) - YARD is a documentation generation tool for the Ruby programming language
- [yard-mruby](https://rubygems.org/gems/yard-mruby) - Document mruby sources with YARD
- [yard-coderay](https://rubygems.org/gems/yard-coderay) - Adds coderay syntax highlighting to YARD docs
### C API
- [Doxygen](https://www.doxygen.nl/) - Generate documentation from source code
- [Graphviz](https://graphviz.org/) - Graphviz is open source graph visualization software
+13
View File
@@ -0,0 +1,13 @@
FROM ruby:3.2.2-bullseye
RUN apt-get update && apt-get install --no-install-recommends -y python3-pip shellcheck \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY Gemfile Gemfile.lock .pre-commit-config.yaml ./
RUN bundle install && pip3 install pre-commit && git init . && pre-commit install-hooks
COPY . .
+654 -314
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
# frozen_string_literal: true
source 'https://rubygems.org'
gem 'rake'
gem 'yard'
gem 'yard-coderay'
gem 'yard-mruby'
+27
View File
@@ -0,0 +1,27 @@
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)
yard-coderay (0.1.0)
coderay
yard
yard-mruby (0.3.0)
yard (~> 0.9.0)
PLATFORMS
ruby
x86_64-darwin-21
x86_64-linux
DEPENDENCIES
rake
yard
yard-coderay
yard-mruby
BUNDLED WITH
2.4.10
+34
View File
@@ -4,3 +4,37 @@ 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/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]
strtod implementation.
author: Yasuhiro Matsumoto (@mattn)
license: public domain
The original code can be found in https://github.com/mattn/strtod
[src/fmt_fp.c]
The code in this function was inspired from Fred Bayer's pdouble.c.
Since pdouble.c was released as Public Domain, I'm releasing this
code as public domain as well.
Dave Hylands
The original code can be found in https://github.com/dhylands/format-float
[mrbgems/mruby-dir/src/Win/dirent.c] used only for Windows platform
Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee, provided
that this copyright and permissions notice appear in all copies and
derivatives.
This software is supplied "as is" without express or implied warranty.
But that said, if there are any problems please get in touch.
+1 -2
View File
@@ -1,4 +1,4 @@
Copyright (c) 2010-2021 mruby developers
Copyright (c) 2010- mruby developers
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
@@ -17,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
+20
View File
@@ -13,3 +13,23 @@ test : all
clean :
$(RAKE) clean
.PHONY : clean
check :
pre-commit run --all-files
.PHONY : check
checkinstall :
pre-commit install
.PHONY : checkinstall
checkupdate :
pre-commit autoupdate
.PHONY : checkupdate
composecheck :
docker-compose -p mruby run test pre-commit run --all-files
.PHONY : composecheck
composetest :
docker-compose -p mruby run test
.PHONY : composetest
+183 -7
View File
@@ -1,13 +1,189 @@
* NEWS
NEWS
----
This document is a list of user visible feature changes made between
releases except for bug fixes.
# User visible changes in `mruby3.3` from `mruby3.2`
Note that each entry is kept so brief that no reason behind or
reference information is supplied with. For a full list of changes
with all sufficient information, see the ChangeLog file.
"**_NOTE_**:" are changes to be aware of.
# The language
** Information about first release v1.0.0
- 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
([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. ([#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 ([34c5d96](https://github.com/mruby/mruby/commit/34c5d96))
- `mrb_open_allocf` will be deprecated ([cfee5c2](https://github.com/mruby/mruby/commit/cfee5c2))
# Changes in C API
- 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
- **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
- [#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)
- [#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`
+54 -34
View File
@@ -1,36 +1,51 @@
[![Build Status][build-status-img]][travis-ci]
<div align="center">
<p>
<a href="https://mruby.org/">
<img src="https://avatars.githubusercontent.com/u/1796512?s=200&v=4"
alt="The mruby programming language" title="mruby">
</a>
</p>
<h1>mruby</h1>
<a href="https://github.com/marketplace/actions/super-linter">
<img src="https://github.com/mruby/mruby/actions/workflows/super-linter.yml/badge.svg"
alt="GitHub Super-Linter">
</a>
</div>
## What is mruby
mruby is the lightweight implementation of the Ruby language complying to (part
of) the [ISO standard][ISO-standard]. Its syntax is Ruby 2.x compatible.
of) the [ISO standard][ISO-standard] with more recent features provided by Ruby 3.x.
Also, its syntax is Ruby 3.x compatible except for pattern matching.
mruby can be linked and embedded within your application. We provide the
interpreter program "mruby" and the interactive mruby shell "mirb" as examples.
You can also compile Ruby programs into compiled byte code using the mruby
compiler "mrbc". All those tools reside in the "bin" directory. "mrbc" is
also able to generate compiled byte code in a C source file, see the "mrbtest"
program under the "test" directory for an example.
You can link and embed mruby within your application. The "mruby" interpreter
program and the interactive "mirb" shell are provided as examples. You can also
compile Ruby programs into compiled byte code using the "mrbc" compiler. All
these tools are located in the "bin" directory. "mrbc" can also generate
compiled byte code in a C source file. See the "mrbtest" program under the
"test" directory for an example.
This achievement was sponsored by the Regional Innovation Creation R&D Programs
of the Ministry of Economy, Trade and Industry of Japan.
## How to get mruby
The stable version 3.0.0 of mruby can be downloaded via the following URL: [https://github.com/mruby/mruby/archive/3.0.0.zip](https://github.com/mruby/mruby/archive/3.0.0.zip)
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 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)
The trunk of the mruby source tree can be checked out with the
following command:
$ git clone https://github.com/mruby/mruby.git
```console
$ git clone https://github.com/mruby/mruby.git
```
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).
## mruby homepage
## mruby home-page
The URL of the mruby home-page is: https://mruby.org.
The URL of the mruby homepage is: <https://mruby.org>.
## Mailing list
@@ -38,31 +53,41 @@ We don't have a mailing list, but you can use [GitHub issues](https://github.com
## How to compile, test, and install (mruby and gems)
See the [compile.md](https://github.com/mruby/mruby/blob/master/doc/guides/compile.md) file.
For the simplest case, type
```console
rake all test
```
See the [compile.md](doc/guides/compile.md) file for the detail.
## Building documentation
There are two sets of documentation in mruby: the mruby API (generated by yard) and C API (Doxygen)
There are two sets of documentation in mruby: the mruby API (generated by YARD) and C API (Doxygen and Graphviz)
To build both of them, simply go
rake doc
```console
rake doc
```
You can also view them in your browser
rake view_api
rake view_capi
```console
rake view_api
rake view_capi
```
## How to customize mruby (mrbgems)
mruby contains a package manager called *mrbgems*. To create extensions
in C and/or Ruby you should create a *GEM*. For a documentation of how to
use mrbgems consult the file [mrbgems.md](https://github.com/mruby/mruby/blob/master/doc/guides/mrbgems.md).
For example code of how to use mrbgems look into the folder *examples/mrbgems/*.
mruby contains a package manager called "mrbgems" that you can use to create
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.
## License
mruby is released under the [MIT License](https://github.com/mruby/mruby/blob/master/LICENSE).
mruby is released under the [MIT License](LICENSE).
## Note for License
@@ -70,26 +95,21 @@ mruby has chosen a MIT License due to its permissive license allowing
developers to target various environments such as embedded systems.
However, the license requires the display of the copyright notice and license
information in manuals for instance. Doing so for big projects can be
complicated or troublesome. This is why mruby has decided to display "mruby
complicated or troublesome. This is why mruby has decided to display "mruby
developers" as the copyright name to make it simple conventionally.
In the future, mruby might ask you to distribute your new code
(that you will commit,) under the MIT License as a member of
"mruby developers" but contributors will keep their copyright.
(We did not intend for contributors to transfer or waive their copyrights,
Actual copyright holder name (contributors) will be listed in the AUTHORS
actual copyright holder name (contributors) will be listed in the [AUTHORS](AUTHORS)
file.)
Please ask us if you want to distribute your code under another license.
## How to Contribute
See the [contribution guidelines][contribution-guidelines], and then send a pull
request to <https://github.com/mruby/mruby>. We consider you have granted
non-exclusive right to your contributed code under MIT license. If you want to
be named as one of mruby developers, please include an update to the AUTHORS
file in your pull request.
To contribute to mruby, please refer to the [contribution guidelines][contribution-guidelines] and send a pull request to the [mruby GitHub repository](https://github.com/mruby/mruby).
By contributing, you grant non-exclusive rights to your code under the MIT License.
[ISO-standard]: https://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579
[build-status-img]: https://travis-ci.org/mruby/mruby.svg?branch=master
[contribution-guidelines]: https://github.com/mruby/mruby/blob/master/CONTRIBUTING.md
[travis-ci]: https://travis-ci.org/mruby/mruby
[contribution-guidelines]: CONTRIBUTING.md
+30 -4
View File
@@ -1,4 +1,3 @@
# encoding: utf-8
# Build description.
# basic build file for mruby
MRUBY_ROOT = File.dirname(File.expand_path(__FILE__))
@@ -31,8 +30,8 @@ load "#{MRUBY_ROOT}/tasks/bin.rake"
load "#{MRUBY_ROOT}/tasks/presym.rake"
load "#{MRUBY_ROOT}/tasks/test.rake"
load "#{MRUBY_ROOT}/tasks/benchmark.rake"
load "#{MRUBY_ROOT}/tasks/gitlab.rake"
load "#{MRUBY_ROOT}/tasks/doc.rake"
load "#{MRUBY_ROOT}/tasks/install.rake"
##############################
# generic build targets, rules
@@ -58,7 +57,7 @@ task :clean do
rm_rf build.build_dir
rm_f build.products
end
puts "Cleaned up target build folder"
puts "Cleaned up target build directory"
end
desc "clean everything!"
@@ -66,5 +65,32 @@ task :deep_clean => %w[clean doc:clean] do
MRuby.each_target do |build|
rm_rf build.gem_clone_dir
end
puts "Cleaned up mrbgems build folder"
rm_rf "#{MRUBY_ROOT}/bin"
rm_rf "#{MRUBY_ROOT}/build"
puts "Cleaned up mrbgems build directory"
end
desc "run all pre-commit hooks against all files"
task :check do
sh "pre-commit run --all-files"
end
desc "install the pre-commit hooks"
task :checkinstall do
sh "pre-commit install"
end
desc "check the pre-commit hooks for updates"
task :checkupdate do
sh "pre-commit autoupdate"
end
desc "run all pre-commit hooks against all files with docker-compose"
task :composecheck do
sh "docker-compose -p mruby run test pre-commit run --all-files"
end
desc "build and run all mruby tests with docker-compose"
task :composetest do
sh "docker-compose -p mruby run test"
end
+20
View File
@@ -0,0 +1,20 @@
# Security Policy
## Reporting a Vulnerability
If you have any security concern, contact <matz@ruby.or.jp>.
## Scope
We consider the following issues as vulnerabilities:
- Remote code execution
- Crash caused by a valid Ruby script
We _don't_ consider the following issues as vulnerabilities:
- Runtime C undefined behavior (including integer overflow)
- Crash caused by misused API
- Crash caused by modified compiled binary
- ASAN/Valgrind warning for too big memory allocation
mruby assumes `malloc(3)` returns `NULL` for too big allocations
+9 -13
View File
@@ -1,17 +1,13 @@
Thing to Do in the future
===
# Things to Do in the future
# After mruby 3.0
# After mruby 3.1
* replace `fp_fmt.c` by `float_format` (https://github.com/dhylands/format-float.git)
* multi-precision integer
* WORD_BOXING: Pack some floats in `mrb_value`
* NAN_BOXING: Allow `MRB_INT64` along with NaN boxing
* keyword arguments a la Ruby3.0 (using `OP_SENDVK`)
* parser and code generator independent from `mrb_state` (mmruby?)
- parser and code generator independent from `mrb_state` (picoruby?)
- variable sized AST node
- iv/hash entry cache
- more peephole optimization (if possible)
# Things to do (Things that are not done yet)
# Things to do (Things we need to consider)
* `begin ... end while cond` to behave as CRuby
* special variables ($1,$2..)
* super in aliased methods
- `begin ... end while cond` to behave as CRuby
- special variables ($1,$2..)
+5 -2
View File
@@ -4,6 +4,10 @@ shallow_clone: true
environment:
matrix:
- job_name: Visual Studio 2022 64bit
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
visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat
appveyor_build_worker_image: Visual Studio 2019
@@ -32,13 +36,12 @@ environment:
init:
- call "%visualcpp%" %machine%
# For using Rubyins4aller's Ruby 2.6 64bit
# For using RubyInstaller's Ruby 2.6 64bit
# 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%
- ruby --version
build_script:
- set MRUBY_CONFIG=ci/msvc
- rake -m test:build
+17 -22
View File
@@ -1,29 +1,29 @@
# AO render benchmark
# Original program (C) Syoyo Fujita in Javascript (and other languages)
# Original program (C) Syoyo Fujita in JavaScript (and other languages)
# https://code.google.com/p/aobench/
# Ruby(yarv2llvm) version by Hideki Miura
# mruby version by Hideki Miura
#
IMAGE_WIDTH = 64
IMAGE_HEIGHT = 64
IMAGE_WIDTH = Integer(ARGV[0] || 64)
IMAGE_HEIGHT = IMAGE_WIDTH
NSUBSAMPLES = 2
NAO_SAMPLES = 8
module Rand
# Use xorshift
@@x = 123456789
@@y = 362436069
@@z = 521288629
@@w = 88675123
@x = 123456789
@y = 362436069
@z = 521288629
@w = 88675123
BNUM = 1 << 29
BNUMF = BNUM.to_f
def self.rand
x = @@x
x = @x
t = x ^ ((x & 0xfffff) << 11)
w = @@w
@@x, @@y, @@z = @@y, @@z, w
w = @@w = (w ^ (w >> 19) ^ (t ^ (t >> 8)))
w = @w
@x, @y, @z = @y, @z, w
w = @w = (w ^ (w >> 19) ^ (t ^ (t >> 8)))
(w % BNUM) / BNUMF
end
end
@@ -179,7 +179,7 @@ def clamp(f)
i.to_i
end
def otherBasis(basis, n)
def orthoBasis(basis, n)
basis[2] = Vec.new(n.x, n.y, n.z)
basis[1] = Vec.new(0.0, 0.0, 0.0)
@@ -211,7 +211,7 @@ class Scene
def ambient_occlusion(isect)
basis = Array.new(3)
otherBasis(basis, isect.n)
orthoBasis(basis, isect.n)
ntheta = NAO_SAMPLES
nphi = NAO_SAMPLES
@@ -243,8 +243,6 @@ class Scene
@plane.intersect(ray, occisect)
if occisect.hit
occlusion = occlusion + 1.0
else
0.0
end
end
end
@@ -254,8 +252,8 @@ class Scene
end
def render(w, h, nsubsamples)
cnt = 0
nsf = nsubsamples.to_f
nsfs = nsf * nsf
h.times do |y|
w.times do |x|
rad = Vec.new(0.0, 0.0, 0.0)
@@ -263,7 +261,6 @@ class Scene
# Subsampling
nsubsamples.times do |v|
nsubsamples.times do |u|
cnt = cnt + 1
wf = w.to_f
hf = h.to_f
xf = x.to_f
@@ -288,15 +285,13 @@ class Scene
rad.x = rad.x + col.x
rad.y = rad.y + col.y
rad.z = rad.z + col.z
else
0.0
end
end
end
r = rad.x / (nsf * nsf)
g = rad.y / (nsf * nsf)
b = rad.z / (nsf * nsf)
r = rad.x / nsfs
g = rad.y / nsfs
b = rad.z / nsfs
printf("%c", clamp(r))
printf("%c", clamp(g))
printf("%c", clamp(b))
-1
View File
@@ -1,4 +1,3 @@
def fib n
return n if n < 2
fib(n-2) + fib(n-1)
+4 -2
View File
@@ -1,9 +1,11 @@
#from http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby
# from http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby
# which is lost long time ago. The past content can be retrieved from
# https://web.archive.org/web/20040805115204/http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby
NUM = 300
SIZE = 10000
def test_lists()
def test_lists
# create a list of integers (Li1) from 1 to SIZE
li1 = (1..SIZE).to_a
# copy the list to li2 (not by individual items)
-13
View File
@@ -1,13 +0,0 @@
MRuby::Build.new do |conf|
toolchain :gcc
end
MRuby::Build.new('gcc') do |conf|
toolchain :gcc
conf.gembox 'default'
end
MRuby::Build.new('clang') do |conf|
toolchain :clang
conf.gembox 'default'
end
+2 -2
View File
@@ -11,7 +11,7 @@ MRuby::CrossBuild.new("ArduinoDue") do |conf|
# ARDUINO_PATH = '/Applications/Arduino.app/Contents/Java'
# GNU Linux
ARDUINO_PATH = '/opt/arduino'
# Arduino IDE <= 1.5.6
# Arduino IDE <= 1.5.6
BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/g++_arm_none_eabi/bin"
# Arduino IDE >= 1.5.7
# BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin"
@@ -32,7 +32,7 @@ MRuby::CrossBuild.new("ArduinoDue") do |conf|
cc.defines << %w(MRB_HEAP_PAGE_SIZE=64)
cc.defines << %w(KHASH_DEFAULT_SIZE=8)
cc.defines << %w(MRB_GC_STRESS)
#cc.defines << %w(MRB_NO_STDIO) #if you dont need stdio.
#cc.defines << %w(MRB_NO_STDIO) #if you don't need stdio.
#cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval
end
+1 -1
View File
@@ -21,7 +21,7 @@ MRuby::CrossBuild.new('core2-32-poky-linux') do |conf|
#
POKY_EDISON_PATH = '/opt/poky-edison/1.7.2'
POKY_EDISON_SYSROOT = "#{POKY_EDISON_PATH}/sysroots/core2-32-poky-linux"
POKY_EDISON_SYSROOT = "#{POKY_EDISON_PATH}/sysroots/core2-32-poky-linux"
POKY_EDISON_X86_PATH = "#{POKY_EDISON_PATH}/sysroots/i386-pokysdk-darwin"
POKY_EDISON_BIN_PATH = "#{POKY_EDISON_X86_PATH}/usr/bin/i586-poky-linux"
+2 -2
View File
@@ -12,7 +12,7 @@ MRuby::CrossBuild.new("Galileo") do |conf|
#ARDUINO_GALILEO_PATH = '/opt/arduino'
GALILEO_BIN_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i386-pokysdk-darwin/usr/bin/i586-poky-linux-uclibc"
GALILEO_SYSROOT = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc"
GALILEO_SYSROOT = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc"
GALILEO_X86_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/arduino/x86"
@@ -74,7 +74,7 @@ MRuby::CrossBuild.new("Galileo") do |conf|
conf.gem :core => "mruby-fiber"
conf.gem :core => "mruby-toplevel-ext"
#lightweigh regular expression
#lightweight regular expression
conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master"
#Arduino API
+1 -1
View File
@@ -18,7 +18,7 @@ MRuby::CrossBuild.new("RX630") do |conf|
cc.defines << %w(MRB_HEAP_PAGE_SIZE=64)
cc.defines << %w(KHASH_DEFAULT_SIZE=8)
cc.defines << %w(MRB_GC_STRESS)
cc.defines << %w(MRB_NO_STDIO) #if you dont need stdio.
cc.defines << %w(MRB_NO_STDIO) #if you don't need stdio.
#cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval
end
@@ -2,8 +2,8 @@
MRuby::CrossBuild.new('android-arm64-v8a') do |conf|
params = {
:arch => 'arm64-v8a',
:platform => 'android-24',
:toolchain => :clang,
:sdk_version => 33,
:toolchain => :clang
}
toolchain :android, params
-11
View File
@@ -1,11 +0,0 @@
# Requires Android NDK r13 or later.
MRuby::CrossBuild.new('android-armeabi') do |conf|
params = {
:arch => 'armeabi',
:platform => 'android-24',
:toolchain => :clang,
}
toolchain :android, params
conf.gembox 'default'
end
@@ -4,8 +4,8 @@ MRuby::CrossBuild.new('android-armeabi-v7a-neon-hard') do |conf|
:arch => 'armeabi-v7a',
:mfpu => 'neon',
:mfloat_abi => 'hard',
:platform => 'android-24',
:toolchain => :clang,
:sdk_version => 33,
:toolchain => :clang
}
toolchain :android, params
+1 -3
View File
@@ -3,11 +3,9 @@ bits = [64, 32]
ints = [64, 32]
boxings.product(bits, ints) do |boxing, bit, int|
next if boxing == "nan" && int == 64
MRuby::Build.new("boxing-#{boxing}-m#{bit}-i#{int}") do |conf|
conf.toolchain :gcc
conf.gembox 'default'
conf.gembox 'full-core'
conf.compilers.each do |c|
c.defines << "MRB_#{boxing.upcase}_BOXING"
c.defines << "MRB_INT#{int}"
+1 -1
View File
@@ -29,7 +29,7 @@ MRuby::CrossBuild.new("chipKITMax32") do |conf|
cc.defines << %w(MRB_HEAP_PAGE_SIZE=64)
cc.defines << %w(KHASH_DEFAULT_SIZE=8)
cc.defines << %w(MRB_GC_STRESS)
#cc.defines << %w(MRB_NO_STDIO) #if you dont need stdio.
#cc.defines << %w(MRB_NO_STDIO) #if you don't need stdio.
#cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval
end
+4 -4
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)
conf.cc.defines += %w(MRB_GC_STRESS MRB_USE_DEBUG_HOOK MRB_UTF8_STRING)
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)
c.defines += %w(MRB_GC_FIXED_ARENA MRB_UTF8_STRING)
end
conf.enable_bintest
conf.enable_test
@@ -28,9 +28,9 @@ MRuby::Build.new('cxx_abi') do |conf|
conf.toolchain
conf.gembox 'full-core'
conf.cc.flags += %w(-fpermissive)
conf.cc.flags += %w(-fpermissive -std=gnu++03)
conf.compilers.each do |c|
c.defines += %w(MRB_GC_FIXED_ARENA)
c.defines += %w(MRB_GC_FIXED_ARENA MRB_UTF8_STRING)
end
conf.enable_test
+1 -1
View File
@@ -1,7 +1,7 @@
MRuby::Build.new do |conf|
conf.toolchain :clang
# include the GEM box
conf.gembox 'default'
conf.gembox 'full-core'
# Turn on `enable_debug` for better debugging
conf.enable_sanitizer "address,undefined"
+90
View File
@@ -0,0 +1,90 @@
# Cross-compile using MinGW and test using Wine.
#
# Steps:
#
# 1. Install MinGW; 64-bit target seems to work best.
#
# 2. Install Wine.
#
# 3. Run command:
#
# wine cmd /c echo "Hello world"'
#
# This will confirm that Wine works and will trigger standard
# Wine setup, which is slow.
#
# 4. Confirm that drive 'z:' is mapped to your root filesystem.
# (This is supposed to be a default but it helps to
# double-check.) To confirm, run:
#
# wine cmd /c dir 'z:\\'
#
# This should give you a DOS-style equivalent of 'ls /'. If not,
# you'll need to fix that with winecfg or by adding a symlink to
# '~/.wine/dosdevices'.
#
# 5. You will likely need to tweak the settings below to work with
# your configuration unless it is exactly like one of the platforms
# I've tested on (Ubuntu 20.04 or macOS using brew.)
#
# 6. Run the build command:
#
# MRUBY_CONFIG=build_config/cross-mingw-winetest.rb rake test
#
# If all goes well, you should now have Windows executables and a
# set of passing tests.
#
#
# Caveats:
#
# 1. This works by using a helper script that rewrites test output
# to make it look *nix-like and then handing it back to the test
# cases. Some of the existing tests were (slightly) modified to
# make this easier but only for the 'full-core' gembox. Other
# gems' bintests may or may not work with the helper script and
# may or may not be fixable by extending the script.
#
# 2. MinGW and Wine are both complex and not very consistent so you
# will likely need to do some fiddling to get things to work.
#
# 3. This script assumes you are running it on a *nix-style OS.
#
# 4. I recommend building 64-bit targets only. Building a 32-bit
# Windows binary with i686-w64-mingw32 seems to work (at least,
# it did for me) but the resulting executable failed a number of
# unit tests due to small errors in some floating-point
# operations. It's unclear if this indicates more serious problems.
#
MRuby::CrossBuild.new("cross-mingw-winetest") do |conf|
conf.toolchain :gcc
conf.host_target = "x86_64-w64-mingw32"
# Ubuntu 20
conf.cc.command = "#{conf.host_target}-gcc-posix"
# macOS+Wine from brew
#conf.cc.command = "#{conf.host_target}-gcc"
conf.linker.command = conf.cc.command
conf.archiver.command = "#{conf.host_target}-gcc-ar"
conf.exts.executable = ".exe"
# By default, we compile as static as possible to remove runtime
# MinGW dependencies; they are probably fixable but it gets
# complicated.
conf.cc.flags = ['-static']
conf.linker.flags += ['-static']
conf.test_runner do |t|
thisdir = File.absolute_path( File.dirname(__FILE__) )
t.command = File.join(thisdir, * %w{ helpers wine_runner.rb})
end
conf.gembox "full-core"
conf.enable_bintest
conf.enable_test
end
+14
View File
@@ -0,0 +1,14 @@
#
# Ubuntu 20.04 requires at least `gcc-mingw-w64-x86-64` package as a
# cross compiler.
#
MRuby::CrossBuild.new("cross-mingw") do |conf|
conf.toolchain :gcc
conf.host_target = "x86_64-w64-mingw32" # required for `for_windows?` used by `mruby-socket` gem
conf.cc.command = "#{conf.host_target}-gcc-posix"
conf.linker.command = conf.cc.command
conf.archiver.command = "#{conf.host_target}-gcc-ar"
conf.exts.executable = ".exe"
conf.gembox "default"
end
+1 -1
View File
@@ -42,7 +42,7 @@ MRuby::Build.new do |conf|
# linker.library_paths = []
# linker.option_library = '-l%s'
# linker.option_library_path = '-L%s'
# linker.link_options = "%{flags} -o "%{outfile}" %{objs} %{libs}"
# linker.link_options = %Q[%{flags} -o "%{outfile}" %{objs} %{libs}]
# end
# Archiver settings
+43 -54
View File
@@ -1,28 +1,34 @@
# Cross Compiling configuration for the Sega Dreamcast
# This configuration requires KallistiOS (KOS)
# https://dreamcast.wiki
# https://dreamcast.wiki/Using_Ruby_for_Sega_Dreamcast_development
#
# Tested on GNU/Linux, MinGW-w64/MSYS2, Cygwin, macOS and MinGW/MSYS (see below)
# Requires KallistiOS (KOS)
# http://gamedev.allusion.net/softprj/kos/
#
# This configuration has been improved to be used as KallistiOS Port (kos-ports)
# Updated: 2023-12-24
#
# Tested on GNU/Linux, macOS and Windows (MinGW-w64/MSYS2, Cygwin, DreamSDK)
# DreamSDK is based on MinGW/MSYS: https://dreamsdk.org/
#
# Install mruby for Sega Dreamcast using the "mruby" kos-port.
#
MRuby::CrossBuild.new("dreamcast") do |conf|
toolchain :gcc
# Support for DreamSDK (based on MinGW/MSYS)
# To compile mruby with DreamSDK, RubyInstaller for Windows should be installed
DREAMSDK_HOME = ENV["DREAMSDK_HOME"]
MSYS_ROOT = !(DREAMSDK_HOME.nil? || DREAMSDK_HOME.empty?) ? "#{DREAMSDK_HOME}/msys/1.0" : ""
# Getting critical environment variables
KOS_BASE = ENV["KOS_BASE"]
KOS_CC_BASE = ENV["KOS_CC_BASE"]
# Setting paths
DREAMCAST_PATH = "#{MSYS_ROOT}/opt/toolchains/dc"
KOS_PATH = "#{DREAMCAST_PATH}/kos"
BIN_PATH = "#{DREAMCAST_PATH}/sh-elf/bin"
if (KOS_BASE.nil? || KOS_BASE.empty? || KOS_CC_BASE.nil? || KOS_CC_BASE.empty?)
raise "Error: KallistiOS is required; KOS_BASE/KOS_CC_BASE needs to be declared; Stop."
end
# C compiler
# Flags were extracted from KallistiOS environment files
# All flags and settings below were extracted from KallistiOS environment files
conf.cc do |cc|
cc.command = "#{BIN_PATH}/sh-elf-gcc"
cc.include_paths << ["#{KOS_PATH}/include", "#{KOS_PATH}/kernel/arch/dreamcast/include", "#{KOS_PATH}/addons/include", "#{KOS_PATH}/../kos-ports/include"]
cc.flags << ["-O2", "-fomit-frame-pointer", "-ml", "-m4-single-only", "-ffunction-sections", "-fdata-sections", "-Wall", "-g", "-fno-builtin", "-ml", "-m4-single-only", "-Wl,-Ttext=0x8c010000", "-Wl,--gc-sections", "-T#{KOS_PATH}/utils/ldscripts/shlelf.xc", "-nodefaultlibs"]
cc.command = "#{KOS_CC_BASE}/bin/sh-elf-gcc"
cc.include_paths << ["#{KOS_BASE}/include", "#{KOS_BASE}/kernel/arch/dreamcast/include", "#{KOS_BASE}/addons/include", "#{KOS_BASE}/../kos-ports/include"]
cc.flags << ["-O2", "-fomit-frame-pointer", "-fno-builtin", "-ml", "-m4-single-only", "-ffunction-sections", "-fdata-sections", "-matomic-model=soft-imask", "-ftls-model=local-exec", "-Wall", "-g"]
cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"]
cc.defines << %w(_arch_dreamcast)
cc.defines << %w(_arch_sub_pristine)
@@ -33,62 +39,45 @@ MRuby::CrossBuild.new("dreamcast") do |conf|
cxx.command = conf.cc.command.dup
cxx.include_paths = conf.cc.include_paths.dup
cxx.flags = conf.cc.flags.dup
cxx.flags << %w(-fno-rtti -fno-exceptions)
cxx.flags << %w(-fno-operator-names)
cxx.defines = conf.cc.defines.dup
cxx.compile_options = conf.cc.compile_options.dup
end
# Linker
# There is an issue when making the mruby library with KallistiOS:
# 'newlib_kill.o' and 'newlib_getpid.o' aren't found so they are explicitly
# specified here at least for now.
conf.linker do |linker|
linker.command="#{BIN_PATH}/sh-elf-gcc"
linker.flags << ["#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_kill.o", "#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_getpid.o", "-Wl,--start-group -lkallisti -lc -lgcc -Wl,--end-group"]
linker.library_paths << ["#{KOS_PATH}/lib/dreamcast", "#{KOS_PATH}/addons/lib/dreamcast", "#{KOS_PATH}/../kos-ports/lib"]
linker.command = "#{KOS_CC_BASE}/bin/sh-elf-gcc"
linker.flags << ["-Wl,-Ttext=0x8c010000", "-Wl,--gc-sections", "-T#{KOS_BASE}/utils/ldscripts/shlelf.xc", "-nodefaultlibs", "-Wl,--start-group -lkallisti -lc -lgcc -Wl,--end-group"]
linker.library_paths << ["#{KOS_BASE}/lib/dreamcast", "#{KOS_BASE}/addons/lib/dreamcast", "#{KOS_BASE}/../kos-ports/lib"]
end
# Archiver
conf.archiver do |archiver|
archiver.command = "#{BIN_PATH}/sh-elf-ar"
archiver.command = "#{KOS_CC_BASE}/bin/sh-elf-ar"
archiver.archive_options = 'rcs "%{outfile}" %{objs}'
end
# No executables
# No executables needed for KallistiOS
conf.bins = []
# Do not build executable test
# Do not build test binaries
conf.build_mrbtest_lib_only
# Disable C++ exception
conf.disable_cxx_exception
# Gemboxes
conf.gembox "default-no-stdio"
conf.gembox "stdlib-ext"
conf.gembox "metaprog"
# Gems from core
# removing mruby-io
conf.gem :core => "mruby-metaprog"
conf.gem :core => "mruby-pack"
conf.gem :core => "mruby-sprintf"
# Additional Gems
# Currently unsupported on KallistiOS: "mruby-io", "mruby-dir", "mruby-socket"
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-print"
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-proc-binding"
conf.gem :core => "mruby-sleep"
end
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env ruby
# Wrapper for running tests for cross-compiled Windows builds in Wine.
require 'open3'
DOSROOT = 'z:'
# Rewrite test output to replace DOS-isms with Unix-isms.
def clean(output, stderr = false)
ends_with_newline = !!(output =~ /\n$/)
executable = ARGV[0].gsub(/\.exe\z/i, '')
# Fix line-ends
output = output.gsub(/\r\n/, "\n")
# Strip out Wine messages
results = output.split(/\n/).map do |line|
# Fix file paths
if line =~ /#{DOSROOT}\\/i
line.gsub!(/#{DOSROOT}([^:]*)/i) { |path|
path.gsub!(/^#{DOSROOT}/i, '')
path.gsub!(%r{\\}, '/')
path
}
end
# strip '.exe' off the end of the executable's name if needed
line.gsub!(/(#{Regexp.escape executable})\.exe/i, '\1')
line
end
result_text = results.join("\n")
result_text += "\n" if ends_with_newline
result_text
end
def main
if ARGV.empty? || ARGV[0] =~ /^- (-?) (\?|help|h) $/x
puts "#{$0} <command-line>"
exit 0
end
# For simplicity, just read all of stdin into memory and pass that
# as an argument when invoking wine. (Skipped if STDIN was not
# redirected.)
if !STDIN.tty?
input = STDIN.read
else
input = ""
end
# Disable all Wine messages so they don't interfere with the output
ENV['WINEDEBUG'] = 'err-all,warn-all,fixme-all,trace-all'
# Run the program in wine and capture the output
output, errormsg, status = Open3.capture3('wine', *ARGV, :stdin_data => input)
# Clean and print the results.
STDOUT.write clean(output)
STDERR.write clean(errormsg)
exit(status.exitstatus)
end
main()
+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)
conf.cc.defines = %w(MRB_USE_DEBUG_HOOK MRB_NO_BOXING MRB_UTF8_STRING)
# Generate mruby debugger command (require mruby-eval)
conf.gem :core => "mruby-bin-debugger"
+14
View File
@@ -0,0 +1,14 @@
MRuby::Build.new do |conf|
# load specific toolchain settings
toolchain :gcc
# include the GEM box
conf.gembox 'full-core'
conf.cc.defines << 'MRB_USE_FLOAT32'
# Turn on `enable_debug` for better debugging
conf.enable_debug
conf.enable_test
conf.enable_bintest
end
+1 -1
View File
@@ -3,7 +3,7 @@ MRuby::Build.new do |conf|
toolchain :gcc
# include the GEM box
conf.gembox 'default'
conf.gembox 'full-core'
conf.cc.flags << '-pg'
conf.linker.flags << '-pg'
+1 -1
View File
@@ -3,7 +3,7 @@ MRuby::Build.new do |conf|
toolchain :gcc
# include the GEM box
conf.gembox 'default'
conf.gembox 'full-core'
conf.cc.flags << '-m32'
conf.linker.flags << '-m32'
+22
View File
@@ -0,0 +1,22 @@
MRuby::Build.new do |conf|
# load specific toolchain settings
toolchain :gcc
# include the GEM box
conf.gembox "stdlib"
conf.gembox "stdlib-ext"
conf.gembox "stdlib-io"
conf.gembox "metaprog"
conf.gem :core => 'mruby-bin-mruby'
conf.gem :core => 'mruby-bin-mirb'
# Add configuration
conf.compilers.each do |c|
c.defines << "MRB_NO_FLOAT"
end
conf.enable_debug
conf.enable_test
conf.enable_bintest
end
+11 -11
View File
@@ -1,34 +1,34 @@
# NOTE: Currently, this configuration file does not support VisualC++!
# Your help is needed!
MRuby::Build.new do |conf|
# load specific toolchain settings
# Gets set by the VS command prompts.
if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
toolchain :visualcpp
else
toolchain :gcc
end
conf.toolchain
# include the GEM box
conf.gembox 'default'
# C compiler settings
conf.cc do |cc|
cc.flags = '-fPIC'
conf.compilers.each do |cc|
cc.flags << '-fPIC'
end
conf.archiver do |archiver|
archiver.command = 'gcc'
archiver.command = cc.command
archiver.archive_options = '-shared -o %{outfile} %{objs}'
end
# file extensions
conf.exts do |exts|
exts.library = '.so'
exts.library = '.so'
end
# file separator
# conf.file_separator = '/'
# enable this if better compatibility with C++ is desired
#conf.enable_cxx_exception
# Turn on `enable_debug` for better debugging
conf.enable_debug
conf.enable_bintest
+77
View File
@@ -0,0 +1,77 @@
# Cross Compiling configuration for MS-DOS
#
# Requires DJGPP cross-compiler, see
# https://github.com/andrewwutw/build-djgpp/releases
MRuby::CrossBuild.new("i586-pc-msdosdjgpp") do |conf|
toolchain :gcc
# If DJGPP is not in the PATH, set this to the bin directory
DJGPP_PATH = nil
GCC = 'i586-pc-msdosdjgpp-gcc'
GXX = 'i586-pc-msdosdjgpp-g++'
AR = 'i586-pc-msdosdjgpp-ar'
conf.cc do |cc|
cc.command = DJGPP_PATH ? File.join(DJGPP_PATH, GCC) : GCC
cc.defines << 'MRB_WITHOUT_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_UTF8_STRING'
end
conf.linker do |linker|
linker.command = DJGPP_PATH ? File.join(DJGPP_PATH, GXX) : GXX
linker.libraries = %w(m)
end
conf.archiver do |archiver|
archiver.command = DJGPP_PATH ? File.join(DJGPP_PATH, AR) : AR
end
# All provided gems that can be reasonably made to compile:
# default.gembox, minus mruby-socket and replacing mruby-cmath with mruby-cmath-alt
conf.gembox "stdlib"
conf.gembox "stdlib-ext"
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
conf.gem :core => 'mruby-bigint' # math.gembox <- default.gembox
conf.gem :core => 'mruby-complex' # math.gembox <- default.gembox
conf.gem :core => 'mruby-math' # math.gembox <- default.gembox
conf.gem :core => 'mruby-rational' # math.gembox <- default.gembox
# Alternative implementation of cmath, not requiring <complex.h>
# conf.gem :github => 'chasonr/mruby-cmath-alt' # math.gembox <- default.gembox
conf.gembox "metaprog"
conf.gem :core => 'mruby-bin-mrbc' # default.gembox
conf.gem :core => 'mruby-bin-debugger' # default.gembox
conf.gem :core => 'mruby-bin-mirb' # default.gembox
conf.gem :core => 'mruby-bin-mruby' # default.gembox
conf.gem :core => 'mruby-bin-strip' # default.gembox
conf.gem :core => 'mruby-bin-config' # default.gembox
# Other compilable gems
conf.gem :core => 'mruby-binding'
conf.gem :core => 'mruby-catch'
conf.gem :core => 'mruby-enum-chain'
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'
# For Onigmo regular expression support
conf.gem :github => 'mattn/mruby-onig-regexp'
end
+4
View File
@@ -0,0 +1,4 @@
MRuby::CrossBuild.new('minimal') do |conf|
conf.toolchain :gcc
conf.cc.defines << 'MRB_NO_STDIO'
end
+73
View File
@@ -0,0 +1,73 @@
# Cross Compiling configuration for the Nintendo Switch, it requires Nintendo SDK
# Tested on windows
MRuby::CrossBuild.new('nintendo_switch_32bit') do |conf|
conf.toolchain :clang
NINTENDO_SDK_PATH = ENV['NINTENDO_SDK_ROOT']
include_paths = [
"#{NINTENDO_SDK_PATH}/Include",
"#{NINTENDO_SDK_PATH}/Common/Configs/Targets/NX-NXFP2-a32/Include"
]
conf.cc do |cc|
cc.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/bin/nx-clang++"
cc.include_paths += include_paths
cc.flags += ['-fpic -fno-short-enums -ffunction-sections -fdata-sections -fno-common -fno-strict-aliasing -fomit-frame-pointer -fno-vectorize -funsigned-char -O2 -g -mno-implicit-float']
cc.defines += 'NN_SDK_BUILD_RELEASE'
end
conf.cxx do |cxx|
cxx.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/bin/nx-clang++"
cxx.include_paths += include_paths
cxx.flags += ['-fpic -fno-short-enums -ffunction-sections -fdata-sections -fno-common -fno-strict-aliasing -fomit-frame-pointer -fno-vectorize -funsigned-char -O2 -g -mno-implicit-float']
cxx.defines += 'NN_SDK_BUILD_RELEASE'
end
conf.archiver do |archiver|
archiver.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/nx/armv7l/bin/llvm-ar"
end
conf.linker do |linker|
linker.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/nx/armv7l/bin/clang++"
linker.libraries = []
end
# Add your mrbgems
end
MRuby::CrossBuild.new('nintendo_switch_64bit') do |conf|
conf.toolchain :clang
NINTENDO_SDK_PATH = ENV['NINTENDO_SDK_ROOT']
include_paths = [
"#{NINTENDO_SDK_PATH}/Include",
"#{NINTENDO_SDK_PATH}/Common/Configs/Targets/NX-NXFP2-a64/Include"
]
conf.cc do |cc|
cc.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/bin/nx-clang++"
cc.include_paths += include_paths
cc.flags += ['-fpic -fno-short-enums -ffunction-sections -fdata-sections -fno-common -fno-strict-aliasing -fomit-frame-pointer -fno-vectorize -funsigned-char -O2 -g -mno-implicit-float']
cc.flags << '--target=aarch64-nintendo-nx-elf'
cc.defines += 'NN_SDK_BUILD_RELEASE'
end
conf.cxx do |cxx|
cxx.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/bin/nx-clang++"
cxx.include_paths += include_paths
cxx.flags += ['-fpic -fno-short-enums -ffunction-sections -fdata-sections -fno-common -fno-strict-aliasing -fomit-frame-pointer -fno-vectorize -funsigned-char -O2 -g -mno-implicit-float']
cxx.flags << '--target=aarch64-nintendo-nx-elf'
cxx.defines += 'NN_SDK_BUILD_RELEASE'
end
conf.archiver do |archiver|
archiver.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/nx/aarch64/bin/llvm-ar"
end
conf.linker do |linker|
linker.command = "#{NINTENDO_SDK_PATH}/Compilers/NX/nx/aarch64/bin/clang++"
linker.libraries = []
end
# Add your mrbgems
end
+96
View File
@@ -0,0 +1,96 @@
# Cross Compiling configuration for the Nintendo Wii
# This configuration requires devkitPPC
# https://devkitpro.org/wiki/Getting_Started
#
#
MRuby::CrossBuild.new("wii") do |conf|
toolchain :gcc
DEVKITPRO_PATH = "/opt/devkitpro"
BIN_PATH = "#{DEVKITPRO_PATH}/devkitPPC/bin"
# C compiler
conf.cc do |cc|
cc.command = "#{BIN_PATH}/powerpc-eabi-gcc"
cc.compile_options = %(%{flags} -o "%{outfile}" -c "%{infile}")
end
# C++ compiler
conf.cxx do |cxx|
cxx.command = "#{BIN_PATH}/powerpc-eabi-g++"
cxx.include_paths = conf.cc.include_paths.dup
cxx.flags = conf.cc.flags.dup
cxx.defines = conf.cc.defines.dup
cxx.compile_options = conf.cc.compile_options.dup
end
# Linker
conf.linker do |linker|
linker.command = "#{BIN_PATH}/powerpc-eabi-gcc"
end
# No executables
conf.bins = []
# Do not build executable test
conf.build_mrbtest_lib_only
# Disable C++ exception
conf.disable_cxx_exception
# All current core gems with ones with build issues commented out
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-print/'
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/'
end
-17
View File
@@ -1,17 +0,0 @@
# 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
+26
View File
@@ -0,0 +1,26 @@
# Cross compiling configuration for SerenityOS
# Graphical Unix-like operating system for x86 computers.
# https://github.com/SerenityOS/serenity
#
# Should be built using the SerenityOS Ports system
# https://github.com/SerenityOS/serenity/tree/master/Ports
#
# As of 2021/08/20, SERENITY_ARCH is defined in the SerenityOS Ports
# build script to always be either "i686" or "x86_64"
MRuby::CrossBuild.new('serenity') do |conf|
conf.toolchain :gcc
conf.archiver.command = "#{ENV['SERENITY_ARCH']}-pc-serenity-ar"
conf.linker.command = "#{ENV['SERENITY_ARCH']}-pc-serenity-g++"
conf.cxx.command = "#{ENV['SERENITY_ARCH']}-pc-serenity-g++"
conf.cxx.defines << (ENV['SERENITY_ARCH'].include?('64') ? 'MRB_64BIT' : 'MRB_32BIT')
conf.cc.command = "#{ENV['SERENITY_ARCH']}-pc-serenity-gcc"
conf.cc.defines << (ENV['SERENITY_ARCH'].include?('64') ? 'MRB_64BIT' : 'MRB_32BIT')
conf.gembox 'full-core'
conf.test_runner.command = 'env'
end
+16
View File
@@ -0,0 +1,16 @@
ans
celler
clen
delet
disabl
filetest
fo
hel
ist
nd
quitt
remore
runn
sting
strin
wronly
+177 -146
View File
@@ -7,21 +7,22 @@ binaries.
To compile mruby out of the source code you need the following tools:
* C Compiler (e.g. `gcc` or `clang`)
* Linker (e.g. `gcc` or `clang`)
* Archive utility (e.g. `ar`)
* Parser generator (`bison`)
* Ruby 2.0 or later (e.g. `ruby` or `jruby`)
Note that `bison` bundled with MacOS is too old to compile `mruby`.
Try `brew install bison` and follow the instruction shown to update
the `$PATH` to compile `mruby`. We also encourage to upgrade `ruby`
on MacOS in similar manner.
- C Compiler (e.g. `gcc` or `clang`)
- Linker (e.g. `gcc` or `clang`)
- Archive utility (e.g. `ar`)
- Ruby 2.5 or later (e.g. `ruby` or `jruby`)
Optional:
* git (to update mruby source and integrate mrbgems easier)
* C++ compiler (to use GEMs which include \*.cpp, \*.cxx, \*.cc)
- Git (to update mruby source and integrate mrbgems easier)
- C++ compiler (to use mrbgems which include `*.cpp`, `*.cxx`, `*.cc`)
- Bison (to compile `mrbgems/mruby-compiler/core/parse.y`)
- gperf (to compile `mrbgems/mruby-compiler/core/keywords`)
Note that `bison` bundled with macOS is too old to compile `mruby`.
Try `brew install bison` and follow the instruction shown to update
the `$PATH` to compile `mruby`. We also encourage you to upgrade `ruby`
on macOS in similar manner.
## Build
@@ -32,7 +33,7 @@ line on build, call `rake -v`.
You can specify your own configuration file by the `MRUBY_CONFIG` environment
variable (you can use `CONFIG` for shorthand for `MRUBY_CONFIG`). If the path
doesn't exist, *build_config/${MRUBY_CONFIG}.rb* is used. The default
doesn't exist, `build_config/${MRUBY_CONFIG}.rb` is used. The default
configuration is defined in the `build_config/default.rb` file.
Those build configuration files contain the build configuration of mruby, for
@@ -48,10 +49,10 @@ All tools necessary to compile mruby can be set or modified here.
## Build Configuration
We wish you submit a pull-request to *build_config/**PLATFORM**.rb*, once you
We wish you submit a pull-request to `build_config/PLATFORM.rb`, once you
created a new configuration for a new platform.
Inside of the configuration file, the following options can be
Inside the configuration file, the following options can be
configured based on your environment.
### Toolchains
@@ -79,7 +80,7 @@ conf.toolchain :clang
#### Visual Studio 2010, 2012 and 2013
Toolchain configuration for Visual Studio on Windows. If you use the
[Visual Studio Command Prompt](https://msdn.microsoft.com/en-us/library/ms229859\(v=vs.110\).aspx),
[Visual Studio Command Prompt](<https://msdn.microsoft.com/en-us/library/ms229859(v=vs.110).aspx>),
you normally do not have to specify this manually, since it gets automatically detected by our build process.
```ruby
@@ -102,8 +103,8 @@ in `ANDROID_STANDALONE_TOOLCHAIN`.
It is possible to select which tools should be compiled during the compilation
process. For example,
* `mruby`
* `mirb`
- `mruby`
- `mirb`
The configuration are done via `mrbgems`. See `Mrbgems` section.
@@ -134,21 +135,21 @@ end
C Compiler has header searcher to detect installed library.
If you need a include path of header file use `search_header_path`:
If you need an include path of header file use `search_header_path`:
```ruby
# Searches ```iconv.h```.
# Searches `iconv.h`.
# If found it will return include path of the header file.
# Otherwise it will return nil .
# Otherwise it will return nil.
fail 'iconv.h not found' unless conf.cc.search_header_path 'iconv.h'
```
If you need a full file name of header file use `search_header`:
```ruby
# Searches ```iconv.h```.
# Searches `iconv.h`.
# If found it will return full path of the header file.
# Otherwise it will return nil .
# Otherwise it will return nil.
iconv_h = conf.cc.search_header 'iconv.h'
print "iconv.h found: #{iconv_h}\n"
```
@@ -176,7 +177,7 @@ conf.linker do |linker|
linker.flags_before_libraries = ...
linker.libraries = ...
linker.flags_after_libraries = ...
linker.library_paths = ....
linker.library_paths = ...
linker.option_library = ...
linker.option_library_path = ...
linker.link_options = ...
@@ -228,7 +229,7 @@ end
### Preallocated Symbols
By far, preallocate symbols are highly compatible with the previous versions, so
By far, preallocated symbols are highly compatible with the previous versions, so
we expect you won't see any problem with them. But just in case you face any
issue, you can disable preallocated symbols by specifying `conf.disable_presym`.
@@ -264,13 +265,13 @@ There is a `RubyGem` (gem for CRuby) named `mgem` that help you to
manage `mrbgems`. Try `gem install mgem`. `mgem` can show you the list
of registered `mrbgems`.
See doc/mrbgems/README.md for more option about mrbgems.
See [doc/guides/mrbgems.md](mrbgems.md) for more option about mrbgems.
### Mrbtest
Configuration Mrbtest build process.
If you want mrbtest.a only, You should set `conf.build_mrbtest_lib_only`
If you want `mrbtest.a` only, You should set `conf.build_mrbtest_lib_only`
```ruby
conf.build_mrbtest_lib_only
@@ -279,7 +280,7 @@ conf.build_mrbtest_lib_only
### Bintest
Tests for mrbgem tools using CRuby.
To have bintests place \*.rb scripts to `bintest/` directory of mrbgems.
To have bintests place `*.rb` scripts to `bintest/` directory of mrbgems.
See `mruby-bin-*/bintest/*.rb` if you need examples.
If you want a temporary files use `tempfile` module of CRuby instead of `/tmp/`.
@@ -308,9 +309,9 @@ If you need to enable C++ exception explicitly add the following:
conf.enable_cxx_exception
```
#### C++ exception disabling.
#### C++ exception disabling
If your compiler does not support C++ and you want to ensure
If your compiler does not support C++, and you want to ensure
you don't use mrbgem written in C++, you can explicitly disable
C++ exception, add following:
@@ -331,11 +332,11 @@ conf.enable_debug
When debugging mode is enabled
* Macro `MRB_DEBUG` would be defined.
* Which means `mrb_assert()` macro is enabled.
* Debug information of irep would be generated by `mrbc`.
* Because `-g` flag would be added to `mrbc` runner.
* You can have better backtrace of mruby scripts with this.
- Macro `MRB_DEBUG` would be defined.
- Which means `mrb_assert()` macro is enabled.
- Debug information of irep would be generated by `mrbc`.
- Because `-g` flag would be added to `mrbc` runner.
- You can have better backtrace of mruby scripts with this.
## Cross-Compilation
@@ -354,12 +355,12 @@ end
```
All configuration options of `MRuby::Build` can also be used in
`MRuby::CrossBuild`. You can find examples under the *build_config*
`MRuby::CrossBuild`. You can find examples under the `build_config`
directory.
### Mrbtest in Cross-Compilation
In cross compilation, you can run `mrbtest` on emulator if
In cross compilation, you can run `mrbtest` on an emulator if
you have it by changing configuration of test runner.
```ruby
@@ -375,49 +376,44 @@ end
## Build process
During the build process the directory *build* will be created in the
During the build process the `build` directory will be created in the
root directory. The structure of this directory will look like this:
+- build
|
+- host
|
+- bin <- Binaries (mirb, mrbc and mruby)
|
+- lib <- Libraries (libmruby.a and libmruby_core.a)
|
+- mrblib
|
+- src
|
+- test <- mrbtest tool
|
+- tools
|
+- mirb
|
+- mrbc
|
+- mruby
```
+- build
|
+- host
|
+- LEGAL <- License description
|
+- bin <- Binaries (mirb, mrbc and mruby)
|
+- lib <- Libraries (libmruby.a and libmruby_core.a)
|
+- mrbc <- Minimal mrbc place
|
+- mrbgems <- Compilation result from mrbgems
|
+- mrblib <- Compilation result from mrblib
|
+- src <- Compilation result from C sources
```
The compilation workflow will look like this:
* compile all files under *src* (object files will be stored
in *build/host/src*)
* generate parser grammar out of *src/parse.y* (generated
result will be stored in *build/host/src/y.tab.c*)
* compile *build/host/src/y.tab.c* to *build/host/src/y.tab.o*
* create *build/host/lib/libmruby_core.a* out of all object files (C only)
* create `build/host/bin/mrbc` by compiling *tools/mrbc/mrbc.c* and
linking with *build/host/lib/libmruby_core.a*
* create *build/host/mrblib/mrblib.c* by compiling all \*.rb files
under *mrblib* with `build/host/bin/mrbc`
* compile *build/host/mrblib/mrblib.c* to *build/host/mrblib/mrblib.o*
* create *build/host/lib/libmruby.a* out of all object files (C and Ruby)
* create `build/host/bin/mruby` by compiling *mrbgems/mruby-bin-mruby/tools/mruby/mruby.c* and
linking with *build/host/lib/libmruby.a*
* create `build/host/bin/mirb` by compiling *mrbgems/mruby-bin-mirb/tools/mirb/mirb.c* and
linking with *build/host/lib/libmruby.a*
- compile minimal `mrbc` from `src` and `mrblib` sources
- compile all files under `src` (object files will be stored in `build/host/mrbc/src`)
- compile `mruby-compiler` gem
- create `build/host/mrbc/lib/libmruby_core.a` out of all object files (C only)
- create `build/host/mrbc/bin/mrbc` via `mruby-bin-mrbc` gem
- compile all files under `src` and store result in `build/host/src`
- create `build/host/mrblib/mrblib.c` by compiling all `*.rb` files under `mrblib` with `build/host/mrbc/bin/mrbc`
- compile `build/host/mrblib/mrblib.c` to `build/host/mrblib/mrblib.o`
- create `build/host/lib/libmruby.a` out of all object files (C and Ruby)
- compile (normal) mrbgems specified in the configuration file
- create `build/host/lib/libmruby.a` from object files from gems and `libmruby_core.a`
- create binary commands according to binary gems (e.g. `mirb` and `mruby`)
- copy binaries under `build/host/bin` to `bin` directory
```
_____ _____ ______ ____ ____ _____ _____ ____
@@ -428,74 +424,54 @@ linking with *build/host/lib/libmruby.a*
### Cross-Compilation
In case of a cross-compilation to *i386* the *build* directory structure looks
In case of a cross-compilation to `i386` the `build` directory structure looks
like this:
+- build
|
+- host
| |
| +- bin <- Native Binaries
| |
| +- lib <- Native Libraries
| |
| +- mrblib
| |
| +- src
| |
| +- test <- Native mrbtest tool
| |
| +- tools
| |
| +- mirb
| |
| +- mrbc
| |
| +- mruby
+- i386
|
+- bin <- Cross-compiled Binaries
|
+- lib <- Cross-compiled Libraries
|
+- mrblib
|
+- src
|
+- test <- Cross-compiled mrbtest tool
|
+- tools
|
+- mirb
|
+- mrbc
|
+- mruby
```
+- build
|
+- host
| |
| +- bin <- Native Binaries
| |
| +- lib <- Native Libraries
| |
| +- mrbgems
| |
| +- src
|
+- i386
|
+- bin <- Cross-compiled Binaries
|
+- include <- Header Directory
|
+- lib <- Cross-compiled Libraries
|
+- mrbgems
|
+- mrblib
|
+- src
```
An extra directory is created for the target platform. In case you
compile for *i386* a directory called *i386* is created under the
compile for `i386` a directory called `i386` is created under the
build directory.
The cross compilation workflow starts in the same way as the normal
compilation by compiling all *native* libraries and binaries.
Afterwards the cross compilation process proceeds like this:
compilation by compiling all _native_ libraries and binaries, except
for we don't have `host/mrbc` directory (`host` directory itself works
as placeholder for `mrbc`). Afterwards the cross compilation process
proceeds like this:
* cross-compile all files under *src* (object files will be stored
in *build/i386/src*)
* generate parser grammar out of *src/parse.y* (generated
result will be stored in *build/i386/src/y.tab.c*)
* cross-compile *build/i386/src/y.tab.c* to *build/i386/src/y.tab.o*
* create *build/i386/mrblib/mrblib.c* by compiling all \*.rb files
under *mrblib* with the native `build/host/bin/mrbc`
* cross-compile *build/host/mrblib/mrblib.c* to *build/host/mrblib/mrblib.o*
* create *build/i386/lib/libmruby.a* out of all object files (C and Ruby)
* create `build/i386/bin/mruby` by cross-compiling *mrbgems/mruby-bin-mruby/tools/mruby/mruby.c* and
linking with *build/i386/lib/libmruby.a*
* create `build/i386/bin/mirb` by cross-compiling *mrbgems/mruby-bin-mirb/tools/mirb/mirb.c* and
linking with *build/i386/lib/libmruby.a*
* create *build/i386/lib/libmruby_core.a* out of all object files (C only)
* create `build/i386/bin/mrbc` by cross-compiling *tools/mrbc/mrbc.c* and
linking with *build/i386/lib/libmruby_core.a*
- cross-compile all files under `src` and store result in `build/i386/src`
- create `build/i386/lib/libmruby_core.a` out of C object files
- create `build/i386/mrblib/mrblib.c` by compiling all `*.rb` files under `mrblib` with native `build/host/bin/mrbc`
- cross-compile `build/i386/mrblib/mrblib.c` to `build/i386/mrblib/mrblib.o`
- create `build/i386/lib/libmruby.a` from object files from gems and `libmruby_core.a`
- create binary commands according to binary gems (e.g. `mirb` and `mruby`)
- copy binaries under `build/host/bin` to `bin` directory
```
_______________________________________________________________
@@ -526,24 +502,22 @@ feature due to the reason that there are functions (e.g. stdio) which
can't be disabled for the main build.
```ruby
MRuby::CrossBuild.new('Minimal') do |conf|
toolchain :gcc
conf.cc.defines = %w(MRB_NO_STDIO)
conf.bins = []
MRuby::CrossBuild.new('minimal') do |conf|
conf.toolchain :gcc
conf.cc.defines << 'MRB_NO_STDIO'
end
```
This configuration defines a cross compile build called 'Minimal' which
This configuration defines a cross compile build called 'minimal' which
is using the GCC and compiles for the host machine. It also disables
all usages of stdio and doesn't compile any binaries (e.g. mrbc).
all usages of stdio and doesn't compile any binaries (e.g. `mrbc`).
## Test Environment
mruby's build process includes a test environment. In case you start the testing
of mruby, a native binary called `mrbtest` will be generated and executed.
This binary contains all test cases which are defined under *test/t*. In case
of a cross-compilation an additional cross-compiled *mrbtest* binary is
This binary contains all test cases which are defined under `test/t`. In case
of a cross-compilation an additional cross-compiled `mrbtest` binary is
generated. You can copy this binary and run on your target system.
## Embedding `mruby` in Your Application
@@ -553,22 +527,25 @@ After the build, you will get `libmruby.a`. You can link it to your application.
For compiler options and library path, you can use `mruby-config` command for
convenience. `mruby-config` command prints the configuration used for `libmruby.a`.
```
```console
$ mruby-config --help
Usage: mruby-config [switches]
switches:
--cc print compiler name
--cflags print flags passed to compiler
--ld print linker name
--ldflags print flags passed to linker
--ldflags-before-libs print flags passed to linker before linked libraries
--libs print linked libraries
--libmruby-path print libmruby path
--help print this help
```
For example, when you have a C source file (`c.c`) and try to
compile and link it with `libmruby.a`, you can run the following command,
```
gcc `mruby-config --cflags` c.c `mruby-config --ldflags` `mruby-config --libs`
`mruby-config --cc --cflags` c.c `mruby-config --ldflags --libs`
```
When you use `make`, add following lines in `Makefile`
@@ -579,3 +556,57 @@ CFLAGS = `$(MRB_CONFIG) --cflags`
LDFLAGS = `$(MRB_CONFIG) --ldflags`
LIBS = `$(MRB_CONFIG) --libs`
```
## Install
To install the files in the `bin`, `include` and `lib` directories generated by the "host" build target into a system directory, do the following:
```console
$ rake install
```
If there are multiple build targets in the build configuration file, to install the products of all build targets, do the following:
```console
$ rake install:full
```
To install only one of several build targets, e.g., the "its-mine" build target, do the following:
```console
$ rake install:full:its-mine
```
To install only the executable files, do the following:
```console
$ rake install_bin # only "host" build target
$ rake install:bin # all build targets
$ rake install:bin:its-mine # only "its-mine" build target
```
### Installation Directory
The installation directory is `/usr/local` for the "host" build target and `/usr/local/mruby/<build-name>` for the others.
To change them, you can set the environment variable `PREFIX` or use `MRuby::Build#install_prefix = dir` in your build configuration file.
The `PREFIX` environment variable affects all build targets and changes the `/usr/local` part.
The `MRuby::Build#install_prefix` can be set for each individual build target.
In this case, the environment variable `PREFIX` is ignored.
Also, if the environment variable `DESTDIR` is set, it will prepend to the path obtained by `install_prefix` to determine the final write directory.
This is intended for temporary file expansion by the user's package work.
---
To summarize:
- The default value of the environment variable `PREFIX` is `/usr/local`.
- For the "host" build target, the default value of `MRuby::Build#install_prefix` is `<PREFIX>`.
- 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>`.
## Tips
- If you see compilation troubles, try `rake clean` first.
+23 -23
View File
@@ -38,7 +38,7 @@ To confirm mrdb was installed properly, run mrdb with the `--version` option:
```bash
$ mrdb --version
mruby 3.0.0 (2021-03-05)
mruby 3.3.0 (2024-02-14)
```
## 2.2 Basic Operation
@@ -61,20 +61,20 @@ $ mrdb sample.rb
You can execute the shell commands listed below:
|command|description|
|:-:|:--|
|run|execute programs|
|step|execute stepping|
|continue|execute continuing program|
|break|configure the breaking point|
|delete|deleting the breaking points|
|disable|disabling the breaking points|
|enable|enabling the breaking points|
|info breakpoints|showing list of the breaking points|
|print|evaluating and printing the values of the mruby expressions in the script|
|list|displaying the source cords|
|help|showing help|
|quit|terminating the mruby debugger|
| command | description |
| :--------------: | :------------------------------------------------------------------------ |
| run | execute programs |
| step | execute stepping |
| continue | execute continuing program |
| break | configure the breaking point |
| delete | deleting the breaking points |
| disable | disabling the breaking points |
| enable | enabling the breaking points |
| info breakpoints | showing list of the breaking points |
| print | evaluating and printing the values of the mruby expressions in the script |
| list | displaying the source cords |
| help | showing help |
| quit | terminating the mruby debugger |
### 2.2.2 Debugging mruby Binary Files (mrb file) with mrdb
@@ -82,8 +82,8 @@ You can debug the mruby binary files.
#### 2.2.2.1 Debugging the binary files
* notice
To debug mruby binary files, you need to compile mruby files with option `-g`.
- notice
To debug mruby binary files, you need to compile mruby files with option `-g`.
```bash
$ mrbc -g sample.rb
@@ -114,8 +114,8 @@ b [class:]method
The breakpoint will be ordered in serial from 1.
The number, which was given to the deleted breakpoint, will never be given to another breakpoint again.
You can give multiple breakpoints to specified the line number and method.
Be ware that breakpoint command will not check the validity of the class name and method name.
You can give multiple breakpoints to the specified the line number and method.
Be aware that the breakpoint command will not check the validity of the class name and method name.
You can get the current breakpoint information by the following options.
@@ -165,7 +165,7 @@ Example:
(foo.rb:1) delete
```
This will delete all of the breakpoints.
This will delete all the breakpoints.
```
(foo.rb:1) delete 1 3
@@ -192,7 +192,7 @@ Example:
(foo.rb:1) disable
```
Use `disable` if you would like to disable all of the breakpoints.
Use `disable` if you would like to disable all the breakpoints.
```
(foo.rb:1) disable 1 3
@@ -324,7 +324,7 @@ expr: expression
The expression is mandatory.
The displayed expressions will be serially ordered from 1.
If an exception occurs, the exception information will be displayed and the debugging will be continued.
If an exception occurs, the exception information will be displayed, and the debugging will be continued.
Example:
@@ -367,5 +367,5 @@ r
#### Step Command
This will run the program step by step.
When the method and the block are invoked, the program will be stop at the first row.
When the method and the block are invoked, the program will stop at the first row.
The program, which is developed in C, will be ignored.
+29 -28
View File
@@ -3,23 +3,24 @@
_This is an English translation of [Matz's blog post][matz blog post]
written in Japanese._
_Some parts are updated to reflect recent changes._
[matz blog post]: https://www.rubyist.net/~matz/20130731.html
When you are extending mruby using C language, you may encounter
mysterious "arena overflow error" or memory leak or very slow
execution speed. This is an error indicating overflow of "GC arena"
execution speed. This is an error indicating overflow of "GC arena"
implementing "conservative GC".
GC (garbage collector) must ensure that object is "alive", in other
words, that it is referenced by somewhere from program. This can be
words, that it is referenced by somewhere from the program. This can be
determined by checking if the object can be directly or indirectly
referenced by root. The local variables, global variables and
constants etc are root.
referenced by root. The local variables, global variables and
constants etc. are root.
If program execution is performed inside mruby VM, there is nothing to
worry about because GC can access all roots owned by VM.
worry about because GC can access all roots owned by the VM.
The problem arises when executing C functions. The object referenced
The problem arises when executing C functions. The object referenced
by C variable is also "alive", but mruby GC cannot aware of this, so
it might mistakenly recognize the objects referenced by only C
variables as dead.
@@ -27,18 +28,18 @@ variables as dead.
This can be a fatal bug if the GC tries to collect a live object.
In CRuby, we scan C stack area, and use C variable as root to check
whether object is alive or not. Of course, because we are accessing C
whether object is alive or not. Of course, because we are accessing C
stack just as memory region, we never know it is an integer or a
pointer. We workaround this by assuming that if it looks like a
pointer, then assume it as a pointer. We call it "conservative".
pointer. We work around this by assuming that if it looks like a
pointer, then assume it as a pointer. We call it "conservative".
By the way, CRuby's "conservative GC" has some problems.
The biggest problem is we have no way to access to the stack area in
portable way. Therefore, we cannot use this method if we'd like to
portable way. Therefore, we cannot use this method if we'd like to
implement highly portable runtime, like mruby.
So we came up with an another plan to implement "conservative GC" in mruby.
So we came up with another plan to implement "conservative GC" in mruby.
Again, the problem is when an object which was created in C function, becomes
no longer referenced in the Ruby world, and cannot be treated as garbage.
@@ -46,7 +47,7 @@ no longer referenced in the Ruby world, and cannot be treated as garbage.
In mruby, we recognize all objects created in C function are alive.
Then we have no problem such as confusing a live object as dead.
This means that because we cannot collect truly dead object, we may
This means that because we cannot collect a truly dead object, we may
lose efficiency, but as a trade-off the GC itself is highly portable.
We can say goodbye to the problem that GC deletes live objects due to
optimization which sometimes occurs in CRuby.
@@ -62,17 +63,17 @@ memory leak.
As of this writing, mruby automatically extend arena to remember
objects (See `MRB_GC_FIXED_ARENA` and `MRB_GC_ARENA_SIZE` in
doc/guides/mrbconf.md).
[doc/guides/mrbconf.md](mrbconf.md)).
If you create many objects in C functions, memory usage will increase, since
GC never kick in. This memory usage may look like memory leak, but will also
GC never kicks in. This memory usage may look like memory leaks, but will also
make execution slower as more memory will need to be allocated.
With the build time configuration, you can limit the maximum size of
arena (e.g., 100). Then if you create many objects, arena overflows,
arena (e.g., 100). Then if you create many objects, arena overflows,
thus you will get an "arena overflow error".
To workaround these problems, we have `mrb_gc_arena_save()` and
To work around these problems, we have `mrb_gc_arena_save()` and
`mrb_gc_arena_restore()` functions.
`int mrb_gc_arena_save(mrb)` returns the current position of the stack
@@ -93,7 +94,7 @@ In mruby, C function calls are surrounded by this save/restore, but we
can further optimize memory usage by surrounding save/restore, and can
avoid creating arena overflow bugs.
Let's take a real example. Here is the source code of `Array#inspect`:
Let's take a real example. Here is the source code of `Array#inspect`:
```c
static mrb_value
@@ -106,7 +107,7 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list)
char tail[] = { ']' };
/* check recursive */
for(i=0; i<RARRAY_LEN(list); i++) {
for (i=0; i<RARRAY_LEN(list); i++) {
if (mrb_obj_equal(mrb, ary, RARRAY_PTR(list)[i])) {
return mrb_str_new(mrb, "[...]", 5);
}
@@ -117,7 +118,7 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list)
arystr = mrb_str_new_capa(mrb, 64);
mrb_str_cat(mrb, arystr, head, sizeof(head));
for(i=0; i<RARRAY_LEN(ary); i++) {
for (i=0; i<RARRAY_LEN(ary); i++) {
int ai = mrb_gc_arena_save(mrb);
if (i > 0) {
@@ -140,29 +141,29 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list)
}
```
This is a real example, so a little bit complicated, but bear with me.
This is a real example, so slightly complicated, but bear with me.
The essence of `Array#inspect` is that after stringifying each element
of array using `inspect` method, we join them together so that we can
get `inspect` representation of the entire array.
After the `inspect` representation is created, we no longer require the
individual string representation. This means that we don't have to register
individual string representation. This means that we don't have to register
these temporal objects into GC arena.
Therefore, in order to keep the arena size small; the `ary_inspect()` function
will do the following:
* save the position of the stack top using `mrb_gc_arena_save()`.
* get `inspect` representation of each element.
* append it to the constructing entire `inspect` representation of array.
* restore stack top position using `mrb_gc_arena_restore()`.
- save the position of the stack top using `mrb_gc_arena_save()`.
- get `inspect` representation of each element.
- append it to the constructing entire `inspect` representation of array.
- restore stack top position using `mrb_gc_arena_restore()`.
Please note that the final `inspect` representation of entire array
was created before the call of `mrb_gc_arena_restore()`. Otherwise,
was created before the call of `mrb_gc_arena_restore()`. Otherwise,
required temporal object may be deleted by GC.
We may have a usecase where after creating many temporal objects, we'd
like to keep some of them. In this case, we cannot use the same idea
We may have an usecase where after creating many temporal objects, we'd
like to keep some of them. In this case, we cannot use the same idea
in `ary_inspect()` like appending objects to existing one.
Instead, after `mrb_gc_arena_restore()`, we must re-register the objects we
want to keep in the arena using `mrb_gc_protect(mrb, obj)`.
+83
View File
@@ -0,0 +1,83 @@
# Linking `libmruby` to your application
You have two ways to link `libmruby` to your application.
- using executable gem.
- using normal compilation process
## Executable Gems
If your application is relatively small, `mrbgem` is an easier way to
create the executable. By tradition, the gem name start with
`mruby-bin-`, e.g. `mruby-bin-debugger`.
### `mrbgem.rake` file
The executable name is specified in `mrbgem.rake` file at the top of
your `mrbgem` directory.
```ruby
MRuby::Gem::Specification.new('mruby-bin-example') do |spec|
spec.license = 'MIT'
spec.author = 'mruby developers'
spec.summary = 'Example for executable command gem'
spec.bins = %w(mruby-example) # <- this is binary name
end
```
### Source tree structure
The source file for the gem executable should be in
`<gem-name>/tools/<bin-name>`. Currently, we support C or C++ source code
(`.c`, `.cpp`, `.cxx`, `.cc`) for the executable. Ruby source files are not
supported. Put the functionality in the different gem and specify dependency to
it in `mrbgem.rake`.
## Normal compilation process
The `libmruby` is a normal library so that you can just link it to your
application. Specify proper compiler options (`-I` etc.) and linker options
(`-lmruby` etc.) to compile and link your application. Specify those options in
your build script (e.g. `Makefile`).
### Compiler options
You need to specify compiler options that are compatible to mruby configuration,
for example:
- `-I` to specify the place for mruby header files
- `-D` to specify mruby configuration macros
To retrieve compiler options used to build `mruby`, you can use `mruby-config`
command with following options:
- `--cc` compiler name
- `--cflags` options passed to compiler
```console
$ mruby-config --cflags
-std=gnu99 -g -O3 -Wall -DMRB_GC_FIXED_ARENA -I/home/matz/work/mruby/include -I/home/matz/work/mruby/build/host/include
```
### Linker options
Just like compiler options, you need to specify linker options that are
compatible to mruby configuration.
To retrieve linker options, you can use `mruby-config` with following options:
- `--ld` linker name
- `--ldflags` options passed to linker
- `--ldflags-before-libs` options passed to linker before linked libraries
- `--libs` linked libraries
```console
$ mruby-config --ldflags
-L/home/matz/work/mruby/build/host/lib
$ mruby-config --ldflags-before-libs
# <nothing in this case>
$ mruby-config --libs
-lmruby -lm
```
+21
View File
@@ -0,0 +1,21 @@
# Memory Allocation
There are three methods to customize memory allocation in mruby.
1. Provide your own `realloc()`/`free()`
2. Redefine `mrb_default_allocf()`
3. Specify a function with `mrb_open_allocf()`
## Provide your own `realloc()`/`free()`
On some platforms, especially on microcontrollers, the standard library may not provide `malloc()`, `realloc()`, and `free()`. In such cases, it may be necessary to define memory allocation functions for the specific platform. mruby uses `realloc()` and `free()` from the standard C library for memory management. By defining these two functions of your own, you can make mruby work. However, note the following two points:
First, `realloc(NULL, size)` behaves the same as malloc(size). Second, `free(NULL)` exits without doing anything.
## Redefine `mrb_default_allocf()`
The only function in mruby that uses the standard C library's memory allocation functions is `mrb_default_allocf()`, defined in `alloc.c`. By defining this function within your application, you can customize the memory management of your application.
## Specify a function with `mrb_open_allocf()`
If you want to perform different memory management for each `mrb_state` within your application, you can use the `mrb_open_allocf()` function to create the `mrb_state` structure. This allows you to specify a memory allocation function (which is compatible with `mrb_default_allocf`) for each `mrb_state`. Although this scheme is not recommended. It may become obsolete in the future, since I have never seen per mrb_state memory management use-case.
+146 -102
View File
@@ -1,208 +1,252 @@
# mruby configuration macros.
# mruby configuration macros
## How to use these macros.
## The configuration file
You can use mrbconfs with following ways:
You can do the build configuration in the build configuration file. The default
configuration file is `build_config/default.rb`.
* Write them in `mrbconf.h`.
* Using compiler flags is preferred when building a cross binaries or multiple mruby binaries
since it's easier to use different mrbconf per each `MRuby::Build`.
* Most flags can be enabled by just commenting in.
* Pass them as compiler flags.
* Make sure you pass the same flags to all compilers since some mrbconf(e.g., `MRB_GC_FIXED_ARENA`)
changes `struct` layout and cause memory access error when C and other language(e.g., C++) is mixed.
You can specify your own configuration file by the `MRUBY_CONFIG` environment
variable (you can use `CONFIG` for shorthand for `MRUBY_CONFIG`). If the path
doesn't exist, `build_config/${MRUBY_CONFIG}.rb` is used.
## stdio setting.
## How to use these macros
Just add the configuration value to the `MRuby::Build#defines` attribute.
This is the same for `MRuby::CrossBuild`.
```ruby
# build_config.rb
MRuby::Build.new do |conf|
...
conf.defines << 'MRB_GC_FIXED_ARENA'
conf.defines << 'MRB_NO_METHOD_CACHE'
...
end
```
**_NOTE_**
- Use common definitions (`conf.defines`) instead of per-compiler definitions (e.g., `conf.cc.defines`) unless there is a special reason not to.
- It is now deprecated to edit the `include/mruby/mrbconf.h` file or give it directly as a compiler flag, as was the case before.
## stdio setting
`MRB_NO_STDIO`
* When defined `<stdio.h>` functions won't be used.
* Some features will be disabled when this is enabled:
* `mrb_irep` load/dump from/to file.
* Compiling mruby script from file.
* Printing features in **src/print.c**.
- When defined `<stdio.h>` functions won't be used.
- Some features will be disabled when this is enabled:
- `mrb_irep` load/dump from/to file.
- Compiling mruby script from a file.
- Printing features in **src/print.c**.
## Debug macros.
## Debug macros
`MRB_USE_DEBUG_HOOK`
* When defined code fetch hook and debug OP hook will be enabled.
* When using any of the hook set function pointer `code_fetch_hook` and/or `debug_op_hook` of `mrb_state`.
* Fetch hook will be called before any OP.
* Debug OP hook will be called when dispatching `OP_DEBUG`.
- When defined code fetch hook and debug OP hook will be enabled.
- When using any of the hook set function pointer `code_fetch_hook` and/or `debug_op_hook` of `mrb_state`.
- Fetch hook will be called before any OP.
- Debug OP hook will be called when dispatching `OP_DEBUG`.
`MRB_DEBUG`
* When defined `mrb_assert*` macro will be defined with macros from `<assert.h>`.
* Could be enabled via `enable_debug` method of `MRuby::Build`.
- When defined `mrb_assert*` macro will be defined with macros from `<assert.h>`.
- Could be enabled via `enable_debug` method of `MRuby::Build`.
## Stack configuration
`MRB_STACK_EXTEND_DOUBLING`
* If defined doubles the stack size when extending it.
* Else extends stack with `MRB_STACK_GROWTH`.
- If defined doubles the stack size when extending it.
- Otherwise extends stack with `MRB_STACK_GROWTH`.
`MRB_STACK_GROWTH`
* Default value is `128`.
* Used in stack extending.
* Ignored when `MRB_STACK_EXTEND_DOUBLING` is defined.
- Default value is `128`.
- Used in stack extending.
- Ignored when `MRB_STACK_EXTEND_DOUBLING` is defined.
`MRB_STACK_MAX`
* Default value is `0x40000 - MRB_STACK_GROWTH`.
* Raises `RuntimeError` when stack size exceeds this value.
- Default value is `0x40000 - MRB_STACK_GROWTH`.
- Raises `RuntimeError` when stack size exceeds this value.
## Primitive type configuration.
## Primitive type configuration
`MRB_USE_FLOAT32`
* When defined single precision floating point type(C type `float`) is used as `mrb_float`.
* Otherwise double precision floating point type(C type `double`) is used as `mrb_float`.
- When defined single-precision floating-point type(C type `float`) is used as `mrb_float`.
- Otherwise, double-precision floating-point type(C type `double`) is used as `mrb_float`.
`MRB_NO_FLOAT`
* When defined removes floating point numbers from mruby.
* It makes mruby easier to handle in "Microcontroller without FPU" and "Kernel Space".
- When defined removes floating-point numbers from mruby.
- It makes mruby easier to handle in "Micro-controller without FPU" and "Kernel Space".
`MRB_INT32`
* When defined, or `MRB_INT64` are not defined on 32-bit CPU mode, `mrb_int` will be defined as `int32_t`.
* Conflicts with `MRB_INT64`.
- When defined, or `MRB_INT64` are not defined on 32-bit CPU mode, `mrb_int` will be defined as `int32_t`.
- Conflicts with `MRB_INT64`.
`MRB_INT64`
* When defined, or `MRB_INT32` are not defined on 64-bit CPU mode, `mrb_int` will be defined as `int64_t`.
* Conflicts with `MRB_INT32`.
- When defined, or `MRB_INT32` are not defined on 64-bit CPU mode, `mrb_int` will be defined as `int64_t`.
- Conflicts with `MRB_INT32`.
## Garbage collector configuration.
## Garbage collector configuration
`MRB_GC_STRESS`
* When defined full GC is emitted per each `RBasic` allocation.
* Mainly used in memory manager debugging.
- When defined full GC is emitted per each `RBasic` allocation.
- Mainly used in memory manager debugging.
- If defined at the same time as `MRB_DEBUG`, full GC is emitted also per each heap allocation (`mrb_malloc()` or etc.).
This configuration slows down mruby execution by a factor of 2 to 3 or even more.
`MRB_GC_TURN_OFF_GENERATIONAL`
* When defined turns generational GC by default.
- When defined turns generational GC by default.
`MRB_GC_FIXED_ARENA`
* When defined used fixed size GC arena.
* Raises `RuntimeError` when this is defined and GC arena size exceeds `MRB_GC_ARENA_SIZE`.
* Useful tracking unnecessary mruby object allocation.
- When defined used fixed size GC arena.
- Raises `RuntimeError` when this is defined and GC arena size exceeds `MRB_GC_ARENA_SIZE`.
- Useful tracking unnecessary mruby object allocation.
`MRB_GC_ARENA_SIZE`
* Default value is `100`.
* Ignored when `MRB_GC_FIXED_ARENA` isn't defined.
* Defines fixed GC arena size.
- Default value is `100`.
- Ignored when `MRB_GC_FIXED_ARENA` isn't defined.
- Defines fixed GC arena size.
`MRB_HEAP_PAGE_SIZE`
* Defines value is `1024`.
* Specifies number of `RBasic` per each heap page.
- Defines 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.
For a 32-bit CPU, `(6 * 4) + (6 * 4) * MRB_HEAP_PAGE_SIZE` gives the bytes of size per heap page.
Conversely, for example, to keep the size per heap page to 4 Ki bytes,
calculate `(4096 - (6 * 4)) / (6 * 4)` to specify `MRB_HEAP_PAGE_SIZE=169`.
## Memory pool configuration.
## Memory pool configuration
`POOL_ALIGNMENT`
* Default value is `4`.
* If you're allocating data types that requires alignment more than default value define the
largest value of required alignment.
- Default value is `4`.
- If you're allocating data types that requires alignment more than default value define the
largest value of required alignment.
`POOL_PAGE_SIZE`
* Default value is `16000`.
* Specifies page size of pool page.
* Smaller the value is increases memory overhead.
- Default value is `16000`.
- Specifies page size of pool page.
- Smaller the value is increases memory overhead.
## State atexit configuration.
## State atexit configuration
`MRB_FIXED_STATE_ATEXIT_STACK`
* If defined enables fixed size `mrb_state` atexit stack.
* Raises `RuntimeError` when `mrb_state_atexit` call count to same `mrb_state` exceeds
`MRB_FIXED_STATE_ATEXIT_STACK_SIZE`'s value.
- If defined enables fixed size `mrb_state` atexit stack.
- Raises `RuntimeError` when `mrb_state_atexit` call count to same `mrb_state` exceeds
`MRB_FIXED_STATE_ATEXIT_STACK_SIZE`'s value.
`MRB_FIXED_STATE_ATEXIT_STACK_SIZE`
* Default value is `5`.
* If `MRB_FIXED_STATE_ATEXIT_STACK` isn't defined this macro is ignored.
- Default value is `5`.
- If `MRB_FIXED_STATE_ATEXIT_STACK` isn't defined this macro is ignored.
## `mrb_value` configuration.
## `mrb_value` configuration
`MRB_ENDIAN_BIG`
* If defined compiles mruby for big endian machines.
* Used in `MRB_NAN_BOXING`.
* Some mrbgem use this mrbconf.
- If defined compiles mruby for big endian machines.
- Used in `MRB_NAN_BOXING`.
- Some mrbgem use this mrbconf.
`MRB_NAN_BOXING`
* If defined represent `mrb_value` in boxed `double`.
* Conflicts with `MRB_USE_FLOAT32` and `MRB_NO_FLOAT`.
- If defined represent `mrb_value` in boxed `double`.
- Conflicts with `MRB_USE_FLOAT32` and `MRB_NO_FLOAT`.
`MRB_WORD_BOXING`
* If defined represent `mrb_value` as a word.
* If defined `Float` will be a mruby object with `RBasic`.
- If defined represent `mrb_value` as a word.
- If defined `Float` will be a mruby object with `RBasic`.
## Reduce heap memory configuration.
## Reduce heap memory configuration
`MRB_USE_LINK_TIME_RO_DATA_P`
`MRB_USE_ETEXT_RO_DATA_P`
* Only available on ELF platforms.
* If you specify the address of a read-only section when creating a symbol or string, that string will be used as it is.
* Heap memory can be saved.
* Uses `__ehdr_start` and `__init_array_start`.
* It must be `__ehdr_start < data_addr < __init_array_start`.
- Use `etext` and `edata` section addresses defined by the linker to detect read-only data.
- Those addresses are widely available, but not portable, nor standardized.
- This macro is defined by default on User-mode Linux.
`MRB_NO_DEFAULT_RO_DATA_P`
- Define this macro when the default `mrb_ro_data_p()` does not work for any reason.
`MRB_USE_CUSTOM_RO_DATA_P`
* Takes precedence over `MRB_USE_LINK_TIME_RO_DATA_P`.
* Please try if `MRB_USE_LINK_TIME_RO_DATA_P` is not available.
* The `mrb_ro_data_p()` function is implemented by the user in an arbitrary file.
* The prototype declaration is `mrb_bool mrb_ro_data_p(const char *ptr)`.
* Return `TRUE` if `ptr` is in read-only section, otherwise return `FALSE`.
- Please try if `MRB_USE_LINK_TIME_RO_DATA_P` is not available.
- The `mrb_ro_data_p()` function is implemented by the user in an arbitrary file.
- The prototype declaration is `mrb_bool mrb_ro_data_p(const char *ptr)`.
- Return `TRUE` if `ptr` is in the read-only section, otherwise return `FALSE`.
## Other configuration.
## Other configuration
`MRB_MALLOC_TRIM`
- call malloc_trim(0) for each mrb_full_gc() call
`MRB_UTF8_STRING`
* Adds UTF-8 encoding support to character-oriented String instance methods.
* If it isn't defined, they only support the US-ASCII encoding.
- Adds UTF-8 encoding support to character-oriented String instance methods.
- If it isn't defined, they only support the US-ASCII encoding.
`MRB_STR_LENGTH_MAX`
- The maximum length of strings (default 1MB)
- set this value to zero to skip the check
`MRB_ARY_LENGTH_MAX`
- The maximum length of strings (default 1MB)
- set this value to zero to skip the check
`MRB_FUNCALL_ARGC_MAX`
* Default value is `16`.
* Specifies 4th argument(`argc`) max value of `mrb_funcall`.
* Raises `ArgumentError` when the `argc` argument is bigger then this value `mrb_funcall`.
- Default value is `16`.
- Specifies 4th argument(`argc`) max value of `mrb_funcall`.
- Raises `ArgumentError` when the `argc` argument is bigger then this value `mrb_funcall`.
`KHASH_DEFAULT_SIZE`
* Default value is `32`.
* Specifies default size of khash table bucket.
* Used in `kh_init_ ## name` function.
- Default value is `32`.
- Specifies default size of khash table bucket.
- Used in `kh_init_ ## name` function.
`MRB_NO_METHOD_CACHE`
* Disable method cache to save memory.
- Disable method cache to save memory.
`MRB_METHOD_CACHE_SIZE`
* Default value is `256`.
* Ignored if `MRB_NO_METHOD_CACHE` is defined.
* Need to be the power of 2.
- Default value is `256`.
- 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
- 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`
* Increase heap memory usage.
- Make it available `Symbol.all_symbols` in `mrbgems/mruby-symbol-ext`
- Increase heap memory usage.
`MRB_USE_VM_SWITCH_DISPATCH`
- Turn on switch dispatch in VM loop
+231 -134
View File
@@ -1,12 +1,13 @@
# mrbgems
mrbgems is a library manager to integrate C and Ruby extension in an easy and
standardised way into mruby.
mrbgems is a library manager to integrate C and Ruby extensions in an easy and
standardised way into mruby. Conventionally, each mrbgem name is prefixed by
`mruby-`, e.g. `mruby-time` for a gem that provides `Time` class functionality.
## Usage
You have to activate mrbgems explicitly in your build configuration. To add
a GEM, add the following line to your build configuration file, for example:
You have to activate mrbgems explicitly in your build configuration. To add
a gem, add the following line to your build configuration file, for example:
```ruby
conf.gem '/path/to/your/gem/dir'
@@ -20,9 +21,9 @@ conf.gem 'examples/mrbgems/ruby_extension_example'
In that case,
* if your build configuration file is in the `build_config` directory, it's
- if your build configuration file is in the `build_config` directory, it's
relative from `MRUBY_ROOT`.
* otherwise, it is relative from the directory where your build configuration is.
- otherwise, it is relative from the directory where your build configuration is.
A remote GIT repository location for a GEM is also supported:
@@ -32,7 +33,10 @@ conf.gem :github => 'masuidrive/mrbgems-example', :branch => 'master'
conf.gem :bitbucket => 'mruby/mrbgems-example', :branch => 'master'
```
You can specify the sub directory of the repository with `:path` option:
NOTE: `:bitbucket` option supports only git. Hg is unsupported in this
version.
You can specify the subdirectory of the repository with `:path` option:
```ruby
conf.gem github: 'mruby/mruby', path: 'mrbgems/mruby-socket'
@@ -45,31 +49,75 @@ conf.gem :mgem => 'mruby-yaml'
conf.gem :mgem => 'yaml' # 'mruby-' prefix could be omitted
```
For specifying commit hash to checkout use `:checksum_hash` option:
For specifying the commit hash to checkout use `:checksum_hash` option:
```ruby
conf.gem mgem: 'mruby-redis', checksum_hash: '3446d19fc4a3f9697b5ddbf2a904f301c42f2f4e'
```
If there is missing dependencies, mrbgem dependencies solver will reference
mrbgem from core or mgem-list.
If there are missing dependencies, mrbgem dependencies solver will reference
mrbgem from the core or mgem-list.
To pull all gems from remote GIT repository on build, call ```rake -p```,
or ```rake --pull-gems```.
Note that if more than one git-based gem has the same base name
(i.e. the default checkout directory name), it is (now) an error
**UNLESS** they have the same repository URL, branch name and
commit-id (i.e. checksum hash). You can bypass this by explicitly
importing your preferred version **first** and setting the
`canonical:` option to `true`:
NOTE: `:bitbucket` option supports only git. Hg is unsupported in this version.
```ruby
conf.gem github: 'me/mruby-yaml', branch: 'my-hacked-branch', canonical: true
```
If you do this, the system will (mostly) silently ignore other
attempts to clone a gem with this name.
Note that this only affects cloning the gem from git. It does not
resolve version conflicts. If the version as specified in the gem's
rakefile is incompatible with a dependency, your build will still
fail.
### Tweak the gem in your build configuration file
You can give blocks in the `conf.gem` call to make adjustments for
environments where the original gem does not expect them:
```ruby
conf.gem core: "mruby-bin-mirb" do |g|
# For cross build to NetBSD
g.linker.libraries = %w(edit termcap)
end
```
However, it should be used with caution, as it may deviate from the intent
of the gem's author.
### Gem Testing
If you enable unit tests in your build with `enable_test`, tests will be
generated for all gems and their dependencies by default. If necessary, it is
possible to suppress tests for a specific gem like so:
```ruby
conf.gem 'mruby-noisygem' do |g|
g.skip_test = true
end
```
However, it is considered best practice to leave all tests enabled whenever
possible. A warning message will be generated for each gem with disabled tests.
## GemBox
There are instances when you wish to add a collection of mrbgems into mruby at
once, or be able to substitute mrbgems based on configuration, without having to
add each gem to your build configuration file. A packaged collection of mrbgems
is called a GemBox. A GemBox is a file that contains a list of mrbgems to load
add each gem to your build configuration file. A packaged collection of mrbgems
is called a GemBox. A GemBox is a file that contains a list of mrbgems to load
into mruby, in the same format as if you were adding them to the build config
via `config.gem`, but wrapped in an `MRuby::GemBox` object. GemBoxes are
via `config.gem`, but wrapped in an `MRuby::GemBox` object. GemBoxes are
loaded into mruby via `config.gembox 'boxname'`.
Below we have created a GemBox containing *mruby-time* and *mrbgems-example*:
Below we have created a GemBox containing `mruby-time` and `mrbgems-example`:
```ruby
MRuby::GemBox.new do |conf|
@@ -78,11 +126,11 @@ MRuby::GemBox.new do |conf|
end
```
As mentioned, the GemBox uses the same conventions as `MRuby::Build`. The GemBox
must be saved with a *.gembox* extension inside the *mrbgems* directory to to be
As mentioned, the GemBox uses the same conventions as `MRuby::Build`. The GemBox
must be saved with a `.gembox` extension inside the `mrbgems` directory to be
picked up by mruby.
To use this example GemBox, we save it as `custom.gembox` inside the *mrbgems*
To use this example GemBox, we save it as `custom.gembox` inside the `mrbgems`
directory in mruby, and add the following to your build configuration file inside
the build block:
@@ -90,10 +138,10 @@ the build block:
conf.gembox 'custom'
```
This will cause the *custom* GemBox to be read in during the build process,
adding *mruby-time* and *mrbgems-example* to the build.
This will cause the `custom` GemBox to be read in during the build process,
adding `mruby-time` and `mrbgems-example` to the build.
If you want, you can put GemBox outside of mruby directory. In that case you must
If you want, you can put GemBox outside the mruby directory. In that case you must
specify an absolute path like below.
```ruby
@@ -103,61 +151,65 @@ conf.gembox "#{ENV["HOME"]}/mygemboxes/custom"
There are two GemBoxes that ship with mruby: [default](../../mrbgems/default.gembox)
and [full-core](../../mrbgems/full-core.gembox). The [default](../../mrbgems/default.gembox) GemBox
contains several core components of mruby, and [full-core](../../mrbgems/full-core.gembox)
contains every gem found in the *mrbgems* directory.
contains every gem found in the `mrbgems` directory.
## GEM Structure
The maximal GEM structure looks like this:
+- GEM_NAME <- Name of GEM
|
+- include/ <- Header for Ruby extension (will exported)
|
+- mrblib/ <- Source for Ruby extension
|
+- src/ <- Source for C extension
|
+- test/ <- Test code (Ruby)
|
+- mrbgem.rake <- GEM Specification
|
+- README.md <- Readme for GEM
```
+- GEM_NAME <- Name of GEM
|
+- README.md <- Readme for GEM
|
+- mrbgem.rake <- GEM Specification
|
+- include/ <- Header for Ruby extension (will exported)
|
+- mrblib/ <- Source for Ruby extension
|
+- src/ <- Source for C extension
|
+- tools/ <- Source for Executable (in C)
|
+- test/ <- Test code (Ruby)
```
The folder *mrblib* contains pure Ruby files to extend mruby. The folder *src*
contains C/C++ files to extend mruby. The folder *include* contains C/C++ header
files. The folder *test* contains C/C++ and pure Ruby files for testing purposes
which will be used by `mrbtest`. *mrbgem.rake* contains the specification
to compile C and Ruby files. *README.md* is a short description of your GEM.
The `mrblib` directory contains pure Ruby files to extend mruby. The `src` directory
contains C/C++ files to extend mruby. The `include` directory contains C/C++ header
files. The `test` directory contains C/C++ and pure Ruby files for testing purposes
which will be used by `mrbtest`. `mrbgem.rake` contains the specification
to compile C and Ruby files. `README.md` is a short description of your GEM.
## Build process
mrbgems expects a specification file called *mrbgem.rake* inside of your
mrbgems expects a specification file called `mrbgem.rake` inside of your
GEM directory. A typical GEM specification could look like this for example:
```ruby
MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec|
spec.license = 'MIT'
spec.author = 'mruby developers'
spec.summary = 'Example mrbgem using C and ruby'
spec.summary = 'Example mrbgem using C and Ruby'
end
```
The mrbgems build process will use this specification to compile Object and Ruby
files. The compilation results will be added to *lib/libmruby.a*. This file exposes
files. The compilation results will be added to `lib/libmruby.a`. This file exposes
the GEM functionality to tools like `mruby` and `mirb`.
The following properties can be set inside of your `MRuby::Gem::Specification` for
The following properties can be set inside your `MRuby::Gem::Specification` for
information purpose:
* `spec.license` or `spec.licenses` (A single license or a list of them under which this GEM is licensed)
* `spec.author` or `spec.authors` (Developer name or a list of them)
* `spec.version` (Current version)
* `spec.description` (Detailed description)
* `spec.summary`
* One line short description of mrbgem.
* Printed in build summary of rake when set.
* `spec.homepage` (Homepage)
* `spec.requirements` (External requirements as information for user)
- `spec.license` or `spec.licenses` (A single license or a list of them under which this GEM is licensed)
- `spec.author` or `spec.authors` (Developer name or a list of them)
- `spec.version` (Current version)
- `spec.description` (Detailed description)
- `spec.summary`
- One line short description of mrbgem.
- Printed in build summary of rake when set.
- `spec.homepage` (Homepage)
- `spec.requirements` (External requirements as information for user)
The `license` and `author` properties are required in every GEM!
@@ -188,15 +240,15 @@ The version requirements and default gem information are optional.
Version requirement supports following operators:
* '=': is equal
* '!=': is not equal
* '>': is greater
* '<': is lesser
* '>=': is equal or greater
* '<=': is equal or lesser
* '~>': is equal or greater and is lesser than the next major version
* example 1: '~> 2.2.2' means '>= 2.2.2' and '< 2.3.0'
* example 2: '~> 2.2' means '>= 2.2.0' and '< 3.0.0'
- '=': is equal
- '!=': is not equal
- '>': is greater
- '<': is lesser
- '>=': is equal or greater
- '<=': is equal or lesser
- '~>': is equal or greater and is lesser than the next major version
- example 1: '~> 2.2.2' means '>= 2.2.2' and '< 2.3.0'
- example 2: '~> 2.2' means '>= 2.2.0' and '< 3.0.0'
When more than one version requirements is passed, the dependency must satisfy all of it.
@@ -209,8 +261,8 @@ use `MRuby::Build#gem` in the build configuration to override default gem.
If you have conflicting GEMs use the following method:
* `spec.add_conflict(gem, *requirements)`
* The `requirements` argument is same as in `add_dependency` method.
- `spec.add_conflict(gem, *requirements)`
- The `requirements` argument is same as in `add_dependency` method.
like following code:
@@ -227,22 +279,22 @@ end
```
In case your GEM has more complex build requirements you can use
the following options additionally inside of your GEM specification:
the following options additionally inside your GEM specification:
* `spec.cc.flags` (C compiler flags)
* `spec.cc.defines` (C compiler defines)
* `spec.cc.include_paths` (C compiler include paths)
* `spec.linker.flags` (Linker flags)
* `spec.linker.libraries` (Linker libraries)
* `spec.linker.library_paths` (Linker additional library path)
* `spec.bins` (Generate binary file)
* `spec.rbfiles` (Ruby files to compile)
* `spec.objs` (Object files to compile)
* `spec.test_rbfiles` (Ruby test files for integration into mrbtest)
* `spec.test_objs` (Object test files for integration into mrbtest)
* `spec.test_preload` (Initialization files for mrbtest)
- `spec.cc.flags` (C compiler flags)
- `spec.cc.defines` (C compiler defines)
- `spec.cc.include_paths` (C compiler include paths)
- `spec.linker.flags` (Linker flags)
- `spec.linker.libraries` (Linker libraries)
- `spec.linker.library_paths` (Linker additional library path)
- `spec.bins` (Generate binary file)
- `spec.rbfiles` (Ruby files to compile)
- `spec.objs` (Object files to compile)
- `spec.test_rbfiles` (Ruby test files for integration into mrbtest)
- `spec.test_objs` (Object test files for integration into mrbtest)
- `spec.test_preload` (Initialization files for mrbtest)
You also can use `spec.mruby.cc` and `spec.mruby.linker` to add extra global parameters for compiler and linker.
You also can use `spec.mruby.cc` and `spec.mruby.linker` to add extra global parameters for the compiler and linker.
### include_paths and dependency
@@ -251,7 +303,7 @@ By default, `/...absolute path.../{GEM_NAME}/include` will be exported.
So it is recommended not to put GEM's local header files on include/.
These exports are retroactive.
For example: when B depends to C and A depends to B, A will get include paths exported by C.
For example: when B depends on C and A depends on B, A will get include paths exported by C.
Exported include_paths are automatically appended to GEM local include_paths by rake.
You can use `spec.export_include_paths` accessor if you want more complex build.
@@ -265,10 +317,10 @@ integrate C libraries into mruby.
mrbgems expects that you have implemented a C method called
`mrb_YOURGEMNAME_gem_init(mrb_state)`. `YOURGEMNAME` will be replaced
by the name of your GEM. If you call your GEM *c_extension_example*, your
by the name of your GEM. If you call your GEM `c_extension_example`, your
initialisation method could look like this:
```C
```c
void
mrb_c_extension_example_gem_init(mrb_state* mrb) {
struct RClass *class_cextension = mrb_define_module(mrb, "CExtension");
@@ -280,10 +332,10 @@ mrb_c_extension_example_gem_init(mrb_state* mrb) {
mrbgems expects that you have implemented a C method called
`mrb_YOURGEMNAME_gem_final(mrb_state)`. `YOURGEMNAME` will be replaced
by the name of your GEM. If you call your GEM *c_extension_example*, your
by the name of your GEM. If you call your GEM `c_extension_example`, your
finalizer method could look like this:
```C
```c
void
mrb_c_extension_example_gem_final(mrb_state* mrb) {
free(someone);
@@ -292,25 +344,27 @@ mrb_c_extension_example_gem_final(mrb_state* mrb) {
### Example
+- c_extension_example/
|
+- src/
| |
| +- example.c <- C extension source
|
+- test/
| |
| +- example.rb <- Test code for C extension
|
+- mrbgem.rake <- GEM specification
|
+- README.md
```
+- c_extension_example/
|
+- README.md (Optional)
|
+- src/
| |
| +- example.c <- C extension source
|
+- test/
| |
| +- example.rb <- Test code for C extension
|
+- mrbgem.rake <- GEM specification
```
## Ruby Extension
mruby can be extended with pure Ruby. It is possible to override existing
classes or add new ones in this way. Put all Ruby files into the *mrblib*
folder.
classes or add new ones in this way. Put all Ruby files into the `mrblib`
directory.
### Pre-Conditions
@@ -318,29 +372,31 @@ none
### Example
+- ruby_extension_example/
|
+- mrblib/
| |
| +- example.rb <- Ruby extension source
|
+- test/
| |
| +- example.rb <- Test code for Ruby extension
|
+- mrbgem.rake <- GEM specification
|
+- README.md
```
+- ruby_extension_example/
|
+- README.md (Optional)
|
+- mrblib/
| |
| +- example.rb <- Ruby extension source
|
+- test/
| |
| +- example.rb <- Test code for Ruby extension
|
+- mrbgem.rake <- GEM specification
```
## C and Ruby Extension
mruby can be extended with C and Ruby at the same time. It is possible to
override existing classes or add new ones in this way. Put all Ruby files
into the *mrblib* folder and all C files into the *src* folder.
into the `mrblib` directory and all C files into the `src` directory.
mruby codes under *mrblib* directory would be executed after gem init C
function is called. Make sure *mruby script* depends on *C code* and
*C code* doesn't depend on *mruby script*.
mruby codes under `mrblib` directory would be executed after gem init C
function is called. Make sure _mruby script_ depends on _C code_ and
_C code_ doesn't depend on _mruby script_.
### Pre-Conditions
@@ -348,20 +404,61 @@ See C and Ruby example.
### Example
+- c_and_ruby_extension_example/
|
+- mrblib/
| |
| +- example.rb <- Ruby extension source
|
+- src/
| |
| +- example.c <- C extension source
|
+- test/
| |
| +- example.rb <- Test code for C and Ruby extension
|
+- mrbgem.rake <- GEM specification
|
+- README.md
```
+- c_and_ruby_extension_example/
|
+- README.md (Optional)
|
+- mrblib/
| |
| +- example.rb <- Ruby extension source
|
+- src/
| |
| +- example.c <- C extension source
|
+- test/
| |
| +- example.rb <- Test code for C and Ruby extension
|
+- mrbgem.rake <- GEM specification
```
## Binary gems
Some gems can generate executables under `bin` directory. Those gems are called
binary gems. Names of binary gems are conventionally prefixed by `mruby-bin`,
e.g. `mruby-bin-mirb` and `mruby-bin-strip`.
To specify the name of executable, you need to specify `spec.bins` in the
`mrbgem.rake`. The entry point `main()` should be in the C source file under
`tools/<bin>/*.c` where `<bin>` is a name of the executable. C files under the
`<bin>` directory are compiled and linked to the executable, but not included in
`libmruby.a`, whereas files under `mrblib` and `src` are.
It is strongly recommended not to include `mrblib` and `src` directories in the
binary gems, to separate normal gems and binary gems.
### Example
```
+- mruby-bin-example/
|
+- README.md (Optional)
|
+- bintest/
| |
| +- example.rb <- Test code for binary gem
|
+- mrbgem.rake <- Gem specification
|
+- mrblib/ <- Source for Ruby extension (Optional)
|
+- src/ <- Source for C extension (Optional)
|
+- tools/
|
+- example/ <- Executable name directory
|
+- example.c <- Source for Executable (includes main)
```
+11 -11
View File
@@ -1,10 +1,10 @@
# Symbols
Symbols in `mruby` C source code is represented by `mrb_sym` which is alias of
`uint32_t`. Lower 30 bits are used for symbols so that higher 2 bits can be
`uint32_t`. Lower 30 bits are used for symbols so that higher 2 bits can be
used as flags, e.g. `struct mt_elem` in `class.c`.
```C
```c
struct mt_elem {
union mt_ptr ptr;
size_t func_p:1;
@@ -57,13 +57,13 @@ To save RAM, `mruby` can use compile-time allocation of some symbols. You can
use following macros to get preallocated symbols by including `mruby/presym.h`
header.
* `MRB_SYM(xor)` //=> xor (Word characters)
* `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_CVSYM(xor)` //=> @@xor (Class Variable)
* `MRB_IVSYM(xor)` //=> @xor (Instance Variable)
* `MRB_OPSYM(xor)` //=> ^ (Operator)
- `MRB_SYM(xor)` //=> xor (Word characters)
- `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_CVSYM(xor)` //=> @@xor (Class Variable)
- `MRB_IVSYM(xor)` //=> @xor (Instance Variable)
- `MRB_OPSYM(xor)` //=> ^ (Operator)
For `MRB_OPSYM()`, specify the names corresponding to operators (see
`MRuby::Presym::OPERATORS` in `lib/mruby/presym.rb` for the names that
@@ -71,9 +71,9 @@ can be specified for it). Other than that, describe only word characters
excluding leading and ending punctuations.
These macros are converted to static symbol IDs at compile time, unless
preallocate symbols are disabled by `conf.disable_presym`. In that case,
preallocate symbols are disabled by `conf.disable_presym`. In that case,
these macros are expanded to `mrb_intern_lit` calls, therefore the mruby state
variable is required. The above macros assume the variable name is `mrb`. If
variable is required. The above macros assume the variable name is `mrb`. If
its name is not `mrb`, you need to use macros with `_2` suffix, such as
`MRB_SYM_2` to specify `mrb_state*` variable.
+52
View File
@@ -0,0 +1,52 @@
# 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`.
- Word Boxing
- NaN Boxing
- No Boxing
## Word Boxing
Word boxing packs the Ruby data in a word, which is a natural integer size that equals to the size of pointers (`intptr_t`). Word boxing can be specified by `MRB_WORD_BOXING`, and it's default configuration for most platforms.
Some values (called immediate values, e.g. integers, booleans, symbols, etc.) are directly packed in the word. The other data types are represented by pointers to the heap allocated structures.
The Word boxing packing bit patterns are like following:
| Types | Bit Pattern |
| ------ | ------------------------------------- |
| object | `xxxxxxxx xxxxxxxx xxxxxxxx xxxxx000` |
| fixnum | `xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxx1` |
| nil | `00000000 00000000 00000000 00000000` |
| true | `00000000 00000000 00000000 00001100` |
| false | `00000000 00000000 00000000 00000100` |
| undef | `00000000 00000000 00000000 00010100` |
| symbol | `xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx10` |
On 64-bit platforms (unless `MRB_WORDBOX_NO_FLOAT_TRUNCATE`), float values are also packed in the `mrb_value`. In that case, we drop least significant 2 bits from mantissa.
If you need full precision for floating-point numbers, define `MRB_WORDBOX_NO_FLOAT_TRUNCATE`.
## 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).
The NaN boxing packing bit patterns are like following:
| Types | Bit Pattern |
| ------ | ------------------------------------------------------------------------- |
| float | `SEEEEEEE EEEEFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF` |
| +/-inf | `S1111111 11110000 00000000 00000000 00000000 00000000 00000000 00000000` |
| nan | `01111111 11111000 00000000 00000000 00000000 00000000 00000000 00000000` |
| fixnum | `01111111 11111001 00000000 00000000 IIIIIIII IIIIIIII IIIIIIII IIIIIIII` |
| symbol | `01111111 11111110 00000000 00000000 SSSSSSSS SSSSSSSS SSSSSSSS SSSSSSSS` |
| misc | `01111111 11111111 00000000 00000000 00000000 00000000 00TTTTTT 0000MMMM` |
| object | `01111111 11111100 PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPP00` |
| ptr | `01111111 11111100 PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPP01` |
| nil | `00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000` |
The object values appear far more frequently than floating-point numbers, so we offset the value so that object pointers are unchanged. This technique is called "favor pointer".
## No Boxing
No boxing represents `mrb_value` by the C struct with `type` and the value union. This is the most portable (but inefficient) representation. No boxing can be specified by `MRB_NO_BOXING`, and it's default for debugging configuration (e.g. `host-debug`).
+136
View File
@@ -0,0 +1,136 @@
# The new bytecode
We will reimplement the VM to use 8bit instruction code. By
bytecode, we mean real byte code. The whole purpose is
reducing the memory consumption of mruby VM.
# Instructions
Instructions are bytes. There can be 256 instructions. Currently, we
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
of operands.
- B: 8bit
- S: 16bit
- W: 24bit
If the first and second operands are of type `B` (8bits), they may be
extended to 16bits by the operand extension instruction immediately
preceding them.
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` |
+31 -74
View File
@@ -13,28 +13,6 @@ This document is collecting these limitations.
This document does not contain a complete list of limitations.
Please help to improve it by submitting your findings.
## `Array` passed to `puts`
Passing an Array to `puts` results in different output.
```ruby
puts [1,2,3]
```
#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
```
1
2
3
```
#### mruby [3.0.0 (2021-03-05)]
```
[1, 2, 3]
```
## `Kernel.raise` in rescue clause
`Kernel.raise` without arguments does not raise the current exception within
@@ -52,9 +30,9 @@ end
`ZeroDivisionError` is raised.
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
No exception is raised. Instead you have to do:
`RuntimeError` is raised instead of `ZeroDivisionError`. To re-raise the exception, you have to do:
```ruby
begin
@@ -66,7 +44,7 @@ end
## Fiber execution can't cross C function boundary
mruby's `Fiber` is implemented in a similar way to Lua's co-routine. This
mruby's `Fiber` is implemented similarly to Lua's co-routine. This
results in the consequence that you can't switch context within C functions.
Only exception is `mrb_fiber_yield` at return.
@@ -77,7 +55,7 @@ To reduce memory consumption `Array` does not support instance variables.
```ruby
class Liste < Array
def initialize(str = nil)
@feld = str
@field = str
end
end
@@ -86,16 +64,16 @@ p Liste.new "foobar"
#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
` [] `
`[]`
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
`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.
supported. Those methods are defined, but they are dummy methods.
```ruby
class VisibleTest
@@ -118,7 +96,7 @@ false
true
```
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
```
true
@@ -129,14 +107,14 @@ true
The declaration form of following visibility methods are not implemented.
* `public`
* `private`
* `protected`
* `module_function`
- `public`
- `private`
- `protected`
- `module_function`
Especially, `module_function` method is not dummy, but no declaration form.
```
```ruby
module TestModule
module_function
def test_func
@@ -155,7 +133,7 @@ p 'ok'
ok
```
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
```
test.rb:8: undefined method 'test_func' (NoMethodError)
@@ -177,7 +155,7 @@ defined?(Foo)
nil
```
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
`NameError` is raised.
@@ -192,9 +170,9 @@ alias $a $__a__
#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
` nil `
`nil`
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
Syntax error
@@ -216,52 +194,22 @@ end
`ArgumentError` is raised.
The re-defined `+` operator does not accept any arguments.
#### mruby [3.0.0 (2021-03-05)]
#### mruby [3.1.0 (2022-05-12)]
` 'ab' `
`'ab'`
Behavior of the operator wasn't changed.
## `Kernel#binding` is not supported
## `Kernel#binding` is not supported until [3.0.0 (2021-03-05)]
`Kernel#binding` method is not supported.
#### Ruby [ruby 2.5.1p57 (2018-03-29 revision 63029)]
```
```shell
$ ruby -e 'puts Proc.new {}.binding'
#<Binding:0x00000e9deabb9950>
```
#### mruby [3.0.0 (2021-03-05)]
```
$ ./bin/mruby -e 'puts Proc.new {}.binding'
trace (most recent call last):
[0] -e:1
-e:1: undefined method 'binding' (NoMethodError)
```
## Keyword arguments
mruby keyword arguments behave slightly different from CRuby 2.5
to make the behavior simpler and less confusing.
#### Ruby [ruby 2.5.1p57 (2018-03-29 revision 63029)]
```
$ ruby -e 'def m(*r,**k) p [r,k] end; m("a"=>1,:b=>2)'
[[{"a"=>1}], {:b=>2}]
```
#### mruby [3.0.0 (2021-03-05)]
```
$ ./bin/mruby -e 'def m(*r,**k) p [r,k] end; m("a"=>1,:b=>2)'
trace (most recent call last):
[0] -e:1
-e:1: keyword argument hash with non symbol keys (ArgumentError)
```
## `nil?` redefinition in conditional expressions
Redefinition of `nil?` is ignored in conditional expressions.
@@ -274,7 +222,7 @@ end
puts(a.nil? ? "truthy" : "falsy")
```
Ruby outputs `falsy`. mruby outputs `truthy`.
Ruby outputs `truthy`. mruby outputs `falsy`.
## Argument Destructuring
@@ -296,3 +244,12 @@ f(1,[2,3])
```
CRuby gives `[1,2,3,nil]`. mruby raises `NoMethodError` for `b`.
Keyword argument expansion has similar restrictions. The following example, gives `[1, 1]` for CRuby, mruby raises `NoMethodError` for `b`.
```ruby
def g(a: 1, b: a)
p [a,b]
end
g(a:1)
```
+37 -37
View File
@@ -1,5 +1,4 @@
User visible changes in `mruby3`
===
# User visible changes in `mruby3.0`
# Build System
@@ -8,17 +7,17 @@ User visible changes in `mruby3`
Typical build configuration files are located in `build_config`
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
* `boxing`: compiles all three boxing options
* `clang-asan`: compiles with `clang`'s Address Sanitizer
- `default`: the default configuration
- `host-gprof`: compiles with `gprof` for performance tuning
- `host-m32`: compiles in gcc 32bit mode on 64bit platforms
- `boxing`: compiles all three boxing options
- `clang-asan`: compiles with `clang`'s Address Sanitizer
You can specify the build configuration file with the
`MRUBY_CONFIG` environment variable (or `CONFIG` in short).
If the value specified by `MRUBY_CONFIG` is not the path to
the configuration file, `build_config/${MRUBY_CONFIG}.rb` is
used. So you can specify it as `rake MRUBY_CONFIG=boxing`,
used. So you can specify it as `rake MRUBY_CONFIG=boxing`,
for example.
# Build Configuration Contribution
@@ -33,20 +32,20 @@ pull-request.
We have ported some new syntax from CRuby.
* Single line pattern matching (`12 => x`);
- Single line pattern matching (`12 => x`);
mruby matches only with local variables at the moment
* Numbered block parameter (`x.map{_1 * 2}`)
* End-less `def` (`def double(x) = x*2`)
- Numbered block parameter (`x.map{_1 * 2}`)
- End-less `def` (`def double(x) = x*2`)
# Configuration Options Changed
## Renamed for consistency
Some configuration macro names are changed for consistency (use `MRB_USE_XXX`
or `MRB_NO_XXX`).
or `MRB_NO_XXX`).
| mruby2 | mruby3 |
|--------------------------------|---------------------------|
| mruby2 | mruby3 |
| ------------------------------ | ------------------------- |
| `MRB_ENABLE_ALL_SYMBOLS` | `MRB_USE_ALL_SYMBOLS` |
| `MRB_ENABLE_CXX_ABI` | `MRB_USE_CXX_ABI` |
| `MRB_ENABLE_CXX_EXCEPTION` | `MRB_USE_CXX_EXCEPTION` |
@@ -60,11 +59,11 @@ Some configuration macro names are changed for consistency (use `MRB_USE_XXX`
| `ENABLE_READLINE` | `MRB_USE_READLINE` |
| `DISABLE_MIRB_UNDERSCORE` | `MRB_NO_MIRB_UNDERSCORE` |
* `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
- `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.
* `MRB_` prefix is added to those without.
- `MRB_` prefix is added to those without.
## `MRB_NO_BOXING`
@@ -76,13 +75,13 @@ to be default `mrb_value` representation. Now the default is
## `MRB_WORD_BOXING`
Pack `mrb_value` in an `intptr_t` integer. Consumes less
memory compared to `MRB_NO_BOXING` especially on 32 bit
memory compared to `MRB_NO_BOXING` especially on 32-bit
platforms. `Fixnum` size is 31 bits so some integer values
does not fit in `Fixnum` integers.
## `MRB_NAN_BOXING`
Pack `mrb_value` in a floating pointer number. Nothing
Pack `mrb_value` in a floating-point number. Nothing
changed from previous versions.
## `MRB_USE_MALLOC_TRIM`
@@ -113,44 +112,45 @@ $ bin/mruby -r lib1.rb -r lib2.rb < app.mrb
Instructions that access pool[i]/syms[i] where i>255.
* `OP_LOADL16`
* `OP_STRING16`
* `OP_LOADSYM16`
- `OP_LOADL16`
- `OP_STRING16`
- `OP_LOADSYM16`
Instructions that load a 32 bit integer.
Instructions that load a 32-bit integer.
* `OP_LOADI32`
- `OP_LOADI32`
Instruction that unwinds jump table for rescue/ensure.
* `OP_JMPUW`
- `OP_JMPUW`
Renamed from `OP_RAISE`
* `OP_RAISEIF`
- `OP_RAISEIF`
Instruction that is reserved for the future keyword argument support.
* OP_SENDVK
- OP_SENDVK
## Removed Instructions
Instructions for old exception handling
* `OP_ONERR`
* `OP_POPERR`
* `OP_EPUSH`
* `OP_EPOP`
- `OP_ONERR`
- `OP_POPERR`
- `OP_EPUSH`
- `OP_EPOP`
No more operand extension
* `OP_EXT1`
* `OP_EXT2`
* `OP_EXT3`
- `OP_EXT1`
- `OP_EXT2`
- `OP_EXT3`
## Changed Instructions
Jump addresses used to be specified by absolute offset from the start of `iseq`. Now they are relative offset from the address of the next instruction.
Jump addresses used to be specified by absolute offset from the start of `iseq`. Now they are relative offset from the
address of the next instruction.
## `Random` now use `xoshiro128++`.
@@ -160,4 +160,4 @@ For better and faster random number generation.
Preallocated symbols are interned at compile-time. They can be accessed via symbols macros (e.g. `MRB_SYM()`).
See [Symbols](https://github.com/mruby/mruby/blob/master/doc/guides/symbol.md).
See [Symbols](guides/symbol.md).
+255
View File
@@ -0,0 +1,255 @@
# User visible changes in `mruby3.1` from `mruby3.0`
# New Features
## Core Language Features
### Keyword Arguments
CRuby3.0 compatible keyword arguments are introduced.
Keyword arguments are basically separated from ordinal arguments.
### Other Language Enhancement
- Implement endless-def [Ruby:Feature#16746](https://bugs.ruby-lang.org/issues/16746)
- Replace `R-assignment` by `single-line pattern matching` [Ruby:Feature#15921](https://bugs.ruby-lang.org/issues/15921)
- Support squiggly heredocs. [#5246](https://github.com/mruby/mruby/pull/5246)
- Hash value omission [Ruby:Feature#14579](https://bugs.ruby-lang.org/issues/14579)
## Configuration Options Changed
Some configuration macros are available:
- `MRB_WORDBOX_NO_FLOAT_TRUNCATE`: by default, float values are packed in the word if possible, but define this macro to allocate float values in the heap.
- `MRB_USE_RO_DATA_P_ETEXT`: define this macro if `_etext` is available on your platform.
- `MRB_NO_DEFAULT_RO_DATA_P`: define this macro to avoid using predefined `mrb_ro_data_p()` function
---
# Updated Features
## New build configurations
We have added several new build configurations in the `build_config` directory.
- `cross-mingw-winetest.rb`
- `cross-mingw.rb`
- `nintendo_switch.rb`
- `serenity.rb`
- `minimal`: minimal configuration
- `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`
## Core Libraries
### New Methods
- `Array#product`
- `Array#repeated_combination`
- `Array#repeated_permutation`
- `Kernel#__ENCODING__`
- `Random.bytes`
- `Random#bytes`
- `String#center`
### New Gem Enhancement
- `mrbgems/mruby-pack` now supports `M` directive (Q encoding)
- `mrbgems/mruby-pack` now supports `X` directive (back-up by bytes)
- `mrbgems/mruby-pack` now supports `@` directive (absolute position)
- `mrbgems/mruby-pack` now supports `w` directive (BER compression)
## Tools
- `mruby-config` now supports `--cc` and `--ld` options.
- Remove `OP_` prefix from `mruby -v` code dump output.
- Prohibit use of `OP_EXT{1,2,3}` by `mrbc` with `--no-ext-ops` option.
## Features for mruby Developer
- Add new specifier `c` to `mrb_get_args()` for receive Class/Module.
---
# Breaking Changes
## Incompatibly Changed Methods
- `Kernel#printf` (`mruby-sprintf`) Format specifiers `%a` and `%A` are removed.
- `Kernel#puts` (`mruby-print`) Now expand Array arguments.
## mruby VM and bytecode
Due to improvements in the binary format, mruby binaries are no longer backward compatible.
To run the mruby binaries on mruby 3.1, recompile with the mruby 3.1 `mrbc`.
- Upgrade mruby VM version `RITE_VM_VER` to `0300` (means mruby 3.0 or after).
- Upgrade mruby binary version `RITE_BINARY_FORMAT_VER` to `0300`.
## Reintroduced Instructions
`mruby3.0` removed `OP_EXT1`, `OP_EXT2`, `OP_EXT3` for operand extension. But the operand size limitations was too tight for real-world application.
`mruby3.1` reintroduces those extension instructions.
## Removed Instructions
`mruby3.1` removed following instructions.
- `OP_LOADL16`
- `OP_LOADSYM16`
- `OP_STRING16`
- `OP_LAMBDA16`
- `OP_BLOCK16`
- `OP_METHOD16`
- `OP_EXEC16`
Those instructions are no longer needed by reintroduction of extension instructions.
- `OP_SENDV`
- `OP_SENDVB`
Those instructions for method calls with variable number of arguments are no longer needed. They are covered by `OP_SEND` instruction with `n=15`.
## New Instructions
`mruby3.1` introduces following new instructions.
- `OP_GETIDX`: takes 1 operands `R[a][a+1]`
- `OP_SETIDX`: takes 1 operands `R[a][a+1]=R[a+2]`
- `OP_SSEND`: takes 3 operands `a=self.b(c...)`; see `OP_SEND`
- `OP_SSENDB`: takes 3 operands `a=self.b(c...){...}`; see `OP_SEND`
- `OP_SYMBOL`: takes 2 operands `R[a] = intern(Pool[b])`
### `OP_GETIDX` and `OP_SETIDX`
Execute `obj[int]` and `obj[int] = value` respectively, where `obj` is `string|array|hash`.
### `OP_SSEND` and `OP_SSENDB`
They are similar to `OP_SEND` and `OP_SENDB` respectively. They initialize the `R[a]` by `self` first so that we can skip one `OP_LOADSELF` instruction for each call.
### `OP_SYMBOL`
Extracts the character string placed in the pool as a symbol.
## Changed Instructions
### `OP_SEND` and `OP_SENDB`
Method calling instructions are unified. Now `OP_SEND` and `OP_SENDB` (method call with a block) can support both splat arguments and keyword arguments as well.
The brief description of the instructions:
|`OP_SEND` | BBB | `R[a] = R[a].call(Syms[b],R[a+1..n],R[a+n+1],R[a+n+2]..nk) c=n|nk<<4` |
|`OP_SENDB` | BBB | `R[a] = R[a].call(Syms[b],R[a+1..n],R[a+n+1..nk],R[a+n+2..nk],&R[a+n+2*nk+2]) c=n|nk<<4` |
Operand C specifies the number of arguments. Lower 4 bits (`n`) represents the number of ordinal arguments, and higher 4 bits (`nk`) represents the number of keyword arguments.
When `n == 15`, the method takes arguments packed in an array. When `nk == 15`, the method takes keyword arguments are packed in a hash.
### `OP_ARYPUSH`
Now takes 2 operands and pushes multiple entries to an array.
## Boxing Updated
### Word Boxing
`MRB_WORD_BOXING` now packs floating-point numbers in the word, if the size of `mrb_float` is equal or smaller than the size of `mrb_int` by default.
If the size of `mrb_float` and `mrb_int` are same, the last 2 bits in the `mrb_float` are trimmed and used as flags. If you need full precision, you need to define `MRB_WORDBOX_NO_FLOAT_TRUNCATE` as described above.
### NaN Boxing
Previous NaN boxing packs values in NaN representation, but pointer retrievals are far more frequent than floating-point number references. So we add constant offset to NaN representation to clear higher bits of pointer representation. This representation is called "Favor Pointer" NaN Boxing.
Also, previous NaN boxing limit the size of `mrb_int` to 4 bytes (32 bits) to fit in NaN values. Now we allocate integer values in the heap, if the value does not fit in the 32 bit range, just like we did in Word Boxing.
## Constant Folding
The code generator was updated to reduce the number of instructions, e.g.
```
a = 2 * 5
```
will be interpreted as
```
a = 10
```
In addition, we have improved peephole optimizations, for example:
```
GETIV R4 :@foo
MOVE R1 R4
```
to
```
GETIV R1 :@foo
```
## `String#hash` now use `FNV1a` algorithm
For better and faster hash values.
---
# Major bug fixes
- Fix infinite recursive call bugs in integer division [98799aa6](https://github.com/mruby/mruby/commit/98799aa6)
- Fix to raise TypeError with super inside instance_eval / class_eval [#5476](https://github.com/mruby/mruby/pull/5476)
- Fix to call `method_added` hooks on method definitions; [#2339](https://github.com/mruby/mruby/pull/2339)
- Fix a potential buffer overflow in `time_zonename` [26340a88](https://github.com/mruby/mruby/commit/26340a88)
- Fix `Module.instance_eval` bug [#5528](https://github.com/mruby/mruby/pull/5528)
- Fix fix `M` packing bug [bfe2bd49](https://github.com/mruby/mruby/commit/bfe2bd49)
- Fix a bug regarding attribute assignment with kargs [de2b4bd0](https://github.com/mruby/mruby/commit/de2b4bd0)
- Fix SIGSEGV with mrbgems/mruby-method [#5580](https://github.com/mruby/mruby/pull/5580)
- Fix print error before cleanup in `codegen_error()` [#5603](https://github.com/mruby/mruby/pull/5603)
- Fix a bug in unpacking BER [#5611](https://github.com/mruby/mruby/pull/5611)
- Fix a bug with numbered parameters as arguments [#5605](https://github.com/mruby/mruby/pull/5605)
- Fix `mrb_ary_shift_m` initialization bug [27d1e013](https://github.com/mruby/mruby/commit/27d1e013)
- Fix keyword argument with `super` [#5628](https://github.com/mruby/mruby/pull/5628)
- Fix a bug with numbered parameters on toplevel [7e7f1b2f](https://github.com/mruby/mruby/commit/7e7f1b2f)
- Fix keyword argument bug [#5632](https://github.com/mruby/mruby/issues/5632)
- Fix multiple assignments in parameters [#5647](https://github.com/mruby/mruby/issues/5647)
- Fix keyword parameters not passing through super [#5660](https://github.com/mruby/mruby/issues/5660)
- Fix infinite loop from unclosed here-doc [#5676](https://github.com/mruby/mruby/issues/5676)
- Fix negative integer division bug [#5678](https://github.com/mruby/mruby/issues/5678)
# CVEs
## Fixed CVEs
Following CVEs are fixed in this release.
- [CVE-2021-4110](https://www.cve.org/CVERecord?id=CVE-2021-4110)
- [CVE-2021-4188](https://www.cve.org/CVERecord?id=CVE-2021-4188)
- [CVE-2022-0080](https://www.cve.org/CVERecord?id=CVE-2022-0080)
- [CVE-2022-0240](https://www.cve.org/CVERecord?id=CVE-2022-0240)
- [CVE-2022-0326](https://www.cve.org/CVERecord?id=CVE-2022-0326)
- [CVE-2022-0481](https://www.cve.org/CVERecord?id=CVE-2022-0481)
- [CVE-2022-0631](https://www.cve.org/CVERecord?id=CVE-2022-0631)
- [CVE-2022-0632](https://www.cve.org/CVERecord?id=CVE-2022-0632)
- [CVE-2022-0890](https://www.cve.org/CVERecord?id=CVE-2022-0890)
- [CVE-2022-1071](https://www.cve.org/CVERecord?id=CVE-2022-1071)
- [CVE-2022-1106](https://www.cve.org/CVERecord?id=CVE-2022-1106)
- [CVE-2022-1201](https://www.cve.org/CVERecord?id=CVE-2022-1201)
- [CVE-2022-1427](https://www.cve.org/CVERecord?id=CVE-2022-1427)
## Unaffected CVEs
Following CVEs do not cause problems in this release. They are fixed in the later release.
- [CVE-2022-0481](https://www.cve.org/CVERecord?id=CVE-2022-0481)
- [CVE-2022-0525](https://www.cve.org/CVERecord?id=CVE-2022-0525)
- [CVE-2022-0570](https://www.cve.org/CVERecord?id=CVE-2022-0570)
- [CVE-2022-0614](https://www.cve.org/CVERecord?id=CVE-2022-0614)
- [CVE-2022-0623](https://www.cve.org/CVERecord?id=CVE-2022-0623)
- [CVE-2022-0630](https://www.cve.org/CVERecord?id=CVE-2022-0630)
- [CVE-2022-0717](https://www.cve.org/CVERecord?id=CVE-2022-0817)
- [CVE-2022-1212](https://www.cve.org/CVERecord?id=CVE-2022-1212)
- [CVE-2022-1276](https://www.cve.org/CVERecord?id=CVE-2022-1276)
- [CVE-2022-1286](https://www.cve.org/CVERecord?id=CVE-2022-1286)
+79
View File
@@ -0,0 +1,79 @@
# User visible changes in `mruby3.2` from `mruby3.1`
# The language
- Now `a::B = c` should evaluate `a` then `c`.
- Anonymous arguments `*`, `**`, `&` can be passed for forwarding.
- Multi-precision integer is available now via `mruby-bigint` gem.
# mruby VM and bytecode
- `OP_ARYDUP` was renamed to `OP_ARYSPLAT`. The instruction name
was changed but instruction number and basic behavior have not
changed (except that `ARYDUP nil` makes `[]`).
# Tools
## `mruby`
- `-b` only specifies the script is the binary. The files loaded by `-r` are not affected by the option.
- `mruby` now loads complied binary if the suffix is `.mrb`.
## `mrbc`
- Add `--no-optimize` option to disable optimization.
# mrbgems
## mruby-class-ext
- Add `Class#subclasses` method.
- Add `Module#undefined_instance_methods` method.
## New bundled gems
- mruby-errno from <https://github.com/iij/mruby-errno.git>
- mruby-set from <https://github.com/yui-knk/mruby-set.git>
- mruby-dir from <https://github.com/iij/mruby-dir.git>
- mruby-data
# Breaking Changes
## `mrb_vm_run()` may detach top-level local variables referenced from blocks
When the `mrb_vm_run()` function (including `mrb_top_run()`) is called,
the previous top-level local variables referenced from blocks is detached under either of the following conditions.
- If the `stack_keep` parameter is given as 0.
- If the number of variables in `irep` to be executed is less than the number of previous top-level local variables.
This change also affects API functions such as `mrb_load_string()` and `mrb_load_file()`.
The conditions under which the previous top-level local variables referenced from blocks is detached in these functions are as follows:
- If the function has no `mrbc_context` pointer parameter, or the `mrbc_context` pointer parameter is set to `NULL`.
- If the number of variables held in the `mrbc_context` pointer is less than the number of previous top-level local variables.
Intentional reliance on previous behavior may cause compatibility problems in your application.
# CVEs
Following CVEs are fixed.
- [CVE-2022-0080](https://www.cve.org/CVERecord?id=CVE-2022-0080)
- [CVE-2022-0240](https://www.cve.org/CVERecord?id=CVE-2022-0240)
- [CVE-2022-0326](https://www.cve.org/CVERecord?id=CVE-2022-0326)
- [CVE-2022-0481](https://www.cve.org/CVERecord?id=CVE-2022-0481)
- [CVE-2022-0525](https://www.cve.org/CVERecord?id=CVE-2022-0525)
- [CVE-2022-0570](https://www.cve.org/CVERecord?id=CVE-2022-0570)
- [CVE-2022-0614](https://www.cve.org/CVERecord?id=CVE-2022-0614)
- [CVE-2022-0623](https://www.cve.org/CVERecord?id=CVE-2022-0623)
- [CVE-2022-0630](https://www.cve.org/CVERecord?id=CVE-2022-0630)
- [CVE-2022-0631](https://www.cve.org/CVERecord?id=CVE-2022-0631)
- [CVE-2022-0632](https://www.cve.org/CVERecord?id=CVE-2022-0632)
- [CVE-2022-0717](https://www.cve.org/CVERecord?id=CVE-2022-0717)
- [CVE-2022-0890](https://www.cve.org/CVERecord?id=CVE-2022-0890)
- [CVE-2022-1106](https://www.cve.org/CVERecord?id=CVE-2022-1106)
- [CVE-2022-1212](https://www.cve.org/CVERecord?id=CVE-2022-1212)
- [CVE-2022-1276](https://www.cve.org/CVERecord?id=CVE-2022-1276)
- [CVE-2022-1286](https://www.cve.org/CVERecord?id=CVE-2022-1286)
- [CVE-2022-1934](https://www.cve.org/CVERecord?id=CVE-2022-1934)
+186
View File
@@ -0,0 +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` ([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
([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. ([#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 ([34c5d96](https://github.com/mruby/mruby/commit/34c5d96))
- `mrb_open_allocf` will be deprecated ([cfee5c2](https://github.com/mruby/mruby/commit/cfee5c2))
# Changes in C API
- 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
- **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
- [#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)
- [#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`
-126
View File
@@ -1,126 +0,0 @@
# The new bytecode
We will reimplement VM to use 8bit instruction code. By
bytecode, we mean real byte code. The whole purpose is
reducing the memory consumption of mruby VM.
# Instructions
Instructions are bytes. There can be 256 instructions. Currently we
have 94 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 (and
sign) of operands.
* B: 8bit
* S: 16bit
* sS: signed 16bit
* W: 24bit
## 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 | BsS | R(a) = mrb_int(b) |
| 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_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_SENDV | BB | R(a) = call(R(a),Syms(b),*R(a+1)) |
| OP_SENDVB | BB | R(a) = call(R(a),Syms(b),*R(a+1),&R(a+2)) |
| OP_SEND | BBB | R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c)) |
| OP_SENDB | BBB | R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c),&R(a+c+1)) |
| OP_CALL | - | R(0) = self.call(frame.argc, frame.argv) |
| OP_SUPER | BB | R(a) = super(R(a+1),... ,R(a+b+1)) |
| OP_ARGARY | BS | R(a) = argument array (16=5:1:5:1:4) |
| OP_ENTER | W | arg setup according to flags (23=5:5:1:5:5:1:1) |
| 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=5:1:5:1:4) |
| 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 | B | ary_push(R(a),R(a+1)) |
| OP_ARYDUP | B | R(a) = ary_dup(R(a)) |
| OP_AREF | BBB | R(a) = R(b)[c] |
| OP_ASET | BBB | R(a)[c] = R(b) |
| OP_APOST | BBB | *R(a),R(a+1)..R(a+c) = R(a)[b..] |
| OP_INTERN | B | R(a) = intern(R(a)) |
| OP_STRING | BB | R(a) = str_dup(Lit(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)) |
| OP_HASHADD | BB | R(a) = hash_push(R(a),R(a+1)..R(a+b)) |
| OP_HASHCAT | B | R(a) = hash_cat(R(a),R(a+1)) |
| OP_LAMBDA | BB | R(a) = lambda(SEQ[b],OP_L_LAMBDA) |
| OP_BLOCK | BB | R(a) = lambda(SEQ[b],OP_L_BLOCK) |
| OP_METHOD | BB | R(a) = lambda(SEQ[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),SEQ[b]) |
| OP_DEF | BB | R(a).newmethod(Syms(b),R(a+1)) |
| 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, Lit(a)) |
| OP_STOP | - | stop VM |
|------------------|--------------|--------------------------------------------------------|
+13
View File
@@ -0,0 +1,13 @@
version: "3.8"
services:
test:
build:
context: .
command: sh -c 'rake deep_clean && rake -m test:build && rake test:run'
environment:
- MRUBY_CONFIG=ci/gcc-clang
- CC=gcc
- CXX=g++
- LD=gcc
- SKIP=check-executables-have-shebangs
working_dir: /app
@@ -1,4 +1,3 @@
C and Ruby Extension Example
=========
# C and Ruby Extension Example
This is an example gem which implements a C and Ruby extension.
@@ -5,9 +5,8 @@
static mrb_value
mrb_c_method(mrb_state *mrb, mrb_value self)
{
mrb_value self_str = mrb_str_to_str(mrb, self);
printf("%s: A C Extension\n", mrb_str_to_cstr(mrb, self_str));
mrb_ensure_string_type(mrb, self);
printf("%s: A C Extension\n", mrb_str_to_cstr(mrb, self));
return self;
}
@@ -1,4 +1,3 @@
C Extension Example
=========
# C Extension Example
This is an example gem which implements a C extension.
@@ -5,9 +5,8 @@
static mrb_value
mrb_c_method(mrb_state *mrb, mrb_value self)
{
mrb_value self_str = mrb_str_to_str(mrb, self);
printf("%s: A C Extension\n", mrb_str_to_cstr(mrb, self_str));
mrb_ensure_string_type(mrb, self);
printf("%s: A C Extension\n", mrb_str_to_cstr(mrb, self));
return self;
}
@@ -0,0 +1,3 @@
# C Data Extension Example
This is an example gem which implements a C extension with Data.
@@ -0,0 +1,23 @@
MRuby::Gem::Specification.new('cdata_extension_example') do |spec|
spec.license = 'MIT'
spec.author = 'mruby developers'
# Add compile flags
# spec.cc.flags << '-g'
# Add cflags to all
# spec.mruby.cc.flags << '-g'
# Add libraries
# spec.linker.libraries << 'external_lib'
# 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")) }
# spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb")
# spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) }
# spec.test_preload = 'test/assert.rb'
# Values accessible as TEST_ARGS inside test scripts
# spec.test_args = {'tmp_dir' => Dir::tmpdir}
end
@@ -0,0 +1,77 @@
#include <mruby.h>
#include <mruby/string.h>
#include <mruby/class.h>
#include <mruby/data.h>
#include <stdio.h>
static void mrb_foo_free(mrb_state *mrb, void *ptr) {
/* custom destructor */
mrb_free(mrb, ptr);
}
struct mrb_data_type mrb_foo_type = { "Foo", mrb_foo_free };
struct Foo {
int bar;
char baz[32];
};
static mrb_value
mrb_foo_initialize(mrb_state *mrb, mrb_value self)
{
struct Foo *f;
f = (struct Foo*)mrb_malloc(mrb, sizeof(struct Foo));
f->bar = 0;
DATA_PTR(self) = f;
DATA_TYPE(self) = &mrb_foo_type;
return self;
}
static mrb_value
mrb_foo_get_bar(mrb_state *mrb, mrb_value self)
{
struct Foo *f;
f = (struct Foo*)mrb_data_get_ptr(mrb, self, &mrb_foo_type);
if (f == NULL) {
mrb_raise(mrb, E_RUNTIME_ERROR, "uninitialized data");
}
return mrb_fixnum_value(f->bar);
}
static mrb_value
mrb_foo_set_bar(mrb_state *mrb, mrb_value self)
{
struct Foo *f;
int v;
f = (struct Foo*)mrb_data_get_ptr(mrb, self, &mrb_foo_type);
if (f == NULL) {
mrb_raise(mrb, E_RUNTIME_ERROR, "uninitialized data");
}
mrb_get_args(mrb, "i", &v);
f->bar = v;
return mrb_fixnum_value(f->bar);
}
void
mrb_cdata_extension_example_gem_init(mrb_state* mrb) {
struct RClass *class_foo;
class_foo = mrb_define_class(mrb, "Foo", mrb->object_class);
MRB_SET_INSTANCE_TT(class_foo, MRB_TT_CDATA);
mrb_define_method(mrb, class_foo, "initialize", mrb_foo_initialize, MRB_ARGS_NONE());
mrb_define_method(mrb, class_foo, "bar", mrb_foo_get_bar, MRB_ARGS_NONE());
mrb_define_method(mrb, class_foo, "bar=", mrb_foo_set_bar, MRB_ARGS_REQ(1));
}
void
mrb_cdata_extension_example_gem_final(mrb_state* mrb) {
/* gem finalizer */
}
@@ -0,0 +1,7 @@
#include <mruby.h>
void
mrb_cdata_extension_example_gem_test(mrb_state *mrb)
{
/* test initializer in C */
}
@@ -0,0 +1,39 @@
# Hints for creating your own bigint GEM
This example gem, mruby-YOUR-bigint, is available under the Creative Commons Zero License (CC0).
This file is placed for the purpose of describing hints for creating a `mruby-bigint` compatible GEM to realize multiple integers.
The file structure in this example is as follows:
```
+- mruby-YOUR-bigint/ <- Make this directory public if necessary.
| Change the name of copied directory.
|
+- TODO-HINT.md <- You are currently viewing this file.
| Remove this from copied directory.
|
+- core/
| |
| +- bigint.c <- Body of the implementation.
|
+- mrbgem.rake <- GEM name is "mruby-bigint".
May be depended on by other GEMs.
```
Implementers of their own bigints should copy below this directory to another directory and do the following:
- Rewrite `spec.author`, `spec.license`, `spec.homepage` and `spec.summary` in `<gem-dir>/mrbgem.rake` file to those of your own implementers.
- Implement the respective functions in `<gem-dir>/core/bigint.c`.
- Define and use an object structure for `MRB_TT_BIGINT` type-tag.
It is recommended to use `mrb_static_assert_object_size()` to ensure that the size of the object structure is within six words.
- Delete this file from the destination of the copy.
If you wish to use it as an alternative to the `mruby-bigint` provided by mruby, please leave the GEM name in `<gem-dir>/mrbgem.rake` as it is.
This is an important factor when it is depended from other GEMs with `spec.add_dependency 'mruby-bigint'`.
The name of the top directory of the GEM can be changed arbitrarily.
The name of the Git repository can also be changed arbitrarily.
Note that there is no need for an initialization function as there is in a normal GEM.
If you need it, create a file `<gem-dir>/src/bigint.c` for example, and implement the `mrb_mruby_bigint_gem_init()` function.
@@ -0,0 +1,70 @@
/*
* If placed under the "mruby/examples/mrbgems/mruby-YOUR-bigint" directory,
* this file is available under the Creative Commons Zero License (CC0).
* Note that file is incomplete.
*
* TODO: If this file is copied and another implementation is written,
* remove this comment block from the copied file.
*/
#include <mruby.h>
#include <mruby/numeric.h>
/*
* The "mruby/internal.h" file should be placed after the other mruby header files.
*/
#include <mruby/internal.h>
/*
* The "mruby/presym.h" file is placed at the end of the mruby header file.
*/
#include <mruby/presym.h>
/*
* Define your own struct RBigint.
*
* - Object type must be MRB_TT_BIGINT.
* - If the structure is named RBigint, MRB_OBJ_ALLOC() can be used as is.
*/
struct RBigint {
/*
* Put MRB_OBJECT_HEADER before the first member of the structure.
*/
MRB_OBJECT_HEADER;
/*
* Up to 3 words can be freely configured.
*/
size_t len;
size_t capa;
uintptr_t *num;
};
/*
* Assert with mrb_static_assert_object_size() that the entire structure is within 6 words.
*/
mrb_static_assert_object_size(struct RBigint);
/*
* The lower 16 bits of the object flags (`obj->flags`) can be used freely by the GEM author.
*/
#define MY_BIGINT_NEGATIVE_FLAG 1
#define MY_BIGINT_NEGATIVE_P(obj) ((obj)->flags & MY_BIGINT_NEGATIVE_FLAG)
/*
* Implement the functions declared in `#ifdef MRUBY_USE_BIGINT ... #endif` in the "mruby/internal.h" file.
*/
mrb_value
mrb_bint_new_int(mrb_state *mrb, mrb_int x)
{
struct RBigint *obj = MRB_OBJ_ALLOC(mrb, MRB_TT_BIGINT, mrb->integer_class);
...
return mrb_obj_value(obj);
}
/*
* The implementation function continues...
*/
@@ -0,0 +1,12 @@
MRuby::Gem::Specification.new('mruby-bigint') do |spec|
spec.author = 'YOUR-NAME-HERE'
spec.license = 'YOUR-LICENSE-HERE'
spec.summary = 'Yet another multi-precision Integer extension'
spec.homepage = 'https://gem.example/for/mruby-YOUR-bigint'
spec.build.defines << 'MRB_USE_BIGINT'
#spec.build.linker.libraries << 'gmp' # when uses libgmp
spec.build.libmruby_core_objs << Dir.glob(File.join(__dir__, 'core/**/*.c')).map { |fn|
objfile(fn.relative_path_from(__dir__).pathmap("#{spec.build_dir}/%X"))
}
end
@@ -1,4 +1,3 @@
Pure Ruby Extension Example
=========
# Pure Ruby Extension Example
This is an example gem which implements a pure Ruby extension.

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