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

ruby-changes:67783

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

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

From cbf9fc6b0210488713750ca7b53de2b83d667e05 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: Fri, 5 Feb 2021 16:36:18 +0900
Subject: include/ruby/internal/intern/variable.h: add doxygen

Must not be a bad idea to improve documents. [ci skip]
---
 include/ruby/internal/intern/variable.h | 628 +++++++++++++++++++++++++++++---
 1 file changed, 586 insertions(+), 42 deletions(-)

diff --git a/include/ruby/internal/intern/variable.h b/include/ruby/internal/intern/variable.h
index fbc17f7..479c395 100644
--- a/include/ruby/internal/intern/variable.h
+++ b/include/ruby/internal/intern/variable.h
@@ -20,6 +20,7 @@ https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/variable.h#L20
  *             extension libraries.  They could be written in C++98.
  * @brief      Public APIs related to names inside of a Ruby program.
  */
+#include "ruby/internal/attr/nonnull.h"
 #include "ruby/internal/attr/noreturn.h"
 #include "ruby/internal/dllexport.h"
 #include "ruby/internal/value.h"
@@ -28,56 +29,599 @@ https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/variable.h#L29
 RBIMPL_SYMBOL_EXPORT_BEGIN()
 
 /* variable.c */
-VALUE rb_mod_name(VALUE);
-VALUE rb_class_path(VALUE);
-VALUE rb_class_path_cached(VALUE);
-void rb_set_class_path(VALUE, VALUE, const char*);
-void rb_set_class_path_string(VALUE, VALUE, VALUE);
-VALUE rb_path_to_class(VALUE);
-VALUE rb_path2class(const char*);
-VALUE rb_class_name(VALUE);
-VALUE rb_autoload_load(VALUE, ID);
-VALUE rb_autoload_p(VALUE, ID);
-VALUE rb_f_trace_var(int, const VALUE*);
-VALUE rb_f_untrace_var(int, const VALUE*);
+
+/**
+ * Queries the name of a module.
+ *
+ * @param[in]  mod        An instance of ::rb_cModule.
+ * @retval     RUBY_Qnil  `mod` is anonymous.
+ * @retval     otherwise  `mod` is onymous.
+ */
+VALUE rb_mod_name(VALUE mod);
+
+/**
+ * Identical  to  rb_mod_name(),  except   it  returns  `#<Class:  ...>`  style
+ * inspection for anonymous modules.
+ *
+ * @param[in]  mod        An instance of ::rb_cModule.
+ * @return     An instance of ::rb_cString representing `mod`'s path.
+ */
+VALUE rb_class_path(VALUE mod);
+
+/**
+ * @alias{rb_mod_name}
+ *
+ * @internal
+ *
+ * Am I missing something?  Why we have the same thing in different names?
+ */
+VALUE rb_class_path_cached(VALUE mod);
+
+RBIMPL_ATTR_NONNULL(())
+/**
+ * Names a class.
+ *
+ * @param[out]  klass  Target module to name.
+ * @param[out]  space  Namespace that `klass` shall reside.
+ * @param[in]   name   Name of `klass`.
+ * @post        `klass` has `space::klass` name.
+ */
+void rb_set_class_path(VALUE klass, VALUE space, const char *name);
+
+/**
+ * Identical  to rb_set_class_path(),  except  it accepts  the  name as  Ruby's
+ * string instead of C's.
+ *
+ * @param[out]  klass  Target module to name.
+ * @param[out]  space  Namespace that `klass` shall reside.
+ * @param[in]   name   Name of `klass`.
+ * @post        `klass` has `space::klass` name.
+ */
+void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
+
+/**
+ * Identical to  rb_path2class(), except it  accepts the path as  Ruby's string
+ * instead of C's.
+ *
+ * @param[in]  path           Path to query.
+ * @exception  rb_eArgError   No such constant.
+ * @exception  rb_eTypeError  The path resolved to a non-module.
+ * @return     Resolved class.
+ */
+VALUE rb_path_to_class(VALUE path);
+
+RBIMPL_ATTR_NONNULL(())
+/**
+ * Resolves a `Q::W::E::R`-style path string to the actual class it points.
+ *
+ * @param[in]  path           Path to query.
+ * @exception  rb_eArgError   No such constant.
+ * @exception  rb_eTypeError  The path resolved to a non-module.
+ * @return     Resolved class.
+ */
+VALUE rb_path2class(const char *path);
+
+/**
+ * Queries the name of the given object's class.
+ *
+ * @param[in]  obj  Arbitrary object.
+ * @return     An instance of ::rb_cString representing `obj`'s class' path.
+ */
+VALUE rb_class_name(VALUE obj);
+
+/**
+ * Kicks the autoload procedure as if it was "touched".
+ *
+ * @param[out]  space        Namespace where autoload is defined.
+ * @param[in]   name         Name of the autoloaded constant.
+ * @retval      RUBY_Qfalse  No such autoload.
+ * @retval      RUBY_Qtrue   Autoload successfully initiated.
+ * @note        As an  autoloaded library is expected  to define `space::name`,
+ *              it is  a nature  of this function  to have  process-global side
+ *              effects.
+ * @note        Multiple threads  can simultaneously call this  API.  It blocks
+ *              then.  That must not last indefinitely but can take longer than
+ *              you expect.
+ *
+ * @internal
+ *
+ * @shyouhei has no idea why extension libraries should use this API.
+ */
+VALUE rb_autoload_load(VALUE space, ID name);
+
+/**
+ * Queries if an autoload is defined at a point.
+ *
+ * @param[in]  space      Namespace where autoload is defined.
+ * @param[in]  name       Name of the autoloaded constant.
+ * @retval     RUBY_Qnil  No such autoload.
+ * @retval     otherwise  The feature (path) registered at `space::name`.
+ */
+VALUE rb_autoload_p(VALUE space, ID name);
+
+/**
+ * Traces a global variable.
+ *
+ * @param[in]  argc        Either 1 or 2.
+ * @param[in]  argv        Variable name, optionally a Proc.
+ * @retval     RUBY_Qnil   No previous tracers.
+ * @retval     otherwise   Previous tracers.
+ *
+ * @internal
+ *
+ * @shyouhei has no idea why extension libraries should use this API.
+ */
+VALUE rb_f_trace_var(int argc, const VALUE *argv);
+
+/**
+ * Deletes the  passed tracer from the  passed global variable, or  if omitted,
+ * deletes everything.
+ *
+ * @param[in]  argc        Either 1 or 2.
+ * @param[in]  argv        Variable name, optionally a Proc.
+ * @retval     RUBY_Qnil   No previous tracers.
+ * @retval     otherwise   Deleted tracers.
+ *
+ * @internal
+ *
+ * @shyouhei has no idea why extension libraries should use this API.
+ */
+VALUE rb_f_untrace_var(int argc, const VALUE *argv);
+
+/**
+ * Queries the list of global variables.
+ *
+ * @return  The list of the name of the global variables.
+ *
+ * @internal
+ *
+ * Above description is in fact inaccurate.  This API interfaces with Ractors.
+ */
 VALUE rb_f_global_variables(void);
