mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	include/ruby/internal/intern/load.h: add doxygen
Must not be a bad idea to improve documents. [ci skip]
This commit is contained in:
		
							parent
							
								
									72a43d4a4b
								
							
						
					
					
						commit
						63aef9b177
					
				
				
				Notes:
				
					git
				
				2021-09-10 20:01:31 +09:00 
				
			
			
			
		
		
					 1 changed files with 182 additions and 8 deletions
				
			
		|  | @ -20,25 +20,199 @@ | |||
|  *             extension libraries.  They could be written in C++98. | ||||
|  * @brief      Public APIs related to ::rb_f_require(). | ||||
|  */ | ||||
| #include "ruby/internal/attr/nonnull.h" | ||||
| #include "ruby/internal/dllexport.h" | ||||
| #include "ruby/internal/value.h" | ||||
| 
 | ||||
| RBIMPL_SYMBOL_EXPORT_BEGIN() | ||||
| 
 | ||||
| /* load.c */ | ||||
| void rb_load(VALUE, int); | ||||
| void rb_load_protect(VALUE, int, int*); | ||||
| int rb_provided(const char*); | ||||
| int rb_feature_provided(const char *, const char **); | ||||
| void rb_provide(const char*); | ||||
| VALUE rb_f_require(VALUE, VALUE); | ||||
| VALUE rb_require_string(VALUE); | ||||
| 
 | ||||
| // extension configuration
 | ||||
| /**
 | ||||
|  * Loads and executes the Ruby program in the given file. | ||||
|  * | ||||
|  * If the path is  an absolute path (e.g. starts with `'/'`),  the file will be | ||||
|  * loaded  directly using  the  absolute  path.  If  the  path  is an  explicit | ||||
|  * relative path (e.g. starts with `'./'`  or `'../'`), the file will be loaded | ||||
|  * using the  relative path  from the current  directory.  Otherwise,  the file | ||||
|  * will be searched for in the  library directories listed in the `$LOAD_PATH`. | ||||
|  * If the file is found in a  directory, this function will attempt to load the | ||||
|  * file relative  to that directory.  If  the file is  not found in any  of the | ||||
|  * directories in the `$LOAD_PATH`, the file  will be loaded using the relative | ||||
|  * path from the current directory. | ||||
|  * | ||||
|  * If the file doesn't  exist when there is an attempt to  load it, a LoadError | ||||
|  * will be raised. | ||||
|  * | ||||
|  * If the `wrap` parameter is true, the loaded script will be executed under an | ||||
|  * anonymous module, protecting the calling  program's global namespace.  In no | ||||
|  * circumstance will  any local variables in  the loaded file be  propagated to | ||||
|  * the loading environment. | ||||
|  * | ||||
|  * @param[in]  path                Pathname of a file to load. | ||||
|  * @param[in]  wrap                Either to load under an anonymous module. | ||||
|  * @exception  rb_eTypeError       `path` is not a string. | ||||
|  * @exception  rb_eArgError        `path` is broken as a pathname. | ||||
|  * @exception  rb_eEncCompatError  `path` is incompatible with pathnames. | ||||
|  * @exception  rb_eLoadError       `path` not found. | ||||
|  * @exception  rb_eException       Any exceptions while loading the contents. | ||||
|  * | ||||
|  * @internal | ||||
|  * | ||||
|  * It seems this function is under the rule of bootsnap's regime? | ||||
|  */ | ||||
| void rb_load(VALUE path, int wrap); | ||||
| 
 | ||||
