debase-ruby_core_source 3.2.0 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +10 -0
  4. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/addr2line.h +20 -0
  5. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/builtin.h +117 -0
  6. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ccan/build_assert/build_assert.h +40 -0
  7. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ccan/check_type/check_type.h +63 -0
  8. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ccan/container_of/container_of.h +142 -0
  9. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ccan/list/list.h +789 -0
  10. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ccan/str/str.h +17 -0
  11. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/constant.h +53 -0
  12. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/darray.h +246 -0
  13. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/debug_counter.h +423 -0
  14. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/dln.h +31 -0
  15. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/encindex.h +70 -0
  16. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/eval_intern.h +341 -0
  17. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/hrtime.h +227 -0
  18. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/id.h +343 -0
  19. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/id_table.h +39 -0
  20. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/insns.inc +249 -0
  21. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/insns_info.inc +9133 -0
  22. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/array.h +144 -0
  23. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/basic_operators.h +63 -0
  24. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/bignum.h +244 -0
  25. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/bits.h +568 -0
  26. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/class.h +226 -0
  27. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/cmdlineopt.h +63 -0
  28. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/compar.h +29 -0
  29. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/compile.h +34 -0
  30. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/compilers.h +107 -0
  31. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/complex.h +29 -0
  32. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/cont.h +32 -0
  33. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/dir.h +16 -0
  34. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/enc.h +19 -0
  35. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/encoding.h +32 -0
  36. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/enum.h +18 -0
  37. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/enumerator.h +21 -0
  38. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/error.h +213 -0
  39. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/eval.h +32 -0
  40. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/file.h +38 -0
  41. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/fixnum.h +184 -0
  42. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/gc.h +361 -0
  43. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/hash.h +190 -0
  44. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/imemo.h +241 -0
  45. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/inits.h +50 -0
  46. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/io.h +137 -0
  47. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/load.h +18 -0
  48. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/loadpath.h +16 -0
  49. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/math.h +23 -0
  50. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/missing.h +18 -0
  51. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/numeric.h +273 -0
  52. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/object.h +59 -0
  53. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/parse.h +133 -0
  54. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/proc.h +30 -0
  55. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/process.h +124 -0
  56. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/ractor.h +6 -0
  57. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/random.h +16 -0
  58. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/range.h +40 -0
  59. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/rational.h +71 -0
  60. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/re.h +28 -0
  61. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/ruby_parser.h +69 -0
  62. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/sanitizers.h +186 -0
  63. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/serial.h +23 -0
  64. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/signal.h +25 -0
  65. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/static_assert.h +16 -0
  66. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/string.h +160 -0
  67. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/struct.h +127 -0
  68. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/symbol.h +42 -0
  69. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/thread.h +74 -0
  70. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/time.h +34 -0
  71. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/transcode.h +20 -0
  72. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/util.h +27 -0
  73. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/variable.h +71 -0
  74. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/vm.h +129 -0
  75. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal/warnings.h +16 -0
  76. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/internal.h +112 -0
  77. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/iseq.h +334 -0
  78. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/known_errors.inc +791 -0
  79. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/method.h +254 -0
  80. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/node.h +125 -0
  81. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/node_name.inc +210 -0
  82. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/optinsn.inc +128 -0
  83. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/optunifs.inc +43 -0
  84. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/parse.h +232 -0
  85. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/parser_bits.h +564 -0
  86. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/parser_node.h +133 -0
  87. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/parser_st.h +162 -0
  88. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/parser_value.h +106 -0
  89. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/probes_helper.h +42 -0
  90. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ractor_core.h +387 -0
  91. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/regenc.h +254 -0
  92. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/regint.h +996 -0
  93. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/regparse.h +370 -0
  94. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/revision.h +5 -0
  95. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/rjit.h +103 -0
  96. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/rjit_c.h +165 -0
  97. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ruby_assert.h +14 -0
  98. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/ruby_atomic.h +23 -0
  99. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/rubyparser.h +628 -0
  100. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/shape.h +232 -0
  101. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/siphash.h +48 -0
  102. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/symbol.h +119 -0
  103. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/thread_none.h +20 -0
  104. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/thread_pthread.h +126 -0
  105. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/thread_win32.h +58 -0
  106. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/timev.h +58 -0
  107. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/transcode_data.h +138 -0
  108. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/variable.h +30 -0
  109. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/version.h +65 -0
  110. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm.inc +5396 -0
  111. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_call_iseq_optimized.inc +244 -0
  112. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_callinfo.h +608 -0
  113. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_core.h +2089 -0
  114. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_debug.h +122 -0
  115. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_exec.h +199 -0
  116. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_insnhelper.h +271 -0
  117. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_opts.h +67 -0
  118. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vm_sync.h +137 -0
  119. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/vmtc.inc +243 -0
  120. data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/yjit.h +70 -0
  121. data/lib/debase/ruby_core_source/version.rb +1 -1
  122. metadata +120 -3
