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,77 @@
1
+ #ifndef RBIMPL_STATIC_ASSERT_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_STATIC_ASSERT_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 #RBIMPL_STATIC_ASSERT.
22
+ */
23
+ #include <assert.h>
24
+ #include "ruby/internal/has/extension.h"
25
+ #include "ruby/internal/compiler_since.h"
26
+
27
+ /** @cond INTERNAL_MACRO */
28
+ #if defined(__cplusplus) && defined(__cpp_static_assert)
29
+ # /* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations */
30
+ # define RBIMPL_STATIC_ASSERT0 static_assert
31
+
32
+ #elif defined(__cplusplus) && RBIMPL_COMPILER_SINCE(MSVC, 16, 0, 0)
33
+ # define RBIMPL_STATIC_ASSERT0 static_assert
34
+
35
+ #elif defined(__INTEL_CXX11_MODE__)
36
+ # define RBIMPL_STATIC_ASSERT0 static_assert
37
+
38
+ #elif defined(__cplusplus) && __cplusplus >= 201103L
39
+ # define RBIMPL_STATIC_ASSERT0 static_assert
40
+
41
+ #elif defined(__cplusplus) && RBIMPL_HAS_EXTENSION(cxx_static_assert)
42
+ # define RBIMPL_STATIC_ASSERT0 __extension__ static_assert
43
+
44
+ #elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__
45
+ # define RBIMPL_STATIC_ASSERT0 __extension__ static_assert
46
+
47
+ #elif defined(__STDC_VERSION__) && RBIMPL_HAS_EXTENSION(c_static_assert)
48
+ # define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
49
+
50
+ #elif defined(__STDC_VERSION__) && RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0)
51
+ # define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
52
+
53
+ #elif defined(static_assert)
54
+ # /* Take <assert.h> definition */
55
+ # define RBIMPL_STATIC_ASSERT0 static_assert
56
+ #endif
57
+ /** @endcond */
58
+
59
+ /**
60
+ * @brief Wraps (or simulates) `static_assert`
61
+ * @param name Valid C/C++ identifier, describing the assertion.
62
+ * @param expr Expression to assert.
63
+ * @note `name` shall not be a string literal.
64
+ */
65
+ #if defined(__DOXYGEN__)
66
+ # define RBIMPL_STATIC_ASSERT static_assert
67
+
68
+ #elif defined(RBIMPL_STATIC_ASSERT0)
69
+ # define RBIMPL_STATIC_ASSERT(name, expr) \
70
+ RBIMPL_STATIC_ASSERT0(expr, # name ": " # expr)
71
+
72
+ #else
73
+ # define RBIMPL_STATIC_ASSERT(name, expr) \
74
+ typedef int static_assert_ ## name ## _check[1 - 2 * !(expr)]
75
+ #endif
76
+
77
+ #endif /* RBIMPL_STATIC_ASSERT_H */
@@ -0,0 +1,124 @@
1
+ #ifndef RBIMPL_STDALIGN_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_STDALIGN_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 #RBIMPL_ALIGNAS / #RBIMPL_ALIGNOF
22
+ */
23
+ #include "ruby/internal/config.h"
24
+
25
+ #ifdef HAVE_STDALIGN_H
26
+ # include <stdalign.h>
27
+ #endif
28
+
29
+ #include "ruby/internal/compiler_is.h"
30
+ #include "ruby/internal/compiler_since.h"
31
+ #include "ruby/internal/has/feature.h"
32
+ #include "ruby/internal/has/extension.h"
33
+ #include "ruby/internal/has/attribute.h"
34
+ #include "ruby/internal/has/declspec_attribute.h"
35
+
36
+ /**
37
+ * Wraps (or simulates) `alignas`. This is C++11's `alignas` and is _different_
38
+ * from C11 `_Alignas`. For instance,
39
+ *
40
+ * ```CXX
41
+ * typedef struct alignas(128) foo { int foo } foo;
42
+ * ```
43
+ *
44
+ * is a valid C++ while
45
+ *
46
+ * ```C
47
+ * typedef struct _Alignas(128) foo { int foo } foo;
48
+ * ```
49
+ *
50
+ * is an invalid C because:
51
+ *
52
+ * - You cannot `struct _Alignas`.
53
+ * - A `typedef` cannot have alignments.
54
+ */
55
+ #if defined(__cplusplus) && RBIMPL_HAS_FEATURE(cxx_alignas)
56
+ # define RBIMPL_ALIGNAS alignas
57
+
58
+ #elif defined(__cplusplus) && (__cplusplus >= 201103L)
59
+ # define RBIMPL_ALIGNAS alignas
60
+
61
+ #elif defined(__INTEL_CXX11_MODE__)
62
+ # define RBIMPL_ALIGNAS alignas
63
+
64
+ #elif defined(__GXX_EXPERIMENTAL_CXX0X__)
65
+ # define RBIMPL_ALIGNAS alignas
66
+
67
+ #elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(align)
68
+ # define RBIMPL_ALIGNAS(_) __declspec(align(_))
69
+
70
+ #elif RBIMPL_HAS_ATTRIBUTE(aliged)
71
+ # define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
72
+
73
+ #else
74
+ # define RBIMPL_ALIGNAS(_) /* void */
75
+ #endif
76
+
77
+ /**
78
+ * Wraps (or simulates) `alignof`. Unlike #RBIMPL_ALIGNAS, we can safely say
79
+ * both C/C++ definitions are effective.
80
+ */
81
+ #if defined(__cplusplus) && RBIMPL_HAS_EXTENSION(cxx_alignof)
82
+ # define RBIMPL_ALIGNOF __extension__ alignof
83
+
84
+ #elif defined(__cplusplus) && (__cplusplus >= 201103L)
85
+ # define RBIMPL_ALIGNOF alignof
86
+
87
+ #elif defined(__INTEL_CXX11_MODE__)
88
+ # define RBIMPL_ALIGNOF alignof
89
+
90
+ #elif defined(__GXX_EXPERIMENTAL_CXX0X__)
91
+ # define RBIMPL_ALIGNOF alignof
92
+
93
+ #elif defined(__STDC_VERSION__) && RBIMPL_HAS_EXTENSION(c_alignof)
94
+ # define RBIMPL_ALIGNOF __extension__ _Alignof
95
+
96
+ #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
97
+ # define RBIMPL_ALIGNOF _Alignof
98
+
99
+ #elif RBIMPL_COMPILER_IS(MSVC)
100
+ # define RBIMPL_ALIGNOF __alignof
101
+
102
+ #elif defined(__GNUC__)
103
+ # /* At least GCC 2.95 had this. */
104
+ # define RBIMPL_ALIGNOF __extension__ __alignof__
105
+
106
+ #elif defined(__alignof_is_defined) || defined(__DOXYGEN__)
107
+ # /* OK, we can safely take <stdalign.h> definition. */
108
+ # define RBIMPL_ALIGNOF alignof
109
+
110
+ #elif RBIMPL_COMPILER_SINCE(SunPro, 5, 9, 0)
111
+ # /* According to their manual, Sun Studio 12 introduced __alignof__ for both
112
+ # * C/C++. */
113
+ # define RBIMPL_ALIGNOF __alignof__
114
+
115
+ #elif 0
116
+ # /* THIS IS NG, you cannot define a new type inside of offsetof. */
117
+ # /* see: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm */
118
+ # define RBIMPL_ALIGNOF(T) offsetof(struct { char _; T t; }, t)
119
+
120
+ #else
121
+ # error :FIXME: add your compiler here to obtain an alignment.
122
+ #endif
123
+
124
+ #endif /* RBIMPL_STDALIGN_H */
@@ -0,0 +1,51 @@
1
+ #ifndef RBIMPL_STDBOOL_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_STDBOOL_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 C99 shim for <stdbool.h>
22
+ */
23
+ #include "ruby/internal/config.h"
24
+
25
+ #if defined(__bool_true_false_are_defined)
26
+ # /* Take that. */
27
+
28
+ #elif defined(__cplusplus)
29
+ # /* bool is a keyword in C++. */
30
+ # if defined(HAVE_STDBOOL_H) && (__cplusplus >= 201103L)
31
+ # include <cstdbool>
32
+ # endif
33
+ #
34
+ # ifndef __bool_true_false_are_defined
35
+ # define __bool_true_false_are_defined
36
+ # endif
37
+
38
+ #elif defined(HAVE_STDBOOL_H)
39
+ # /* Take stdbool.h definition. */
40
+ # include <stdbool.h>
41
+
42
+ #else
43
+ typedef unsigned char _Bool;
44
+ # /* See also http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2229.htm */
45
+ # define bool _Bool
46
+ # define true ((_Bool)+1)
47
+ # define false ((_Bool)+0)
48
+ # define __bool_true_false_are_defined
49
+ #endif
50
+
51
+ #endif /* RBIMPL_STDBOOL_H */
@@ -0,0 +1,114 @@
1
+ #ifndef RBIMPL_SYMBOL_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_SYMBOL_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 #rb_intern
22
+ */
23
+ #include "ruby/internal/config.h"
24
+
25
+ #ifdef HAVE_STDDEF_H
26
+ # include <stddef.h>
27
+ #endif
28
+
29
+ #ifdef HAVE_STRING_H
30
+ # include <string.h>
31
+ #endif
32
+
33
+ #include "ruby/internal/attr/nonnull.h"
34
+ #include "ruby/internal/attr/pure.h"
35
+ #include "ruby/internal/attr/noalias.h"
36
+ #include "ruby/internal/cast.h"
37
+ #include "ruby/internal/constant_p.h"
38
+ #include "ruby/internal/dllexport.h"
39
+ #include "ruby/internal/has/builtin.h"
40
+ #include "ruby/internal/value.h"
41
+
42
+ #define RB_ID2SYM rb_id2sym
43
+ #define RB_SYM2ID rb_sym2id
44
+ #define ID2SYM RB_ID2SYM
45
+ #define SYM2ID RB_SYM2ID
46
+ #define CONST_ID_CACHE RUBY_CONST_ID_CACHE
47
+ #define CONST_ID RUBY_CONST_ID
48
+
49
+ /** @cond INTERNAL_MACRO */
50
+ #define rb_intern_const rb_intern_const
51
+ /** @endcond */
52
+
53
+ RBIMPL_SYMBOL_EXPORT_BEGIN()
54
+ ID rb_sym2id(VALUE);
55
+ VALUE rb_id2sym(ID);
56
+ ID rb_intern(const char*);
57
+ ID rb_intern2(const char*, long);
58
+ ID rb_intern_str(VALUE str);
59
+ const char *rb_id2name(ID);
60
+ ID rb_check_id(volatile VALUE *);
61
+ ID rb_to_id(VALUE);
62
+ VALUE rb_id2str(ID);
63
+ VALUE rb_sym2str(VALUE);
64
+ VALUE rb_to_symbol(VALUE name);
65
+ VALUE rb_check_symbol(volatile VALUE *namep);
66
+ RBIMPL_SYMBOL_EXPORT_END()
67
+
68
+ RBIMPL_ATTR_PURE()
69
+ RBIMPL_ATTR_NONNULL(())
70
+ static inline ID
71
+ rb_intern_const(const char *str)
72
+ {
73
+ size_t len = strlen(str);
74
+ return rb_intern2(str, RBIMPL_CAST((long)len));
75
+ }
76
+
77
+ RBIMPL_ATTR_NOALIAS()
78
+ RBIMPL_ATTR_NONNULL(())
79
+ static inline ID
80
+ rbimpl_intern_const(ID *ptr, const char *str)
81
+ {
82
+ while (! *ptr) {
83
+ *ptr = rb_intern_const(str);
84
+ }
85
+
86
+ return *ptr;
87
+ }
88
+
89
+ /* Does anyone use it? Preserved for backward compat. */
90
+ #define RUBY_CONST_ID_CACHE(result, str) \
91
+ { \
92
+ static ID rb_intern_id_cache; \
93
+ rbimpl_intern_const(&rb_intern_id_cache, (str)); \
94
+ result rb_intern_id_cache; \
95
+ }
96
+ #define RUBY_CONST_ID(var, str) \
97
+ do { \
98
+ static ID rbimpl_id; \
99
+ (var) = rbimpl_intern_const(&rbimpl_id, (str)); \
100
+ } while (0)
101
+
102
+ #if defined(HAVE_STMT_AND_DECL_IN_EXPR)
103
+ /* __builtin_constant_p and statement expression is available
104
+ * since gcc-2.7.2.3 at least. */
105
+ #define rb_intern(str) \
106
+ (RBIMPL_CONSTANT_P(str) ? \
107
+ __extension__ ({ \
108
+ static ID rbimpl_id; \
109
+ rbimpl_intern_const(&rbimpl_id, (str)); \
110
+ }) : \
111
+ (rb_intern)(str))
112
+ #endif
113
+
114
+ #endif /* RBIMPL_SYMBOL_H */
@@ -0,0 +1,75 @@
1
+ #ifndef RBIMPL_TOKEN_PASTE_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_TOKEN_PASTE_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 #RBIMPL_TOKEN_PASTE.
22
+ */
23
+ #include "ruby/internal/config.h"
24
+ #include "ruby/internal/compiler_since.h"
25
+ #include "ruby/internal/has/warning.h"
26
+ #include "ruby/internal/warning_push.h"
27
+
28
+ /* :TODO: add your compiler here. There are many compilers that can suppress
29
+ * warnings via pragmas, but not all of them accept such things inside of `#if`
30
+ * and variants' conditions. And such nitpicking behavours tend not be
31
+ * documented. Please improve this file when you are really sure about your
32
+ * compiler's behaviour. */
33
+
34
+ #if RBIMPL_COMPILER_SINCE(GCC, 4, 2, 0)
35
+ # /* GCC is one of such compiler who cannot write `_Pragma` inside of a `#if`.
36
+ # * Cannot but globally kill everything. This is of course a very bad thing.
37
+ # * If you know how to reroute this please tell us. */
38
+ # /* https://gcc.godbolt.org/z/K2xr7X */
39
+ # define RBIMPL_TOKEN_PASTE(x, y) TOKEN_PASTE(x, y)
40
+ # pragma GCC diagnostic ignored "-Wundef"
41
+ # /* > warning: "symbol" is not defined, evaluates to 0 [-Wundef] */
42
+
43
+ #elif RBIMPL_COMPILER_IS(Intel)
44
+ # /* Ditto for icc. */
45
+ # /* https://gcc.godbolt.org/z/pTwDxE */
46
+ # define RBIMPL_TOKEN_PASTE(x, y) TOKEN_PASTE(x, y)
47
+ # pragma warning(disable: 193)
48
+ # /* > warning #193: zero used for undefined preprocessing identifier */
49
+
50
+ #elif RBIMPL_COMPILER_BEFORE(MSVC, 19, 14, 26428)
51
+ # /* :FIXME: is 19.14 the exact version they supported this? */
52
+ # define RBIMPL_TOKEN_PASTE(x, y) TOKEN_PASTE(x, y)
53
+ # pragma warning(disable: 4668)
54
+ # /* > warning C4668: 'symbol' is not defined as a preprocessor macro */
55
+
56
+ #elif RBIMPL_COMPILER_IS(MSVC)
57
+ # define RBIMPL_TOKEN_PASTE(x, y) \
58
+ RBIMPL_WARNING_PUSH() \
59
+ RBIMPL_WARNING_IGNORED(4668) \
60
+ TOKEN_PASTE(x, y) \
61
+ RBIMPL_WARNING_POP()
62
+
63
+ #elif RBIMPL_HAS_WARNING("-Wundef")
64
+ # define RBIMPL_TOKEN_PASTE(x, y) \
65
+ RBIMPL_WARNING_PUSH() \
66
+ RBIMPL_WARNING_IGNORED(-Wundef) \
67
+ TOKEN_PASTE(x, y) \
68
+ RBIMPL_WARNING_POP()
69
+
70
+ #else
71
+ # /* No way. */
72
+ # define RBIMPL_TOKEN_PASTE(x, y) TOKEN_PASTE(x, y)
73
+ #endif
74
+
75
+ #endif /* RBIMPL_TOKEN_PASTE_H */
@@ -0,0 +1,66 @@
1
+ #ifndef RBIMPL_VALUE_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_VALUE_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 ::VALUE and ::ID.
22
+ */
23
+ #include "ruby/internal/static_assert.h"
24
+ #include "ruby/backward/2/long_long.h"
25
+ #include "ruby/backward/2/limits.h"
26
+
27
+ #if defined HAVE_UINTPTR_T && 0
28
+ typedef uintptr_t VALUE;
29
+ typedef uintptr_t ID;
30
+ # define SIGNED_VALUE intptr_t
31
+ # define SIZEOF_VALUE SIZEOF_UINTPTR_T
32
+ # undef PRI_VALUE_PREFIX
33
+ # define RBIMPL_VALUE_NULL UINTPTR_C(0)
34
+ # define RBIMPL_VALUE_ONE UINTPTR_C(1)
35
+ # define RBIMPL_VALUE_FULL UINTPTR_MAX
36
+
37
+ #elif SIZEOF_LONG == SIZEOF_VOIDP
38
+ typedef unsigned long VALUE;
39
+ typedef unsigned long ID;
40
+ # define SIGNED_VALUE long
41
+ # define SIZEOF_VALUE SIZEOF_LONG
42
+ # define PRI_VALUE_PREFIX "l"
43
+ # define RBIMPL_VALUE_NULL 0UL
44
+ # define RBIMPL_VALUE_ONE 1UL
45
+ # define RBIMPL_VALUE_FULL ULONG_MAX
46
+
47
+ #elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
48
+ typedef unsigned LONG_LONG VALUE;
49
+ typedef unsigned LONG_LONG ID;
50
+ # define SIGNED_VALUE LONG_LONG
51
+ # define LONG_LONG_VALUE 1
52
+ # define SIZEOF_VALUE SIZEOF_LONG_LONG
53
+ # define PRI_VALUE_PREFIX PRI_LL_PREFIX
54
+ # define RBIMPL_VALUE_NULL 0ULL
55
+ # define RBIMPL_VALUE_ONE 1ULL
56
+ # define RBIMPL_VALUE_FULL ULLONG_MAX
57
+
58
+ #else
59
+ # error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
60
+ #endif
61
+
62
+ RBIMPL_STATIC_ASSERT(sizeof_int, SIZEOF_INT == sizeof(int));
63
+ RBIMPL_STATIC_ASSERT(sizeof_long, SIZEOF_LONG == sizeof(long));
64
+ RBIMPL_STATIC_ASSERT(sizeof_long_long, SIZEOF_LONG_LONG == sizeof(LONG_LONG));
65
+ RBIMPL_STATIC_ASSERT(sizeof_voidp, SIZEOF_VOIDP == sizeof(void *));
66
+ #endif /* RBIMPL_VALUE_H */