SILENT KILLERPanel

Current Path: > > opt > alt > ruby30 > include > > ruby > internal


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/alt/ruby30/include//ruby/internal

NameTypeSizeLast ModifiedActions
arithmetic Directory - -
attr Directory - -
compiler_is Directory - -
core Directory - -
has Directory - -
intern Directory - -
anyargs.h File 37095 bytes June 26 2024 13:55:16.
arithmetic.h File 2094 bytes June 26 2024 13:55:16.
assume.h File 3336 bytes June 26 2024 13:55:16.
cast.h File 2384 bytes June 26 2024 13:55:16.
compiler_is.h File 2104 bytes June 26 2024 13:55:16.
compiler_since.h File 2780 bytes June 26 2024 13:55:16.
config.h File 4663 bytes June 26 2024 13:55:16.
constant_p.h File 1843 bytes June 26 2024 13:55:16.
core.h File 1873 bytes June 26 2024 13:55:16.
ctype.h File 5076 bytes June 26 2024 13:55:16.
dllexport.h File 3559 bytes June 26 2024 13:55:16.
dosish.h File 2040 bytes June 26 2024 13:55:16.
error.h File 3927 bytes June 26 2024 13:55:16.
eval.h File 2501 bytes June 26 2024 13:55:16.
event.h File 3370 bytes June 26 2024 13:55:16.
fl_type.h File 13607 bytes June 26 2024 13:55:16.
gc.h File 2302 bytes June 26 2024 13:55:16.
glob.h File 1732 bytes June 26 2024 13:55:16.
globals.h File 5063 bytes June 26 2024 13:55:16.
interpreter.h File 3114 bytes June 26 2024 13:55:16.
iterator.h File 3096 bytes June 26 2024 13:55:16.
memory.h File 8870 bytes June 26 2024 13:55:16.
method.h File 1906 bytes June 26 2024 13:55:16.
module.h File 1819 bytes June 26 2024 13:55:16.
newobj.h File 3197 bytes June 26 2024 13:55:16.
rgengc.h File 6063 bytes June 26 2024 13:55:16.
scan_args.h File 13819 bytes June 26 2024 13:55:16.
special_consts.h File 6528 bytes June 26 2024 13:55:16.
static_assert.h File 3214 bytes June 26 2024 13:55:16.
stdalign.h File 4632 bytes June 26 2024 13:55:16.
stdbool.h File 2033 bytes June 26 2024 13:55:16.
symbol.h File 3719 bytes June 26 2024 13:55:16.
token_paste.h File 3375 bytes June 26 2024 13:55:16.
value.h File 2799 bytes June 26 2024 13:55:16.
value_type.h File 10741 bytes June 26 2024 13:55:16.
variable.h File 2656 bytes June 26 2024 13:55:16.
warning_push.h File 4413 bytes June 26 2024 13:55:16.
xmalloc.h File 15980 bytes June 26 2024 13:55:16.

Reading File: //opt/alt/ruby30/include//ruby/internal/rgengc.h

#ifndef RBIMPL_RGENGC_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RGENGC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries. They could be written in C++98.
 * @brief      RGENGC write-barrier APIs.
 * @see        Sasada,  K.,  "Gradual  write-barrier   insertion  into  a  Ruby
 *             interpreter",   in  proceedings   of   the   2019  ACM   SIGPLAN
 *             International  Symposium on  Memory Management  (ISMM 2019),  pp
 *             115-121, 2019. https://doi.org/10.1145/3315573.3329986
 */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"
#include "ruby/assert.h"
#include "ruby/backward/2/attributes.h"

#undef USE_RGENGC
#define USE_RGENGC 1

#ifndef USE_RINCGC
# define USE_RINCGC 1
#endif

#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT
# define USE_RGENGC_LOGGING_WB_UNPROTECT 0
#endif

#ifndef RGENGC_WB_PROTECTED_ARRAY
# define RGENGC_WB_PROTECTED_ARRAY 1
#endif

#ifndef RGENGC_WB_PROTECTED_HASH
# define RGENGC_WB_PROTECTED_HASH 1
#endif

#ifndef RGENGC_WB_PROTECTED_STRUCT
# define RGENGC_WB_PROTECTED_STRUCT 1
#endif

#ifndef RGENGC_WB_PROTECTED_STRING
# define RGENGC_WB_PROTECTED_STRING 1
#endif

