summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-09-07Fix error when checking file modified with git-svnNobuyoshi Nakada
2019-09-07Get rid of overwriting revision.h and creating .revision.timeNobuyoshi Nakada
2019-09-07Use `git describe --contains` for tagsNobuyoshi Nakada
2019-09-07Added more debug outputs from VCS::GITNobuyoshi Nakada
2019-09-07Refined file2lastrev.rb optionsNobuyoshi Nakada
* check --srcdir if given twice or more * falls back to the current working directory if no --srcdir option is given. * define common VCS options.
2019-09-07Separated VCS.define_options for common VCS optionsNobuyoshi Nakada
2019-09-07appveyor.yml - msys2 update codeMSP-Greg
As AppVeyor's MSYS2 install gets out of date, this may require 'special' code... This code also adds updating the database, which currently updates gcc from 9.1.0 to 9.2.0. Notes: Merged: https://github.com/ruby/ruby/pull/2433
2019-09-07eval.c (rb_rescue2): fix a probably wrong returnYusuke Endoh
This return skips `va_end(ap)`, which is not intended, I guess. Coverity Scan found this.
2019-09-07Upgrade benchmark-driver to v0.15.4Takashi Kokubun
Fixing a bug on Windows introduced in v0.15.0
2019-09-06Fix SortedSet subclasses that override initializeJeremy Evans
The first time SortedSet#initialize is called, it overwrites itself, then recalls #initialize, which results in calling the subclass's initialize, not the current initialize. Just inline the default initialize behavior to avoid this issue. No test for this as it can only be triggered the very first time that SortedSet#initialize is called. Fixes [Bug #15830]
2019-09-07* 2019-09-07 [ci skip]git
2019-09-07Upgrade benchmark-driver to v0.15.3Takashi Kokubun
It got some nice features for better support of benchmark_driver-output-charty, Windows, ridk, and rbenv.
2019-09-06Fix a use-after-free bug by avoiding rb_str_new_frozenYusuke Endoh
`str2 = rb_str_new_frozen(str1)` seems to make str1 a shared string that refers to str2, but str2 is not marked as STR_IS_SHARED_M nor STR_NOFREE. `rb_fstring(str2)` frees str2's ptr because it is not marked, and the free'ed pointer is the same as str1's ptr. After that, accessing str1 may cause use-after-free memory corruption. I guess this is a bug of rb_str_new_frozen, but I'm completely unsure what it should be; the string states and flags are not documented. So, this is a workaround for [Bug #16136]. I confirmed that rspec of activeadmin runs gracefully.
2019-09-06VCS::GIT no longer accepts remote repositoryNobuyoshi Nakada
2019-09-06Stop setting same flags as cflags to cxxflagsNobuyoshi Nakada
2019-09-06Check clang++ as CXX when CXX is bare clang without suffixNobuyoshi Nakada
2019-09-06save committers' weekend from CI failures卜部昌平
Kill the failing tests.
2019-09-06Try to fix compile error on win32Kazuhiro NISHIYAMA
https://github.com/ruby/ruby/runs/213995386#step:7:810 ``` cxxanyargs.cpp C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\corecrt_malloc.h(54): error C2485: '__restrict': unrecognized extended attribute ```
2019-09-06avoid name mangling卜部昌平
Otherwise the dynamic linker cannot find this function. See also https://ci.appveyor.com/project/ruby/ruby/builds/27224231/job/4pg6lxlsnsjotu2l
2019-09-06nullptr is a C++11ism.卜部昌平
Should use numeric 0 for maximum portability. See also https://travis-ci.org/ruby/ruby/jobs/581543798
2019-09-06fix Visual Studio compilation error卜部昌平
See also https://github.com/ruby/ruby/runs/213964487
2019-09-06add test for cxxanyargs.hpp卜部昌平
2019-09-06add include/ruby/backward/cxxanyargs.hpp卜部昌平
Compilation of extension libraries written in C++ are reportedly broken due to https://github.com/ruby/ruby/pull/2404 The root cause of this issue was that the definition of ANYARGS differ between C and C++, and that of C++ is incompatible with the updated ones. We are using the incompatibility against itself. In C++ two distinct function prototypes can be overloaded. We provide the old, ANYARGSed prototypes in addition to the current granular ones; and let the older ones warn about types.
2019-09-06doxygen update [ci skip]卜部昌平
2019-09-06Revert "Add a temporal stack dumper for debugging on trunk-mjit"Yusuke Endoh
This reverts commit 433c9c00d96124e3b416d0a20ff795b0ad4273fa. Successfully captured some traces, and 3b60e5e6bc2c84b971bea9c8312eb5d33ada2ff5 seems to fix the issue.
2019-09-06Try shrinking tested VM stack maxTakashi Kokubun
2019-09-06* remove trailing spaces. [ci skip]git
2019-09-05Mark rb_warn_keyword_to_last_hash as static inlineJeremy Evans
mame pointed out that vm_args.c is included in vm_insnhelper.c.
2019-09-05Mark rb_warn_keyword_to_last_hash at MJIT_FUNC_EXPORTEDJeremy Evans
Hopefully this fixes MJIT errors on AppVeyor.
2019-09-05Convert empty keyword hash to required positional argument and warn for ↵Jeremy Evans
method_missing This is the same as the bmethod, sym proc, and send cases, where we don't remove the keyword splat, so later code can move it to a required positional parameter and warn.
2019-09-05Convert empty keyword hash to required positional argument and warn for sym ↵Jeremy Evans
procs This is the same as the bmethod and send cases, where we don't remove the keyword splat, so later code can move it to to a a required positional parameter and warn.
2019-09-05Convert empty keyword hash to required positional argument and warn for ↵Jeremy Evans
lambda and bmethod The lambda case is similar to the attr_writer case, except we have to determine the number of required parameters from the iseq instead of being able to assume a single required parameter. This fixes a lot of lambda tests which were switched to require warnings for all usage of keyword arguments. Similar to method handling, we do not warn when passing keyword arguments to lambdas that do not accept keyword arguments, the argument is just passed as a positional hash in that case, unless it is empty. If it is empty and not the final required parameter, then we ignore it. If it is empty and the final required parameter, then we pass it for backwards compatibility and emit a warning, as in Ruby 3 we will not pass it. The bmethod case is similar to the send case, in that we do not want to remove empty keyword splats in vm_call_bmethod, as that prevents later call handling from moving them to required positional arguments and warning.
2019-09-05Convert empty keyword hash to required positional argument and warnJeremy Evans
In general, we want to ignore empty keyword hashes. The only case where we want to allow them for backwards compatibility is when they are necessary to satify the final required positional argument. In that case, we want to not ignore them, but we do want to warn, as that will be going away in Ruby 3. This commit implements this support for regular methods and attr_writer methods. In order to allow send to forward arguments correctly, send no longer removes empty keyword hashes. It is the responsibility of the final method to remove the empty keyword hashes now. This change was necessary as otherwise send could remove the empty keyword hashes before the regular or attr_writer methods could move them to required positional arguments. For completeness, add tests for keyword handling regular methods calls. This makes rb_warn_keyword_to_last_hash non-static in vm_args.c so it can be reused in vm_insnhelper.c, and also moves declarations before statements in the rb_warn_* functions in vm_args.c.
2019-09-05Always remove empty keyword hashes when calling methodsJeremy Evans
While doing so is not backwards compatible with Ruby 2.6, it is necessary for generic argument forwarding to work for all methods: ```ruby def foo(*args, **kw, &block) bar(*args, **kw, &block) end ``` If you do not remove empty keyword hashes, and bar does not accept keyword arguments, then a call to foo without keyword arguments calls bar with an extra positional empty hash argument.
2019-09-05Add a keyword-to-last-hash warning for some case of define_method methodYusuke Endoh
and lambda. When define_method is a simple iseq (`define_method(:m) {|x| ... }`), passing keywords to it (`m(**kw)`) didn't print a warning.
2019-09-05define_method should not drop the empty keyword hashYusuke Endoh
Similar to 38e9c1bc35d5549575fbb263afff560e97db068e
2019-09-05vm_call_bmethod should not drop the empty keyword hashYusuke Endoh
Similar to 38e9c1bc35d5549575fbb263afff560e97db068e
2019-09-05vm_call_opt_send should not drop the empty keyword hashYusuke Endoh
Now the mechanism that conveys kw_splat flag is gradually established, so the hack to drop the empty keyword hash is not needed for vm_call_opt_send.
2019-09-05test_method_missing_kwsplat should call the target directlyYusuke Endoh
not via Object#send which uses a fast path vm_call_opt_send.
2019-09-05vm_insnhelper.c: Do not read `ci->flag` after CALLER_SETUP_ARGYusuke Endoh
Actually, the following call is wrongly warned without this change. ``` class C def method_missing(x, *args, **opt) end end C.new.foo(k: 1) # warning: The last argument is used as the keyword parameter # warning: for `method_missing' defined here ```
2019-09-05Add a comment that some ci->flag is inconsistent after CALLER_SETUP_ARGYusuke Endoh
2019-09-05Ignore an empty keyword splat for attr_reader/writer methodsYusuke Endoh
2019-09-05C method should accept a keyword hash (for compatibility with 2.6)Yusuke Endoh
2019-09-05CALLER_SETUP_ARG removes an empty keyword hash from argvYusuke Endoh
...only when a "remove_empty_keyword_hash" flag is specified. After CALLER_SETUP_ARG is called, `ci->flag & VM_CALL_KW_SPLAT` must not be used. Instead. use `calling->kw_splat`. This is because CALLER_SETUP_ARG may modify argv and update `calling->kw_splat`, and `ci->flag & VM_CALL_KW_SPLAT` may be inconsistent with the result.
2019-09-05vm_argc.c (vm_caller_setup_arg_kw): "cfunc" argument is no longer usedYusuke Endoh
2019-09-05Set calling->kw_splat = 1 in vm_caller_setup_arg_kwYusuke Endoh
There are two styles that argv contains keyword arguments: one is VM_CALL_KWARG which contains value elements in argv (to avoid a hash object creation if possible), and the other is VM_CALL_KW_SPLAT which contains one last hash in argv. vm_caller_setup_arg_kw translates argv from the VM_CALL_KWARG style to the VM_CALL_KW_SPLAT style. `calling->kw_splat` means that argv is the VM_CALL_KW_SPLAT style. So, instead of setting `calling->kw_splat` at many places, it would be better to do so when vm_caller_setup_arg_kw is called.
2019-09-05Fix passing keywords without splats to sym procs, define_method, and ↵Jeremy Evans
method_missing
2019-09-05Make Symbol#to_proc calls handle keyword argumentsJeremy Evans
Make rb_sym_proc_call take a flag for whether a keyword argument is used, and use the new rb_funcall_with_block_kw function to pass that information.
2019-09-05If removing an empty keyword splat hash, unset the kw_splat flagJeremy Evans
Otherwise the last positional hash could be considered as the keyword arguments.
2019-09-05Add rb_funcall_with_block_kwJeremy Evans
This is needed for C functions to call methods with keyword arguments. This is a copy of rb_funcall_with_block with an extra argument for the keyword flag. There isn't a clean way to implement this that doesn't involve changing a lot of function signatures, because rb_call doesn't support a way to mark that the call has keyword arguments. So hack this in using a CALL_PUBLIC_KW call_type, which we switch for CALL_PUBLIC later in the call stack. We do need to modify rm_vm_call0 to take an argument for whether keyword arguments are used, since the call_type is no longer available at that point. Use the passed in value to set the appropriate keyword flag in both calling and ci_entry.