carray 3.0.3 → 3.0.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +264 -0
- data/README.md +3 -2
- data/carray.gemspec +1 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +1 -6
- data/ext/ca_axis_group.c +27 -27
- data/ext/ca_binop_dispatch.c +1 -29
- data/ext/ca_binop_dispatch.h +0 -1
- data/ext/ca_categorical_iterator.c +205 -134
- data/ext/ca_compare.c +7 -18
- data/ext/ca_group_iter.c +16 -17
- data/ext/ca_kernel_iterator.c +1234 -1994
- data/ext/ca_kernel_iterator.h +391 -437
- data/ext/ca_monop_dispatch.c +82 -59
- data/ext/ca_monop_dispatch.h +1 -0
- data/ext/ca_obj_array.c +96 -39
- data/ext/ca_obj_bincmp.c +24 -21
- data/ext/ca_obj_binop.c +15 -26
- data/ext/ca_obj_bitarray.c +3 -2
- data/ext/ca_obj_bitfield.c +5 -6
- data/ext/ca_obj_block.c +18 -9
- data/ext/ca_obj_byte_swap.c +5 -6
- data/ext/ca_obj_const_string.c +173 -19
- data/ext/ca_obj_face.c +238 -57
- data/ext/ca_obj_face.h +19 -0
- data/ext/ca_obj_fake.c +15 -29
- data/ext/ca_obj_farray.c +6 -3
- data/ext/ca_obj_field.c +17 -5
- data/ext/ca_obj_fixlen_string.c +2 -3
- data/ext/ca_obj_grid.c +406 -132
- data/ext/ca_obj_meld.c +172 -34
- data/ext/ca_obj_moncmp.c +23 -8
- data/ext/ca_obj_monop.c +67 -57
- data/ext/ca_obj_object.c +157 -51
- data/ext/ca_obj_record.c +12 -7
- data/ext/ca_obj_reduce.c +13 -8
- data/ext/ca_obj_refer.c +25 -27
- data/ext/ca_obj_remap.c +30 -9
- data/ext/ca_obj_repeat.c +9 -10
- data/ext/ca_obj_roll.c +6 -5
- data/ext/ca_obj_select.c +14 -9
- data/ext/ca_obj_select_axis.c +15 -47
- data/ext/ca_obj_shift.c +11 -1
- data/ext/ca_obj_stack.c +179 -34
- data/ext/ca_obj_stride.c +162 -115
- data/ext/ca_obj_string.c +71 -4
- data/ext/ca_obj_tile.c +6 -5
- data/ext/ca_obj_time.c +22 -6
- data/ext/ca_obj_timedelta.c +22 -6
- data/ext/ca_obj_transpose.c +5 -3
- data/ext/ca_obj_triop.c +23 -32
- data/ext/ca_obj_window.c +190 -26
- data/ext/ca_sweep_engine.c +2 -2
- data/ext/caframe_csv_reader.c +80 -1
- data/ext/carray.h +181 -75
- data/ext/carray_access.c +184 -96
- data/ext/carray_address_basis.c +343 -87
- data/ext/carray_attribute.c +89 -6
- data/ext/carray_bincount.c +10 -8
- data/ext/carray_broadcast.c +13 -8
- data/ext/carray_build_flags.h +3 -0
- data/ext/carray_call_cfunc.c +108 -0
- data/ext/carray_cast.c +142 -24
- data/ext/carray_cast_func.rb +46 -6
- data/ext/carray_class.c +4 -3
- data/ext/carray_config.h +28 -0
- data/ext/carray_conversion.c +16 -7
- data/ext/carray_copy.c +51 -14
- data/ext/carray_core.c +147 -55
- data/ext/carray_count.c +50 -20
- data/ext/carray_element.c +76 -33
- data/ext/carray_factorize.c +118 -64
- data/ext/carray_generate.c +191 -50
- data/ext/carray_histogram.c +62 -17
- data/ext/carray_hold.c +12 -15
- data/ext/carray_index_classifier.c +388 -176
- data/ext/carray_internal.h +336 -29
- data/ext/carray_kernels_bincmp.c +4453 -0
- data/ext/carray_kernels_binop.c +11368 -0
- data/ext/carray_kernels_init.c +1734 -0
- data/ext/carray_kernels_moncmp.c +2104 -0
- data/ext/carray_kernels_monop.c +18369 -0
- data/ext/carray_kernels_reduce_aggregate.c +23818 -0
- data/ext/carray_kernels_reduce_boolean.c +406 -0
- data/ext/carray_kernels_reduce_cumulative.c +10086 -0
- data/ext/carray_kernels_reduce_extreme.c +17634 -0
- data/ext/carray_kernels_reduce_variance.c +3849 -0
- data/ext/carray_kernels_scan.c +4302 -0
- data/ext/carray_kernels_search.c +33829 -0
- data/ext/carray_kernels_sort.c +10906 -0
- data/ext/carray_kernels_triop.c +1864 -0
- data/ext/carray_key_windows.c +216 -0
- data/ext/carray_lazy.c +170 -111
- data/ext/carray_mask.c +292 -72
- data/ext/carray_median_percentile.c +82 -28
- data/ext/carray_memory_view.c +669 -561
- data/ext/carray_operator.c +124 -47
- data/ext/carray_order.c +384 -76
- data/ext/carray_partition.c +28 -27
- data/ext/carray_random.c +67 -13
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +63 -38
- data/ext/carray_segment.c +3 -3
- data/ext/carray_slab.c +91 -28
- data/ext/carray_sort.c +35 -35
- data/ext/carray_struct.c +19 -18
- data/ext/carray_test.c +26 -5
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +246 -45
- data/ext/mk_call_cfunc.rb +19 -2
- data/ext/mkkernel.rb +198 -240
- data/ext/ruby_carray.c +10 -4
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +126 -22
- data/lib/carray/autoload_carray.rb +8 -31
- data/lib/carray/autoload_method_extension.rb +14 -5
- data/lib/carray/axis_group.rb +255 -106
- data/lib/carray/basics.rb +78 -10
- data/lib/carray/bincount_nd.rb +12 -2
- data/lib/carray/block_iterator.rb +126 -23
- data/lib/carray/boolean_reduce.rb +17 -17
- data/lib/carray/categorical.rb +165 -43
- data/lib/carray/categorical_iterator.rb +130 -27
- data/lib/carray/complex.rb +5 -5
- data/lib/carray/conditional.rb +67 -18
- data/lib/carray/const_string.rb +14 -5
- data/lib/carray/construct.rb +15 -11
- data/lib/carray/data_type_extension.rb +1 -0
- data/lib/carray/distance_limit.rb +77 -0
- data/lib/carray/fixlen_string.rb +7 -1
- data/lib/carray/frame/column_verbs.rb +70 -0
- data/lib/carray/frame/convert.rb +69 -0
- data/lib/carray/frame/csv_parser.rb +111 -17
- data/lib/carray/frame/describe.rb +3 -2
- data/lib/carray/frame/frame.rb +246 -21
- data/lib/carray/frame/group.rb +510 -95
- data/lib/carray/frame/io.rb +115 -28
- data/lib/carray/frame/join.rb +312 -51
- data/lib/carray/frame/records.rb +83 -7
- data/lib/carray/frame/reshape.rb +42 -35
- data/lib/carray/frame/sort.rb +7 -19
- data/lib/carray/frame/verbs.rb +188 -48
- data/lib/carray/frame/windows.rb +117 -0
- data/lib/carray/frame.rb +2 -0
- data/lib/carray/fuse_source.rb +11 -4
- data/lib/carray/fusion.rb +40 -16
- data/lib/carray/histogram.rb +6 -1
- data/lib/carray/inspect.rb +31 -8
- data/lib/carray/iterator.rb +85 -7
- data/lib/carray/key_windows.rb +620 -0
- data/lib/carray/lazy.rb +182 -183
- data/lib/carray/mask_gap_fill.rb +63 -57
- data/lib/carray/meld_reduce.rb +12 -14
- data/lib/carray/methods/bin.rb +26 -18
- data/lib/carray/methods/bincount.rb +16 -0
- data/lib/carray/methods/bit_string.rb +1 -1
- data/lib/carray/methods/choose.rb +16 -3
- data/lib/carray/methods/composition.rb +3 -1
- data/lib/carray/methods/gather_nd.rb +14 -5
- data/lib/carray/methods/insert_block.rb +2 -2
- data/lib/carray/methods/is_between.rb +59 -0
- data/lib/carray/methods/is_in.rb +53 -36
- data/lib/carray/methods/join.rb +1 -6
- data/lib/carray/methods/lag.rb +49 -0
- data/lib/carray/methods/locate_addr.rb +47 -51
- data/lib/carray/methods/mode.rb +1 -1
- data/lib/carray/methods/nunique.rb +11 -6
- data/lib/carray/methods/resize.rb +3 -3
- data/lib/carray/methods/value_counts.rb +4 -11
- data/lib/carray/record_order.rb +3 -3
- data/lib/carray/rng.rb +3 -0
- data/lib/carray/runtime.rb +53 -8
- data/lib/carray/segment_iterator.rb +313 -82
- data/lib/carray/serialize.rb +24 -10
- data/lib/carray/slab_iterator.rb +50 -0
- data/lib/carray/string.rb +105 -5
- data/lib/carray/string_operation_extension.rb +8 -1
- data/lib/carray/struct.rb +9 -21
- data/lib/carray/struct_builder.rb +19 -8
- data/lib/carray/time.rb +726 -104
- data/lib/carray/window_iterator.rb +122 -16
- data/lib/carray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +4 -0
- data/yard-stubs/ca_obj_grid.rb +21 -10
- data/yard-stubs/ca_obj_refer.rb +2 -1
- data/yard-stubs/ca_obj_roll.rb +2 -2
- data/yard-stubs/ca_obj_shift.rb +5 -1
- data/yard-stubs/ca_obj_tile.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +8 -3
- data/yard-stubs/carray_access.rb +6 -1
- data/yard-stubs/carray_attribute.rb +0 -5
- data/yard-stubs/carray_cast.rb +10 -0
- data/yard-stubs/carray_conversion.rb +2 -1
- data/yard-stubs/carray_copy.rb +4 -2
- data/yard-stubs/carray_count.rb +4 -4
- data/yard-stubs/carray_element.rb +10 -4
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_mask.rb +26 -2
- data/yard-stubs/carray_math.rb +27 -1
- data/yard-stubs/carray_median_percentile.rb +5 -2
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +29 -18
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +14 -9
- data/yard-stubs/carray_slab.rb +9 -2
- data/yard-stubs/carray_sort.rb +6 -5
- data/yard-stubs/carray_test.rb +5 -3
- metadata +25 -3
- data/lib/carray/arrow_tensor.rb +0 -401
- data/lib/carray/table.rb +0 -108
data/ext/carray_struct.c
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
C-native member access for CAStruct subclasses. The hooked
|
|
4
4
|
methods (`[]`, `[]=`, `initialize`) are installed on a subclass by
|
|
5
|
-
`CArray.
|
|
5
|
+
`CArray.install_struct_methods(klass)` — called from the
|
|
6
6
|
bottom of lib/carray/struct.rb once CAStruct is defined, so this
|
|
7
7
|
ext can load before that file.
|
|
8
8
|
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
---------------------------------------------------------------------------- */
|
|
23
23
|
|
|
24
24
|
#include "carray.h"
|
|
25
|
+
#include "carray_internal.h" /* ca_obj2integer_fitting */
|
|
25
26
|
#include <string.h>
|
|
26
27
|
|
|
27
28
|
/* ---------------------------------------------------------------------
|
|
@@ -130,42 +131,42 @@ ca_struct_write_primitive_fast (char *p, int type_code, VALUE val)
|
|
|
130
131
|
return;
|
|
131
132
|
}
|
|
132
133
|
case CA_INT8: {
|
|
133
|
-
int8_t v = (int8_t)
|
|
134
|
+
int8_t v = (int8_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT8));
|
|
134
135
|
memcpy(p, &v, 1);
|
|
135
136
|
return;
|
|
136
137
|
}
|
|
137
138
|
case CA_UINT8: {
|
|
138
|
-
uint8_t v = (uint8_t)
|
|
139
|
+
uint8_t v = (uint8_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT8));
|
|
139
140
|
memcpy(p, &v, 1);
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
142
143
|
case CA_INT16: {
|
|
143
|
-
int16_t v = (int16_t)
|
|
144
|
+
int16_t v = (int16_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT16));
|
|
144
145
|
memcpy(p, &v, 2);
|
|
145
146
|
return;
|
|
146
147
|
}
|
|
147
148
|
case CA_UINT16: {
|
|
148
|
-
uint16_t v = (uint16_t)
|
|
149
|
+
uint16_t v = (uint16_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT16));
|
|
149
150
|
memcpy(p, &v, 2);
|
|
150
151
|
return;
|
|
151
152
|
}
|
|
152
153
|
case CA_INT32: {
|
|
153
|
-
int32_t v = (int32_t)
|
|
154
|
+
int32_t v = (int32_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT32));
|
|
154
155
|
memcpy(p, &v, 4);
|
|
155
156
|
return;
|
|
156
157
|
}
|
|
157
158
|
case CA_UINT32: {
|
|
158
|
-
uint32_t v = (uint32_t)
|
|
159
|
+
uint32_t v = (uint32_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT32));
|
|
159
160
|
memcpy(p, &v, 4);
|
|
160
161
|
return;
|
|
161
162
|
}
|
|
162
163
|
case CA_INT64: {
|
|
163
|
-
int64_t v = (int64_t) NUM2LL(val);
|
|
164
|
+
int64_t v = (int64_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT64));
|
|
164
165
|
memcpy(p, &v, 8);
|
|
165
166
|
return;
|
|
166
167
|
}
|
|
167
168
|
case CA_UINT64: {
|
|
168
|
-
uint64_t v = (uint64_t)
|
|
169
|
+
uint64_t v = (uint64_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT64));
|
|
169
170
|
memcpy(p, &v, 8);
|
|
170
171
|
return;
|
|
171
172
|
}
|
|
@@ -333,32 +334,32 @@ ca_struct_write_endian_swapped_fast (char *p, int type_code, VALUE val)
|
|
|
333
334
|
{
|
|
334
335
|
switch (type_code) {
|
|
335
336
|
case CA_INT16: {
|
|
336
|
-
uint16_t v = (uint16_t)
|
|
337
|
+
uint16_t v = (uint16_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT16));
|
|
337
338
|
v = CA_BSWAP16(v); memcpy(p, &v, 2);
|
|
338
339
|
return;
|
|
339
340
|
}
|
|
340
341
|
case CA_UINT16: {
|
|
341
|
-
uint16_t v = (uint16_t)
|
|
342
|
+
uint16_t v = (uint16_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT16));
|
|
342
343
|
v = CA_BSWAP16(v); memcpy(p, &v, 2);
|
|
343
344
|
return;
|
|
344
345
|
}
|
|
345
346
|
case CA_INT32: {
|
|
346
|
-
uint32_t v = (uint32_t)
|
|
347
|
+
uint32_t v = (uint32_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT32));
|
|
347
348
|
v = CA_BSWAP32(v); memcpy(p, &v, 4);
|
|
348
349
|
return;
|
|
349
350
|
}
|
|
350
351
|
case CA_UINT32: {
|
|
351
|
-
uint32_t v = (uint32_t)
|
|
352
|
+
uint32_t v = (uint32_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT32));
|
|
352
353
|
v = CA_BSWAP32(v); memcpy(p, &v, 4);
|
|
353
354
|
return;
|
|
354
355
|
}
|
|
355
356
|
case CA_INT64: {
|
|
356
|
-
uint64_t v = (uint64_t) NUM2LL(val);
|
|
357
|
+
uint64_t v = (uint64_t) NUM2LL(ca_obj2integer_fitting(val, CA_INT64));
|
|
357
358
|
v = CA_BSWAP64(v); memcpy(p, &v, 8);
|
|
358
359
|
return;
|
|
359
360
|
}
|
|
360
361
|
case CA_UINT64: {
|
|
361
|
-
uint64_t v =
|
|
362
|
+
uint64_t v = (uint64_t) rb_num2ull(ca_obj2integer_fitting(val, CA_UINT64));
|
|
362
363
|
v = CA_BSWAP64(v); memcpy(p, &v, 8);
|
|
363
364
|
return;
|
|
364
365
|
}
|
|
@@ -767,7 +768,7 @@ void
|
|
|
767
768
|
Init_carray_struct (void)
|
|
768
769
|
{
|
|
769
770
|
/* Singleton on rb_cCArray so lib/carray/struct.rb can call it as
|
|
770
|
-
`CArray.
|
|
771
|
-
|
|
772
|
-
|
|
771
|
+
`CArray.install_struct_methods(klass)`. */
|
|
772
|
+
rb_define_private_method(rb_singleton_class(rb_cCArray), "install_struct_methods",
|
|
773
|
+
rb_carray_install_castruct_methods, 1);
|
|
773
774
|
}
|
data/ext/carray_test.c
CHANGED
|
@@ -82,7 +82,8 @@ ca_check_same_data_type (void *ap1, void *ap2)
|
|
|
82
82
|
{
|
|
83
83
|
CArray *ca1 = (CArray *) ap1;
|
|
84
84
|
CArray *ca2 = (CArray *) ap2;
|
|
85
|
-
if ( ca1->data_type != ca2->data_type
|
|
85
|
+
if ( ca1->data_type != ca2->data_type ||
|
|
86
|
+
( ca1->data_type == CA_FIXLEN && ca1->bytes != ca2->bytes ) ) {
|
|
86
87
|
rb_raise(rb_eCADataTypeError, "data_type mismatch");
|
|
87
88
|
}
|
|
88
89
|
}
|
|
@@ -200,8 +201,9 @@ rb_ca_is_type (VALUE arg, int type)
|
|
|
200
201
|
live in ca_obj_record.c; signatures stay in carray.h for cross-file
|
|
201
202
|
extern use. */
|
|
202
203
|
|
|
203
|
-
/* CArray#valid_index?(*idx)
|
|
204
|
-
*
|
|
204
|
+
/* CArray#valid_index?(*idx) -- whether self[*idx] names a cell: a negative
|
|
205
|
+
* index counts from the end of its axis, as it does at every door. The
|
|
206
|
+
* number of indices must equal ndim (raises otherwise). */
|
|
205
207
|
static VALUE
|
|
206
208
|
rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
|
|
207
209
|
{
|
|
@@ -217,6 +219,9 @@ rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
|
|
|
217
219
|
}
|
|
218
220
|
for (i=0; i<ca->ndim; i++) {
|
|
219
221
|
idx = NUM2SIZE(argv[i]);
|
|
222
|
+
if ( idx < 0 ) {
|
|
223
|
+
idx += ca->dim[i];
|
|
224
|
+
}
|
|
220
225
|
if ( idx < 0 || idx >= ca->dim[i] ) {
|
|
221
226
|
return Qfalse;
|
|
222
227
|
}
|
|
@@ -225,7 +230,8 @@ rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
|
|
|
225
230
|
return Qtrue;
|
|
226
231
|
}
|
|
227
232
|
|
|
228
|
-
/* CArray#valid_addr?(addr)
|
|
233
|
+
/* CArray#valid_addr?(addr) -- whether addr names a cell: a negative address
|
|
234
|
+
* counts from the end. */
|
|
229
235
|
static VALUE
|
|
230
236
|
rb_ca_is_valid_addr (VALUE self, VALUE raddr)
|
|
231
237
|
{
|
|
@@ -234,6 +240,9 @@ rb_ca_is_valid_addr (VALUE self, VALUE raddr)
|
|
|
234
240
|
|
|
235
241
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
236
242
|
addr = NUM2SIZE(raddr);
|
|
243
|
+
if ( addr < 0 ) {
|
|
244
|
+
addr += ca->elements;
|
|
245
|
+
}
|
|
237
246
|
if ( addr < 0 || addr >= ca->elements ) {
|
|
238
247
|
return Qfalse;
|
|
239
248
|
}
|
|
@@ -249,6 +258,7 @@ rb_ca_has_same_shape (VALUE self, VALUE other)
|
|
|
249
258
|
{
|
|
250
259
|
CArray *ca, *cb;
|
|
251
260
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
261
|
+
/* coerce: only the shape is compared */
|
|
252
262
|
cb = ca_wrap_readonly(other, ca->data_type);
|
|
253
263
|
return ca_has_same_shape(ca, cb) ? Qtrue : Qfalse;
|
|
254
264
|
}
|
|
@@ -684,10 +694,21 @@ rb_ca_modify (VALUE self)
|
|
|
684
694
|
rb_check_frozen(self);
|
|
685
695
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
686
696
|
if ( ca_is_readonly(ca) ) {
|
|
687
|
-
|
|
697
|
+
ca_refuse_read_only();
|
|
688
698
|
}
|
|
689
699
|
}
|
|
690
700
|
|
|
701
|
+
/* The refusal of a write into a read-only array that is not frozen (a
|
|
702
|
+
frozen one is Ruby's FrozenError, from rb_check_frozen): every guard
|
|
703
|
+
raises it, the entry points through rb_ca_modify and the transfers and
|
|
704
|
+
fills below them, which are the last line when an entry is missed. */
|
|
705
|
+
void
|
|
706
|
+
ca_refuse_read_only (void)
|
|
707
|
+
{
|
|
708
|
+
rb_raise(rb_eRuntimeError, "%s: can not modify read-only array",
|
|
709
|
+
ca_calling_method_name());
|
|
710
|
+
}
|
|
711
|
+
|
|
691
712
|
/* CArray#freeze — freeze self and set CA_FLAG_READ_ONLY so subsequent
|
|
692
713
|
* mutations raise FrozenError. */
|
|
693
714
|
VALUE
|
data/ext/carray_undef.c
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
---------------------------------------------------------------------------- */
|
|
19
19
|
|
|
20
20
|
#include "ruby.h"
|
|
21
|
+
#include "ruby/ractor.h"
|
|
21
22
|
|
|
22
23
|
static VALUE rb_cUNDEF;
|
|
23
24
|
|
|
@@ -63,6 +64,9 @@ Init_carray_undef (void)
|
|
|
63
64
|
can be created. The identity invariant relies on this. */
|
|
64
65
|
CA_UNDEF = rb_funcall(rb_cUNDEF, rb_intern("new"), 0);
|
|
65
66
|
rb_undef_method(CLASS_OF(rb_cUNDEF), "new");
|
|
67
|
+
/* Frozen and shareable: masked reads hand the same object to every
|
|
68
|
+
Ractor. */
|
|
69
|
+
rb_ractor_make_shareable(CA_UNDEF);
|
|
66
70
|
rb_const_set(rb_cObject, rb_intern("UNDEF"), CA_UNDEF);
|
|
67
71
|
|
|
68
72
|
/* CAREFUL: CA_UNDEF is dereferenced via raw pointer compare
|