#ifndef RGENGC_WB_PROTECTED_OBJECT
# define RGENGC_WB_PROTECTED_OBJECT 1
#endif

#ifndef RGENGC_WB_PROTECTED_REGEXP
# define RGENGC_WB_PROTECTED_REGEXP 1
#endif

#ifndef RGENGC_WB_PROTECTED_CLASS
# define RGENGC_WB_PROTECTED_CLASS 1
#endif

#ifndef RGENGC_WB_PROTECTED_FLOAT
# define RGENGC_WB_PROTECTED_FLOAT 1
#endif

#ifndef RGENGC_WB_PROTECTED_COMPLEX
# define RGENGC_WB_PROTECTED_COMPLEX 1
#endif

#ifndef RGENGC_WB_PROTECTED_RATIONAL
# define RGENGC_WB_PROTECTED_RATIONAL 1
#endif

#ifndef RGENGC_WB_PROTECTED_BIGNUM
# define RGENGC_WB_PROTECTED_BIGNUM 1
#endif

#ifndef RGENGC_WB_PROTECTED_NODE_CREF
# define RGENGC_WB_PROTECTED_NODE_CREF 1
#endif

/**
 * @name Write barrier (WB) interfaces:
 * @{
 *
 * @note The following  core interfaces can  be changed in the  future.  Please
 *       catch up if you want to insert WB into C-extensions correctly.
 */

/**
 * WB for new  reference from `a' to  `b'. Write `b' into `*slot'.  `slot' is a
 * pointer in `a'.
 */
#define RB_OBJ_WRITE(a, slot, b) \
    RBIMPL_CAST(rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__))
/**
 * WB for new  reference from `a' to  `b'.  This doesn't write  any values, but
 * only  a WB  declaration.  `oldv'  is replaced  value with  `b' (not  used in
 * current Ruby).
 */
#define RB_OBJ_WRITTEN(a, oldv, b) \
    RBIMPL_CAST(rb_obj_written((VALUE)(a), (VALUE)(oldv), (VALUE)(b), __FILE__, __LINE__))
/** @} */

#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
#define OBJ_PROMOTED     RB_OBJ_PROMOTED
#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT

#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
#define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
    (RGENGC_WB_PROTECTED_##type ? OBJ_WB_UNPROTECT(obj) : obj)
#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging

/** @cond INTERNAL_MACRO */
#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
#define RB_OBJ_PROMOTED     RB_OBJ_PROMOTED
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()
void rb_gc_writebarrier(VALUE a, VALUE b);
void rb_gc_writebarrier_unprotect(VALUE obj);
#if USE_RGENGC_LOGGING_WB_UNPROTECT
void rb_gc_unprotect_logging(void *objptr, const char *filename, int line);
#endif
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
static inline bool
RB_OBJ_PROMOTED_RAW(VALUE obj)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
    return RB_FL_ANY_RAW(obj,  RUBY_FL_PROMOTED);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
static inline bool
RB_OBJ_PROMOTED(VALUE obj)
{
    if (! RB_FL_ABLE(obj)) {
        return false;
    }
    else {
        return RB_OBJ_PROMOTED_RAW(obj);
    }
}

static inline VALUE
rb_obj_wb_unprotect(VALUE x, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
{
#if USE_RGENGC_LOGGING_WB_UNPROTECT
    RGENGC_LOGGING_WB_UNPROTECT(RBIMPL_CAST((void *)x), filename, line);
#endif
    rb_gc_writebarrier_unprotect(x);
    return x;
}

static inline VALUE
rb_obj_written(VALUE a, RB_UNUSED_VAR(VALUE oldv), VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
{
#if USE_RGENGC_LOGGING_WB_UNPROTECT
    RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line);
#endif

    if (!RB_SPECIAL_CONST_P(b)) {
        rb_gc_writebarrier(a, b);
    }

    return a;
}

static inline VALUE
rb_obj_write(VALUE a, VALUE *slot, VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
{
#ifdef RGENGC_LOGGING_WRITE
    RGENGC_LOGGING_WRITE(a, slot, b, filename, line);
#endif

    *slot = b;

    rb_obj_written(a, RUBY_Qundef /* ignore `oldv' now */, b, filename, line);
    return a;
}

#endif /* RBIMPL_RGENGC_H */

SILENT KILLER Tool