datadog-ruby_core_source 3.4.2 → 3.4.3

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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ccan/build_assert/build_assert.h +40 -0
  3. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ccan/check_type/check_type.h +63 -0
  4. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ccan/container_of/container_of.h +142 -0
  5. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ccan/list/list.h +791 -0
  6. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ccan/str/str.h +17 -0
  7. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/id.h +357 -0
  8. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/id_table.h +54 -0
  9. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/array.h +154 -0
  10. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/basic_operators.h +66 -0
  11. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/bignum.h +256 -0
  12. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/bits.h +647 -0
  13. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/box.h +83 -0
  14. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/class.h +806 -0
  15. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/cmdlineopt.h +64 -0
  16. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/compar.h +29 -0
  17. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/compile.h +34 -0
  18. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/compilers.h +107 -0
  19. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/complex.h +29 -0
  20. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/concurrent_set.h +21 -0
  21. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/cont.h +34 -0
  22. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/dir.h +16 -0
  23. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/enc.h +19 -0
  24. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/encoding.h +39 -0
  25. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/enum.h +18 -0
  26. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/enumerator.h +21 -0
  27. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/error.h +251 -0
  28. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/eval.h +43 -0
  29. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/file.h +38 -0
  30. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/fixnum.h +185 -0
  31. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/gc.h +360 -0
  32. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/hash.h +194 -0
  33. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/imemo.h +322 -0
  34. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/inits.h +51 -0
  35. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/io.h +163 -0
  36. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/load.h +20 -0
  37. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/loadpath.h +16 -0
  38. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/math.h +23 -0
  39. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/missing.h +19 -0
  40. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/numeric.h +323 -0
  41. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/object.h +63 -0
  42. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/parse.h +131 -0
  43. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/proc.h +30 -0
  44. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/process.h +124 -0
  45. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/ractor.h +10 -0
  46. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/random.h +17 -0
  47. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/range.h +40 -0
  48. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/rational.h +71 -0
  49. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/re.h +33 -0
  50. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/ruby_parser.h +102 -0
  51. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/sanitizers.h +346 -0
  52. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/serial.h +23 -0
  53. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/set_table.h +70 -0
  54. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/signal.h +25 -0
  55. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/st.h +11 -0
  56. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/static_assert.h +16 -0
  57. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/string.h +203 -0
  58. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/struct.h +160 -0
  59. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/symbol.h +46 -0
  60. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/thread.h +112 -0
  61. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/time.h +34 -0
  62. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/transcode.h +23 -0
  63. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/util.h +27 -0
  64. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/variable.h +74 -0
  65. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/vm.h +138 -0
  66. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal/warnings.h +16 -0
  67. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/internal.h +105 -0
  68. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/iseq.h +359 -0
  69. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/method.h +276 -0
  70. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/node.h +122 -0
  71. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/parser_st.h +162 -0
  72. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/parser_value.h +106 -0
  73. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/ast.h +8254 -0
  74. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/defines.h +260 -0
  75. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/diagnostic.h +458 -0
  76. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/encoding.h +283 -0
  77. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/extension.h +19 -0
  78. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/node.h +129 -0
  79. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/options.h +485 -0
  80. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/pack.h +163 -0
  81. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/parser.h +936 -0
  82. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/prettyprint.h +34 -0
  83. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/prism.h +408 -0
  84. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/regexp.h +43 -0
  85. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/static_literals.h +121 -0
  86. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_buffer.h +236 -0
  87. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_char.h +204 -0
  88. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_constant_pool.h +218 -0
  89. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_integer.h +130 -0
  90. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_list.h +103 -0
  91. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_memchr.h +29 -0
  92. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_newline_list.h +113 -0
  93. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_string.h +200 -0
  94. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_strncasecmp.h +32 -0
  95. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/util/pm_strpbrk.h +46 -0
  96. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism/version.h +29 -0
  97. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/prism_compile.h +106 -0
  98. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ractor_core.h +331 -0
  99. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ruby_assert.h +14 -0
  100. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/ruby_atomic.h +73 -0
  101. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/rubyparser.h +1393 -0
  102. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/shape.h +464 -0
  103. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/thread_none.h +21 -0
  104. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/thread_pthread.h +177 -0
  105. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/vm_core.h +2397 -0
  106. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/vm_debug.h +124 -0
  107. data/lib/datadog/ruby_core_source/ruby-4.0.0-preview3/vm_opts.h +67 -0
  108. data/lib/datadog/ruby_core_source/version.rb +1 -1
  109. metadata +108 -3
  110. data/CHANGELOG.datadog.md +0 -19
