[前][次][番号順一覧][スレッド一覧]

ruby-changes:69700

From: =E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3 <ko1@a...>
Date: Thu, 11 Nov 2021 17:15:02 +0900 (JST)
Subject: [ruby-changes:69700] 33533fabd5 (master): revival of must_not_null()

https://git.ruby-lang.org/ruby.git/commit/?id=33533fabd5

From 33533fabd54e23bced64a74114ee7786478a6ee7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?=
 <shyouhei@r...>
Date: Tue, 2 Nov 2021 10:38:14 +0900
Subject: revival of must_not_null()

Presence of RBIMPL_ATTR_NONNULL let C compilers to eliminate
must_not_null().  Because null pointers are not allowed to exist there
are no reason to call the function.  In reality null pointers are still
passed to those functions in a number of ways.  Runtime check for them
are definitely nice to have.  fix [Feature#18280]
---
 include/ruby/internal/intern/string.h | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/include/ruby/internal/intern/string.h b/include/ruby/internal/intern/string.h
index 0e2e6d6af73..2ee8496256a 100644
--- a/include/ruby/internal/intern/string.h
+++ b/include/ruby/internal/intern/string.h
@@ -62,13 +62,13 @@ RBIMPL_SYMBOL_EXPORT_BEGIN() https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L62
  */
 VALUE rb_str_new(const char *ptr, long len);
 
-RBIMPL_ATTR_NONNULL(())
 /**
  * Identical to rb_str_new(), except it assumes the passed pointer is a pointer
  * to a C string.
  *
  * @param[in]  ptr             A C string.
  * @exception  rb_eNoMemError  Failed to allocate memory.
+ * @exception  rb_eArgError    `ptr` is a null pointer.
  * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
  *             contents are verbatim copy of `ptr`.
  * @pre        `ptr` must not be a null pointer.
@@ -122,7 +122,6 @@ VALUE rb_str_new_frozen(VALUE str); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L122
  */
 VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
 
-RBIMPL_ATTR_NONNULL(())
 /**
  * @deprecated  This function  once was a thing  in the old days,  but makes no
  *              sense   any   longer   today.   Exists   here   for   backwards
@@ -130,6 +129,7 @@ RBIMPL_ATTR_NONNULL(()) https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L129
  *
  * @param[in]  ptr             A C string.
  * @exception  rb_eNoMemError  Failed to allocate memory.
+ * @exception  rb_eArgError    `ptr` is a null pointer.
  * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
  *             contents are verbatim copy of `ptr`.
  * @pre        `ptr` must not be a null pointer.
@@ -333,7 +333,6 @@ VALUE rb_str_tmp_new(long len); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L333
  */
 VALUE rb_usascii_str_new(const char *ptr, long len);
 
-RBIMPL_ATTR_NONNULL(())
 /**
  * Identical to rb_str_new_cstr(),  except it generates a string  of "US ASCII"
  * encoding.   It   can   also   be    seen   as   a   routine   Identical   to
@@ -342,6 +341,7 @@ RBIMPL_ATTR_NONNULL(()) https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L341
  *
  * @param[in]  ptr             A C string.
  * @exception  rb_eNoMemError  Failed to allocate memory.
+ * @exception  rb_eArgError    `ptr` is a null pointer.
  * @return     An  instance  of ::rb_cString,  of  "US  ASCII" encoding,  whose
  *             contents are verbatim copy of `ptr`.
  * @pre        `ptr` must not be a null pointer.
@@ -361,7 +361,6 @@ VALUE rb_usascii_str_new_cstr(const char *ptr); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L361
  */
 VALUE rb_utf8_str_new(const char *ptr, long len);
 
-RBIMPL_ATTR_NONNULL(())
 /**
  * Identical  to rb_str_new_cstr(),  except it  generates a  string of  "UTF-8"
  * encoding.    It   can   also   be   seen   as   a   routine   Identical   to
@@ -370,6 +369,7 @@ RBIMPL_ATTR_NONNULL(()) https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L369
  *
  * @param[in]  ptr             A C string.
  * @exception  rb_eNoMemError  Failed to allocate memory.
+ * @exception  rb_eArgError    `ptr` is a null pointer.
  * @return     An instance of ::rb_cString, of "UTF-8" encoding, whose contents
  *             are verbatim copy of `ptr`.
  * @pre        `ptr` must not be a null pointer.
@@ -553,7 +553,6 @@ VALUE rb_str_buf_append(VALUE dst, VALUE src); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L553
 /** @alias{rb_str_cat} */
 VALUE rb_str_buf_cat(VALUE, const char*, long);
 
-RBIMPL_ATTR_NONNULL(())
 /** @alias{rb_str_cat_cstr} */
 VALUE rb_str_buf_cat2(VALUE, const char*);
 
@@ -874,7 +873,6 @@ VALUE rb_str_resize(VALUE str, long len); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L873
  */
 VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
 
-RBIMPL_ATTR_NONNULL(())
 /**
  * Identical to rb_str_cat(), except it assumes the passed pointer is a pointer
  * to a C string.
@@ -882,6 +880,7 @@ RBIMPL_ATTR_NONNULL(()) https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L880
  * @param[out]  dst           Destination object.
  * @param[in]   src           Contents to append.
  * @exception   rb_eArgError  Result string too big.
+ * @exception   rb_eArgError  `src` is a null pointer.
  * @return      The passed `dst`.
  * @pre         `dst` must not be any arbitrary objects except ::RString.
  * @pre         `src` must not be a null pointer.
@@ -889,7 +888,6 @@ RBIMPL_ATTR_NONNULL(()) https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L888
  */
 VALUE rb_str_cat_cstr(VALUE dst, const char *src);
 
-RBIMPL_ATTR_NONNULL(())
 /** @alias{rb_str_cat_cstr} */
 VALUE rb_str_cat2(VALUE, const char*);
 
@@ -1153,7 +1151,6 @@ VALUE rb_str_inspect(VALUE str); https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L1151
  */
 VALUE rb_str_dump(VALUE str);
 
-RBIMPL_ATTR_NONNULL(())
 /**
  * Divides  the  given string  based  on  the  given  delimiter.  This  is  the
  * 1-argument 0-block version of `String#split`.
@@ -1161,6 +1158,7 @@ RBIMPL_ATTR_NONNULL(()) https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/string.h#L1158
  * @param[in]  str            Object in question to split.
  * @param[in]  delim          Delimiter, in C string.
  * @exception  rb_eTypeError  `str` has no implicit conversion to String.
+ * @exception  rb_eArgError   `delim` is a null pointer.
  * @return     An array of  strings, which are substrings of  the passed `str`.
  *             If `delim` is an empty C string (i.e. `""`), `str` is split into
  *             each characters.  If `delim` is a C string whose sole content is
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]