| /**
 | ||||
|  * Identical to  rb_load(), except  it avoids  potential global  escapes.  Such | ||||
|  * global escapes include exceptions, `throw`, `break`, for example. | ||||
|  * | ||||
|  * It first  evaluates the given file  as rb_load() does.  If  no global escape | ||||
|  * occurred  during the  evaluation,  it `*state`  is set  to  zero on  return. | ||||
|  * Otherwise, it sets `*state`  to nonzero.  If state is `NULL`,  it is not set | ||||
|  * in both cases. | ||||
|  * | ||||
|  * @param[in]   path   Pathname of a file to load. | ||||
|  * @param[in]   wrap   Either to load under an anonymous module. | ||||
|  * @param[out]  state  State of execution. | ||||
|  * @post        `*state` is set to zero if succeeded.  Nonzero otherwise. | ||||
|  * @warning     You have to clear the error info with `rb_set_errinfo(Qnil)` if | ||||
|  *              you decide to ignore the caught exception. | ||||
|  * @see         rb_load | ||||
|  * @see         rb_protect | ||||
|  * | ||||
|  * @internal | ||||
|  * | ||||
|  * Though   not  a   part  of   our  public   API,  `state`   is  in   fact  an | ||||
|  * enum ruby_tag_type.  You can  see the potential "nonzero"  values by looking | ||||
|  * at vm_core.h. | ||||
|  */ | ||||
| void rb_load_protect(VALUE path, int wrap, int *state); | ||||
| 
 | ||||
| RBIMPL_ATTR_NONNULL(()) | ||||
| /**
 | ||||
|  * Queries if  the given  feature has  already been  loaded into  the execution | ||||
|  * context.  The "feature" head are things like `"json"` or `"socket"`. | ||||
|  * | ||||
|  * @param[in]  feature  Name of a library you want to know about. | ||||
|  * @retval     1        Yes there is. | ||||
|  * @retval     0        Not yet. | ||||
|  */ | ||||
| int rb_provided(const char *feature); | ||||
| 
 | ||||
| RBIMPL_ATTR_NONNULL((1)) | ||||
| /**
 | ||||
|  * Identical to  rb_provided(), except it additionally  returns the "canonical" | ||||
|  * name of the loaded feature.  This can be handy when for instance you want to | ||||
|  * know the actually loaded library is either `foo.rb` or `foo.so`. | ||||
|  * | ||||
|  * @param[in]   feature  Name of a library you want to know about. | ||||
|  * @param[out]  loading  Return buffer. | ||||
|  * @retval      1        Yes there is. | ||||
|  * @retval      0        Not yet. | ||||
|  */ | ||||
| int rb_feature_provided(const char *feature, const char **loading); | ||||
| 
 | ||||
| RBIMPL_ATTR_NONNULL(()) | ||||
| /**
 | ||||
|  * Declares that the  given feature is already provided by  someone else.  This | ||||
|  * API can  be handy  when you  have an extension  called `foo.so`  which, when | ||||
|  * required, also provides functionality of `bar.so`. | ||||
|  * | ||||
|  * @param[in]  feature  Name of a library which had already been provided. | ||||
|  * @post       No further `require` would search `feature`. | ||||
|  */ | ||||
| void rb_provide(const char *feature); | ||||
| 
 | ||||
| /**
 | ||||
|  * Identical to rb_require_string(),  except it ignores the  first argument for | ||||
|  * no reason.  There seems to be no reason for 3rd party extension libraries to | ||||
|  * use it. | ||||
|  * | ||||
|  * @param[in]  self              Ignored.  Can be anything. | ||||
|  * @param[in]  feature           Name of a feature, e.g. `"json"`. | ||||
|  * @exception  rb_eLoadError     No such feature. | ||||
|  * @exception  rb_eRuntimeError  `$"` is frozen; unable to push. | ||||
|  * @retval     RUBY_Qtrue        The feature is loaded for the first time. | ||||
|  * @retval     RUBY_Qfalse       The feature has already been loaded. | ||||
|  * @post       `$"` is updated. | ||||
|  */ | ||||
| VALUE rb_f_require(VALUE self, VALUE feature); | ||||
| 
 | ||||
