zscan 2.0.8 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/pack/pack-27.c +1 -0
- data/ext/pack/pack.c +1 -0
- data/ext/pack/ruby/backward/2/assume.h +43 -0
- data/ext/pack/ruby/backward/2/attributes.h +157 -0
- data/ext/pack/ruby/backward/2/bool.h +37 -0
- data/ext/pack/ruby/backward/2/extern.h +46 -0
- data/ext/pack/ruby/backward/2/gcc_version_since.h +38 -0
- data/ext/pack/ruby/backward/2/inttypes.h +132 -0
- data/ext/pack/ruby/backward/2/limits.h +100 -0
- data/ext/pack/ruby/backward/2/long_long.h +65 -0
- data/ext/pack/ruby/backward/2/r_cast.h +27 -0
- data/ext/pack/ruby/backward/2/rmodule.h +31 -0
- data/ext/pack/ruby/backward/2/stdalign.h +30 -0
- data/ext/pack/ruby/backward/2/stdarg.h +47 -0
- data/ext/pack/ruby/backward/classext.h +25 -0
- data/ext/pack/ruby/backward/rubyio.h +18 -0
- data/ext/pack/ruby/backward/rubysig.h +26 -0
- data/ext/pack/ruby/backward/st.h +18 -0
- data/ext/pack/ruby/backward/util.h +18 -0
- data/ext/pack/ruby/internal/anyargs.h +375 -0
- data/ext/pack/ruby/internal/arithmetic.h +38 -0
- data/ext/pack/ruby/internal/arithmetic/char.h +58 -0
- data/ext/pack/ruby/internal/arithmetic/double.h +39 -0
- data/ext/pack/ruby/internal/arithmetic/fixnum.h +44 -0
- data/ext/pack/ruby/internal/arithmetic/gid_t.h +34 -0
- data/ext/pack/ruby/internal/arithmetic/int.h +163 -0
- data/ext/pack/ruby/internal/arithmetic/intptr_t.h +42 -0
- data/ext/pack/ruby/internal/arithmetic/long.h +244 -0
- data/ext/pack/ruby/internal/arithmetic/long_long.h +53 -0
- data/ext/pack/ruby/internal/arithmetic/mode_t.h +34 -0
- data/ext/pack/ruby/internal/arithmetic/off_t.h +49 -0
- data/ext/pack/ruby/internal/arithmetic/pid_t.h +34 -0
- data/ext/pack/ruby/internal/arithmetic/short.h +54 -0
- data/ext/pack/ruby/internal/arithmetic/size_t.h +51 -0
- data/ext/pack/ruby/internal/arithmetic/st_data_t.h +59 -0
- data/ext/pack/ruby/internal/arithmetic/uid_t.h +34 -0
- data/ext/pack/ruby/internal/assume.h +90 -0
- data/ext/pack/ruby/internal/attr/alloc_size.h +32 -0
- data/ext/pack/ruby/internal/attr/artificial.h +46 -0
- data/ext/pack/ruby/internal/attr/cold.h +37 -0
- data/ext/pack/ruby/internal/attr/const.h +46 -0
- data/ext/pack/ruby/internal/attr/constexpr.h +85 -0
- data/ext/pack/ruby/internal/attr/deprecated.h +59 -0
- data/ext/pack/ruby/internal/attr/diagnose_if.h +42 -0
- data/ext/pack/ruby/internal/attr/enum_extensibility.h +32 -0
- data/ext/pack/ruby/internal/attr/error.h +32 -0
- data/ext/pack/ruby/internal/attr/flag_enum.h +33 -0
- data/ext/pack/ruby/internal/attr/forceinline.h +40 -0
- data/ext/pack/ruby/internal/attr/format.h +38 -0
- data/ext/pack/ruby/internal/attr/maybe_unused.h +38 -0
- data/ext/pack/ruby/internal/attr/noalias.h +58 -0
- data/ext/pack/ruby/internal/attr/nodiscard.h +45 -0
- data/ext/pack/ruby/internal/attr/noexcept.h +91 -0
- data/ext/pack/ruby/internal/attr/noinline.h +35 -0
- data/ext/pack/ruby/internal/attr/nonnull.h +32 -0
- data/ext/pack/ruby/internal/attr/noreturn.h +48 -0
- data/ext/pack/ruby/internal/attr/pure.h +43 -0
- data/ext/pack/ruby/internal/attr/restrict.h +45 -0
- data/ext/pack/ruby/internal/attr/returns_nonnull.h +37 -0
- data/ext/pack/ruby/internal/attr/warning.h +32 -0
- data/ext/pack/ruby/internal/attr/weakref.h +32 -0
- data/ext/pack/ruby/internal/cast.h +53 -0
- data/ext/pack/ruby/internal/compiler_is.h +45 -0
- data/ext/pack/ruby/internal/compiler_is/apple.h +41 -0
- data/ext/pack/ruby/internal/compiler_is/clang.h +38 -0
- data/ext/pack/ruby/internal/compiler_is/gcc.h +46 -0
- data/ext/pack/ruby/internal/compiler_is/intel.h +41 -0
- data/ext/pack/ruby/internal/compiler_is/msvc.h +57 -0
- data/ext/pack/ruby/internal/compiler_is/sunpro.h +55 -0
- data/ext/pack/ruby/internal/compiler_since.h +61 -0
- data/ext/pack/ruby/internal/config.h +131 -0
- data/ext/pack/ruby/internal/constant_p.h +37 -0
- data/ext/pack/ruby/internal/core.h +35 -0
- data/ext/pack/ruby/internal/core/rarray.h +275 -0
- data/ext/pack/ruby/internal/core/rbasic.h +85 -0
- data/ext/pack/ruby/internal/core/rbignum.h +51 -0
- data/ext/pack/ruby/internal/core/rclass.h +47 -0
- data/ext/pack/ruby/internal/core/rdata.h +174 -0
- data/ext/pack/ruby/internal/core/rfile.h +36 -0
- data/ext/pack/ruby/internal/core/rhash.h +62 -0
- data/ext/pack/ruby/internal/core/rmatch.h +73 -0
- data/ext/pack/ruby/internal/core/robject.h +97 -0
- data/ext/pack/ruby/internal/core/rregexp.h +84 -0
- data/ext/pack/ruby/internal/core/rstring.h +215 -0
- data/ext/pack/ruby/internal/core/rstruct.h +73 -0
- data/ext/pack/ruby/internal/core/rtypeddata.h +184 -0
- data/ext/pack/ruby/internal/ctype.h +203 -0
- data/ext/pack/ruby/internal/dllexport.h +92 -0
- data/ext/pack/ruby/internal/dosish.h +63 -0
- data/ext/pack/ruby/internal/error.h +74 -0
- data/ext/pack/ruby/internal/eval.h +50 -0
- data/ext/pack/ruby/internal/event.h +75 -0
- data/ext/pack/ruby/internal/fl_type.h +469 -0
- data/ext/pack/ruby/internal/gc.h +35 -0
- data/ext/pack/ruby/internal/glob.h +35 -0
- data/ext/pack/ruby/internal/globals.h +159 -0
- data/ext/pack/ruby/internal/has/attribute.h +164 -0
- data/ext/pack/ruby/internal/has/builtin.h +105 -0
- data/ext/pack/ruby/internal/has/c_attribute.h +38 -0
- data/ext/pack/ruby/internal/has/cpp_attribute.h +79 -0
- data/ext/pack/ruby/internal/has/declspec_attribute.h +48 -0
- data/ext/pack/ruby/internal/has/extension.h +33 -0
- data/ext/pack/ruby/internal/has/feature.h +31 -0
- data/ext/pack/ruby/internal/has/warning.h +31 -0
- data/ext/pack/ruby/internal/intern/array.h +78 -0
- data/ext/pack/ruby/internal/intern/bignum.h +105 -0
- data/ext/pack/ruby/internal/intern/class.h +57 -0
- data/ext/pack/ruby/internal/intern/compar.h +34 -0
- data/ext/pack/ruby/internal/intern/complex.h +60 -0
- data/ext/pack/ruby/internal/intern/cont.h +40 -0
- data/ext/pack/ruby/internal/intern/dir.h +33 -0
- data/ext/pack/ruby/internal/intern/enum.h +33 -0
- data/ext/pack/ruby/internal/intern/enumerator.h +79 -0
- data/ext/pack/ruby/internal/intern/error.h +82 -0
- data/ext/pack/ruby/internal/intern/eval.h +59 -0
- data/ext/pack/ruby/internal/intern/file.h +44 -0
- data/ext/pack/ruby/internal/intern/gc.h +57 -0
- data/ext/pack/ruby/internal/intern/hash.h +59 -0
- data/ext/pack/ruby/internal/intern/io.h +70 -0
- data/ext/pack/ruby/internal/intern/load.h +39 -0
- data/ext/pack/ruby/internal/intern/marshal.h +35 -0
- data/ext/pack/ruby/internal/intern/numeric.h +42 -0
- data/ext/pack/ruby/internal/intern/object.h +90 -0
- data/ext/pack/ruby/internal/intern/parse.h +64 -0
- data/ext/pack/ruby/internal/intern/proc.h +53 -0
- data/ext/pack/ruby/internal/intern/process.h +46 -0
- data/ext/pack/ruby/internal/intern/random.h +45 -0
- data/ext/pack/ruby/internal/intern/range.h +35 -0
- data/ext/pack/ruby/internal/intern/rational.h +46 -0
- data/ext/pack/ruby/internal/intern/re.h +50 -0
- data/ext/pack/ruby/internal/intern/ruby.h +37 -0
- data/ext/pack/ruby/internal/intern/select.h +52 -0
- data/ext/pack/ruby/internal/intern/select/largesize.h +103 -0
- data/ext/pack/ruby/internal/intern/select/posix.h +82 -0
- data/ext/pack/ruby/internal/intern/select/win32.h +124 -0
- data/ext/pack/ruby/internal/intern/signal.h +40 -0
- data/ext/pack/ruby/internal/intern/sprintf.h +43 -0
- data/ext/pack/ruby/internal/intern/string.h +290 -0
- data/ext/pack/ruby/internal/intern/struct.h +47 -0
- data/ext/pack/ruby/internal/intern/thread.h +76 -0
- data/ext/pack/ruby/internal/intern/time.h +52 -0
- data/ext/pack/ruby/internal/intern/variable.h +83 -0
- data/ext/pack/ruby/internal/intern/vm.h +77 -0
- data/ext/pack/ruby/internal/interpreter.h +94 -0
- data/ext/pack/ruby/internal/iterator.h +65 -0
- data/ext/pack/ruby/internal/memory.h +286 -0
- data/ext/pack/ruby/internal/method.h +39 -0
- data/ext/pack/ruby/internal/module.h +39 -0
- data/ext/pack/ruby/internal/newobj.h +73 -0
- data/ext/pack/ruby/internal/rgengc.h +199 -0
- data/ext/pack/ruby/internal/scan_args.h +394 -0
- data/ext/pack/ruby/internal/special_consts.h +204 -0
- data/ext/pack/ruby/internal/static_assert.h +77 -0
- data/ext/pack/ruby/internal/stdalign.h +124 -0
- data/ext/pack/ruby/internal/stdbool.h +51 -0
- data/ext/pack/ruby/internal/symbol.h +114 -0
- data/ext/pack/ruby/internal/token_paste.h +75 -0
- data/ext/pack/ruby/internal/value.h +66 -0
- data/ext/pack/ruby/internal/value_type.h +354 -0
- data/ext/pack/ruby/internal/variable.h +62 -0
- data/ext/pack/ruby/internal/warning_push.h +91 -0
- data/ext/pack/ruby/internal/xmalloc.h +201 -0
- data/lib/zscan.rb +1 -1
- data/readme.md +2 -0
- data/zscan.gemspec +1 -1
- metadata +162 -2
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#ifndef RBIMPL_DLLEXPORT_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_DLLEXPORT_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Tewaking visibility of C variables/functions.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h"
|
|
24
|
+
#include "ruby/internal/compiler_is.h"
|
|
25
|
+
|
|
26
|
+
/* For MinGW, we need __declspec(dllimport) for RUBY_EXTERN on MJIT.
|
|
27
|
+
mswin's RUBY_EXTERN already has that. See also: win32/Makefile.sub */
|
|
28
|
+
#undef RUBY_EXTERN
|
|
29
|
+
#if defined(MJIT_HEADER) && defined(_WIN32)
|
|
30
|
+
# define RUBY_EXTERN extern __declspec(dllimport)
|
|
31
|
+
#elif defined(RUBY_EXPORT)
|
|
32
|
+
# define RUBY_EXTERN extern
|
|
33
|
+
#elif defined(_WIN32)
|
|
34
|
+
# define RUBY_EXTERN extern __declspec(dllimport)
|
|
35
|
+
#else
|
|
36
|
+
# define RUBY_EXTERN extern
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#ifndef RUBY_SYMBOL_EXPORT_BEGIN
|
|
40
|
+
# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#ifndef RUBY_SYMBOL_EXPORT_END
|
|
44
|
+
# define RUBY_SYMBOL_EXPORT_END /* end */
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#ifndef RUBY_FUNC_EXPORTED
|
|
48
|
+
# define RUBY_FUNC_EXPORTED /* void */
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
/* These macros are used for functions which are exported only for MJIT
|
|
52
|
+
and NOT ensured to be exported in future versions. */
|
|
53
|
+
|
|
54
|
+
#if ! defined(MJIT_HEADER)
|
|
55
|
+
# define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
|
|
56
|
+
#elif ! RBIMPL_COMPILER_IS(MSVC)
|
|
57
|
+
# define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
|
|
58
|
+
#else
|
|
59
|
+
# define MJIT_FUNC_EXPORTED static
|
|
60
|
+
#endif
|
|
61
|
+
|
|
62
|
+
#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
|
|
63
|
+
#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
|
|
64
|
+
|
|
65
|
+
/* On mswin, MJIT header transformation can't be used since cl.exe can't output
|
|
66
|
+
preprocessed output preserving macros. So this `MJIT_STATIC` is needed
|
|
67
|
+
to force non-static function to static on MJIT header to avoid symbol conflict. */
|
|
68
|
+
#ifdef MJIT_HEADER
|
|
69
|
+
# define MJIT_STATIC static
|
|
70
|
+
#else
|
|
71
|
+
# define MJIT_STATIC
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
/** Shortcut macro equivalent to `RUBY_SYMBOL_EXPORT_BEGIN extern "C" {`.
|
|
75
|
+
* \@shyouhei finds it handy. */
|
|
76
|
+
#if defined(__DOXYGEN__)
|
|
77
|
+
# define RBIMPL_SYMBOL_EXPORT_BEGIN() /* void */
|
|
78
|
+
#elif defined(__cplusplus)
|
|
79
|
+
# define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN extern "C" {
|
|
80
|
+
#else
|
|
81
|
+
# define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
|
|
82
|
+
#endif
|
|
83
|
+
|
|
84
|
+
/** Counterpart of #RBIMPL_SYMBOL_EXPORT_BEGIN */
|
|
85
|
+
#if defined(__DOXYGEN__)
|
|
86
|
+
# define RBIMPL_SYMBOL_EXPORT_END() /* void */
|
|
87
|
+
#elif defined(__cplusplus)
|
|
88
|
+
# define RBIMPL_SYMBOL_EXPORT_END() } RUBY_SYMBOL_EXPORT_END
|
|
89
|
+
#else
|
|
90
|
+
# define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
|
|
91
|
+
#endif
|
|
92
|
+
#endif /* RBIMPL_DLLEXPORT_H */
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#ifndef RBIMPL_DOSISH_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_DOSISH_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Support for so-called dosish systems.
|
|
22
|
+
*/
|
|
23
|
+
#ifdef __CYGWIN__
|
|
24
|
+
#undef _WIN32
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
#if defined(_WIN32)
|
|
28
|
+
/*
|
|
29
|
+
DOSISH mean MS-Windows style filesystem.
|
|
30
|
+
But you should use more precise macros like DOSISH_DRIVE_LETTER, PATH_SEP,
|
|
31
|
+
ENV_IGNORECASE or CASEFOLD_FILESYSTEM.
|
|
32
|
+
*/
|
|
33
|
+
#define DOSISH 1
|
|
34
|
+
# define DOSISH_DRIVE_LETTER
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#ifdef _WIN32
|
|
38
|
+
#include "ruby/win32.h"
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
#if defined(DOSISH)
|
|
42
|
+
#define PATH_SEP ";"
|
|
43
|
+
#else
|
|
44
|
+
#define PATH_SEP ":"
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#define PATH_SEP_CHAR PATH_SEP[0]
|
|
48
|
+
|
|
49
|
+
#define PATH_ENV "PATH"
|
|
50
|
+
|
|
51
|
+
#if defined(DOSISH)
|
|
52
|
+
#define ENV_IGNORECASE
|
|
53
|
+
#endif
|
|
54
|
+
|
|
55
|
+
#ifndef CASEFOLD_FILESYSTEM
|
|
56
|
+
# if defined DOSISH
|
|
57
|
+
# define CASEFOLD_FILESYSTEM 1
|
|
58
|
+
# else
|
|
59
|
+
# define CASEFOLD_FILESYSTEM 0
|
|
60
|
+
# endif
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
#endif /* RBIMPL_DOSISH_H */
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#ifndef RBIMPL_ERROR_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ERROR_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Declares ::rb_raise().
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/dllexport.h"
|
|
24
|
+
#include "ruby/internal/value.h"
|
|
25
|
+
#include "ruby/backward/2/attributes.h"
|
|
26
|
+
|
|
27
|
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
|
28
|
+
|
|
29
|
+
VALUE rb_errinfo(void);
|
|
30
|
+
void rb_set_errinfo(VALUE);
|
|
31
|
+
|
|
32
|
+
/* for rb_readwrite_sys_fail first argument */
|
|
33
|
+
enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
|
|
34
|
+
#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
|
|
35
|
+
#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
|
|
36
|
+
|
|
37
|
+
PRINTF_ARGS(NORETURN(void rb_raise(VALUE, const char*, ...)), 2, 3);
|
|
38
|
+
PRINTF_ARGS(NORETURN(void rb_fatal(const char*, ...)), 1, 2);
|
|
39
|
+
COLDFUNC PRINTF_ARGS(NORETURN(void rb_bug(const char*, ...)), 1, 2);
|
|
40
|
+
NORETURN(void rb_bug_errno(const char*, int));
|
|
41
|
+
NORETURN(void rb_sys_fail(const char*));
|
|
42
|
+
NORETURN(void rb_sys_fail_str(VALUE));
|
|
43
|
+
NORETURN(void rb_mod_sys_fail(VALUE, const char*));
|
|
44
|
+
NORETURN(void rb_mod_sys_fail_str(VALUE, VALUE));
|
|
45
|
+
NORETURN(void rb_readwrite_sys_fail(enum rb_io_wait_readwrite, const char*));
|
|
46
|
+
NORETURN(void rb_iter_break(void));
|
|
47
|
+
NORETURN(void rb_iter_break_value(VALUE));
|
|
48
|
+
NORETURN(void rb_exit(int));
|
|
49
|
+
NORETURN(void rb_notimplement(void));
|
|
50
|
+
VALUE rb_syserr_new(int, const char *);
|
|
51
|
+
VALUE rb_syserr_new_str(int n, VALUE arg);
|
|
52
|
+
NORETURN(void rb_syserr_fail(int, const char*));
|
|
53
|
+
NORETURN(void rb_syserr_fail_str(int, VALUE));
|
|
54
|
+
NORETURN(void rb_mod_syserr_fail(VALUE, int, const char*));
|
|
55
|
+
NORETURN(void rb_mod_syserr_fail_str(VALUE, int, VALUE));
|
|
56
|
+
NORETURN(void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite, int, const char*));
|
|
57
|
+
NORETURN(void rb_unexpected_type(VALUE,int));
|
|
58
|
+
|
|
59
|
+
VALUE *rb_ruby_verbose_ptr(void);
|
|
60
|
+
VALUE *rb_ruby_debug_ptr(void);
|
|
61
|
+
#define ruby_verbose (*rb_ruby_verbose_ptr())
|
|
62
|
+
#define ruby_debug (*rb_ruby_debug_ptr())
|
|
63
|
+
|
|
64
|
+
/* reports if `-W' specified */
|
|
65
|
+
PRINTF_ARGS(void rb_warning(const char*, ...), 1, 2);
|
|
66
|
+
PRINTF_ARGS(void rb_compile_warning(const char *, int, const char*, ...), 3, 4);
|
|
67
|
+
PRINTF_ARGS(void rb_sys_warning(const char*, ...), 1, 2);
|
|
68
|
+
/* reports always */
|
|
69
|
+
COLDFUNC PRINTF_ARGS(void rb_warn(const char*, ...), 1, 2);
|
|
70
|
+
PRINTF_ARGS(void rb_compile_warn(const char *, int, const char*, ...), 3, 4);
|
|
71
|
+
|
|
72
|
+
RBIMPL_SYMBOL_EXPORT_END()
|
|
73
|
+
|
|
74
|
+
#endif /* RBIMPL_ERROR_H */
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#ifndef RBIMPL_EVAL_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_EVAL_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Declares ::rb_eval_string().
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/dllexport.h"
|
|
24
|
+
#include "ruby/internal/value.h"
|
|
25
|
+
|
|
26
|
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
|
27
|
+
|
|
28
|
+
VALUE rb_eval_string(const char*);
|
|
29
|
+
VALUE rb_eval_string_protect(const char*, int*);
|
|
30
|
+
VALUE rb_eval_string_wrap(const char*, int*);
|
|
31
|
+
VALUE rb_funcall(VALUE, ID, int, ...);
|
|
32
|
+
VALUE rb_funcallv(VALUE, ID, int, const VALUE*);
|
|
33
|
+
VALUE rb_funcallv_kw(VALUE, ID, int, const VALUE*, int);
|
|
34
|
+
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE*);
|
|
35
|
+
VALUE rb_funcallv_public_kw(VALUE, ID, int, const VALUE*, int);
|
|
36
|
+
#define rb_funcall2 rb_funcallv
|
|
37
|
+
#define rb_funcall3 rb_funcallv_public
|
|
38
|
+
VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE*);
|
|
39
|
+
VALUE rb_funcall_passing_block_kw(VALUE, ID, int, const VALUE*, int);
|
|
40
|
+
VALUE rb_funcall_with_block(VALUE, ID, int, const VALUE*, VALUE);
|
|
41
|
+
VALUE rb_funcall_with_block_kw(VALUE, ID, int, const VALUE*, VALUE, int);
|
|
42
|
+
VALUE rb_call_super(int, const VALUE*);
|
|
43
|
+
VALUE rb_call_super_kw(int, const VALUE*, int);
|
|
44
|
+
VALUE rb_current_receiver(void);
|
|
45
|
+
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *);
|
|
46
|
+
VALUE rb_extract_keywords(VALUE *orighash);
|
|
47
|
+
|
|
48
|
+
RBIMPL_SYMBOL_EXPORT_END()
|
|
49
|
+
|
|
50
|
+
#endif /* RBIMPL_EVAL_H */
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#ifndef RBIMPL_EVENT_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_EVENT_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Debugging and tracing APIs.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/dllexport.h"
|
|
24
|
+
#include "ruby/internal/value.h"
|
|
25
|
+
|
|
26
|
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
|
27
|
+
|
|
28
|
+
/* traditional set_trace_func events */
|
|
29
|
+
#define RUBY_EVENT_NONE 0x0000
|
|
30
|
+
#define RUBY_EVENT_LINE 0x0001
|
|
31
|
+
#define RUBY_EVENT_CLASS 0x0002
|
|
32
|
+
#define RUBY_EVENT_END 0x0004
|
|
33
|
+
#define RUBY_EVENT_CALL 0x0008
|
|
34
|
+
#define RUBY_EVENT_RETURN 0x0010
|
|
35
|
+
#define RUBY_EVENT_C_CALL 0x0020
|
|
36
|
+
#define RUBY_EVENT_C_RETURN 0x0040
|
|
37
|
+
#define RUBY_EVENT_RAISE 0x0080
|
|
38
|
+
#define RUBY_EVENT_ALL 0x00ff
|
|
39
|
+
|
|
40
|
+
/* for TracePoint extended events */
|
|
41
|
+
#define RUBY_EVENT_B_CALL 0x0100
|
|
42
|
+
#define RUBY_EVENT_B_RETURN 0x0200
|
|
43
|
+
#define RUBY_EVENT_THREAD_BEGIN 0x0400
|
|
44
|
+
#define RUBY_EVENT_THREAD_END 0x0800
|
|
45
|
+
#define RUBY_EVENT_FIBER_SWITCH 0x1000
|
|
46
|
+
#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
|
|
47
|
+
#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
|
|
48
|
+
|
|
49
|
+
/* special events */
|
|
50
|
+
#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
|
|
51
|
+
|
|
52
|
+
/* internal events */
|
|
53
|
+
#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
|
|
54
|
+
#define RUBY_EVENT_SWITCH 0x040000 /* obsolete name. this macro is for compatibility */
|
|
55
|
+
/* 0x080000 */
|
|
56
|
+
#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
|
|
57
|
+
#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
|
|
58
|
+
#define RUBY_INTERNAL_EVENT_GC_START 0x400000
|
|
59
|
+
#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
|
|
60
|
+
#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
|
|
61
|
+
#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
|
|
62
|
+
#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
|
|
63
|
+
#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
|
|
64
|
+
#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
|
|
65
|
+
|
|
66
|
+
typedef uint32_t rb_event_flag_t;
|
|
67
|
+
typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
|
|
68
|
+
|
|
69
|
+
#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
|
|
70
|
+
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
|
|
71
|
+
int rb_remove_event_hook(rb_event_hook_func_t func);
|
|
72
|
+
|
|
73
|
+
RBIMPL_SYMBOL_EXPORT_END()
|
|
74
|
+
|
|
75
|
+
#endif /* RBIMPL_EVENT_H */
|
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
#ifndef RBIMPL_FL_TYPE_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_FL_TYPE_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Defines enum ::ruby_fl_type.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h" /* for ENUM_OVER_INT */
|
|
24
|
+
#include "ruby/internal/attr/artificial.h"
|
|
25
|
+
#include "ruby/internal/attr/flag_enum.h"
|
|
26
|
+
#include "ruby/internal/attr/forceinline.h"
|
|
27
|
+
#include "ruby/internal/attr/noalias.h"
|
|
28
|
+
#include "ruby/internal/attr/pure.h"
|
|
29
|
+
#include "ruby/internal/cast.h"
|
|
30
|
+
#include "ruby/internal/core/rbasic.h"
|
|
31
|
+
#include "ruby/internal/dllexport.h"
|
|
32
|
+
#include "ruby/internal/special_consts.h"
|
|
33
|
+
#include "ruby/internal/stdbool.h"
|
|
34
|
+
#include "ruby/internal/value.h"
|
|
35
|
+
#include "ruby/internal/value_type.h"
|
|
36
|
+
#include "ruby/assert.h"
|
|
37
|
+
#include "ruby/defines.h"
|
|
38
|
+
|
|
39
|
+
/** @cond INTERNAL_MACRO */
|
|
40
|
+
#ifdef ENUM_OVER_INT
|
|
41
|
+
# define RBIMPL_WIDER_ENUM 1
|
|
42
|
+
#elif SIZEOF_INT * CHAR_BIT > 12+19+1
|
|
43
|
+
# define RBIMPL_WIDER_ENUM 1
|
|
44
|
+
#else
|
|
45
|
+
# define RBIMPL_WIDER_ENUM 0
|
|
46
|
+
#endif
|
|
47
|
+
/** @endcond */
|
|
48
|
+
|
|
49
|
+
#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
|
|
50
|
+
#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
|
|
51
|
+
#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
|
|
52
|
+
#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
|
|
53
|
+
#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
|
|
54
|
+
#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
|
|
55
|
+
#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
|
|
56
|
+
#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
|
|
57
|
+
#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
|
|
58
|
+
#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
|
|
59
|
+
|
|
60
|
+
#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
|
|
61
|
+
|
|
62
|
+
#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
|
|
63
|
+
#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
|
|
64
|
+
#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
|
|
65
|
+
#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
|
|
66
|
+
#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
|
|
67
|
+
#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
|
|
68
|
+
#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
|
|
69
|
+
#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
|
|
70
|
+
#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
|
|
71
|
+
#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
|
|
72
|
+
#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
|
|
73
|
+
#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
|
|
74
|
+
#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
|
|
75
|
+
#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
|
|
76
|
+
#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
|
|
77
|
+
#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
|
|
78
|
+
#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
|
|
79
|
+
#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
|
|
80
|
+
#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
|
|
81
|
+
#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
|
|
82
|
+
|
|
83
|
+
#define ELTS_SHARED RUBY_ELTS_SHARED
|
|
84
|
+
#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
|
|
85
|
+
#define RB_OBJ_FREEZE rb_obj_freeze_inline
|
|
86
|
+
|
|
87
|
+
/** @cond INTERNAL_MACRO */
|
|
88
|
+
#define RB_FL_ABLE RB_FL_ABLE
|
|
89
|
+
#define RB_FL_ALL RB_FL_ALL
|
|
90
|
+
#define RB_FL_ALL_RAW RB_FL_ALL_RAW
|
|
91
|
+
#define RB_FL_ANY RB_FL_ANY
|
|
92
|
+
#define RB_FL_ANY_RAW RB_FL_ANY_RAW
|
|
93
|
+
#define RB_FL_REVERSE RB_FL_REVERSE
|
|
94
|
+
#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
|
|
95
|
+
#define RB_FL_SET RB_FL_SET
|
|
96
|
+
#define RB_FL_SET_RAW RB_FL_SET_RAW
|
|
97
|
+
#define RB_FL_TEST RB_FL_TEST
|
|
98
|
+
#define RB_FL_TEST_RAW RB_FL_TEST_RAW
|
|
99
|
+
#define RB_FL_UNSET RB_FL_UNSET
|
|
100
|
+
#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
|
|
101
|
+
#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
|
|
102
|
+
#define RB_OBJ_FROZEN RB_OBJ_FROZEN
|
|
103
|
+
#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
|
|
104
|
+
#define RB_OBJ_INFECT RB_OBJ_INFECT
|
|
105
|
+
#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
|
|
106
|
+
#define RB_OBJ_TAINT RB_OBJ_TAINT
|
|
107
|
+
#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
|
|
108
|
+
#define RB_OBJ_TAINTED RB_OBJ_TAINTED
|
|
109
|
+
#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
|
|
110
|
+
#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
|
|
111
|
+
#define RB_OBJ_UNTRUST RB_OBJ_UNTRUST
|
|
112
|
+
#define RB_OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
|
|
113
|
+
/** @endcond */
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @defgroup deprecated_macros deprecated macro APIs
|
|
117
|
+
* @{
|
|
118
|
+
* These macros are deprecated. Prefer their `RB_`-prefixed versions.
|
|
119
|
+
*/
|
|
120
|
+
#define FL_ABLE RB_FL_ABLE
|
|
121
|
+
#define FL_ALL RB_FL_ALL
|
|
122
|
+
#define FL_ALL_RAW RB_FL_ALL_RAW
|
|
123
|
+
#define FL_ANY RB_FL_ANY
|
|
124
|
+
#define FL_ANY_RAW RB_FL_ANY_RAW
|
|
125
|
+
#define FL_REVERSE RB_FL_REVERSE
|
|
126
|
+
#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
|
|
127
|
+
#define FL_SET RB_FL_SET
|
|
128
|
+
#define FL_SET_RAW RB_FL_SET_RAW
|
|
129
|
+
#define FL_TEST RB_FL_TEST
|
|
130
|
+
#define FL_TEST_RAW RB_FL_TEST_RAW
|
|
131
|
+
#define FL_UNSET RB_FL_UNSET
|
|
132
|
+
#define FL_UNSET_RAW RB_FL_UNSET_RAW
|
|
133
|
+
#define OBJ_FREEZE RB_OBJ_FREEZE
|
|
134
|
+
#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
|
|
135
|
+
#define OBJ_FROZEN RB_OBJ_FROZEN
|
|
136
|
+
#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
|
|
137
|
+
#define OBJ_INFECT RB_OBJ_INFECT
|
|
138
|
+
#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
|
|
139
|
+
#define OBJ_TAINT RB_OBJ_TAINT
|
|
140
|
+
#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
|
|
141
|
+
#define OBJ_TAINTED RB_OBJ_TAINTED
|
|
142
|
+
#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
|
|
143
|
+
#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
|
|
144
|
+
#define OBJ_UNTRUST RB_OBJ_UNTRUST
|
|
145
|
+
#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
|
|
146
|
+
/** @} */
|
|
147
|
+
|
|
148
|
+
/* This is an enum because GDB wants it (rather than a macro) */
|
|
149
|
+
enum ruby_fl_ushift { RUBY_FL_USHIFT = 12 };
|
|
150
|
+
|
|
151
|
+
/* > The expression that defines the value of an enumeration constant shall be
|
|
152
|
+
* > an integer constant expression that has a value representable as an `int`.
|
|
153
|
+
*
|
|
154
|
+
* -- ISO/IEC 9899:2018 section 6.7.2.2
|
|
155
|
+
*
|
|
156
|
+
* So ENUM_OVER_INT situation is an extension to the standard. Note however
|
|
157
|
+
* that we do not support 16 bit `int` environment. */
|
|
158
|
+
RB_GNUC_EXTENSION
|
|
159
|
+
enum
|
|
160
|
+
RBIMPL_ATTR_FLAG_ENUM()
|
|
161
|
+
ruby_fl_type {
|
|
162
|
+
RUBY_FL_WB_PROTECTED = (1<<5),
|
|
163
|
+
RUBY_FL_PROMOTED0 = (1<<5),
|
|
164
|
+
RUBY_FL_PROMOTED1 = (1<<6),
|
|
165
|
+
RUBY_FL_PROMOTED = RUBY_FL_PROMOTED0 | RUBY_FL_PROMOTED1,
|
|
166
|
+
RUBY_FL_FINALIZE = (1<<7),
|
|
167
|
+
RUBY_FL_TAINT = (1<<8),
|
|
168
|
+
RUBY_FL_UNTRUSTED = RUBY_FL_TAINT,
|
|
169
|
+
RUBY_FL_SEEN_OBJ_ID = (1<<9),
|
|
170
|
+
RUBY_FL_EXIVAR = (1<<10),
|
|
171
|
+
RUBY_FL_FREEZE = (1<<11),
|
|
172
|
+
|
|
173
|
+
#define RBIMPL_FL_USER_N(n) RUBY_FL_USER##n = (1<<(RUBY_FL_USHIFT+n))
|
|
174
|
+
RBIMPL_FL_USER_N(0),
|
|
175
|
+
RBIMPL_FL_USER_N(1),
|
|
176
|
+
RBIMPL_FL_USER_N(2),
|
|
177
|
+
RBIMPL_FL_USER_N(3),
|
|
178
|
+
RBIMPL_FL_USER_N(4),
|
|
179
|
+
RBIMPL_FL_USER_N(5),
|
|
180
|
+
RBIMPL_FL_USER_N(6),
|
|
181
|
+
RBIMPL_FL_USER_N(7),
|
|
182
|
+
RBIMPL_FL_USER_N(8),
|
|
183
|
+
RBIMPL_FL_USER_N(9),
|
|
184
|
+
RBIMPL_FL_USER_N(10),
|
|
185
|
+
RBIMPL_FL_USER_N(11),
|
|
186
|
+
RBIMPL_FL_USER_N(12),
|
|
187
|
+
RBIMPL_FL_USER_N(13),
|
|
188
|
+
RBIMPL_FL_USER_N(14),
|
|
189
|
+
RBIMPL_FL_USER_N(15),
|
|
190
|
+
RBIMPL_FL_USER_N(16),
|
|
191
|
+
RBIMPL_FL_USER_N(17),
|
|
192
|
+
RBIMPL_FL_USER_N(18),
|
|
193
|
+
#if ENUM_OVER_INT
|
|
194
|
+
RBIMPL_FL_USER_N(19),
|
|
195
|
+
#else
|
|
196
|
+
# define RUBY_FL_USER19 (RBIMPL_VALUE_ONE<<(RUBY_FL_USHIFT+19))
|
|
197
|
+
#endif
|
|
198
|
+
#undef RBIMPL_FL_USER_N
|
|
199
|
+
#undef RBIMPL_WIDER_ENUM
|
|
200
|
+
|
|
201
|
+
RUBY_ELTS_SHARED = RUBY_FL_USER2,
|
|
202
|
+
RUBY_FL_SINGLETON = RUBY_FL_USER0,
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
enum { RUBY_FL_DUPPED = RUBY_T_MASK | RUBY_FL_EXIVAR | RUBY_FL_TAINT };
|
|
206
|
+
|
|
207
|
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
|
208
|
+
void rb_obj_infect(VALUE victim, VALUE carrier);
|
|
209
|
+
void rb_freeze_singleton_class(VALUE klass);
|
|
210
|
+
RBIMPL_SYMBOL_EXPORT_END()
|
|
211
|
+
|
|
212
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
213
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
214
|
+
RBIMPL_ATTR_FORCEINLINE()
|
|
215
|
+
static bool
|
|
216
|
+
RB_FL_ABLE(VALUE obj)
|
|
217
|
+
{
|
|
218
|
+
if (RB_SPECIAL_CONST_P(obj)) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
230
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
231
|
+
static inline VALUE
|
|
232
|
+
RB_FL_TEST_RAW(VALUE obj, VALUE flags)
|
|
233
|
+
{
|
|
234
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
|
|
235
|
+
return RBASIC(obj)->flags & flags;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
239
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
240
|
+
static inline VALUE
|
|
241
|
+
RB_FL_TEST(VALUE obj, VALUE flags)
|
|
242
|
+
{
|
|
243
|
+
if (RB_FL_ABLE(obj)) {
|
|
244
|
+
return RB_FL_TEST_RAW(obj, flags);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
return RBIMPL_VALUE_NULL;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
252
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
253
|
+
static inline bool
|
|
254
|
+
RB_FL_ANY_RAW(VALUE obj, VALUE flags)
|
|
255
|
+
{
|
|
256
|
+
return RB_FL_TEST_RAW(obj, flags);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
260
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
261
|
+
static inline bool
|
|
262
|
+
RB_FL_ANY(VALUE obj, VALUE flags)
|
|
263
|
+
{
|
|
264
|
+
return RB_FL_TEST(obj, flags);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
268
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
269
|
+
static inline bool
|
|
270
|
+
RB_FL_ALL_RAW(VALUE obj, VALUE flags)
|
|
271
|
+
{
|
|
272
|
+
return RB_FL_TEST_RAW(obj, flags) == flags;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
276
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
277
|
+
static inline bool
|
|
278
|
+
RB_FL_ALL(VALUE obj, VALUE flags)
|
|
279
|
+
{
|
|
280
|
+
return RB_FL_TEST(obj, flags) == flags;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
RBIMPL_ATTR_NOALIAS()
|
|
284
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
285
|
+
static inline void
|
|
286
|
+
rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
|
|
287
|
+
{
|
|
288
|
+
obj->flags |= flags;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
292
|
+
static inline void
|
|
293
|
+
RB_FL_SET_RAW(VALUE obj, VALUE flags)
|
|
294
|
+
{
|
|
295
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
|
|
296
|
+
rbimpl_fl_set_raw_raw(RBASIC(obj), flags);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
300
|
+
static inline void
|
|
301
|
+
RB_FL_SET(VALUE obj, VALUE flags)
|
|
302
|
+
{
|
|
303
|
+
if (RB_FL_ABLE(obj)) {
|
|
304
|
+
RB_FL_SET_RAW(obj, flags);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
RBIMPL_ATTR_NOALIAS()
|
|
309
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
310
|
+
static inline void
|
|
311
|
+
rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
|
|
312
|
+
{
|
|
313
|
+
obj->flags &= ~flags;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
317
|
+
static inline void
|
|
318
|
+
RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
|
|
319
|
+
{
|
|
320
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
|
|
321
|
+
rbimpl_fl_unset_raw_raw(RBASIC(obj), flags);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
325
|
+
static inline void
|
|
326
|
+
RB_FL_UNSET(VALUE obj, VALUE flags)
|
|
327
|
+
{
|
|
328
|
+
if (RB_FL_ABLE(obj)) {
|
|
329
|
+
RB_FL_UNSET_RAW(obj, flags);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
RBIMPL_ATTR_NOALIAS()
|
|
334
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
335
|
+
static inline void
|
|
336
|
+
rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
|
|
337
|
+
{
|
|
338
|
+
obj->flags ^= flags;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
342
|
+
static inline void
|
|
343
|
+
RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
|
|
344
|
+
{
|
|
345
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
|
|
346
|
+
rbimpl_fl_reverse_raw_raw(RBASIC(obj), flags);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
350
|
+
static inline void
|
|
351
|
+
RB_FL_REVERSE(VALUE obj, VALUE flags)
|
|
352
|
+
{
|
|
353
|
+
if (RB_FL_ABLE(obj)) {
|
|
354
|
+
RB_FL_REVERSE_RAW(obj, flags);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
359
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
360
|
+
static inline bool
|
|
361
|
+
RB_OBJ_TAINTABLE(VALUE obj)
|
|
362
|
+
{
|
|
363
|
+
if (! RB_FL_ABLE(obj)) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
else if (RB_TYPE_P(obj, RUBY_T_BIGNUM)) {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
else if (RB_TYPE_P(obj, RUBY_T_FLOAT)) {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
378
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
379
|
+
static inline VALUE
|
|
380
|
+
RB_OBJ_TAINTED_RAW(VALUE obj)
|
|
381
|
+
{
|
|
382
|
+
return RB_FL_TEST_RAW(obj, RUBY_FL_TAINT);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
386
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
387
|
+
static inline bool
|
|
388
|
+
RB_OBJ_TAINTED(VALUE obj)
|
|
389
|
+
{
|
|
390
|
+
return RB_FL_ANY(obj, RUBY_FL_TAINT);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
394
|
+
static inline void
|
|
395
|
+
RB_OBJ_TAINT_RAW(VALUE obj)
|
|
396
|
+
{
|
|
397
|
+
RB_FL_SET_RAW(obj, RUBY_FL_TAINT);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
401
|
+
static inline void
|
|
402
|
+
RB_OBJ_TAINT(VALUE obj)
|
|
403
|
+
{
|
|
404
|
+
if (RB_OBJ_TAINTABLE(obj)) {
|
|
405
|
+
RB_OBJ_TAINT_RAW(obj);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
410
|
+
static inline void
|
|
411
|
+
RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
|
|
412
|
+
{
|
|
413
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_OBJ_TAINTABLE(dst));
|
|
414
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(src));
|
|
415
|
+
RB_FL_SET_RAW(dst, RB_OBJ_TAINTED_RAW(src));
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
419
|
+
static inline void
|
|
420
|
+
RB_OBJ_INFECT(VALUE dst, VALUE src)
|
|
421
|
+
{
|
|
422
|
+
if (RB_OBJ_TAINTABLE(dst) && RB_FL_ABLE(src)) {
|
|
423
|
+
RB_OBJ_INFECT_RAW(dst, src);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
428
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
429
|
+
/* It is intentional not to return bool here. There is a place in ruby core
|
|
430
|
+
* (namely class.c:singleton_class_of()) where return value of this function is
|
|
431
|
+
* verbatimly passed to RB_FL_SET_RAW. */
|
|
432
|
+
static inline VALUE
|
|
433
|
+
RB_OBJ_FROZEN_RAW(VALUE obj)
|
|
434
|
+
{
|
|
435
|
+
return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
RBIMPL_ATTR_PURE_ON_NDEBUG()
|
|
439
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
440
|
+
static inline bool
|
|
441
|
+
RB_OBJ_FROZEN(VALUE obj)
|
|
442
|
+
{
|
|
443
|
+
if (! RB_FL_ABLE(obj)) {
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
return RB_OBJ_FROZEN_RAW(obj);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
452
|
+
static inline void
|
|
453
|
+
RB_OBJ_FREEZE_RAW(VALUE obj)
|
|
454
|
+
{
|
|
455
|
+
RB_FL_SET_RAW(obj, RUBY_FL_FREEZE);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
static inline void
|
|
459
|
+
rb_obj_freeze_inline(VALUE x)
|
|
460
|
+
{
|
|
461
|
+
if (RB_FL_ABLE(x)) {
|
|
462
|
+
RB_OBJ_FREEZE_RAW(x);
|
|
463
|
+
if (RBASIC_CLASS(x) && !(RBASIC(x)->flags & RUBY_FL_SINGLETON)) {
|
|
464
|
+
rb_freeze_singleton_class(x);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
#endif /* RBIMPL_FL_TYPE_H */
|