-void rb_alias_variable(ID, ID);
-void rb_copy_generic_ivar(VALUE,VALUE);
-void rb_free_generic_ivar(VALUE);
-VALUE rb_ivar_get(VALUE, ID);
-VALUE rb_ivar_set(VALUE, ID, VALUE);
-VALUE rb_ivar_defined(VALUE, ID);
-void rb_ivar_foreach(VALUE, int (*)(ID, VALUE, st_data_t), st_data_t);
-st_index_t rb_ivar_count(VALUE);
-VALUE rb_attr_get(VALUE, ID);
-VALUE rb_obj_instance_variables(VALUE);
-VALUE rb_obj_remove_instance_variable(VALUE, VALUE);
+
+/**
+ * Aliases  a global  variable.   Did you  know  that you  can  alias a  global
+ * variable?  It is like aliasing methods:
+ *
+ * ```ruby
+ * alias $dst $src
+ * ```
+ *
+ * This C function does the same thing.
+ *
+ * @param[in]  dst  Destination name.
+ * @param[in]  src  Source name.
+ * @post       A global  variable named `dst`  is defined to  be an alias  of a
+ *             global variable named `src`.
+ *
+ * @internal
+ *
+ * Above description is in fact inaccurate.  This API interfaces with Ractors.
+ */
+void rb_alias_variable(ID dst, ID src);
+
+/**
+ * Frees the list of instance variables.   3rd parties need not know, but there
+ * are several ways  to store an object's instance variables,  depending on its
+ * internal structure.   This function makes  sense when the passed  objects is
+ * using so-called "generic" backend storage.  People need not be aware of this
+ * working behind-the-scenes.
+ *
+ * @param[out]  obj  The object in question.
+ *
+ * @internal
+ *
+ * This just  destroys the given object.   @shyouhei has no idea  why extension
+ * libraries should use this API.
+ */
+void rb_free_generic_ivar(VALUE obj);
+
+/**
+ * Identical to rb_iv_get(), except it accepts the name as an ::ID instead of a
+ * C string.
+ *
+ * @param[in]  obj        Target object.
+ * @param[in]  name       Target instance variable to query.
+ * @retval     RUBY_nil   No such instance variable.
+ * @retval     otherwise  The value assigned to the instance variable.
+ */
+VALUE rb_ivar_get(VALUE obj, ID name);
+
+/**
+ * Identical to rb_iv_set(), except it accepts the name as an ::ID instead of a
+ * C string.
+ *
+ * @param[out]  obj              Target object.
+ * @param[in]   name             Target instance variable.
+ * @param[in]   val              Value to assign.
+ * @exception   rb_eFrozenError  Can't modify `obj`.
+ * @exception   rb_eArgError     `obj` has too many instance variables.
+ * @return      Passed value.
+ * @post        An  instance variable  named  `name` is  defined  if absent  on
+ *              `obj`, whose value is set to `val`.
+ */
+VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
+
+/**
+ * Queries if  the instance variable  is defined  at the object.   This roughly
+ * resembles `defined?(@name)` in `obj`'s context.
+ *
+ * @param[in]  obj          Target object.
+ * @param[in]  name         Target instance variable to query.
+ * @retval     RUBY_Qtrue   There is an instance variable.
+ * @retval     RUBY_Qfalse  No such instance variable.
+ */
+VALUE rb_ivar_defined(VALUE obj, ID name);
+
+/**
+ * Iterates over an object's instance variables.
+ *
+ * @param[in]  obj   Target object.
+ * @param[in]  func  Callback function.
+ * @param[in]  arg   Passed as-is to the last argument of `func`.
+ */
+void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
+
+/**
+ * Number of instance variables defined on an object.
+ *
+ * @param[in]  obj   Target object.
+ * @return     Number of instance variables defined on `obj`.
+ */
+st_index_t rb_ivar_count(VALUE obj);
+
+/**
+ * Identical to rb_ivar_get()
+ *
+ * @param[in]  obj        Target object.
+ * @param[in]  name       Target instance variable to query.
+ * @retval    (... truncated)

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

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