@@ -0,0 +1,564 @@
1
+ #ifndef INTERNAL_BITS2_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_BITS2_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for bitwise integer algorithms.
10
+ * @see Henry S. Warren Jr., "Hacker's Delight" (2nd ed.), 2013.
11
+ * @see SEI CERT C Coding Standard INT32-C. "Ensure that operations on
12
+ * signed integers do not result in overflow"
13
+ * @see https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
14
+ * @see https://clang.llvm.org/docs/LanguageExtensions.html#builtin-rotateleft
15
+ * @see https://clang.llvm.org/docs/LanguageExtensions.html#builtin-rotateright
16
+ * @see https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/byteswap-uint64-byteswap-ulong-byteswap-ushort
17
+ * @see https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/rotl-rotl64-rotr-rotr64
18
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanforward-bitscanforward64
19
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanreverse-bitscanreverse64
20
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/lzcnt16-lzcnt-lzcnt64
21
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/popcnt16-popcnt-popcnt64
22
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_lzcnt_u32
23
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tzcnt_u32
24
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rotl64
25
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rotr64
26
+ * @see https://stackoverflow.com/a/776523
27
+ */
28
+ #include "ruby/internal/config.h"
29
+ #include <limits.h> /* for CHAR_BITS */
30
+ #include <stdint.h> /* for uintptr_t */
31
+ #include "internal/compilers.h" /* for MSC_VERSION_SINCE */
32
+
33
+ #if MSC_VERSION_SINCE(1310)
34
+ # include <stdlib.h> /* for _byteswap_uint64 */
35
+ #endif
36
+
37
+ #if defined(HAVE_X86INTRIN_H)
38
+ # include <x86intrin.h> /* for _lzcnt_u64 */
39
+ #elif MSC_VERSION_SINCE(1310)
40
+ # include <intrin.h> /* for the following intrinsics */
41
+ #endif
42
+
43
+ #if defined(_MSC_VER) && defined(__AVX__)
44
+ # pragma intrinsic(__popcnt)
45
+ # pragma intrinsic(__popcnt64)
46
+ #endif
47
+
48
+ #if defined(_MSC_VER) && defined(__AVX2__)
49
+ # pragma intrinsic(__lzcnt)
50
+ # pragma intrinsic(__lzcnt64)
51
+ #endif
52
+
53
+ #if MSC_VERSION_SINCE(1310)
54
+ # pragma intrinsic(_rotl)
55
+ # pragma intrinsic(_rotr)
56
+ # ifdef _WIN64
57
+ # pragma intrinsic(_rotl64)
58
+ # pragma intrinsic(_rotr64)
59
+ # endif
60
+ #endif
61
+
62
+ #if MSC_VERSION_SINCE(1400)
63
+ # pragma intrinsic(_BitScanForward)
64
+ # pragma intrinsic(_BitScanReverse)
65
+ # ifdef _WIN64
66
+ # pragma intrinsic(_BitScanForward64)
67
+ # pragma intrinsic(_BitScanReverse64)
68
+ # endif
69
+ #endif
70
+
71
+ #include "parser_value.h" /* for VALUE */
72
+ #include "internal/static_assert.h" /* for STATIC_ASSERT */
73
+
74
+ /* The most significant bit of the lower part of half-long integer.
75
+ * If sizeof(long) == 4, this is 0x8000.
76
+ * If sizeof(long) == 8, this is 0x80000000.
77
+ */
78
+ #define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
79
+
80
+ #define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
81
+
82
+ #define SIGNED_INTEGER_MIN(T) \
83
+ ((sizeof(T) == sizeof(int8_t)) ? ((T)INT8_MIN) : \
84
+ ((sizeof(T) == sizeof(int16_t)) ? ((T)INT16_MIN) : \
85
+ ((sizeof(T) == sizeof(int32_t)) ? ((T)INT32_MIN) : \
86
+ ((sizeof(T) == sizeof(int64_t)) ? ((T)INT64_MIN) : \
87
+ 0))))
88
+
89
+ #define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
90
+
91
+ #define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
92
+
93
+ #if __has_builtin(__builtin_mul_overflow_p)
94
+ # define MUL_OVERFLOW_P(a, b) \
95
+ __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
96
+ #elif __has_builtin(__builtin_mul_overflow)
97
+ # define MUL_OVERFLOW_P(a, b) \
98
+ __extension__ ({ __typeof__(a) c; __builtin_mul_overflow((a), (b), &c); })
99
+ #endif
100
+
101
+ #define MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, min, max) ( \
102
+ (a) == 0 ? 0 : \
103
+ (a) == -1 ? (b) < -(max) : \
104
+ (a) > 0 ? \
105
+ ((b) > 0 ? (max) / (a) < (b) : (min) / (a) > (b)) : \
106
+ ((b) > 0 ? (min) / (a) < (b) : (max) / (a) > (b)))
107
+
108
+ #if __has_builtin(__builtin_mul_overflow_p)
109
+ /* __builtin_mul_overflow_p can take bitfield */
110
+ /* and GCC permits bitfields for integers other than int */
111
+ # define MUL_OVERFLOW_FIXNUM_P(a, b) \
112
+ __extension__ ({ \
113
+ struct { long fixnum : sizeof(long) * CHAR_BIT - 1; } c = { 0 }; \
114
+ __builtin_mul_overflow_p((a), (b), c.fixnum); \
115
+ })
116
+ #else
117
+ # define MUL_OVERFLOW_FIXNUM_P(a, b) \
118
+ MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, FIXNUM_MIN, FIXNUM_MAX)
119
+ #endif
120
+
121
+ #ifdef MUL_OVERFLOW_P
122
+ # define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_P(a, b)
123
+ # define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_P(a, b)
124
+ # define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_P(a, b)
125
+ #else
126
+ # define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LLONG_MIN, LLONG_MAX)
127
+ # define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LONG_MIN, LONG_MAX)
128
+ # define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, INT_MIN, INT_MAX)
129
+ #endif
130
+
131
+ #ifdef HAVE_UINT128_T
132
+ # define bit_length(x) \
133
+ (unsigned int) \
134
+ (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : \
135
+ sizeof(x) <= sizeof(int64_t) ? 64 - nlz_int64((uint64_t)(x)) : \
136
+ 128 - nlz_int128((uint128_t)(x)))
137
+ #else
138
+ # define bit_length(x) \
139
+ (unsigned int) \
140
+ (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : \
141
+ 64 - nlz_int64((uint64_t)(x)))
142
+ #endif
143
+
144
+ #ifndef swap16
145
+ # define swap16 ruby_swap16
146
+ #endif
147
+
148
+ #ifndef swap32
149
+ # define swap32 ruby_swap32
150
+ #endif
151
+
152
+ #ifndef swap64
153
+ # define swap64 ruby_swap64
154
+ #endif
155
+
156
+ static inline uint16_t ruby_swap16(uint16_t);
157
+ static inline uint32_t ruby_swap32(uint32_t);
158
+ static inline uint64_t ruby_swap64(uint64_t);
159
+ static inline unsigned nlz_int(unsigned x);
160
+ static inline unsigned nlz_long(unsigned long x);
161
+ static inline unsigned nlz_long_long(unsigned long long x);
162
+ static inline unsigned nlz_intptr(uintptr_t x);
163
+ static inline unsigned nlz_int32(uint32_t x);
164
+ static inline unsigned nlz_int64(uint64_t x);
165
+ #ifdef HAVE_UINT128_T
166
+ static inline unsigned nlz_int128(uint128_t x);
167
+ #endif
168
+ static inline unsigned rb_popcount32(uint32_t x);
169
+ static inline unsigned rb_popcount64(uint64_t x);
170
+ static inline unsigned rb_popcount_intptr(uintptr_t x);
171
+ static inline int ntz_int32(uint32_t x);
172
+ static inline int ntz_int64(uint64_t x);
173
+ static inline int ntz_intptr(uintptr_t x);
174
+ static inline VALUE RUBY_BIT_ROTL(VALUE, int);
175
+ static inline VALUE RUBY_BIT_ROTR(VALUE, int);
176
+
177
+ static inline uint16_t
178
+ ruby_swap16(uint16_t x)
179
+ {
180
+ #if __has_builtin(__builtin_bswap16)
181
+ return __builtin_bswap16(x);
182
+
183
+ #elif MSC_VERSION_SINCE(1310)
184
+ return _byteswap_ushort(x);
185
+
186
+ #else
187
+ return (x << 8) | (x >> 8);
188
+
189
+ #endif
190
+ }
191
+
192
+ static inline uint32_t
193
+ ruby_swap32(uint32_t x)
194
+ {
195
+ #if __has_builtin(__builtin_bswap32)
196
+ return __builtin_bswap32(x);
197
+
198
+ #elif MSC_VERSION_SINCE(1310)
199
+ return _byteswap_ulong(x);
200
+
201
+ #else
202
+ x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);
203
+ x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8);
204
+ return x;
205
+
206
+ #endif
207
+ }
208
+
209
+ static inline uint64_t
210
+ ruby_swap64(uint64_t x)
211
+ {
212
+ #if __has_builtin(__builtin_bswap64)
213
+ return __builtin_bswap64(x);
214
+
215
+ #elif MSC_VERSION_SINCE(1310)
216
+ return _byteswap_uint64(x);
217
+
218
+ #else
219
+ x = ((x & 0x00000000FFFFFFFFULL) << 32) | ((x & 0xFFFFFFFF00000000ULL) >> 32);
220
+ x = ((x & 0x0000FFFF0000FFFFULL) << 16) | ((x & 0xFFFF0000FFFF0000ULL) >> 16);
221
+ x = ((x & 0x00FF00FF00FF00FFULL) << 8) | ((x & 0xFF00FF00FF00FF00ULL) >> 8);
222
+ return x;
223
+
224
+ #endif
225
+ }
226
+
227
+ static inline unsigned int
228
+ nlz_int32(uint32_t x)
229
+ {
230
+ #if defined(_MSC_VER) && defined(__AVX2__)
231
+ /* Note: It seems there is no such thing like __LZCNT__ predefined in MSVC.
232
+ * AMD CPUs have had this instruction for decades (since K10) but for
233
+ * Intel, Haswell is the oldest one. We need to use __AVX2__ for maximum
234
+ * safety. */
235
+ return (unsigned int)__lzcnt(x);
236
+
237
+ #elif defined(__x86_64__) && defined(__LZCNT__)
238
+ return (unsigned int)_lzcnt_u32(x);
239
+
240
+ #elif MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */
241
+ unsigned long r;
242
+ return _BitScanReverse(&r, x) ? (31 - (int)r) : 32;
243
+
244
+ #elif __has_builtin(__builtin_clz)
245
+ STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT == 32);
246
+ return x ? (unsigned int)__builtin_clz(x) : 32;
247
+
248
+ #else
249
+ uint32_t y;
250
+ unsigned n = 32;
251
+ y = x >> 16; if (y) {n -= 16; x = y;}
252
+ y = x >> 8; if (y) {n -= 8; x = y;}
253
+ y = x >> 4; if (y) {n -= 4; x = y;}
254
+ y = x >> 2; if (y) {n -= 2; x = y;}
255
+ y = x >> 1; if (y) {return n - 2;}
256
+ return (unsigned int)(n - x);
257
+ #endif
258
+ }
259
+
260
+ static inline unsigned int
261
+ nlz_int64(uint64_t x)
262
+ {
263
+ #if defined(_MSC_VER) && defined(__AVX2__)
264
+ return (unsigned int)__lzcnt64(x);
265
+
266
+ #elif defined(__x86_64__) && defined(__LZCNT__)
267
+ return (unsigned int)_lzcnt_u64(x);
268
+
269
+ #elif defined(_WIN64) && MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */
270
+ unsigned long r;
271
+ return _BitScanReverse64(&r, x) ? (63u - (unsigned int)r) : 64;
272
+
273
+ #elif __has_builtin(__builtin_clzl)
274
+ if (x == 0) {
275
+ return 64;
276
+ }
277
+ else if (sizeof(long) * CHAR_BIT == 64) {
278
+ return (unsigned int)__builtin_clzl((unsigned long)x);
279
+ }
280
+ else if (sizeof(long long) * CHAR_BIT == 64) {
281
+ return (unsigned int)__builtin_clzll((unsigned long long)x);
282
+ }
283
+ else {
284
+ /* :FIXME: Is there a way to make this branch a compile-time error? */
285
+ UNREACHABLE_RETURN(~0);
286
+ }
287
+
288
+ #else
289
+ uint64_t y;
290
+ unsigned int n = 64;
291
+ y = x >> 32; if (y) {n -= 32; x = y;}
292
+ y = x >> 16; if (y) {n -= 16; x = y;}
293
+ y = x >> 8; if (y) {n -= 8; x = y;}
294
+ y = x >> 4; if (y) {n -= 4; x = y;}
295
+ y = x >> 2; if (y) {n -= 2; x = y;}
296
+ y = x >> 1; if (y) {return n - 2;}
297
+ return (unsigned int)(n - x);
298
+
299
+ #endif
300
+ }
301
+
302
+ #ifdef HAVE_UINT128_T
303
+ static inline unsigned int
304
+ nlz_int128(uint128_t x)
305
+ {
306
+ uint64_t y = (uint64_t)(x >> 64);
307
+
308
+ if (x == 0) {
309
+ return 128;
310
+ }
311
+ else if (y == 0) {
312
+ return (unsigned int)nlz_int64(x) + 64;
313
+ }
314
+ else {
315
+ return (unsigned int)nlz_int64(y);
316
+ }
317
+ }
318
+ #endif
319
+
320
+ static inline unsigned int
321
+ nlz_int(unsigned int x)
322
+ {
323
+ if (sizeof(unsigned int) * CHAR_BIT == 32) {
324
+ return nlz_int32((uint32_t)x);
325
+ }
326
+ else if (sizeof(unsigned int) * CHAR_BIT == 64) {
327
+ return nlz_int64((uint64_t)x);
328
+ }
329
+ else {
330
+ UNREACHABLE_RETURN(~0);
331
+ }
332
+ }
333
+
334
+ static inline unsigned int
335
+ nlz_long(unsigned long x)
336
+ {
337
+ if (sizeof(unsigned long) * CHAR_BIT == 32) {
338
+ return nlz_int32((uint32_t)x);
339
+ }
340
+ else if (sizeof(unsigned long) * CHAR_BIT == 64) {
341
+ return nlz_int64((uint64_t)x);
342
+ }
343
+ else {
344
+ UNREACHABLE_RETURN(~0);
345
+ }
346
+ }
347
+
348
+ static inline unsigned int
349
+ nlz_long_long(unsigned long long x)
350
+ {
351
+ if (sizeof(unsigned long long) * CHAR_BIT == 64) {
352
+ return nlz_int64((uint64_t)x);
353
+ }
354
+ #ifdef HAVE_UINT128_T
355
+ else if (sizeof(unsigned long long) * CHAR_BIT == 128) {
356
+ return nlz_int128((uint128_t)x);
357
+ }
358
+ #endif
359
+ else {
360
+ UNREACHABLE_RETURN(~0);
361
+ }
362
+ }
363
+
364
+ static inline unsigned int
365
+ nlz_intptr(uintptr_t x)
366
+ {
367
+ if (sizeof(uintptr_t) == sizeof(unsigned int)) {
368
+ return nlz_int((unsigned int)x);
369
+ }
370
+ if (sizeof(uintptr_t) == sizeof(unsigned long)) {
371
+ return nlz_long((unsigned long)x);
372
+ }
373
+ if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
374
+ return nlz_long_long((unsigned long long)x);
375
+ }
376
+ else {
377
+ UNREACHABLE_RETURN(~0);
378
+ }
379
+ }
380
+
381
+ static inline unsigned int
382
+ rb_popcount32(uint32_t x)
383
+ {
384
+ #if defined(_MSC_VER) && defined(__AVX__)
385
+ /* Note: CPUs since Nehalem and Barcelona have had this instruction so SSE
386
+ * 4.2 should suffice, but it seems there is no such thing like __SSE_4_2__
387
+ * predefined macro in MSVC. They do have __AVX__ so use it instead. */
388
+ return (unsigned int)__popcnt(x);
389
+
390
+ #elif __has_builtin(__builtin_popcount)
391
+ STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT >= 32);
392
+ return (unsigned int)__builtin_popcount(x);
393
+
394
+ #else
395
+ x = (x & 0x55555555) + (x >> 1 & 0x55555555);
396
+ x = (x & 0x33333333) + (x >> 2 & 0x33333333);
397
+ x = (x & 0x0f0f0f0f) + (x >> 4 & 0x0f0f0f0f);
398
+ x = (x & 0x001f001f) + (x >> 8 & 0x001f001f);
399
+ x = (x & 0x0000003f) + (x >>16 & 0x0000003f);
400
+ return (unsigned int)x;
401
+
402
+ #endif
403
+ }
404
+
405
+ static inline unsigned int
406
+ rb_popcount64(uint64_t x)
407
+ {
408
+ #if defined(_MSC_VER) && defined(__AVX__)
409
+ return (unsigned int)__popcnt64(x);
410
+
411
+ #elif __has_builtin(__builtin_popcount)
412
+ if (sizeof(long) * CHAR_BIT == 64) {
413
+ return (unsigned int)__builtin_popcountl((unsigned long)x);
414
+ }
415
+ else if (sizeof(long long) * CHAR_BIT == 64) {
416
+ return (unsigned int)__builtin_popcountll((unsigned long long)x);
417
+ }
418
+ else {
419
+ /* :FIXME: Is there a way to make this branch a compile-time error? */
420
+ UNREACHABLE_RETURN(~0);
421
+ }
422
+
423
+ #else
424
+ x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555);
425
+ x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333);
426
+ x = (x & 0x0707070707070707) + (x >> 4 & 0x0707070707070707);
427
+ x = (x & 0x001f001f001f001f) + (x >> 8 & 0x001f001f001f001f);
428
+ x = (x & 0x0000003f0000003f) + (x >>16 & 0x0000003f0000003f);
429
+ x = (x & 0x000000000000007f) + (x >>32 & 0x000000000000007f);
430
+ return (unsigned int)x;
431
+
432
+ #endif
433
+ }
434
+
435
+ static inline unsigned int
436
+ rb_popcount_intptr(uintptr_t x)
437
+ {
438
+ if (sizeof(uintptr_t) * CHAR_BIT == 64) {
439
+ return rb_popcount64((uint64_t)x);
440
+ }
441
+ else if (sizeof(uintptr_t) * CHAR_BIT == 32) {
442
+ return rb_popcount32((uint32_t)x);
443
+ }
444
+ else {
445
+ UNREACHABLE_RETURN(~0);
446
+ }
447
+ }
448
+
449
+ static inline int
450
+ ntz_int32(uint32_t x)
451
+ {
452
+ #if defined(__x86_64__) && defined(__BMI__)
453
+ return (unsigned)_tzcnt_u32(x);
454
+
455
+ #elif MSC_VERSION_SINCE(1400)
456
+ /* :FIXME: Is there any way to issue TZCNT instead of BSF, apart from using
457
+ * assembly? Because issuing LZCNT seems possible (see nlz.h). */
458
+ unsigned long r;
459
+ return _BitScanForward(&r, x) ? (int)r : 32;
460
+
461
+ #elif __has_builtin(__builtin_ctz)
462
+ STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT == 32);
463
+ return x ? (unsigned)__builtin_ctz(x) : 32;
464
+
465
+ #else
466
+ return rb_popcount32((~x) & (x-1));
467
+
468
+ #endif
469
+ }
470
+
471
+ static inline int
472
+ ntz_int64(uint64_t x)
473
+ {
474
+ #if defined(__x86_64__) && defined(__BMI__)
475
+ return (unsigned)_tzcnt_u64(x);
476
+
477
+ #elif defined(_WIN64) && MSC_VERSION_SINCE(1400)
478
+ unsigned long r;
479
+ return _BitScanForward64(&r, x) ? (int)r : 64;
480
+
481
+ #elif __has_builtin(__builtin_ctzl)
482
+ if (x == 0) {
483
+ return 64;
484
+ }
485
+ else if (sizeof(long) * CHAR_BIT == 64) {
486
+ return (unsigned)__builtin_ctzl((unsigned long)x);
487
+ }
488
+ else if (sizeof(long long) * CHAR_BIT == 64) {
489
+ return (unsigned)__builtin_ctzll((unsigned long long)x);
490
+ }
491
+ else {
492
+ /* :FIXME: Is there a way to make this branch a compile-time error? */
493
+ UNREACHABLE_RETURN(~0);
494
+ }
495
+
496
+ #else
497
+ return rb_popcount64((~x) & (x-1));
498
+
499
+ #endif
500
+ }
501
+
502
+ static inline int
503
+ ntz_intptr(uintptr_t x)
504
+ {
505
+ if (sizeof(uintptr_t) * CHAR_BIT == 64) {
506
+ return ntz_int64((uint64_t)x);
507
+ }
508
+ else if (sizeof(uintptr_t) * CHAR_BIT == 32) {
509
+ return ntz_int32((uint32_t)x);
510
+ }
511
+ else {
512
+ UNREACHABLE_RETURN(~0);
513
+ }
514
+ }
515
+
516
+ static inline VALUE
517
+ RUBY_BIT_ROTL(VALUE v, int n)
518
+ {
519
+ #if __has_builtin(__builtin_rotateleft32) && (SIZEOF_VALUE * CHAR_BIT == 32)
520
+ return __builtin_rotateleft32(v, n);
521
+
522
+ #elif __has_builtin(__builtin_rotateleft64) && (SIZEOF_VALUE * CHAR_BIT == 64)
523
+ return __builtin_rotateleft64(v, n);
524
+
525
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32)
526
+ return _rotl(v, n);
527
+
528
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64)
529
+ return _rotl64(v, n);
530
+
531
+ #elif defined(_lrotl) && (SIZEOF_VALUE == SIZEOF_LONG)
532
+ return _lrotl(v, n);
533
+
534
+ #else
535
+ const int m = (sizeof(VALUE) * CHAR_BIT) - 1;
536
+ return (v << (n & m)) | (v >> (-n & m));
537
+ #endif
538
+ }
539
+
540
+ static inline VALUE
541
+ RUBY_BIT_ROTR(VALUE v, int n)
542
+ {
543
+ #if __has_builtin(__builtin_rotateright32) && (SIZEOF_VALUE * CHAR_BIT == 32)
544
+ return __builtin_rotateright32(v, n);
545
+
546
+ #elif __has_builtin(__builtin_rotateright64) && (SIZEOF_VALUE * CHAR_BIT == 64)
547
+ return __builtin_rotateright64(v, n);
548
+
549
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32)
550
+ return _rotr(v, n);
551
+
552
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64)
553
+ return _rotr64(v, n);
554
+
555
+ #elif defined(_lrotr) && (SIZEOF_VALUE == SIZEOF_LONG)
556
+ return _lrotr(v, n);
557
+
558
+ #else
559
+ const int m = (sizeof(VALUE) * CHAR_BIT) - 1;
560
+ return (v << (-n & m)) | (v >> (n & m));
561
+ #endif
562
+ }
563
+
564
+ #endif /* INTERNAL_BITS2_H */
@@ -0,0 +1,133 @@
1
+ #ifndef RUBY_PARSER_NODE_H
2
+ #define RUBY_PARSER_NODE_H 1
3
+ /*
4
+ * This is a header file used by only "parse.y"
5
+ */
6
+ #include "rubyparser.h"
7
+ #include "internal/compilers.h"
8
+
9
+ #if defined(__cplusplus)
10
+ extern "C" {
11
+ #if 0
12
+ } /* satisfy cc-mode */
13
+ #endif
14
+ #endif
15
+
16
+ static inline rb_code_location_t
17
+ code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
18
+ {
19
+ rb_code_location_t loc;
20
+ loc.beg_pos = loc1->beg_pos;
21
+ loc.end_pos = loc2->end_pos;
22
+ return loc;
23
+ }
24
+
25
+ #define RNODE(obj) ((struct RNode *)(obj))
26
+
27
+
28
+ #define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
29
+ #define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
30
+
31
+ #define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
32
+ #define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
33
+ #define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
34
+ #define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
35
+ #define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
36
+ #define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
37
+ #define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
38
+ #define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
39
+ #define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
40
+ #define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
41
+ #define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
42
+ #define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
43
+ #define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
44
+ #define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
45
+ #define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
46
+ #define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
47
+ #define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
48
+ #define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
49
+ #define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
50
+ #define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
51
+ #define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
52
+ #define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
53
+ #define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
54
+ #define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
55
+ #define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
56
+ #define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
57
+ #define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
58
+ #define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
59
+ #define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
60
+ #define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
61
+ #define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
62
+ #define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,0,loc)
63
+ #define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
64
+ #define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
65
+ #define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
66
+ #define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
67
+ #define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
68
+ #define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
69
+ #define NEW_OP_ASGN2(r,t,i,o,val,loc) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o,t,loc),loc)
70
+ #define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
71
+ #define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
72
+ #define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
73
+ #define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
74
+ #define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,0,loc)
75
+ #define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
76
+ #define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
77
+ #define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
78
+ #define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
79
+ #define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
80
+ #define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
81
+ #define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
82
+ #define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
83
+ #define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
84
+ #define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
85
+ #define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
86
+ #define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
87
+ #define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
88
+ #define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
89
+ #define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
90
+ #define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
91
+ #define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
92
+ #define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
93
+ #define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
94
+ #define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
95
+ #define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
96
+ #define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
97
+ #define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
98
+ #define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
99
+ #define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
100
+ #define NEW_KW_ARG(v,loc) NEW_NODE(NODE_KW_ARG,0,v,0,loc)
101
+ #define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
102
+ #define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
103
+ #define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
104
+ #define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
105
+ #define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
106
+ #define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
107
+ #define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
108
+ #define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
109
+ #define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
110
+ #define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
111
+ #define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
112
+ #define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
113
+ #define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
114
+ #define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
115
+ #define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
116
+ #define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
117
+ #define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
118
+ #define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
119
+ #define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
120
+ #define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
121
+ #define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
122
+ #define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
123
+ #define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
124
+ #define NEW_ERROR(loc) NEW_NODE(NODE_ERROR,0,0,0,loc)
125
+
126
+ #if defined(__cplusplus)
127
+ #if 0
128
+ { /* satisfy cc-mode */
129
+ #endif
130
+ } /* extern "C" { */
131
+ #endif
132
+
133
+ #endif /* RUBY_PARSER_NODE_H */