summaryrefslogtreecommitdiff
path: root/internal/array.h
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2022-07-19 11:15:05 -0400
committerPeter Zhu <peter@peterzhu.ca>2022-07-20 13:13:56 -0400
commit5871ecf956711fcacad7c03f2aef95115ed25bc4 (patch)
treeef8db409dd1acd1d2184279d8a8d3893f6b965f6 /internal/array.h
parentb25ee69e3873162689c46bc3ffdd1686151184b2 (diff)
downloadruby-5871ecf956711fcacad7c03f2aef95115ed25bc4.tar.gz
Add RARRAY_LITERAL_FLAG for array literals
Array created as literals during iseq compilation don't need a reference count since they can never be modified. The previous implementation would mutate the hidden array's reference count, causing copy-on-write invalidation. This commit adds a RARRAY_LITERAL_FLAG for arrays created through rb_ary_literal_new. Arrays created with this flag do not have reference count stored and just assume they have infinite number of references. Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
Diffstat (limited to 'internal/array.h')
-rw-r--r--internal/array.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/internal/array.h b/internal/array.h
index 690196a1e2..aa3b540153 100644
--- a/internal/array.h
+++ b/internal/array.h
@@ -33,6 +33,7 @@ void rb_ary_cancel_sharing(VALUE ary);
size_t rb_ary_size_as_embedded(VALUE ary);
void rb_ary_make_embedded(VALUE ary);
bool rb_ary_embeddable_p(VALUE ary);
+VALUE rb_ary_literal_new(long capa);
static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
static inline bool ARY_PTR_USING_P(VALUE ary);