From 5e11de658511efd346ed8bb0fac8a49e7c0eb963 Mon Sep 17 00:00:00 2001 From: ko1 Date: Mon, 3 Dec 2018 12:36:39 +0000 Subject: make `RARRAY_PTR_USE` more conservertive. * include/ruby/ruby.h: de-transient at `RARRAY_PTR_USE` and `RARRAY_PTR_USE_START`. Introduce `RARRAY_PTR_USE_TRANSIENT` and `RARRAY_PTR_USE_START_TRANSIENT` if you don't want to de-transient an array. Generally, it is difficult so C-extension writers should not use them. * array.c: use `RARRAY_PTR_USE_TRANSIENT` if possible. * hash.c: ditto. * enum.c (enum_sort_by): remove `rb_ary_transient_heap_evacuate()` because `RARRAY_PTR_USE` do de-transient. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66165 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- internal.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'internal.h') diff --git a/internal.h b/internal.h index 968c4b5ecb..a92b0d4a54 100644 --- a/internal.h +++ b/internal.h @@ -1262,14 +1262,13 @@ VALUE rb_gvar_defined(struct rb_global_entry *); #ifdef ARRAY_DEBUG #define RARRAY_PTR_IN_USE_FLAG FL_USER14 #define ARY_PTR_USING_P(ary) FL_TEST_RAW((ary), RARRAY_PTR_IN_USE_FLAG) - #else /* disable debug function */ -#undef RARRAY_PTR_USE_START -#undef RARRAY_PTR_USE_END -#define RARRAY_PTR_USE_START(a) ((VALUE *)RARRAY_CONST_PTR_TRANSIENT(a)) -#define RARRAY_PTR_USE_END(a) +#undef RARRAY_PTR_USE_START_TRANSIENT +#undef RARRAY_PTR_USE_END_TRANSIENT +#define RARRAY_PTR_USE_START_TRANSIENT(a) ((VALUE *)RARRAY_CONST_PTR_TRANSIENT(a)) +#define RARRAY_PTR_USE_END_TRANSIENT(a) #define ARY_PTR_USING_P(ary) 0 #endif -- cgit v1.2.3