summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-11-01 08:53:44 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-11-01 08:53:44 +0000
commitc39797e8724683e91618168bd993ac467b81eda8 (patch)
tree25bfba803716b7301a047bc579788bd8998cc29d /array.c
parentdcd0346265bfd346133e75c701b97fcb31c0ae6d (diff)
introduce USE_TRANSIENT_HEAP to enable/disable theap.
* include/ruby/ruby.h: intrdocue `USE_TRANSIENT_HEAP` macro to enable/disable transient heap. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r--array.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/array.c b/array.c
index 47543be9b2..c778a5fd1b 100644
--- a/array.c
+++ b/array.c
@@ -57,7 +57,7 @@ VALUE rb_cArray;
#define FL_SET_EMBED(a) do { \
assert(!ARY_SHARED_P(a)); \
FL_SET((a), RARRAY_EMBED_FLAG); \
- FL_UNSET_RAW((a), RARRAY_TRANSIENT_FLAG); \
+ RARY_TRANSIENT_UNSET(a); \
ary_verify(a); \
} while (0)
#define FL_UNSET_EMBED(ary) FL_UNSET((ary), RARRAY_EMBED_FLAG|RARRAY_EMBED_LEN_MASK)
@@ -278,10 +278,10 @@ ary_heap_alloc(VALUE ary, size_t capa)
VALUE *ptr = rb_transient_heap_alloc(ary, sizeof(VALUE) * capa);
if (ptr != NULL) {
- FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
+ RARY_TRANSIENT_SET(ary);
}
else {
- FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
+ RARY_TRANSIENT_UNSET(ary);
ptr = ALLOC_N(VALUE, capa);
}
@@ -303,7 +303,7 @@ static void
ary_heap_free(VALUE ary)
{
if (RARRAY_TRANSIENT_P(ary)) {
- FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
+ RARY_TRANSIENT_UNSET(ary);
}
else {
ary_heap_free_ptr(ary, ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
@@ -324,7 +324,7 @@ ary_heap_realloc(VALUE ary, size_t new_capa)
if (new_ptr == NULL) {
new_ptr = ALLOC_N(VALUE, new_capa);
- FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
+ RARY_TRANSIENT_UNSET(ary);
}
MEMCPY(new_ptr, ARY_HEAP_PTR(ary), VALUE, old_capa);
@@ -337,6 +337,7 @@ ary_heap_realloc(VALUE ary, size_t new_capa)
ary_verify(ary);
}
+#if USE_TRANSIENT_HEAP
static inline void
rb_ary_transient_heap_evacuate_(VALUE ary, int transient, int promote)
{
@@ -356,7 +357,7 @@ rb_ary_transient_heap_evacuate_(VALUE ary, int transient, int promote)
if (promote) {
new_ptr = ALLOC_N(VALUE, capa);
- FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
+ RARY_TRANSIENT_UNSET(ary);
}
else {
new_ptr = ary_heap_alloc(ary, capa);
@@ -382,6 +383,13 @@ rb_ary_detransient(VALUE ary)
assert(RARRAY_TRANSIENT_P(ary));
rb_ary_transient_heap_evacuate_(ary, TRUE, TRUE);
}
+#else
+void
+rb_ary_detransient(VALUE ary)
+{
+ /* do nothing */
+}
+#endif
static void
ary_resize_capa(VALUE ary, long capacity)