summaryrefslogtreecommitdiff
path: root/internal
Commit message (Collapse)AuthorAgeFilesLines
* Allow global variables to moveAaron Patterson2020-05-071-0/+1
| | | | | | | | | | This patch allows global variables that have been assigned in Ruby to move. I added a new function for the GC to call that will update global references and introduced a new callback in the global variable struct for updating references. Only pure Ruby global variables are supported right now, other references will be pinned.
* internal/process.h: forgot to guard "#ifdef HAVE_WORKING_FORK"Yusuke Endoh2020-05-021-0/+2
|
* internal/process.h: add a no-warning simple wrapper for fork(2)Yusuke Endoh2020-05-021-0/+12
| | | | | | | | | | | | As fork(2) is deprecated, its calls must be guarded by `COMPILER_WARNING_IGNORED(-Wdeprecated-declarations)`. All usages of fork(2) in process have been alread guarded. A new call to fork(2) was added in ruby.c with f22c4ff359498ab342e4b6d6feb21af6004ee270. This caused a build failure on Solaris 11. It may hide a bug to guard big code unnecessarily, so this change introduces a simple wrapper "rb_fork" whose definition is guarded, and replaces all calls to fork(2) with the wrapper function.
* __GNUC__ is too lax卜部昌平2020-04-211-1/+1
| | | | Ditto for 4b853932eaa7fa4acf8a0f0c9b7c695bb4f5e76d
* Added rb_syserr_new_pathNobuyoshi Nakada2020-04-151-0/+3
| | | | | Similar to rb_syserr_fail_path, but just returns the created exception instance instead of raising it.
* delete CACHELINE卜部昌平2020-04-131-11/+0
| | | | | Since https://github.com/ruby/ruby/pull/2888 this macro is no longer used in any place.
* add #include guard hack卜部昌平2020-04-1351-152/+156
| | | | | | | | | | | | | | | | | | | | | | According to MSVC manual (*1), cl.exe can skip including a header file when that: - contains #pragma once, or - starts with #ifndef, or - starts with #if ! defined. GCC has a similar trick (*2), but it acts more stricter (e. g. there must be _no tokens_ outside of #ifndef...#endif). Sun C lacked #pragma once for a looong time. Oracle Developer Studio 12.5 finally implemented it, but we cannot assume such recent version. This changeset modifies header files so that each of them include strictly one #ifndef...#endif. I believe this is the most portable way to trigger compiler optimizations. [Bug #16770] *1: https://docs.microsoft.com/en-us/cpp/preprocessor/once *2: https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html
* PAGER without fork&exec too [Feature #16754]Nobuyoshi Nakada2020-04-121-0/+1
|
* internal/bits.h: Suppress "uninitialized variable"Yusuke Endoh2020-04-091-1/+1
| | | | | Coverity Scan says "Using uninitialized value c.fixnum when calling __builtin_mul_overflow_p."
* Merge pull request #2991 from shyouhei/ruby.h卜部昌平2020-04-0852-560/+328
| | | Split ruby.h
* Export `rb_deprecate_constant`Nobuyoshi Nakada2020-04-021-1/+1
|
* Removed non-RUBY_INTEGER_UNIFICATION codeNobuyoshi Nakada2020-03-211-8/+2
|
* hash.c: Do not use the fast path (rb_yield_values) for lambda blocksYusuke Endoh2020-03-161-0/+1
| | | | | | | | | | | | | | | | | As a semantics, Hash#each yields a 2-element array (pairs of keys and values). So, `{ a: 1 }.each(&->(k, v) { })` should raise an exception due to lambda's arity check. However, the optimization that avoids Array allocation by using rb_yield_values for blocks whose arity is more than 1 (introduced at b9d29603375d17c3d1d609d9662f50beaec61fa1 and some commits), seemed to overlook the lambda case, and wrongly allowed the code above to work. This change experimentally attempts to make it strict; now the code above raises an ArgumentError. This is an incompatible change; if the compatibility issue is bigger than our expectation, it may be reverted (until Ruby 3.0 release). [Bug #12706]
* Fix typos (#2958)K.Takata2020-03-111-1/+1
| | | | | * Fix a typo * Fix typos in st.[ch]
* Prevent unloading methods used in root_fiber while calling another Fiber (#2939)Takashi Kokubun2020-02-281-0/+2
| | | | | | Fixing SEGVs like: http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2744905 http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2744420 http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2741400
* Introduce disposable call-cache.Koichi Sasada2020-02-223-39/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | This patch contains several ideas: (1) Disposable inline method cache (IMC) for race-free inline method cache * Making call-cache (CC) as a RVALUE (GC target object) and allocate new CC on cache miss. * This technique allows race-free access from parallel processing elements like RCU. (2) Introduce per-Class method cache (pCMC) * Instead of fixed-size global method cache (GMC), pCMC allows flexible cache size. * Caching CCs reduces CC allocation and allow sharing CC's fast-path between same call-info (CI) call-sites. (3) Invalidate an inline method cache by invalidating corresponding method entries (MEs) * Instead of using class serials, we set "invalidated" flag for method entry itself to represent cache invalidation. * Compare with using class serials, the impact of method modification (add/overwrite/delete) is small. * Updating class serials invalidate all method caches of the class and sub-classes. * Proposed approach only invalidate the method cache of only one ME. See [Feature #16614] for more details.
* VALUE size packed callinfo (ci).Koichi Sasada2020-02-222-29/+3
| | | | | | | | | | | | | | | | | | | | Now, rb_call_info contains how to call the method with tuple of (mid, orig_argc, flags, kwarg). Most of cases, kwarg == NULL and mid+argc+flags only requires 64bits. So this patch packed rb_call_info to VALUE (1 word) on such cases. If we can not represent it in VALUE, then use imemo_callinfo which contains conventional callinfo (rb_callinfo, renamed from rb_call_info). iseq->body->ci_kw_size is removed because all of callinfo is VALUE size (packed ci or a pointer to imemo_callinfo). To access ci information, we need to use these functions: vm_ci_mid(ci), _flag(ci), _argc(ci), _kwarg(ci). struct rb_call_info_kw_arg is renamed to rb_callinfo_kwarg. rb_funcallv_with_cc() and rb_method_basic_definition_p_with_cc() is temporary removed because cd->ci should be marked.
* `Proc` made by `Symbol#to_proc` should be a lambda [Bug #16260]Nobuyoshi Nakada2020-02-221-1/+1
| | | | With refinements, too.
* Separate objspace argument for rb_gc_disable and rb_gc_enableNobuyoshi Nakada2020-02-091-0/+3
|
* Extract a function, ruby_reset_timezone().Tanaka Akira2020-01-281-0/+1
| | | | | Initial implementation of ruby_reset_timezone() assigns ruby_tz_uptodate_p to false.
* Added rb_warn_deprecated_to_removeNobuyoshi Nakada2020-01-231-0/+1
| | | | | Warn the deprecation and future removal, with obeying the warning flag.
* internal/rational.h: insert assertions in RATIONAL_SET_{NUM,DEN}Kenta Murata2020-01-172-0/+17
|
* Make RATIONAL_SET_{NUM,DEN} static inline functionsKenta Murata2020-01-171-2/+16
|
* add missing #include卜部昌平2020-01-101-0/+1
|
* avoid undefined behaviour when n==0卜部昌平2020-01-101-7/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | ISO/IEC 9899:1999 section 6.5.7 states that "If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined". So we have to take care of such situations. This has not been a problem because contemporary C compilers are extraordinary smart to compile the series of shifts into a single ROTLQ/ROTRQ machine instruction. In contrast to what C says those instructions have fully defined behaviour for all possible inputs. Hence it has been quite difficult to observe the undefined-ness of such situations. But undefined is undefined. We should not rely on such target-specific assumptions. We are fixing the situation by carefully avoiding shifts with out-of- range values. At least GCC since 4.6.3 and Clang since 8.0 can issue the exact same instructions like before the changeset. Also in case of Intel processors, there supposedly be intrinsics named _rotr/_rotl that do exactly what we need. They, in practice, are absent on Clang before 9.x so we cannot blindly use. But we can at least save MSVC. See also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157 https://bugs.llvm.org/show_bug.cgi?id=17332
* more use of MSC_VERSION_SINCE卜部昌平2020-01-101-16/+18
| | | | | | Replaces `#ifdef _MSC_VER` with more accurate version checks. Also, `defined(_WIN64) && defined(__AVX2__)` is redundant because there is no such tihng like a 32bit AVX2 machine.
* fix Windows breakage卜部昌平2020-01-101-2/+2
| | | | | | Fixing typo revealed that _BitScanReverse is BSR, which behaves differently than LZCNT. What we want here is LZCNT so we have to emulate.
* fix typos卜部昌平2020-01-101-3/+3
|
* Fully separate positional arguments and keyword argumentsJeremy Evans2020-01-021-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | This removes the warnings added in 2.7, and changes the behavior so that a final positional hash is not treated as keywords or vice-versa. To handle the arg_setup_block splat case correctly with keyword arguments, we need to check if we are taking a keyword hash. That case didn't have a test, but it affects real-world code, so add a test for it. This removes rb_empty_keyword_given_p() and related code, as that is not needed in Ruby 3. The empty keyword case is the same as the no keyword case in Ruby 3. This changes rb_scan_args to implement keyword argument separation for C functions when the : character is used. For backwards compatibility, it returns a duped hash. This is a bad idea for performance, but not duping the hash breaks at least Enumerator::ArithmeticSequence#inspect. Instead of having RB_PASS_CALLED_KEYWORDS be a number, simplify the code by just making it be rb_keyword_given_p().
* move internal/debug.h definitions to internal.hKoichi Sasada2020-01-031-39/+0
| | | | Debug utilities should be accessible from any internal code.
* Introduce BIGNUM_EMBED_P to check BIGNUM_EMBED_FLAG (#2802)Kenta Murata2019-12-311-2/+10
| | | | | | * bignum.h: Add BIGNUM_EMBED_P * bignum.c: Use macros for handling BIGNUM_EMBED_FLAG
* Fixed an unavailable sanitizer featureNobuyoshi Nakada2019-12-291-1/+1
|
* reroute macro conflicts on OpenBSD卜部昌平2019-12-271-6/+18
| | | | | | | OpenBSD's <sys/endian.h> has its own swap32() etc. We have to avoid name conflicts. See also https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20191226T210011Z.log.html.gz#miniruby
* Try to fix error on SolarisKazuhiro NISHIYAMA2019-12-271-1/+1
|
* internal/stdbool.h rework卜部昌平2019-12-261-1/+15
| | | | | | Noticed that internal/stdbool.h and addr2line.c are the only two place where missing/stdbool.h is included. Why not delete the file so that we can merge internal/stdbool.h and missing/stdbool.h into one.
* decouple internal.h headers卜部昌平2019-12-2613-20/+67
| | | | | | | | | | | | | | | | | | Saves comitters' daily life by avoid #include-ing everything from internal.h to make each file do so instead. This would significantly speed up incremental builds. We take the following inclusion order in this changeset: 1. "ruby/config.h", where _GNU_SOURCE is defined (must be the very first thing among everything). 2. RUBY_EXTCONF_H if any. 3. Standard C headers, sorted alphabetically. 4. Other system headers, maybe guarded by #ifdef 5. Everything else, sorted alphabetically. Exceptions are those win32-related headers, which tend not be self- containing (headers have inclusion order dependencies).
* other minior internal header tweaks卜部昌平2019-12-2624-29/+73
| | | | | | | | These headers need no rewrite. Just add some minor tweaks, like addition of #include lines. Mainly cosmetic. TIMET_MAX_PLUS_ONE was deleted because the macro was used from only one place (directly write expression there).
* internal/vm.h rework卜部昌平2019-12-261-71/+100
| | | | | Rearranged contents, then added MJIT_FUNC_EXPORTED function declarations.
* internal/thread.h rework卜部昌平2019-12-261-0/+8
| | | | Rather trivial, added missed MJIT_FUNC_EXPORTED function declaration.
* internal/symbol.h rework卜部昌平2019-12-262-17/+17
| | | | | Some declatations are moved from internal/parse.h, to reflect the fact that they are defined in symbol.c.
* internal/string.h rework卜部昌平2019-12-262-40/+85
| | | | | Reduced the number of macros defined in the file. Also made it explicit for MJIT_FUNC_EXPORTTED functions to be so.
* internal/range.h rework卜部昌平2019-12-261-3/+22
| | | | Eliminate macros for better readability.
* internal/process.h rework卜部昌平2019-12-261-17/+38
| | | | Eliminated the macro to convert into an inline function.
* internal/proc.h rework卜部昌平2019-12-262-4/+10
| | | | | | Annotated MJIT_FUNC_EXPORTED functions as such. Declaration of rb_sym_to_proc is moved into this file because the function is defined in proc.c rather than string.c.
* internal/object.h rework卜部昌平2019-12-261-18/+33
| | | | | | Eliminated macros. As a side effect struct RBasicRaw is no longer required because we can now define anonymous structs inside of inline functions.
* internal/gc.h rework卜部昌平2019-12-262-53/+106
| | | | | | Improved readability by reducing the use of macros. Also moved some part of internal/compilers.h into this file, because it seems to be the right place for them.
* internal/sanitizers.h rework卜部昌平2019-12-261-32/+44
| | | | Rearrange macro orders for better readability.
* internal/error.h rework卜部昌平2019-12-262-44/+92
| | | | | | Reduce macros for readability. Also transplanted some part of internal/file.h into here because the delcared functions are in fact defined in error.c.
* internal/compile.h rework卜部昌平2019-12-261-3/+13
| | | | | | This file containes other materials than in compile.c. I could perhaps split them into files, but felt overkill. Just add comments that describe the situations.
* internal/array.h rework卜部昌平2019-12-261-42/+55
| | | | | Rearrange contents for better readability, reduce macros for the same reason, and mark MJIT_FUNC_EXPORTED functions as such.