@@ -0,0 +1,256 @@
1
+ #ifndef INTERNAL_BIGNUM_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_BIGNUM_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 Bignums.
10
+ */
11
+ #include "ruby/internal/config.h" /* for HAVE_LIBGMP */
12
+ #include "internal/compilers.h" /* for FLEX_ARY_LEN */
13
+ #include <stddef.h> /* for size_t */
14
+
15
+ #ifdef HAVE_SYS_TYPES_H
16
+ # include <sys/types.h> /* for ssize_t (note: on Windows ssize_t is */
17
+ #endif /* `#define`d in ruby/config.h) */
18
+
19
+ #include "ruby/internal/stdbool.h" /* for bool */
20
+ #include "ruby/ruby.h" /* for struct RBasic */
21
+
22
+ #ifndef BDIGIT
23
+ # if SIZEOF_INT*2 <= SIZEOF_LONG_LONG
24
+ # define BDIGIT unsigned int
25
+ # define SIZEOF_BDIGIT SIZEOF_INT
26
+ # define BDIGIT_DBL unsigned LONG_LONG
27
+ # define BDIGIT_DBL_SIGNED LONG_LONG
28
+ # define PRI_BDIGIT_PREFIX ""
29
+ # define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
30
+ # elif SIZEOF_INT*2 <= SIZEOF_LONG
31
+ # define BDIGIT unsigned int
32
+ # define SIZEOF_BDIGIT SIZEOF_INT
33
+ # define BDIGIT_DBL unsigned long
34
+ # define BDIGIT_DBL_SIGNED long
35
+ # define PRI_BDIGIT_PREFIX ""
36
+ # define PRI_BDIGIT_DBL_PREFIX "l"
37
+ # elif SIZEOF_SHORT*2 <= SIZEOF_LONG
38
+ # define BDIGIT unsigned short
39
+ # define SIZEOF_BDIGIT SIZEOF_SHORT
40
+ # define BDIGIT_DBL unsigned long
41
+ # define BDIGIT_DBL_SIGNED long
42
+ # define PRI_BDIGIT_PREFIX "h"
43
+ # define PRI_BDIGIT_DBL_PREFIX "l"
44
+ # else
45
+ # define BDIGIT unsigned short
46
+ # define SIZEOF_BDIGIT (SIZEOF_LONG/2)
47
+ # define SIZEOF_ACTUAL_BDIGIT SIZEOF_LONG
48
+ # define BDIGIT_DBL unsigned long
49
+ # define BDIGIT_DBL_SIGNED long
50
+ # define PRI_BDIGIT_PREFIX "h"
51
+ # define PRI_BDIGIT_DBL_PREFIX "l"
52
+ # endif
53
+ #endif
54
+
55
+ #ifndef SIZEOF_ACTUAL_BDIGIT
56
+ # define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
57
+ #endif
58
+
59
+ #ifdef PRI_BDIGIT_PREFIX
60
+ # define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
61
+ # define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
62
+ # define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
63
+ # define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
64
+ # define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
65
+ # define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
66
+ #endif
67
+
68
+ #ifdef PRI_BDIGIT_DBL_PREFIX
69
+ # define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
70
+ # define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
71
+ # define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
72
+ # define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
73
+ # define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
74
+ # define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
75
+ #endif
76
+
77
+ #define RBIGNUM(obj) ((struct RBignum *)(obj))
78
+ #define BIGNUM_SIGN_BIT FL_USER1
79
+ #define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
80
+
81
+ /* This is likely more bits than we need today and will also need adjustment if
82
+ * we change GC slot sizes.
83
+ */
84
+ #define BIGNUM_EMBED_LEN_NUMBITS 9
85
+ #define BIGNUM_EMBED_LEN_MASK \
86
+ (RUBY_FL_USER11 | RUBY_FL_USER10 | RUBY_FL_USER9 | RUBY_FL_USER8 | RUBY_FL_USER7 | \
87
+ RUBY_FL_USER6 | RUBY_FL_USER5 | RUBY_FL_USER4 | RUBY_FL_USER3)
88
+ #define BIGNUM_EMBED_LEN_SHIFT \
89
+ (FL_USHIFT+3) /* bit offset of BIGNUM_EMBED_LEN_MASK */
90
+ #define BIGNUM_EMBED_LEN_MAX (BIGNUM_EMBED_LEN_MASK >> BIGNUM_EMBED_LEN_SHIFT)
91
+
92
+ enum rb_int_parse_flags {
93
+ RB_INT_PARSE_SIGN = 0x01,
94
+ RB_INT_PARSE_UNDERSCORE = 0x02,
95
+ RB_INT_PARSE_PREFIX = 0x04,
96
+ RB_INT_PARSE_ALL = 0x07,
97
+ RB_INT_PARSE_DEFAULT = 0x07,
98
+ };
99
+
100
+ struct RBignum {
101
+ struct RBasic basic;
102
+ union {
103
+ struct {
104
+ size_t len;
105
+ BDIGIT *digits;
106
+ } heap;
107
+ /* This is a length 1 array because:
108
+ * 1. GCC has a bug that does not optimize C flexible array members
109
+ * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452)
110
+ * 2. Zero length arrays are not supported by all compilers
111
+ */
112
+ BDIGIT ary[1];
113
+ } as;
114
+ };
115
+
116
+ /* bignum.c */
117
+ extern const char ruby_digitmap[];
118
+ double rb_big_fdiv_double(VALUE x, VALUE y);
119
+ VALUE rb_big_uminus(VALUE x);
120
+ VALUE rb_big_hash(VALUE);
121
+ VALUE rb_big_odd_p(VALUE);
122
+ VALUE rb_big_even_p(VALUE);
123
+ size_t rb_big_size(VALUE);
124
+ VALUE rb_integer_float_cmp(VALUE x, VALUE y);
125
+ VALUE rb_integer_float_eq(VALUE x, VALUE y);
126
+ VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
127
+ VALUE rb_big_comp(VALUE x);
128
+ VALUE rb_big_aref(VALUE x, VALUE y);
129
+ VALUE rb_big_aref2(VALUE num, VALUE beg, VALUE len);
130
+ VALUE rb_big_abs(VALUE x);
131
+ VALUE rb_big_size_m(VALUE big);
132
+ VALUE rb_big_bit_length(VALUE big);
133
+ VALUE rb_big_remainder(VALUE x, VALUE y);
134
+ VALUE rb_big_gt(VALUE x, VALUE y);
135
+ VALUE rb_big_ge(VALUE x, VALUE y);
136
+ VALUE rb_big_lt(VALUE x, VALUE y);
137
+ VALUE rb_big_le(VALUE x, VALUE y);
138
+ VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
139
+ VALUE rb_big_isqrt(VALUE n);
140
+ static inline bool BIGNUM_SIGN(VALUE b);
141
+ static inline bool BIGNUM_POSITIVE_P(VALUE b);
142
+ static inline bool BIGNUM_NEGATIVE_P(VALUE b);
143
+ static inline void BIGNUM_SET_SIGN(VALUE b, bool sign);
144
+ static inline void BIGNUM_NEGATE(VALUE b);
145
+ static inline size_t BIGNUM_LEN(VALUE b);
146
+ static inline BDIGIT *BIGNUM_DIGITS(VALUE b);
147
+ static inline int BIGNUM_LENINT(VALUE b);
148
+ static inline bool BIGNUM_EMBED_P(VALUE b);
149
+
150
+ RUBY_SYMBOL_EXPORT_BEGIN
151
+ /* bignum.c (export) */
152
+ VALUE rb_big_mul_normal(VALUE x, VALUE y);
153
+ VALUE rb_big_mul_balance(VALUE x, VALUE y);
154
+ VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
155
+ VALUE rb_big_mul_toom3(VALUE x, VALUE y);
156
+ VALUE rb_big_sq_fast(VALUE x);
157
+ VALUE rb_big_divrem_normal(VALUE x, VALUE y);
158
+ VALUE rb_big2str_poweroftwo(VALUE x, int base);
159
+ VALUE rb_big2str_generic(VALUE x, int base);
160
+ VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
161
+ VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
162
+ VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
163
+ #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H)
164
+ VALUE rb_big_mul_gmp(VALUE x, VALUE y);
165
+ VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
166
+ VALUE rb_big2str_gmp(VALUE x, int base);
167
+ VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
168
+ #endif
169
+ VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
170
+ RUBY_SYMBOL_EXPORT_END
171
+
172
+ #if HAVE_LONG_LONG
173
+ VALUE rb_ull2big(unsigned LONG_LONG n);
174
+ VALUE rb_ll2big(LONG_LONG n);
175
+ #endif
176
+
177
+ #if defined(HAVE_INT128_T)
178
+ VALUE rb_uint128t2big(uint128_t n);
179
+ VALUE rb_int128t2big(int128_t n);
180
+ #endif
181
+
182
+ /* sign: positive:1, negative:0 */
183
+ static inline bool
184
+ BIGNUM_SIGN(VALUE b)
185
+ {
186
+ return FL_TEST_RAW(b, BIGNUM_SIGN_BIT);
187
+ }
188
+
189
+ static inline bool
190
+ BIGNUM_POSITIVE_P(VALUE b)
191
+ {
192
+ return BIGNUM_SIGN(b);
193
+ }
194
+
195
+ static inline bool
196
+ BIGNUM_NEGATIVE_P(VALUE b)
197
+ {
198
+ return ! BIGNUM_POSITIVE_P(b);
199
+ }
200
+
201
+ static inline void
202
+ BIGNUM_SET_SIGN(VALUE b, bool sign)
203
+ {
204
+ if (sign) {
205
+ FL_SET_RAW(b, BIGNUM_SIGN_BIT);
206
+ }
207
+ else {
208
+ FL_UNSET_RAW(b, BIGNUM_SIGN_BIT);
209
+ }
210
+ }
211
+
212
+ static inline void
213
+ BIGNUM_NEGATE(VALUE b)
214
+ {
215
+ FL_REVERSE_RAW(b, BIGNUM_SIGN_BIT);
216
+ }
217
+
218
+ static inline size_t
219
+ BIGNUM_LEN(VALUE b)
220
+ {
221
+ if (! BIGNUM_EMBED_P(b)) {
222
+ return RBIGNUM(b)->as.heap.len;
223
+ }
224
+ else {
225
+ size_t ret = RBASIC(b)->flags;
226
+ ret &= BIGNUM_EMBED_LEN_MASK;
227
+ ret >>= BIGNUM_EMBED_LEN_SHIFT;
228
+ return ret;
229
+ }
230
+ }
231
+
232
+ static inline int
233
+ BIGNUM_LENINT(VALUE b)
234
+ {
235
+ return rb_long2int(BIGNUM_LEN(b));
236
+ }
237
+
238
+ /* LSB:BIGNUM_DIGITS(b)[0], MSB:BIGNUM_DIGITS(b)[BIGNUM_LEN(b)-1] */
239
+ static inline BDIGIT *
240
+ BIGNUM_DIGITS(VALUE b)
241
+ {
242
+ if (BIGNUM_EMBED_P(b)) {
243
+ return RBIGNUM(b)->as.ary;
244
+ }
245
+ else {
246
+ return RBIGNUM(b)->as.heap.digits;
247
+ }
248
+ }
249
+
250
+ static inline bool
251
+ BIGNUM_EMBED_P(VALUE b)
252
+ {
253
+ return FL_TEST_RAW(b, BIGNUM_EMBED_FLAG);
254
+ }
255
+
256
+ #endif /* INTERNAL_BIGNUM_H */