zscan 2.0.8 → 2.0.9

Sign up to get free protection for your applications and to get access to all the features.
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 */