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

ruby-changes:67774

From: =E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3 <ko1@a...>
Date: Fri, 10 Sep 2021 20:01:51 +0900 (JST)
Subject: [ruby-changes:67774] d43accae15 (master): include/ruby/internal/intern/object.h: add doxygen

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

From d43accae15cdfc245052f6b08c5880913a35ae9e 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: Thu, 11 Mar 2021 16:34:49 +0900
Subject: include/ruby/internal/intern/object.h: add doxygen

Must not be a bad idea to improve documents. [ci skip]
---
 include/ruby/internal/attr/deprecated.h |   8 +
 include/ruby/internal/intern/object.h   | 563 +++++++++++++++++++++++++++++---
 object.c                                | 228 +------------
 3 files changed, 541 insertions(+), 258 deletions(-)

diff --git a/include/ruby/internal/attr/deprecated.h b/include/ruby/internal/attr/deprecated.h
index 6c27e36..e1bbdbd 100644
--- a/include/ruby/internal/attr/deprecated.h
+++ b/include/ruby/internal/attr/deprecated.h
@@ -64,4 +64,12 @@ https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/attr/deprecated.h#L64
 # define RBIMPL_ATTR_DEPRECATED(msg) /* void */
 #endif
 
+/** This is when a function is used internally (for backwards compatibility
+ * etc.), but extension libraries must consider it deprecated. */
+#if defined(RUBY_EXPORT)
+# define RBIMPL_ATTR_DEPRECATED_EXT(msg) /* void */
+#else
+# define RBIMPL_ATTR_DEPRECATED_EXT(msg) RBIMPL_ATTR_DEPRECATED(msg)
+#endif
+
 #endif /* RBIMPL_ATTR_DEPRECATED_H */
diff --git a/include/ruby/internal/intern/object.h b/include/ruby/internal/intern/object.h
index 9736172..6bb4ccb 100644
--- a/include/ruby/internal/intern/object.h
+++ b/include/ruby/internal/intern/object.h
@@ -20,70 +20,549 @@ https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/object.h#L20
  *             extension libraries.  They could be written in C++98.
  * @brief      Public APIs related to ::rb_cObject.
  */
+#include "ruby/internal/attr/const.h"
+#include "ruby/internal/attr/deprecated.h"
+#include "ruby/internal/attr/nonnull.h"
 #include "ruby/internal/attr/pure.h"
 #include "ruby/internal/dllexport.h"
 #include "ruby/internal/value.h"
 
 RBIMPL_SYMBOL_EXPORT_BEGIN()
 
+/**
+ * This macro is (used but) mysterious.  Why on earth do we need this?
+ *
+ * - `obj != orig` check is done anyways inside of rb_obj_init_copy().
+ * - rb_obj_init_copy() returns something.  No need are there to add `, 1`.
+ */
 #define RB_OBJ_INIT_COPY(obj, orig) \
     ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
+/** @old{RB_OBJ_INIT_COPY} */
 #define OBJ_INIT_COPY(obj, orig) RB_OBJ_INIT_COPY(obj, orig)
 
-VALUE rb_class_new_instance_pass_kw(int, const VALUE *, VALUE);
-VALUE rb_class_new_instance(int, const VALUE*, VALUE);
-VALUE rb_class_new_instance_kw(int, const VALUE*, VALUE, int);
-
 /* object.c */
