From 0723db6c3972615ebce9e1ed03d4cb2a17d3fcf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Tue, 3 Dec 2019 15:32:02 +0900 Subject: internal/array.h rework Rearrange contents for better readability, reduce macros for the same reason, and mark MJIT_FUNC_EXPORTED functions as such. --- internal/array.h | 97 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 42 deletions(-) diff --git a/internal/array.h b/internal/array.h index 77f47dc5a2..857edacf97 100644 --- a/internal/array.h +++ b/internal/array.h @@ -10,57 +10,44 @@ * file COPYING are met. Consult the file for details. */ -/* array.c */ +#include "ruby/config.h" +#include /* for size_t */ +#include "internal/static_assert.h" /* for STATIC_ASSERT */ +#include "internal/stdbool.h" /* for bool */ +#include "ruby/ruby.h" /* for RARRAY_LEN */ #ifndef ARRAY_DEBUG -#define ARRAY_DEBUG (0+RUBY_DEBUG) +# define ARRAY_DEBUG (0+RUBY_DEBUG) #endif -#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_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 - -#if USE_TRANSIENT_HEAP -#define RARY_TRANSIENT_SET(ary) FL_SET_RAW((ary), RARRAY_TRANSIENT_FLAG); -#define RARY_TRANSIENT_UNSET(ary) FL_UNSET_RAW((ary), RARRAY_TRANSIENT_FLAG); -#else -#undef RARRAY_TRANSIENT_P -#define RARRAY_TRANSIENT_P(a) 0 -#define RARY_TRANSIENT_SET(ary) ((void)0) -#define RARY_TRANSIENT_UNSET(ary) ((void)0) -#endif +/* array.c */ VALUE rb_ary_last(int, const VALUE *, VALUE); void rb_ary_set_len(VALUE, long); void rb_ary_delete_same(VALUE, VALUE); VALUE rb_ary_tmp_new_fill(long capa); VALUE rb_ary_at(VALUE, VALUE); -VALUE rb_ary_aref1(VALUE ary, VALUE i); size_t rb_ary_memsize(VALUE); VALUE rb_to_array_type(VALUE obj); -VALUE rb_check_to_array(VALUE ary); +static inline VALUE rb_ary_entry_internal(VALUE ary, long offset); +static inline bool ARY_PTR_USING_P(VALUE ary); +static inline void RARY_TRANSIENT_SET(VALUE ary); +static inline void RARY_TRANSIENT_UNSET(VALUE ary); + +RUBY_SYMBOL_EXPORT_BEGIN +/* array.c (export) */ +void rb_ary_detransient(VALUE a); +VALUE *rb_ary_ptr_use_start(VALUE ary); +void rb_ary_ptr_use_end(VALUE ary); +RUBY_SYMBOL_EXPORT_END + +MJIT_SYMBOL_EXPORT_BEGIN VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *); +VALUE rb_check_to_array(VALUE ary); VALUE rb_ary_behead(VALUE, long); -#if defined(__GNUC__) && defined(HAVE_VA_ARGS_MACRO) -#define rb_ary_new_from_args(n, ...) \ - __extension__ ({ \ - const VALUE args_to_new_ary[] = {__VA_ARGS__}; \ - if (__builtin_constant_p(n)) { \ - STATIC_ASSERT(rb_ary_new_from_args, numberof(args_to_new_ary) == (n)); \ - } \ - rb_ary_new_from_values(numberof(args_to_new_ary), args_to_new_ary); \ - }) -#endif +VALUE rb_ary_aref1(VALUE ary, VALUE i); +MJIT_SYMBOL_EXPORT_END static inline VALUE rb_ary_entry_internal(VALUE ary, long offset) @@ -78,11 +65,37 @@ rb_ary_entry_internal(VALUE ary, long offset) return ptr[offset]; } -RUBY_SYMBOL_EXPORT_BEGIN -/* array.c (export) */ -void rb_ary_detransient(VALUE a); -VALUE *rb_ary_ptr_use_start(VALUE ary); -void rb_ary_ptr_use_end(VALUE ary); -RUBY_SYMBOL_EXPORT_END +static inline bool +ARY_PTR_USING_P(VALUE ary) +{ + return FL_TEST_RAW(ary, RARRAY_PTR_IN_USE_FLAG); +} + +static inline void +RARY_TRANSIENT_SET(VALUE ary) +{ +#if USE_TRANSIENT_HEAP + FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG); +#endif +} + +static inline void +RARY_TRANSIENT_UNSET(VALUE ary) +{ +#if USE_TRANSIENT_HEAP + FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG); +#endif +} + +#if defined(__GNUC__) && defined(HAVE_VA_ARGS_MACRO) +#define rb_ary_new_from_args(n, ...) \ + __extension__ ({ \ + const VALUE args_to_new_ary[] = {__VA_ARGS__}; \ + if (__builtin_constant_p(n)) { \ + STATIC_ASSERT(rb_ary_new_from_args, numberof(args_to_new_ary) == (n)); \ + } \ + rb_ary_new_from_values(numberof(args_to_new_ary), args_to_new_ary); \ + }) +#endif #endif /* INTERNAL_ARRAY_H */ -- cgit v1.2.3