aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-08-14 14:45:23 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-08-15 12:09:26 +0900
commitff30358d13d24d8202f2717c43700be70bdd49d3 (patch)
tree32757f4895a67fefcfb4830e40e2206a7ac388f7 /include
parent72d0f2f0e0546a4c7c3b9ec85d3f67a36e9c5038 (diff)
downloadruby-ff30358d13d24d8202f2717c43700be70bdd49d3.tar.gz
RARRAY_AREF: convert into an inline function
RARRAY_AREF has been a macro for reasons. We might not be able to change that for public APIs, but why not relax the situation internally to make it an inline function.
Diffstat (limited to 'include')
-rw-r--r--include/ruby/internal/core/rarray.h25
1 files changed, 10 insertions, 15 deletions
diff --git a/include/ruby/internal/core/rarray.h b/include/ruby/internal/core/rarray.h
index a21500e1d2..938e2dc897 100644
--- a/include/ruby/internal/core/rarray.h
+++ b/include/ruby/internal/core/rarray.h
@@ -256,20 +256,15 @@ RARRAY_ASET(VALUE ary, long i, VALUE v)
RB_OBJ_WRITE(ary, &ptr[i], v));
}
-/* RARRAY_AREF is used as a lvalue. Cannot be a function. */
-#if 0
-RBIMPL_ATTR_PURE_UNLESS_DEBUG()
-RBIMPL_ATTR_ARTIFICIAL()
-static inline VALUE
-RARRAY_AREF(VALUE ary, long i)
-{
- RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY);
-
- return RARRAY_CONST_PTR_TRANSIENT(ary)[i];
-}
-#else
-# undef RARRAY_AREF
-# define RARRAY_AREF(a, i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
-#endif
+/*
+ * :FIXME: we want to convert RARRAY_AREF into an inline function (to add rooms
+ * for more sanity checks). However there were situations where the address of
+ * this macro is taken i.e. &RARRAY_AREF(...). They cannot be possible if this
+ * is not a macro. Such usages are abuse, and we eliminated them internally.
+ * However we are afraid of similar things to remain in the wild. This macro
+ * remains as it is due to that. If we could warn such usages we can set a
+ * transition path, but currently no way is found to do so.
+ */
+#define RARRAY_AREF(a, i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
#endif /* RBIMPL_RARRAY_H */