-int rb_eql(VALUE, VALUE);
-VALUE rb_any_to_s(VALUE);
-VALUE rb_inspect(VALUE);
-VALUE rb_obj_is_instance_of(VALUE, VALUE);
-VALUE rb_obj_is_kind_of(VALUE, VALUE);
-VALUE rb_obj_alloc(VALUE);
-VALUE rb_obj_clone(VALUE);
-VALUE rb_obj_dup(VALUE);
-VALUE rb_obj_init_copy(VALUE,VALUE);
-VALUE rb_obj_taint(VALUE);
+
+/**
+ * Identical to  rb_class_new_instance(), except it passes  the passed keywords
+ * if any to the `#initialize` method.
+ *
+ * @param[in]  argc           Number of objects of `argv`.
+ * @param[in]  argv           Arbitrary number of method arguments.
+ * @param[in]  klass          An instance of ::rb_cClass.
+ * @exception  rb_eTypeError  `klass`'s allocator is undefined.
+ * @exception  rb_eException  Any exceptions can happen inside.
+ * @return     An allocated new instance of `klass`.
+ * @note       This is _the_ implementation of `Object.new`.
+ */
+VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
+
+/**
+ * Allocates, then initialises an instance of  the given class.  It first calls
+ * the passed  class' allocator to  obtain an uninitialised object,  then calls
+ * its initialiser with the remaining arguments.
+ *
+ * @param[in]  argc           Number of objects of `argv`.
+ * @param[in]  argv           Arguments passed to `#initialize`.
+ * @param[in]  klass          An instance of ::rb_cClass.
+ * @exception  rb_eTypeError  `klass`'s allocator is undefined.
+ * @exception  rb_eException  Any exceptions can happen inside.
+ * @return     An allocated new instance of `klass`.
+ */
+VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
+
+/**
+ * Identical to rb_class_new_instance(),  except you can specify  how to handle
+ * the last element of the given array.
+ *
+ * @param[in]  argc             Number of objects of `argv`.
+ * @param[in]  argv             Arbitrary number of method arguments.
+ * @param[in]  klass            An instance of ::rb_cClass.
+ * @param[in]  kw_splat         Handling of keyword parameters:
+ *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
+ *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
+ *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
+ * @exception  rb_eTypeError    `klass`'s allocator is undefined.
+ * @exception  rb_eException    Any exceptions can happen inside.
+ * @return     An allocated new instance of `klass`.
+ */
+VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
+
+/**
+ * Checks for equality of the passed objects, in terms of `Object#eql?`.
+ *
+ * @param[in]  lhs          Comparison left hand side.
+ * @param[in]  rhs          Comparison right hand side.
+ * @retval     RUBY_Qtrue   They are equal.
+ * @retval     RUBY_Qfalse  Otherwise.
+ * @note       This  function  actually  calls `lhs.eql?(rhs)`  so  you  cannot
+ *             implement your class' `#eql?` method using it.
+ */
+int rb_eql(VALUE lhs, VALUE rhs);
+
+/**
+ * Generates a textual representation of the given object.
+ *
+ * @param[in]  obj  Arbitrary ruby object.
+ * @return     An instance of ::rb_cString that represents `obj`.
+ * @note       This is  the default  implementation of `Object#to_s`  that each
+ *             subclasses want to override.
+ */
+VALUE rb_any_to_s(VALUE obj);
+
+/**
+ * Generates a human-readable textual representation of the given object.  This
+ * is  largely similar  to Ruby  level `Object#inspect`  but not  the same;  it
+ * additionally escapes the inspection result  so that the string be compatible
+ * with that of default internal (or default external, if absent).
+ *
+ * @param[in]  obj  Arbitrary ruby object.
+ * @return     An instance of ::rb_cString that represents `obj`.
+ */
+VALUE rb_inspect(VALUE obj);
+
+/**
+ * Queries if the given object is a direct instance of the given class.
+ *
+ * @param[in]  obj            Arbitrary ruby object.
+ * @param[in]  klass          An instance of ::rb_cModule.
+ * @exception  rb_eTypeError  `klass` is neither module nor class.
+ * @retval     RUBY_Qtrue     `obj` is an instance of `klass`.
+ * @retval     RUBY_Qfalse    Otherwise.
+ */
+VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
+
+/**
+ * Queries if the given object is  an instance (of possibly descendants) of the
+ * given class.
+ *
+ * @param[in]  obj            Arbitrary ruby object.
+ * @param[in]  klass          An instance of ::rb_cModule.
+ * @exception  rb_eTypeError  `klass` is neither module nor class.
+ * @retval     RUBY_Qtrue     `obj` is a `klass`.
+ * @retval     RUBY_Qfalse    Otherwise.
+ */
+VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
+
+/**
+ * Allocates an instance of the given class.
+ *
+ * @param[in]  klass          A class to instantiate.
+ * @exception  rb_eTypeError  `klass` is not a class.
+ * @return     An allocated, not yet initialised instance of `klass`.
+ * @note       It calls  the allocator defined by  rb_define_alloc_func().  You
+ *             cannot  use   this  function   to  define  an   allocator.   Use
+ *             rb_newobj_of(), #TypedData_Make_Struct or others, instead.
+ * @note       Usually  prefer  rb_class_new_instance() to  rb_obj_alloc()  and
+ *             rb_obj_call_init().
+ * @see        rb_class_new_instance()
+ * @see        rb_obj_call_init()
+ * @see        rb_define_alloc_func()
+ * @see        rb_newobj_of()
+ * @see        #TypedData_Make_Struct
+ */
+VALUE rb_obj_alloc(VALUE klass);
+
+/**
+ * Produces a shallow copy of the given object.  Its list of instance variables
+ * are copied, but  not the objects they reference.  It  also copies the frozen
+ * value state.
+ *
+ * @param[in]  obj            Arbitrary ruby object.
+ * @exception  rb_eException  `#initialize_copy` can raise anything.
+ * @return     A "clone" of `obj`.
+ *
+ * @internal
+ *
+ * Unlike ruby-level `Object#clone`, there is no way to control the frozen-ness
+ * of the return value.
+ */
+VALUE rb_obj_clone(VALUE obj);
+
+/**
+ * Duplicates  the  given   object.   This  does  almost  the   same  thing  as
+ * rb_obj_clone() do.  However  it does not copy the singleton  class (if any).
+ * It also doesn't copy frozen-ness.
+ *
+ * @param[in]  obj            Arbitrary ruby object.
+ * @exception  rb_eException  `#initialize_copy` can raise anything.
+ * @return     A shallow copy of `obj`.
+ */
+VALUE rb_obj_dup(VALUE obj);
+
+/**
+ * Default   implementation   of  `#initialize_copy`,   `#initialize_dup`   and
+ * `#initialize_clone`.  It  does almost  nothing.  Just raises  exceptions for
+ * checks.
+ *
+ * @param[in]  dst              The destination object.
+ * @param[in]  src              The source object.
+ * @exception  rb_eFrozenError  `dst` is frozen.
+ * @exception  rb_eTypeError    `dst` and `src` have different classes.
+ * @return     Always returns `dst`.
+ */
+VALUE rb_obj_init_copy(VALUE src, VALUE dst);
+
+RBIMPL_ATTR_DEPRECATED_EXT(("taintedness turned out to be a wrong idea."))
+/**
+ * @deprecated  This function  once was a thing  in the old days,  but makes no
+ *              sense   any   longer   today.   Exists   here   for   backwards
+ *              compatibility only.  You can safely forget about it.
+ *
+ * @param[in]   obj  Object in question.
+ * @return      Verbatim `obj`.
+ */
+VALUE rb_obj_taint(VALUE obj);
 
 RBIMPL_ATTR_PURE()
-V (... truncated)

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

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