summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-04-22[ruby/io-console] Move FFI console under libCharles Oliver Nutter
Having the separate dir makes testing difficult and doesn't reflect the structure the gem will eventually have. We can filter these files out if necessary when building the CRuby gem. https://github.com/ruby/io-console/commit/881010447c
2021-04-22[ruby/io-console] Enable building the C extension on TruffleRuby.Duncan MacGregor
https://github.com/ruby/io-console/commit/c17b8cf3a9
2021-04-22Ignore JRuby files on io-consoleHiroshi SHIBATA
2021-04-22[ruby/benchmark] gemspec: Explicitly have 0 executablesOlle Jonsson
This gem exposes no executables. https://github.com/ruby/benchmark/commit/ff1ef7ae06
2021-04-22[ruby/benchmark] Add comment about terminating newline in captions; fix test ↵Keith Bennett
method name. https://github.com/ruby/benchmark/commit/02ce298d3e
2021-04-22[ruby/cgi] gemspec: Explicitly empty executables listOlle Jonsson
The gem exposes no executables https://github.com/ruby/cgi/commit/cd7106ad97
2021-04-22[ruby/cgi] Add test for escapeHTML/unescapeHTML invalid encoding fix in pure ↵Jeremy Evans
ruby version Also, remove pointless assert_nothing_raised(ArgumentError) while here. https://github.com/ruby/cgi/commit/c05edf5608
2021-04-22[ruby/cgi] handle invalid encodingpavel
https://github.com/ruby/cgi/commit/2b1c2e21a4
2021-04-22[ruby/time] Make Time friendly to RactorKir Shatrov
https://github.com/ruby/time/commit/c784e4f166
2021-04-22fix raise in exception with jumpKoichi Sasada
add_ensure_iseq() adds ensure block to the end of jump such as next/redo/return. However, if the rescue cause are in the body, this rescue catches the exception in ensure clause. iter do next rescue R ensure raise end In this case, R should not be executed, but executed without this patch. Fixes [Bug #13930] Fixes [Bug #16618] A part of tests are written by @jeremyevans https://github.com/ruby/ruby/pull/4291 Notes: Merged: https://github.com/ruby/ruby/pull/4399
2021-04-21Remove reverse VM instructionJeremy Evans
This was previously only used by the multiple assignment code, but is no longer needed after the multiple assignment execution order fix. Notes: Merged: https://github.com/ruby/ruby/pull/4398
2021-04-22* 2021-04-22 [ci skip]git
2021-04-21Evaluate multiple assignment left hand side before right hand sideJeremy Evans
In regular assignment, Ruby evaluates the left hand side before the right hand side. For example: ```ruby foo[0] = bar ``` Calls `foo`, then `bar`, then `[]=` on the result of `foo`. Previously, multiple assignment didn't work this way. If you did: ```ruby abc.def, foo[0] = bar, baz ``` Ruby would previously call `bar`, then `baz`, then `abc`, then `def=` on the result of `abc`, then `foo`, then `[]=` on the result of `foo`. This change makes multiple assignment similar to single assignment, changing the evaluation order of the above multiple assignment code to calling `abc`, then `foo`, then `bar`, then `baz`, then `def=` on the result of `abc`, then `[]=` on the result of `foo`. Implementing this is challenging with the stack-based virtual machine. We need to keep track of all of the left hand side attribute setter receivers and setter arguments, and then keep track of the stack level while handling the assignment processing, so we can issue the appropriate topn instructions to get the receiver. Here's an example of how the multiple assignment is executed, showing the stack and instructions: ``` self # putself abc # send abc, self # putself abc, foo # send abc, foo, 0 # putobject 0 abc, foo, 0, [bar, baz] # evaluate RHS abc, foo, 0, [bar, baz], baz, bar # expandarray abc, foo, 0, [bar, baz], baz, bar, abc # topn 5 abc, foo, 0, [bar, baz], baz, abc, bar # swap abc, foo, 0, [bar, baz], baz, def= # send abc, foo, 0, [bar, baz], baz # pop abc, foo, 0, [bar, baz], baz, foo # topn 3 abc, foo, 0, [bar, baz], baz, foo, 0 # topn 3 abc, foo, 0, [bar, baz], baz, foo, 0, baz # topn 2 abc, foo, 0, [bar, baz], baz, []= # send abc, foo, 0, [bar, baz], baz # pop abc, foo, 0, [bar, baz] # pop [bar, baz], foo, 0, [bar, baz] # setn 3 [bar, baz], foo, 0 # pop [bar, baz], foo # pop [bar, baz] # pop ``` As multiple assignment must deal with splats, post args, and any level of nesting, it gets quite a bit more complex than this in non-trivial cases. To handle this, struct masgn_state is added to keep track of the overall state of the mass assignment, which stores a linked list of struct masgn_attrasgn, one for each assigned attribute. This adds a new optimization that replaces a topn 1/pop instruction combination with a single swap instruction for multiple assignment to non-aref attributes. This new approach isn't compatible with one of the optimizations previously used, in the case where the multiple assignment return value was not needed, there was no lhs splat, and one of the left hand side used an attribute setter. This removes that optimization. Removing the optimization allowed for removing the POP_ELEMENT and adjust_stack functions. This adds a benchmark to measure how much slower multiple assignment is with the correct evaluation order. This benchmark shows: * 4-9% decrease for attribute sets * 14-23% decrease for array member sets * Basically same speed for local variable sets Importantly, it shows no significant difference between the popped (where return value of the multiple assignment is not needed) and !popped (where return value of the multiple assignment is needed) cases for attribute and array member sets. This indicates the previous optimization, which was dropped in the evaluation order fix and only affected the popped case, is not important to performance. Fixes [Bug #4443] Notes: Merged: https://github.com/ruby/ruby/pull/4390 Merged-By: jeremyevans <code@jeremyevans.net>
2021-04-21[ruby/pp] Bump version to 0.2.0Hiroshi SHIBATA
https://github.com/ruby/pp/commit/a202dd2c9b
2021-04-21[ruby/pp] Support < Ruby 3.0Hiroshi SHIBATA
https://github.com/ruby/pp/commit/3ee131ae92
2021-04-21[ruby/resolv] gemspec: Explicitly list 0 executablesOlle Jonsson
This gem exposes no executables, and this makes that clearer. https://github.com/ruby/resolv/commit/8797a9d3ce
2021-04-21[ruby/forwardable] gemspec: Explicitly empty the executables listOlle Jonsson
This gem exposes no executables. https://github.com/ruby/forwardable/commit/374b685927
2021-04-21[ruby/base64] gemspec: Use an explicit file listOlle Jonsson
This avoids shelling out to git. https://github.com/ruby/base64/commit/f45f06f93f
2021-04-21[ruby/base64] gemspec: Explicitly empty executables listOlle Jonsson
This gem exposes no executables. https://github.com/ruby/base64/commit/9d2c49cb19
2021-04-21[ruby/abbrev] gemspec: Explicitly empty executables listOlle Jonsson
https://github.com/ruby/abbrev/commit/f28839e7b8
2021-04-21[ruby/io-wait] gemspec: Explicitly list 0 executablesOlle Jonsson
This gem exposes no executables, and this clarifies this. https://github.com/ruby/io-wait/commit/f491c6cc64
2021-04-21Fix the regexp list for ignore listHiroshi SHIBATA
2021-04-21This change broke the some files like date.gemspec and lib/logger.rb.Hiroshi SHIBATA
Revert "sync_default_gems.rb: merge only files named as each gem" This reverts commit 37b96d6773a2151fb3193cab6b9e3f7328915844.
2021-04-21array.c (rb_ary_zip): take only as many as needed from an Enumerator (#4389)Yusuke Endoh
[Bug #17814] Notes: Merged-By: mame <mame@ruby-lang.org>
2021-04-20[ci skip] Remove badge for Travis CI from README.mdPeter Zhu
Travis CI was removed in 6b978d542704a5614af5e9375c4b31b8d2618652. Notes: Merged: https://github.com/ruby/ruby/pull/4396
2021-04-20Man page: correct defaults for RUBY_THREAD_VM_STACK_SIZEAlan Wu
See RUBY_VM_THREAD_VM_STACK_SIZE in vm_core.h. Notes: Merged: https://github.com/ruby/ruby/pull/4395
2021-04-21* 2021-04-21 [ci skip]git
2021-04-20check ep during compaction because it can be nullAaron Patterson
This commit adds a check on the ep just like in the mark function. The env can contain null bytes if allocation tracing is enabled. We're seeing errors during autocompaction like this: ``` (lldb) bt 40 * thread #1, name = 'ruby', stop reason = signal SIGABRT frame #0: 0x00007f7d64b6018b libc.so.6`raise + 203 frame #1: 0x00007f7d64b3f859 libc.so.6`abort + 299 frame #2: 0x000055af5f2fefc9 ruby`die at error.c:764:5 frame #3: 0x000055af5f2ff1ac ruby`rb_bug_for_fatal_signal(default_sighandler=0x0000000000000000, sig=11, ctx=0x000055af60bc3340, fmt="") at error.c:804:5 frame #4: 0x000055af5f4bd08f ruby`sigsegv(sig=11, info=0x000055af60bc3470, ctx=0x000055af60bc3340) at signal.c:960:5 frame #5: 0x00007f7d64ebe3c0 libpthread.so.0`__restore_rt frame #6: 0x000055af5f339b0a ruby`gc_ref_update_imemo(objspace=0x000055af60b2b040, obj=0x00007f7d5b513fd0) at gc.c:9046:13 frame #7: 0x000055af5f339172 ruby`gc_update_object_references(objspace=0x000055af60b2b040, obj=0x00007f7d5b513fd0) at gc.c:9307:9 frame #8: 0x000055af5f338e79 ruby`gc_ref_update(vstart=0x00007f7d5b510010, vend=0x00007f7d5b513ff8, stride=40, objspace=0x000055af60b2b040, page=0x000055af62577aa0) at gc.c:9452:21 frame #9: 0x000055af5f337846 ruby`gc_update_references(objspace=0x000055af60b2b040, heap=0x000055af60b2b068) at gc.c:9481:9 frame #10: 0x000055af5f336569 ruby`gc_compact_finish(objspace=0x000055af60b2b040, heap=0x000055af60b2b068) at gc.c:4840:5 frame #11: 0x000055af5f335efb ruby`gc_page_sweep(objspace=0x000055af60b2b040, heap=0x000055af60b2b068, sweep_page=0x000055af63a1eb30) at gc.c:5046:13 frame #12: 0x000055af5f3355c5 ruby`gc_sweep_step(objspace=0x000055af60b2b040, heap=0x000055af60b2b068) at gc.c:5214:19 frame #13: 0x000055af5f33daf6 ruby`gc_sweep_rest(objspace=0x000055af60b2b040) at gc.c:5271:2 frame #14: 0x000055af5f33cacd ruby`gc_sweep(objspace=0x000055af60b2b040) at gc.c:5389:2 frame #15: 0x000055af5f33c21d ruby`gc_marks_rest(objspace=0x000055af60b2b040) at gc.c:7555:5 frame #16: 0x000055af5f324d41 ruby`gc_rest(objspace=0x000055af60b2b040) at gc.c:8457:13 frame #17: 0x000055af5f3297d8 ruby`garbage_collect(objspace=0x000055af60b2b040, reason=45568) at gc.c:8318:9 frame #18: 0x000055af5f344ece ruby`garbage_collect_with_gvl(objspace=0x000055af60b2b040, reason=45568) at gc.c:8632:9 frame #19: 0x000055af5f344e61 ruby`objspace_malloc_gc_stress(objspace=0x000055af60b2b040) at gc.c:10592:9 frame #20: 0x000055af5f32ced1 ruby`objspace_xmalloc0(objspace=0x000055af60b2b040, size=64) at gc.c:10767:5 frame #21: 0x000055af5f32ce11 ruby`ruby_xmalloc0(size=64) at gc.c:10988:12 frame #22: 0x000055af5f32cdac ruby`ruby_xmalloc_body(size=64) at gc.c:10997:12 frame #23: 0x000055af5f329415 ruby`ruby_xmalloc(size=64) at gc.c:12942:12 frame #24: 0x00007f7d611c4fe5 objspace.so`newobj_i(tpval=0x00007f7d5b553770, data=0x000055af639031a0) at object_tracing.c:101:35 frame #25: 0x000055af5f5b283f ruby`tp_call_trace(tpval=0x00007f7d5b553770, trace_arg=0x00007fff1016d398) at vm_trace.c:1115:2 frame #26: 0x000055af5f5b50ec ruby`exec_hooks_body(ec=0x000055af60b2b700, list=0x000055af60b2b920, trace_arg=0x00007fff1016d398) at vm_trace.c:304:3 frame #27: 0x000055af5f5b0f24 ruby`exec_hooks_unprotected(ec=0x000055af60b2b700, list=0x000055af60b2b920, trace_arg=0x00007fff1016d398) at vm_trace.c:333:5 frame #28: 0x000055af5f5b0da8 ruby`rb_exec_event_hooks(trace_arg=0x00007fff1016d398, hooks=0x000055af60b2b920, pop_p=0) at vm_trace.c:378:13 frame #29: 0x000055af5f33f8e2 ruby`rb_exec_event_hook_orig(ec=0x000055af60b2b700, hooks=0x000055af60b2b920, flag=1048576, self=0x00007f7d5b5c08c0, id=0, called_id=0, klass=0x0000000000000000, data=0x00007f7d5b513fd0, pop_p=0) at vm_core.h:1989:5 frame #30: 0x000055af5f334975 ruby`gc_event_hook_body(ec=0x000055af60b2b700, objspace=0x000055af60b2b040, event=1048576, data=0x00007f7d5b513fd0) at gc.c:2083:5 * frame #31: 0x000055af5f3342df ruby`newobj_slowpath_wb_protected [inlined] newobj_slowpath(klass=0x00007f7d5b9d19c8, flags=0x000000000000001a, objspace=0x000055af60b2b040, cr=0x000055af60b2b910, wb_protected=1) at gc.c:2284:9 frame #32: 0x000055af5f33410f ruby`newobj_slowpath_wb_protected(klass=0x00007f7d5b9d19c8, flags=0x000000000000001a, objspace=0x000055af60b2b040, cr=0x000055af60b2b910) at gc.c:2299 frame #33: 0x000055af5f333de9 ruby`newobj_of0(klass=0x00007f7d5b9d19c8, flags=0x000000000000001a, wb_protected=1, cr=0x000055af60b2b910) at gc.c:2338:11 frame #34: 0x000055af5f3227ae ruby`newobj_of(klass=0x00007f7d5b9d19c8, flags=0x000000000000001a, v1=0x000055af657d88a0, v2=0x000055af657d8890, v3=0x0000000000000000, wb_protected=1) at gc.c:2348:17 frame #35: 0x000055af5f322c5b ruby`rb_imemo_new(type=imemo_env, v1=0x000055af657d88a0, v2=0x000055af657d8890, v3=0x0000000000000000, v0=0x00007f7d5b9d19c8) at gc.c:2434:12 frame #36: 0x000055af5f5a3925 ruby`vm_env_new(env_ep=0x000055af657d88a0, env_body=0x000055af657d8890, env_size=4, iseq=0x00007f7d5b9d19c8) at vm_core.h:1363:33 frame #37: 0x000055af5f5a3808 ruby`vm_make_env_each(ec=0x000055af60b2b700, cfp=0x00007f7d6482fc90) at vm.c:801:11 frame #38: 0x000055af5f5a368d ruby`vm_make_env_each(ec=0x000055af60b2b700, cfp=0x00007f7d6482fc20) at vm.c:752:13 frame #39: 0x000055af5f5a368d ruby`vm_make_env_each(ec=0x000055af60b2b700, cfp=0x00007f7d6482fbb0) at vm.c:752:13 (lldb) f 31 frame #31: 0x000055af5f3342df ruby`newobj_slowpath_wb_protected [inlined] newobj_slowpath(klass=0x00007f7d5b9d19c8, flags=0x000000000000001a, objspace=0x000055af60b2b040, cr=0x000055af60b2b910, wb_protected=1) at gc.c:2284:9 2281 } 2282 GC_ASSERT(obj != 0); 2283 newobj_init(klass, flags, wb_protected, objspace, obj); -> 2284 gc_event_hook_prep(objspace, RUBY_INTERNAL_EVENT_NEWOBJ, obj, newobj_fill(obj, 0, 0, 0)); 2285 } 2286 RB_VM_LOCK_LEAVE_CR_LEV(cr, &lev); 2287 (lldb) p obj (VALUE) $3 = 0x00007f7d5b513fd0 (lldb) f 6 frame #6: 0x000055af5f339b0a ruby`gc_ref_update_imemo(objspace=0x000055af60b2b040, obj=0x00007f7d5b513fd0) at gc.c:9046:13 9043 { 9044 rb_env_t *env = (rb_env_t *)obj; 9045 TYPED_UPDATE_IF_MOVED(objspace, rb_iseq_t *, env->iseq); -> 9046 UPDATE_IF_MOVED(objspace, env->ep[VM_ENV_DATA_INDEX_ENV]); 9047 gc_update_values(objspace, (long)env->env_size, (VALUE *)env->env); 9048 } 9049 break; (lldb) p obj (VALUE) $4 = 0x00007f7d5b513fd0 (lldb) ``` Notes: Merged: https://github.com/ruby/ruby/pull/4392
2021-04-20[ruby/zlib] gemspec: Remove unused filesOlle Jonsson
Remove the list of executables. https://github.com/ruby/zlib/commit/6a70725b8e
2021-04-20[ruby/gdbm] gemspec: Set executables to the empty listOlle Jonsson
This gem exposes zero executables. https://github.com/ruby/gdbm/commit/d51cf47f65
2021-04-20[ruby/dbm] gemspec: add README & LICENSEOlle Jonsson
https://github.com/ruby/dbm/commit/c86b94b781
2021-04-20[ruby/logger] Replace "iff" with "if and only if"Gannon McGibbon
iff means if and only if, but readers without that knowledge might assume this to be a spelling mistake. To me, this seems like exclusionary language that is unnecessary. Simply using "if and only if" instead should suffice. https://github.com/ruby/logger/commit/4fa0c28e00
2021-04-20[ruby/date] Bump version to 3.1.1Hiroshi SHIBATA
https://github.com/ruby/date/commit/e574cc9048
2021-04-20* 2021-04-20 [ci skip]git
2021-04-20Update bundled_gemsKazuhiro NISHIYAMA
2021-04-19Try to fix other failures of writing XDG_CONFIG_HOMEKazuhiro NISHIYAMA
https://github.com/ruby/actions/actions/runs/756591173 https://github.com/ruby/actions/actions/runs/759073690 https://github.com/ruby/actions/actions/runs/761341026 ``` Errno::EACCES: Permission denied @ dir_s_mkdir - /home/runner/.config/irb ```
2021-04-19Added the specific files to the default gems like net-http and optparseHiroshi SHIBATA
2021-04-19* 2021-04-19 [ci skip]git
2021-04-19Fix the wrong file detection for net-*.gemspecHiroshi SHIBATA
[Bug #17476][ruby-core:101724]
2021-04-18* 2021-04-18 [ci skip]git
2021-04-18Split revision.h ruleNobuyoshi Nakada
GNU-make specific rule is defined in defs/gmake.mk.
2021-04-17Remove comments in tool/m4 from the generated configureNobuyoshi Nakada
2021-04-17Prefer positive condition to double negativeNobuyoshi Nakada
Autoconf 2.70 seems to omit the check for the given CC, `AC_COMPILE_IFELSE` does not know which is the cause of the failure.
2021-04-17* 2021-04-17 [ci skip]git
2021-04-17Fix writing XDG_CONFIG_HOME in test-bundlerKazuhiro NISHIYAMA
https://github.com/ruby/actions/actions/runs/756591173 ``` Errno::EACCES: Permission denied @ dir_s_mkdir - /home/runner/.config/irb ```
2021-04-16NEWS for [Feature #15198] [ci skip]Nobuyoshi Nakada
2021-04-16Add Array#intersect?Travis Hunter
Notes: Merged: https://github.com/ruby/ruby/pull/1972
2021-04-16rb_hash_free(): has never existed.卜部昌平
This is just a hoax. Nobody have ever implemented a function named as such. Also the functionality implied by the name must not be a public API if any.
2021-04-16* 2021-04-16 [ci skip]git
2021-04-16spec/ruby/core/hash/transform_keys_spec.rb: Fix the failure of ruby_3_0Yusuke Endoh
https://github.com/ruby/spec/pull/833 https://github.com/ruby/spec/commit/8290e5ad8952b14ee9a5069651d9864c66681112