summaryrefslogtreecommitdiff
path: root/.github/workflows/ubuntu.yml
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2023-11-28 12:14:45 -0800
committerJeremy Evans <code@jeremyevans.net>2024-01-24 18:25:55 -0800
commitb8516d6d0174a10579817f4bcf5a94c8ef03dd7a (patch)
tree3def069614e8a19ba4fec7edd7e6ed33cd0ff3e4 /.github/workflows/ubuntu.yml
parent6e06d0d180001a79abadf48e2fe6baf3886f54c0 (diff)
Add pushtoarray VM instruction
This instruction is similar to concattoarray, but it takes the number of arguments to push to the array, removes that number of arguments from the stack, and adds them to the array now at the top of the stack. This allows `f(*a, 1)` to allocate only a single array on the caller side (which can be reused on the callee side in the case of `def f(*a)`). Prior to this commit, `f(*a, 1)` would generate 3 arrays: * a dupped by splatarray true * 1 wrapped in array by newarray * a dupped again by concatarray Instructions Before for `a = []; f(*a, 1)`: ``` 0000 newarray 0 ( 1)[Li] 0002 setlocal_WC_0 a@0 0004 putself 0005 getlocal_WC_0 a@0 0007 splatarray true 0009 putobject_INT2FIX_1_ 0010 newarray 1 0012 concatarray 0013 opt_send_without_block <calldata!mid:f, argc:1, ARGS_SPLAT|FCALL> 0015 leave ``` Instructions After for `a = []; f(*a, 1)`: ``` 0000 newarray 0 ( 1)[Li] 0002 setlocal_WC_0 a@0 0004 putself 0005 getlocal_WC_0 a@0 0007 splatarray true 0009 putobject_INT2FIX_1_ 0010 pushtoarray 1 0012 opt_send_without_block <calldata!mid:f, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL> 0014 leave ``` With these changes, method calls to Ruby methods should implicitly allocate at most one array. Ignore typeprof bundled gem failure due to unrecognized instruction.
Diffstat (limited to '.github/workflows/ubuntu.yml')
-rw-r--r--.github/workflows/ubuntu.yml2
1 files changed, 1 insertions, 1 deletions
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
index 93ced0d1d2..b78570e224 100644
--- a/.github/workflows/ubuntu.yml
+++ b/.github/workflows/ubuntu.yml
@@ -99,7 +99,7 @@ jobs:
env:
RUBY_TESTOPTS: '-q --tty=no'
TESTS: ${{ matrix.test_task == 'check' && matrix.skipped_tests || '' }}
- TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof'
PRECHECK_BUNDLED_GEMS: 'no'
- name: make skipped tests