Commit graph

18546 commits

Author SHA1 Message Date
Matt Valentine-House
7db4ce13ed [ruby/prism] Introduce transparent scopes.
A transparent scope is a scope that cannot have local variables added to
it's local table. When a local is added to it's table, it instead gets
added to the first non-transparent parent scope.

This is used in for loops to ensure the correct depth for local
variables inside the body

ddb8e82253

Co-Authored-By: Kevin Newton <kddnewton@gmail.com>
2023-10-06 12:21:03 +00:00
Nobuyoshi Nakada
723318f5d7 [ruby/openssl] Exact checks with assert_include
Where `assert_match` converts string matcher argument to regexp first
with escaping, `assert_include` does the same thing simpler.

81007e0a49
2023-10-06 09:45:20 +00:00
Nobuyoshi Nakada
95ced6d8d2 [ruby/openssl] Exact checks with assert_include
9a6e24daaf
2023-10-06 07:37:52 +00:00
Nobuyoshi Nakada
b459bca0a6 Use size of uintptr_t for j and J tests
`RbConfig::SIZEOF` has been added later than the time this check was
committed first.
2023-10-06 16:33:44 +09:00
Nobuyoshi Nakada
0202ca7cfc Move rbconfig to the top
It is required in the always defined class level.
2023-10-06 16:33:44 +09:00
Vinicius Stock
69b024d7cc [ruby/prism] Add full_name to ConstantPathNode and ConstantPathTargetNode
b390553028
2023-10-06 01:57:34 +00:00
Haldun Bayhantopcu
8d8fe54355 [ruby/prism] Check for duplicate parameter names in destructured params
c3438aabea
2023-10-05 16:35:45 +00:00
Haldun Bayhantopcu
38cb92a00c [ruby/prism] Check for duplicate names in shadow args
e100c6b8ae
2023-10-05 15:12:05 +00:00
Haldun Bayhantopcu
fb9795cf7a [ruby/prism] Fix parsing shadow args in lambda blocks
53efaf252d
2023-10-05 11:25:32 +00:00
Jean byroot Boussier
f087f2c74c [ruby/stringio] StringIO#pread: handle 0 length like IO#pread
(https://github.com/ruby/stringio/pull/67)

Fix: https://github.com/ruby/stringio/issues/66

If length is 0, IO#pread don't even try to read the IO, it simply return
the buffer untouched if there is one or a new empty buffer otherwise.

It also doesn't validate the offset when length is 0.

cc @jdelStrother @kou

37e9279337

Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2023-10-05 07:44:08 +00:00
Brian Hawley
9d58f93828 [ruby/net-http] Net::HTTPResponse nil checking
Fix nil handling in read_body and stream_check.

Fixes: #70

36f916ac18
2023-10-05 07:11:52 +00:00
Matt Valentine-House
05b9b58d55 [Prism] Fix IfNode and ElseNode
ElseNode looks to have been implemented at the same time as IfNode, but
was resulting in a stack underflow error.

The following is from the test code

```
if foo
  bar
end
```

```
❯ make run
compiling compile.c
linking miniruby
./miniruby -I./lib -I. -I.ext/common  -r./arm64-darwin22-fake  ./test.rb
CRUBY: **************************************************
== disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(2,19)>
0000 putself                                                          (   2)[Li]
0001 opt_send_without_block                 <calldata!mid:foo, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0003 branchunless                           9
0005 putself
0006 opt_send_without_block                 <calldata!mid:bar, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0008 pop
0009 putobject_INT2FIX_1_
0010 leave
PRISM: **************************************************
-- raw disasm--------
   0000 putself                                                          (   2)
   0001 send                 <calldata:foo, 0>, nil                      (   2)
   0004 branchunless         <L001>                                      (   2)
   0006 jump                 <L000>                                      (   2)
 <L000> [sp: 0]
*  0008 pop                                                              (   1)
   0009 putself                                                          (   2)
   0010 send                 <calldata:bar, 0>, nil                      (   2)
   0013 pop                                                              (   2)
   0014 jump                 <L002>                                      (   1)
 <L001> [sp: 0]
 <L002> [sp: -1]
   0016 putobject            1                                           (   2)
   0018 leave                                                            (   1)
---------------------
<compiled>: <compiled>:1: argument stack underflow (-1) (SyntaxError)
make: *** [run] Error 1
```

This commit fixes the stack underflow error for both IfNode and ElseNode
and introduces tests for them.
2023-10-04 13:53:31 -04:00
Kouhei Yanagita
6ae2996e29
Optimize Range#count by using range_size if possible 2023-10-05 00:19:55 +09:00
Stan Lo
b43cc51dca [ruby/irb] Clear all context usages in RubyLex
(https://github.com/ruby/irb/pull/684)

After this change, `RubyLex` will not interact with `Context` directly
in any way. This decoupling has a few benefits:

- It makes `RubyLex` easier to test as it no longer has a dependency on
  `Context`. We can see this from the removal of `build_context` from
  `test_ruby_lex.rb`.
- It will make `RubyLex` easier to understand as it will not be affected
  by state changes in `Context` objects.
- It allows `RubyLex` to be used in places where `Context` is not available.

d5b262a076
2023-10-04 12:13:33 +00:00
Josef Šimánek
0046c67dd8
[rubygems/rubygems] Fix typo: eglible -> eligible.
1e487e1337
2023-10-03 16:13:18 +09:00
Kosuke Shibata
2325e1cd81
[ruby/csv] Add CSV::InvalidEncodingError
(https://github.com/ruby/csv/pull/287)

To handle encoding errors in CSV parsing with the appropriate error
class

68b44887e5
2023-10-03 16:13:18 +09:00
Takashi Kokubun
492e9437dd
YJIT: Fix assert_no_exits (#8579) 2023-10-02 14:09:51 -07:00
Nobuyoshi Nakada
9059dfce12
yield cannot be placed outside methods even in blocks 2023-10-02 23:20:03 +09:00
Benoit Daloze
87dad067e0 Sync with prism CallNode#name changes
* https://github.com/ruby/prism/pull/1533
2023-10-02 09:18:56 -04:00
Charles Oliver Nutter
5c501bcbdb [ruby/psych] Add test for code_point_limit
Only supported on JRuby currently.

0c1754eefe
2023-10-02 11:47:35 +09:00
Nobuyoshi Nakada
ec3d81629f
[Bug #19906] Add the test 2023-10-01 23:58:24 +09:00
Nobuyoshi Nakada
b0d7935e80
Move repeating matches and unmatches to keyword arguments
And default to the corresponding instance variables.
2023-10-01 18:55:58 +09:00
Nobuyoshi Nakada
3ae44035dd
Add tests for Unicode age property 15.0 2023-10-01 18:23:49 +09:00
tomoya ishida
c9e28ea2f9 [ruby/irb] Fix Reline's test failure running with `make test-all
TESTS='reline irb'`
(https://github.com/ruby/irb/pull/722)

* Specify TestInputMethod in test to avoid RelineInputMethod to be used

* Reset Reline in teardown to avoid test failure of `make test-all TESTS="irb reline"`

5d67967eb1
2023-09-30 17:56:06 +00:00
Josef Šimánek
4cf68908e5 [rubygems/rubygems] Update SPDX list and warn on deprecated identifiers.
61667028f5
2023-09-30 11:20:08 +00:00
Nobuyoshi Nakada
94e79e4c2d
Fix failures when all network interfaces are down 2023-09-30 19:03:04 +09:00
Takashi Kokubun
0b67e3fd3e
YJIT: Chain-guard opt_mult overflow (#8554)
* YJIT: Chain-guard opt_mult overflow

* YJIT: Support regenerating Jo after Mul
2023-09-29 21:55:48 -04:00
Jun Aruga
7278747d08 [ruby/zlib] Revert "Workaround: Fix test failures on Ubuntu jammy s390x."
This reverts commit 9f3b9c470c because we will
fix the issue on alternative way.

3dfe3f9110
2023-09-29 16:14:29 +00:00
Kevin Newton
2e25289aee Handle static array nodes 2023-09-29 09:51:23 -04:00
Kevin Newton
38e3cafe62 Compile implicit nodes 2023-09-29 09:51:23 -04:00
Kevin Newton
396042a25c Fix up static hash compilation 2023-09-29 09:51:23 -04:00
Nobuyoshi Nakada
01c7656775
Fix to replace only -e that is a path name in assert_crash_report 2023-09-29 17:43:14 +09:00
Jean byroot Boussier
f14cee39b8 [ruby/ostruct] Emit a performance warning when OpenStruct is used
(https://github.com/ruby/ostruct/pull/56)

The OpenStruct documentation clearly state that it shouldn't
be used when performance is expected.

Ruby 3.3 introduce a new category of warnings that is silenced
by default: performance.

The expected use case is to enable this warning when looking
for potential performance issues within an application.

As such I think it would make sense to emit a performance warning
when OpenStruct is used, as it may help pinpoint that a dependency
rely on it, etc.

5826e12db8

Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2023-09-29 06:48:55 +00:00
Kevin Newton
b1a28b05db Support local variable targeting in pattern matching 2023-09-28 15:13:09 -04:00
Kevin Newton
41d3e23582 Support the AlternationPatternNode 2023-09-28 15:13:09 -04:00
Kevin Newton
6e88a56f63 Compile basic pattern matching expressions 2023-09-28 15:13:09 -04:00
Nobuyoshi Nakada
eaa0fbf9b9 Fix retry in nested rescue blocks
Restore `rescue`-context from the outer context.
`retry` targets the next outer block except for between `rescue` and
`else` or `ensure`, otherwise, if there is no enclosing block, it
should be syntax error.
2023-09-29 03:14:17 +09:00
Kevin Newton
5a376f0f71 Consolidate regexp options, interpolated match last line 2023-09-28 14:11:34 -04:00
Aaron Patterson
d3574c117a Move IO#readline to Ruby
This commit moves IO#readline to Ruby.  In order to call C functions,
keyword arguments must be converted to hashes.  Prior to this commit,
code like `io.readline(chomp: true)` would allocate a hash.  This
commits moves the keyword "denaturing" to Ruby, allowing us to send
positional arguments to the C API and avoiding the hash allocation.

Here is an allocation benchmark for the method:

```
x = GC.stat(:total_allocated_objects)
File.open("/usr/share/dict/words") do |f|
  f.readline(chomp: true) until f.eof?
end
p ALLOCATIONS: GC.stat(:total_allocated_objects) - x
```

Before this commit, the output was this:

```
$ make run
./miniruby -I./lib -I. -I.ext/common  -r./arm64-darwin22-fake  ./test.rb
{:ALLOCATIONS=>707939}
```

Now it is this:

```
$ make run
./miniruby -I./lib -I. -I.ext/common  -r./arm64-darwin22-fake  ./test.rb
{:ALLOCATIONS=>471962}
```

[Bug #19890] [ruby-core:114803]
2023-09-28 10:43:45 -07:00
Matt Valentine-House
414c781158 [YARP] Implement MatchWriteNode 2023-09-28 16:51:30 +01:00
Kevin Newton
f4580ce95c
Fix order-dependent tests in test_compile_prism 2023-09-28 10:23:12 -04:00
tomoya ishida
d4942546af [ruby/reline] Properly restore Reline::IOGate in test teardown
(https://github.com/ruby/reline/pull/593)

* Properly restore Reline::IOGate in test teardown

* GeneralIO.reset should reset class variable existence

c16d33dae5
2023-09-28 13:53:30 +00:00
Kevin Newton
a213d21448 Move CRuby-specific prism files to top level 2023-09-28 09:44:16 -04:00
Haldun Bayhantopcu
834560a923 [ruby/prism] Check whether the predicate is closed for conditionals
bf43006d0a
2023-09-28 13:32:02 +00:00
Haldun Bayhantopcu
7799fe90da [ruby/prism] Check for a semicolon or a newline after the inheritance operator
0326ba6775
2023-09-28 13:31:22 +00:00
Haldun Bayhantopcu
0084bac47a [ruby/prism] Fix assertion failure for fwd params after rest
f86bff6dd7
2023-09-28 13:24:57 +00:00
Nobuyoshi Nakada
b5e23d3e3b
Syntax check of yield in the parser 2023-09-28 16:23:51 +09:00
Nobuyoshi Nakada
ad96962173
Jumps are possible in the top-level loop 2023-09-28 15:12:27 +09:00
Nobuyoshi Nakada
a790f83bac
Suppress void context warnings in verbose mode 2023-09-28 14:30:10 +09:00
Nobuyoshi Nakada
dd5814ed1a
Suppress void context warnings 2023-09-28 08:01:35 +09:00