| Age | Commit message (Collapse) | Author |
|
|
|
Previously, at the end of `leave` we did
`*caller_cfp->sp = return_value`, like the interpreter.
With future changes that leaves the SP field uninitialized for C frames,
this will become problematic. For cases like returning from
`rb_funcall()`, the return value was written above the stack and
never read anyway (callers use the copy in the return register).
Leave the return value in a register at the end of `leave` and have the
code at `cfp->jit_return` decide what to do with it. This avoids the
unnecessary memory write mentioned above. For JIT-to-JIT returns, it goes
through `asm.stack_push()` and benefits from register allocation for
stack temporaries.
Mostly flat on benchmarks, with maybe some marginal speed improvements.
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
|
|
This node type was added for the multi-value experiment back in 2004.
The feature itself was removed after a few years, but this is its
remnant.
|
|
```
yjit/yjit.mk:48: Extraneous text after `ifneq' directive
```
|
|
|
|
https://github.com/ruby/prism/commit/c3438aabea
|
|
https://github.com/ruby/prism/commit/e100c6b8ae
|
|
https://github.com/ruby/prism/commit/53efaf252d
|
|
Each bit run is upto the right shift count, so the each mask does not
need more upper bits.
|
|
(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
https://github.com/ruby/stringio/commit/37e9279337
Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
|
|
Fix nil handling in read_body and stream_check.
Fixes: #70
https://github.com/ruby/net-http/commit/36f916ac18
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
https://github.com/ruby/prism/commit/8eaa199a28
|
|
|
|
https://github.com/ruby/prism/commit/f2333ba4c8
|
|
https://github.com/ruby/prism/commit/630af5cb0e
|
|
|
|
(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.
https://github.com/ruby/irb/commit/d5b262a076
|
|
|
|
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
|
|
The current documentation for `rb_postponed_job_register_one()` is
explaining the differences with itself, where it should be explaining
the differences with `rb_postponed_job_register()`.
|
|
|
|
|
|
https://github.com/ruby/bigdecimal/commit/c47802e813
|
|
The test for integer part was separated at dc54574adefe.
|
|
* YJIT: Add counter to measure how often we compile "cold" ISEQs (#535)
Fix counter name in DEFAULT_COUNTERS
YJIT: add --yjit-cold-threshold, don't compile cold ISEQs
YJIT: increase default cold threshold to 200_000
Remove rb_yjit_call_threshold()
Remove conflict markers
Fix compilation errors
Threshold 1 should compile immediately
Debug deadlock issue with test_ractor
Fix call threshold issue with tests
* Revert exception threshold logic. Document option in yjid.md
* (void) for 0 parameter functions in C99
* Rename iseq_entry_cold => cold_iseq_entry
* Document --yjit-cold-threshold in ruby.c
* Update doc/yjit/yjit.md
Co-authored-by: Jean byroot Boussier <jean.boussier+github@shopify.com>
* Shorten help string to appease test
* Address bug found by Kokubun. Reorder logic.
---------
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
Co-authored-by: Jean byroot Boussier <jean.boussier+github@shopify.com>
|
|
https://github.com/ruby/prism/commit/4828c96939
|
|
https://github.com/ruby/prism/commit/4f107d8962
|
|
As discussed in https://github.com/rubygems/rubygems/issues/6273#issuecomment-1449176658
The `gem` method behaves awkwardly in standalone mode. Assuming bundler
isn't loaded at all, a call to gem might activate a gem that is not part
of the bundle (because it's the gem method defined in
lib/rubygems/core_ext/kernel_gem.rb and not
lib/bundler/rubygems_integration.rb). And when running with
`--disable-gems`, the gem method won't be defined at all so we'll get a
NoMethodError.
Calls to `gem` can appear in dependencies outside an application's
control. To work around this at GitHub we defined our own `Kernel#gem`
that no-ops.
I agree with https://github.com/rubygems/rubygems/issues/6273#issuecomment-1440755882
> people using standalone mode don't want to activate gems like Kernel.gem
This commit redefines `Kernel#gem` in the standalone script to no-op.
https://github.com/rubygems/rubygems/commit/bea17b55f1
|
|
YJIT: Remove spill_temps from jit_prepare_routine_call
|
|
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
|
|
|
|
(https://github.com/ruby/reline/pull/594)
https://github.com/ruby/reline/commit/b6fb72718a
|
|
|