ruby/bootstraptest
Aaron Patterson c5fc1ce975 Emit special instruction for array literal + .(hash|min|max)
This commit introduces a new instruction `opt_newarray_send` which is
used when there is an array literal followed by either the `hash`,
`min`, or `max` method.

```
[a, b, c].hash
```

Will emit an `opt_newarray_send` instruction.  This instruction falls
back to a method call if the "interested" method has been monkey
patched.

Here are some examples of the instructions generated:

```
$ ./miniruby --dump=insns -e '[@a, @b].max'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,12)> (catch: FALSE)
0000 getinstancevariable                    :@a, <is:0>               (   1)[Li]
0003 getinstancevariable                    :@b, <is:1>
0006 opt_newarray_send                      2, :max
0009 leave
$ ./miniruby --dump=insns -e '[@a, @b].min'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,12)> (catch: FALSE)
0000 getinstancevariable                    :@a, <is:0>               (   1)[Li]
0003 getinstancevariable                    :@b, <is:1>
0006 opt_newarray_send                      2, :min
0009 leave
$ ./miniruby --dump=insns -e '[@a, @b].hash'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,13)> (catch: FALSE)
0000 getinstancevariable                    :@a, <is:0>               (   1)[Li]
0003 getinstancevariable                    :@b, <is:1>
0006 opt_newarray_send                      2, :hash
0009 leave
```

[Feature #18897] [ruby-core:109147]

Co-authored-by: John Hawthorn <jhawthorn@github.com>
2023-04-18 17:16:22 -07:00
..
pending.rb Moved already resolved test 2020-04-27 10:39:07 +09:00
runner.rb Remove a warning in bootstraptest/runner.rb 2023-03-19 21:02:21 -07:00
test_attr.rb Revert "Revert "This commit implements the Object Shapes technique in CRuby."" 2022-10-11 08:40:56 -07:00
test_autoload.rb support concurrent btest execution 2022-02-06 03:05:47 +09:00
test_block.rb
test_class.rb
test_constant_cache.rb Finer-grained constant cache invalidation (take 2) 2022-04-01 14:48:22 -04:00
test_env.rb
test_eval.rb btest: assign $stderr = STDOUT instead of IO#reopen to be more portable 2021-12-16 16:16:40 +09:00
test_exception.rb
test_fiber.rb support concurrent btest execution 2022-02-06 03:05:47 +09:00
test_finalizer.rb
test_flip.rb
test_flow.rb Make proc/Proc.new without block an error instead of warning 2020-06-10 17:49:54 -07:00
test_fork.rb
test_gc.rb s/mjit/rjit/ 2023-03-06 23:44:01 -08:00
test_insns.rb Emit special instruction for array literal + .(hash|min|max) 2023-04-18 17:16:22 -07:00
test_io.rb omit random failure in bootstraptest with freebsd 2022-09-06 16:27:12 +09:00
test_jump.rb btest: assign $stderr = STDOUT instead of IO#reopen to be more portable 2021-12-16 16:16:40 +09:00
test_literal.rb [wasm] bootstraptest, basictest: disable backquote literal tests 2022-01-19 11:19:06 +09:00
test_literal_suffix.rb
test_load.rb Skip a flaky test that might not work 2023-03-17 09:06:52 -07:00
test_marshal.rb
test_massign.rb
test_method.rb support concurrent btest execution 2022-02-06 03:05:47 +09:00
test_objectspace.rb Use a monotonically increasing number for object_id 2019-11-07 09:31:07 -08:00
test_proc.rb Make proc/Proc.new without block an error instead of warning 2020-06-10 17:49:54 -07:00
test_ractor.rb Fix indirect counter increment 2023-03-15 13:59:11 +09:00
test_rjit.rb RJIT: Fix arguments for shift_stack 2023-04-03 21:26:40 -07:00
test_string.rb
test_struct.rb
test_syntax.rb btest: assign $stderr = STDOUT instead of IO#reopen to be more portable 2021-12-16 16:16:40 +09:00
test_thread.rb RJIT: Skip a flaky test_thread test for now 2023-03-10 23:24:18 -08:00
test_yjit.rb YJIT: Fixes failure reported by rails for opt+splat+rest (#7727) 2023-04-17 17:58:04 -04:00
test_yjit_30k_ifelse.rb * append newline at EOF. [ci skip] 2021-10-21 08:12:53 +09:00
test_yjit_30k_methods.rb * append newline at EOF. [ci skip] 2021-10-21 08:12:53 +09:00
test_yjit_rust_port.rb Rust YJIT 2022-04-27 11:00:22 -04:00