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.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/ext/pack/pack-27.c +1 -0
  3. data/ext/pack/pack.c +1 -0
  4. data/ext/pack/ruby/backward/2/assume.h +43 -0
  5. data/ext/pack/ruby/backward/2/attributes.h +157 -0
  6. data/ext/pack/ruby/backward/2/bool.h +37 -0
  7. data/ext/pack/ruby/backward/2/extern.h +46 -0
  8. data/ext/pack/ruby/backward/2/gcc_version_since.h +38 -0
  9. data/ext/pack/ruby/backward/2/inttypes.h +132 -0
  10. data/ext/pack/ruby/backward/2/limits.h +100 -0
  11. data/ext/pack/ruby/backward/2/long_long.h +65 -0
  12. data/ext/pack/ruby/backward/2/r_cast.h +27 -0
  13. data/ext/pack/ruby/backward/2/rmodule.h +31 -0
  14. data/ext/pack/ruby/backward/2/stdalign.h +30 -0
  15. data/ext/pack/ruby/backward/2/stdarg.h +47 -0
  16. data/ext/pack/ruby/backward/classext.h +25 -0
  17. data/ext/pack/ruby/backward/rubyio.h +18 -0
  18. data/ext/pack/ruby/backward/rubysig.h +26 -0
  19. data/ext/pack/ruby/backward/st.h +18 -0
  20. data/ext/pack/ruby/backward/util.h +18 -0
  21. data/ext/pack/ruby/internal/anyargs.h +375 -0
  22. data/ext/pack/ruby/internal/arithmetic.h +38 -0
  23. data/ext/pack/ruby/internal/arithmetic/char.h +58 -0
  24. data/ext/pack/ruby/internal/arithmetic/double.h +39 -0
  25. data/ext/pack/ruby/internal/arithmetic/fixnum.h +44 -0
  26. data/ext/pack/ruby/internal/arithmetic/gid_t.h +34 -0
  27. data/ext/pack/ruby/internal/arithmetic/int.h +163 -0
  28. data/ext/pack/ruby/internal/arithmetic/intptr_t.h +42 -0
  29. data/ext/pack/ruby/internal/arithmetic/long.h +244 -0
  30. data/ext/pack/ruby/internal/arithmetic/long_long.h +53 -0
  31. data/ext/pack/ruby/internal/arithmetic/mode_t.h +34 -0
  32. data/ext/pack/ruby/internal/arithmetic/off_t.h +49 -0
  33. data/ext/pack/ruby/internal/arithmetic/pid_t.h +34 -0
  34. data/ext/pack/ruby/internal/arithmetic/short.h +54 -0
  35. data/ext/pack/ruby/internal/arithmetic/size_t.h +51 -0
  36. data/ext/pack/ruby/internal/arithmetic/st_data_t.h +59 -0
  37. data/ext/pack/ruby/internal/arithmetic/uid_t.h +34 -0
  38. data/ext/pack/ruby/internal/assume.h +90 -0
  39. data/ext/pack/ruby/internal/attr/alloc_size.h +32 -0
  40. data/ext/pack/ruby/internal/attr/artificial.h +46 -0
  41. data/ext/pack/ruby/internal/attr/cold.h +37 -0
  42. data/ext/pack/ruby/internal/attr/const.h +46 -0
  43. data/ext/pack/ruby/internal/attr/constexpr.h +85 -0
  44. data/ext/pack/ruby/internal/attr/deprecated.h +59 -0
  45. data/ext/pack/ruby/internal/attr/diagnose_if.h +42 -0
  46. data/ext/pack/ruby/internal/attr/enum_extensibility.h +32 -0
  47. data/ext/pack/ruby/internal/attr/error.h +32 -0
  48. data/ext/pack/ruby/internal/attr/flag_enum.h +33 -0
  49. data/ext/pack/ruby/internal/attr/forceinline.h +40 -0
  50. data/ext/pack/ruby/internal/attr/format.h +38 -0
  51. data/ext/pack/ruby/internal/attr/maybe_unused.h +38 -0
  52. data/ext/pack/ruby/internal/attr/noalias.h +58 -0
  53. data/ext/pack/ruby/internal/attr/nodiscard.h +45 -0
  54. data/ext/pack/ruby/internal/attr/noexcept.h +91 -0
  55. data/ext/pack/ruby/internal/attr/noinline.h +35 -0
  56. data/ext/pack/ruby/internal/attr/nonnull.h +32 -0
  57. data/ext/pack/ruby/internal/attr/noreturn.h +48 -0
  58. data/ext/pack/ruby/internal/attr/pure.h +43 -0
  59. data/ext/pack/ruby/internal/attr/restrict.h +45 -0
  60. data/ext/pack/ruby/internal/attr/returns_nonnull.h +37 -0
  61. data/ext/pack/ruby/internal/attr/warning.h +32 -0
  62. data/ext/pack/ruby/internal/attr/weakref.h +32 -0
  63. data/ext/pack/ruby/internal/cast.h +53 -0
  64. data/ext/pack/ruby/internal/compiler_is.h +45 -0
  65. data/ext/pack/ruby/internal/compiler_is/apple.h +41 -0
  66. data/ext/pack/ruby/internal/compiler_is/clang.h +38 -0
  67. data/ext/pack/ruby/internal/compiler_is/gcc.h +46 -0
  68. data/ext/pack/ruby/internal/compiler_is/intel.h +41 -0
  69. data/ext/pack/ruby/internal/compiler_is/msvc.h +57 -0
  70. data/ext/pack/ruby/internal/compiler_is/sunpro.h +55 -0
  71. data/ext/pack/ruby/internal/compiler_since.h +61 -0
  72. data/ext/pack/ruby/internal/config.h +131 -0
  73. data/ext/pack/ruby/internal/constant_p.h +37 -0
  74. data/ext/pack/ruby/internal/core.h +35 -0
  75. data/ext/pack/ruby/internal/core/rarray.h +275 -0
  76. data/ext/pack/ruby/internal/core/rbasic.h +85 -0
  77. data/ext/pack/ruby/internal/core/rbignum.h +51 -0
  78. data/ext/pack/ruby/internal/core/rclass.h +47 -0
  79. data/ext/pack/ruby/internal/core/rdata.h +174 -0
  80. data/ext/pack/ruby/internal/core/rfile.h +36 -0
  81. data/ext/pack/ruby/internal/core/rhash.h +62 -0
  82. data/ext/pack/ruby/internal/core/rmatch.h +73 -0
  83. data/ext/pack/ruby/internal/core/robject.h +97 -0
  84. data/ext/pack/ruby/internal/core/rregexp.h +84 -0
  85. data/ext/pack/ruby/internal/core/rstring.h +215 -0
  86. data/ext/pack/ruby/internal/core/rstruct.h +73 -0
  87. data/ext/pack/ruby/internal/core/rtypeddata.h +184 -0
  88. data/ext/pack/ruby/internal/ctype.h +203 -0
  89. data/ext/pack/ruby/internal/dllexport.h +92 -0
  90. data/ext/pack/ruby/internal/dosish.h +63 -0
  91. data/ext/pack/ruby/internal/error.h +74 -0
  92. data/ext/pack/ruby/internal/eval.h +50 -0
  93. data/ext/pack/ruby/internal/event.h +75 -0
  94. data/ext/pack/ruby/internal/fl_type.h +469 -0
  95. data/ext/pack/ruby/internal/gc.h +35 -0
  96. data/ext/pack/ruby/internal/glob.h +35 -0
  97. data/ext/pack/ruby/internal/globals.h +159 -0
  98. data/ext/pack/ruby/internal/has/attribute.h +164 -0
  99. data/ext/pack/ruby/internal/has/builtin.h +105 -0
  100. data/ext/pack/ruby/internal/has/c_attribute.h +38 -0
  101. data/ext/pack/ruby/internal/has/cpp_attribute.h +79 -0
  102. data/ext/pack/ruby/internal/has/declspec_attribute.h +48 -0
  103. data/ext/pack/ruby/internal/has/extension.h +33 -0
  104. data/ext/pack/ruby/internal/has/feature.h +31 -0
  105. data/ext/pack/ruby/internal/has/warning.h +31 -0
  106. data/ext/pack/ruby/internal/intern/array.h +78 -0
  107. data/ext/pack/ruby/internal/intern/bignum.h +105 -0
  108. data/ext/pack/ruby/internal/intern/class.h +57 -0
  109. data/ext/pack/ruby/internal/intern/compar.h +34 -0
  110. data/ext/pack/ruby/internal/intern/complex.h +60 -0
  111. data/ext/pack/ruby/internal/intern/cont.h +40 -0
  112. data/ext/pack/ruby/internal/intern/dir.h +33 -0
  113. data/ext/pack/ruby/internal/intern/enum.h +33 -0
  114. data/ext/pack/ruby/internal/intern/enumerator.h +79 -0
  115. data/ext/pack/ruby/internal/intern/error.h +82 -0
  116. data/ext/pack/ruby/internal/intern/eval.h +59 -0
  117. data/ext/pack/ruby/internal/intern/file.h +44 -0
  118. data/ext/pack/ruby/internal/intern/gc.h +57 -0
  119. data/ext/pack/ruby/internal/intern/hash.h +59 -0
  120. data/ext/pack/ruby/internal/intern/io.h +70 -0
  121. data/ext/pack/ruby/internal/intern/load.h +39 -0
  122. data/ext/pack/ruby/internal/intern/marshal.h +35 -0
  123. data/ext/pack/ruby/internal/intern/numeric.h +42 -0
  124. data/ext/pack/ruby/internal/intern/object.h +90 -0
  125. data/ext/pack/ruby/internal/intern/parse.h +64 -0
  126. data/ext/pack/ruby/internal/intern/proc.h +53 -0
  127. data/ext/pack/ruby/internal/intern/process.h +46 -0
  128. data/ext/pack/ruby/internal/intern/random.h +45 -0
  129. data/ext/pack/ruby/internal/intern/range.h +35 -0
  130. data/ext/pack/ruby/internal/intern/rational.h +46 -0
  131. data/ext/pack/ruby/internal/intern/re.h +50 -0
  132. data/ext/pack/ruby/internal/intern/ruby.h +37 -0
  133. data/ext/pack/ruby/internal/intern/select.h +52 -0
  134. data/ext/pack/ruby/internal/intern/select/largesize.h +103 -0
  135. data/ext/pack/ruby/internal/intern/select/posix.h +82 -0
  136. data/ext/pack/ruby/internal/intern/select/win32.h +124 -0
  137. data/ext/pack/ruby/internal/intern/signal.h +40 -0
  138. data/ext/pack/ruby/internal/intern/sprintf.h +43 -0
  139. data/ext/pack/ruby/internal/intern/string.h +290 -0
  140. data/ext/pack/ruby/internal/intern/struct.h +47 -0
  141. data/ext/pack/ruby/internal/intern/thread.h +76 -0
  142. data/ext/pack/ruby/internal/intern/time.h +52 -0
  143. data/ext/pack/ruby/internal/intern/variable.h +83 -0
  144. data/ext/pack/ruby/internal/intern/vm.h +77 -0
  145. data/ext/pack/ruby/internal/interpreter.h +94 -0
  146. data/ext/pack/ruby/internal/iterator.h +65 -0
  147. data/ext/pack/ruby/internal/memory.h +286 -0
  148. data/ext/pack/ruby/internal/method.h +39 -0
  149. data/ext/pack/ruby/internal/module.h +39 -0
  150. data/ext/pack/ruby/internal/newobj.h +73 -0
  151. data/ext/pack/ruby/internal/rgengc.h +199 -0
  152. data/ext/pack/ruby/internal/scan_args.h +394 -0
  153. data/ext/pack/ruby/internal/special_consts.h +204 -0
  154. data/ext/pack/ruby/internal/static_assert.h +77 -0
  155. data/ext/pack/ruby/internal/stdalign.h +124 -0
  156. data/ext/pack/ruby/internal/stdbool.h +51 -0
  157. data/ext/pack/ruby/internal/symbol.h +114 -0
  158. data/ext/pack/ruby/internal/token_paste.h +75 -0
  159. data/ext/pack/ruby/internal/value.h +66 -0
  160. data/ext/pack/ruby/internal/value_type.h +354 -0
  161. data/ext/pack/ruby/internal/variable.h +62 -0
  162. data/ext/pack/ruby/internal/warning_push.h +91 -0
  163. data/ext/pack/ruby/internal/xmalloc.h +201 -0
  164. data/lib/zscan.rb +1 -1
  165. data/readme.md +2 -0
  166. data/zscan.gemspec +1 -1
  167. 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 */