| /**
 | ||||
|  * Finds and loads the given feature, if absent. | ||||
|  * | ||||
|  * If the  feature is an  absolute path (e.g.  starts with `'/'`),  the feature | ||||
|  * will  be loaded  directly using  the absolute  path.  If  the feature  is an | ||||
|  * explicit relative  path (e.g.  starts with `'./'`  or `'../'`),  the feature | ||||
|  * will  be  loaded  using  the  relative  path  from  the  current  directory. | ||||
|  * Otherwise,  the feature  will be  searched  for in  the library  directories | ||||
|  * listed in the `$LOAD_PATH`. | ||||
|  * | ||||
|  * If the feature has the extension `".rb"`,  it is loaded as a source file; if | ||||
|  * the extension is `".so"`, `".o"`, or `".dll"`, or the default shared library | ||||
|  * extension on the  current platform, Ruby loads the shared  library as a Ruby | ||||
|  * extension.  Otherwise, Ruby tries adding `".rb"`,  `".so"`, and so on to the | ||||
|  * name until found.   If the file named  cannot be found, a  LoadError will be | ||||
|  * raised. | ||||
|  * | ||||
|  * For  extension  libraries the  given  feature  may  use any  shared  library | ||||
|  * extension.  For example, on Linux you can require `"socket.dll"` to actually | ||||
|  * load `socket.so`. | ||||
|  * | ||||
|  * The absolute path of the loaded file is added to `$LOADED_FEATURES`.  A file | ||||
|  * will not be loaded again if its path already appears in there. | ||||
|  * | ||||
|  * Any constants or globals within the  loaded source file will be available in | ||||
|  * the calling program's  global namespace.  However, local  variables will not | ||||
|  * be propagated to the loading environment. | ||||
|  * | ||||
|  * @param[in]  feature           Name of a feature, e.g. `"json"`. | ||||
|  * @exception  rb_eLoadError     No such feature. | ||||
|  * @exception  rb_eRuntimeError  `$"` is frozen; unable to push. | ||||
|  * @retval     RUBY_Qtrue        The feature is loaded for the first time. | ||||
|  * @retval     RUBY_Qfalse       The feature has already been loaded. | ||||
|  * @post       `$"` is updated. | ||||
|  */ | ||||
| VALUE rb_require_string(VALUE feature); | ||||
| 
 | ||||
| /**
 | ||||
|  * @name extension configuration | ||||
|  * @{ | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * Asserts that  the extension  library that  calls this  function is  aware of | ||||
|  * Ractor.  Multiple Ractors  run without protecting each  other.  This doesn't | ||||
|  * interface  well   with  C  programs,   unless  designed  with   an  in-depth | ||||
|  * understanding of  how Ractors work.   Extension libraries are shut  out from | ||||
|  * Ractors by default.  This API is  to bypass that restriction.  Once after it | ||||
|  * was called,  successive calls to rb_define_method()  etc. become definitions | ||||
|  * of methods  that are  aware of  Ractors.  The amendment  would be  in effect | ||||
|  * until the end of rb_require_string() etc. | ||||
|  * | ||||
|  * @param[in]  flag  Either the library is aware of Ractors or not. | ||||
|  * @post       Methods would be callable form Ractors, if `flag` is true. | ||||
|  */ | ||||
| void rb_ext_ractor_safe(bool flag); | ||||
| 
 | ||||
| /** @alias{rb_ext_ractor_safe} */ | ||||
| #define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f) | ||||
| 
 | ||||
| /**
 | ||||
|  * This macro  is to provide  backwards compatibility.  It  must be safe  to do | ||||
|  * something like: | ||||
|  * | ||||
|  * ```CXX | ||||
|  * #ifdef HAVE_RB_EXT_RACTOR_SAFE | ||||
|  * rb_ext_ractor_safe(true); | ||||
|  * #endif | ||||
|  * ``` | ||||
|  */ | ||||
| #define HAVE_RB_EXT_RACTOR_SAFE 1 | ||||
| 
 | ||||
| /** @} */ | ||||
| 
 | ||||
| RBIMPL_SYMBOL_EXPORT_END() | ||||
| 
 | ||||
| #endif /* RBIMPL_INTERN_LOAD_H */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 卜部昌平
						卜部昌平