Ruby
3.4.0dev (2024-11-22 revision 37a72b0150ec36b4ea27175039afc28c62207b0c)
|
#include "ruby/internal/config.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/constant_p.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/has/builtin.h"
#include "ruby/internal/value.h"
Go to the source code of this file.
Macros | |
#define | RB_ID2SYM rb_id2sym |
Just another name of rb_id2sym. More... | |
#define | RB_SYM2ID rb_sym2id |
Just another name of rb_sym2id. More... | |
#define | ID2SYM RB_ID2SYM |
Old name of RB_ID2SYM. More... | |
#define | SYM2ID RB_SYM2ID |
Old name of RB_SYM2ID. More... | |
#define | CONST_ID_CACHE RUBY_CONST_ID_CACHE |
Old name of RUBY_CONST_ID_CACHE. More... | |
#define | CONST_ID RUBY_CONST_ID |
Old name of RUBY_CONST_ID. More... | |
#define | RUBY_CONST_ID_CACHE(result, str) |
Old implementation detail of rb_intern(). More... | |
#define | RUBY_CONST_ID(var, str) |
Old implementation detail of rb_intern(). More... | |
Functions | |
ID | rb_sym2id (VALUE obj) |
Converts an instance of rb_cSymbol into an ID. More... | |
VALUE | rb_id2sym (ID id) |
Allocates an instance of rb_cSymbol that has the given id. More... | |
ID | rb_intern (const char *name) |
Finds or creates a symbol of the given name. More... | |
ID | rb_intern2 (const char *name, long len) |
Identical to rb_intern(), except it additionally takes the length of the string. More... | |
ID | rb_intern_str (VALUE str) |
Identical to rb_intern(), except it takes an instance of rb_cString. More... | |
const char * | rb_id2name (ID id) |
Retrieves the name mapped to the given id. More... | |
ID | rb_check_id (volatile VALUE *namep) |
Detects if the given name is already interned or not. More... | |
ID | rb_to_id (VALUE str) |
Identical to rb_intern(), except it takes an instance of rb_cString. More... | |
VALUE | rb_id2str (ID id) |
Identical to rb_id2name(), except it returns a Ruby's String instead of C's. More... | |
VALUE | rb_sym2str (VALUE id) |
Identical to rb_id2str(), except it takes an instance of rb_cSymbol rather than an ID. More... | |
VALUE | rb_to_symbol (VALUE name) |
Identical to rb_intern_str(), except it generates a dynamic symbol if necessary. More... | |
VALUE | rb_check_symbol (volatile VALUE *namep) |
Identical to rb_check_id(), except it returns an instance of rb_cSymbol instead. More... | |
static ID | rb_intern_const (const char *str) |
This is a "tiny optimisation" over rb_intern(). More... | |
Defines rb_intern.
RBIMPL
or rbimpl
are implementation details. Don't take them as canon. They could rapidly appear then vanish. The name (path) of this header file is also an implementation detail. Do not expect it to persist at the place it is now. Developers are free to move it anywhere anytime at will. __VA_ARGS__
is always available. We assume C99 for ruby itself but we don't assume languages of extension libraries. They could be written in C++98. Definition in file symbol.h.
#define RUBY_CONST_ID | ( | var, | |
str | |||
) |
Old implementation detail of rb_intern().
#define RUBY_CONST_ID_CACHE | ( | result, | |
str | |||
) |
Old implementation detail of rb_intern().
Detects if the given name is already interned or not.
It first tries to convert the argument to an instance of rb_cString if it is neither an instance of rb_cString nor rb_cSymbol. The conversion result is written back to the variable. Then queries if that name was already interned before. If found it returns such id, otherwise zero.
We eventually introduced this API to avoid inadvertent symbol pin-down. Before, there was no way to know if an ID was already interned or not without actually creating one (== leaking memory). By using this API you can avoid such situations:
[in,out] | namep | A pointer to a name to query. |
*namep
must either be an instance of rb_cSymbol, or an instance of rb_cString, or responds to #to_str
method. rb_eTypeError | Can't convert *namep into rb_cString. |
rb_eEncodingError | Given string is non-ASCII. |
0 | No such id ever existed in the history. |
otherwise | The id that represents the given name. |
*namep
points to is a converted result object, which is always an instance of either rb_cSymbol or rb_cString. Definition at line 1117 of file symbol.c.
Referenced by rb_f_untrace_var().
Identical to rb_check_id(), except it returns an instance of rb_cSymbol instead.
[in,out] | namep | A pointer to a name to query. |
*namep
must either be an instance of rb_cSymbol, or an instance of rb_cString, or responds to #to_str
method. rb_eTypeError | Can't convert *namep into rb_cString. |
rb_eEncodingError | Given string is non-ASCII. |
RUBY_Qnil | No such id ever existed in the history. |
otherwise | The id that represents the given name. |
*namep
points to is a converted result object, which is always an instance of either rb_cSymbol or rb_cString. const char* rb_id2name | ( | ID | id | ) |
Retrieves the name mapped to the given id.
[in] | id | An id to query. |
NULL | No such id ever existed in the history. |
otherwise | A name that the id represents. |
Definition at line 992 of file symbol.c.
Referenced by rb_undef().
Identical to rb_id2name(), except it returns a Ruby's String instead of C's.
[in] | id | An id to query. |
RUBY_Qfalse | No such id ever existed in the history. |
otherwise | An instance of rb_cString with the name of id. |
Definition at line 986 of file symbol.c.
Referenced by rb_attr(), rb_define_module_id_under(), rb_id2name(), rb_id_attrset(), rb_notimplement(), rb_sym2str(), and rb_undef().
Allocates an instance of rb_cSymbol that has the given id.
[in] | id | An id. |
RUBY_Qfalse | No such id ever existed in the history. |
Otherwise | An allocated rb_cSymbol instance. |
ID rb_intern | ( | const char * | name | ) |
Finds or creates a symbol of the given name.
[in] | name | The name of the id. |
rb_eRuntimeError | Too many symbols. |
Definition at line 823 of file symbol.c.
Referenced by rb_define_alias(), rb_define_attr(), rb_define_class(), rb_define_class_under(), rb_define_const(), rb_define_method(), rb_define_module(), rb_define_module_under(), rb_define_private_method(), rb_define_protected_method(), rb_enc_get_index(), rb_ext_resolve_symbol(), rb_iv_set(), rb_range_values(), rb_remove_method(), rb_struct_define_under(), and rb_undef_method().
ID rb_intern2 | ( | const char * | name, |
long | len | ||
) |
Identical to rb_intern(), except it additionally takes the length of the string.
This way you can have a symbol that contains NUL characters.
[in] | name | The name of the id. |
[in] | len | Length of name . |
rb_eRuntimeError | Too many symbols. |
Definition at line 816 of file symbol.c.
Referenced by rb_f_global_variables(), rb_intern(), and rb_intern_const().
|
inlinestatic |
This is a "tiny optimisation" over rb_intern().
If you pass a string literal, and if your C compiler can special-case strlen of such literal to strength-reduce into an integer constant expression, then this inline function can precalc a part of conversion.
[in] | str | The name of the id. |
rb_eRuntimeError | Too many symbols. |
Identical to rb_intern(), except it takes an instance of rb_cString.
[in] | str | The name of the id. |
str
must either be an instance of rb_cSymbol, or an instance of rb_cString, or responds to #to_str
method. rb_eTypeError | Can't convert str into rb_cString. |
rb_eRuntimeError | Too many symbols. |
Definition at line 829 of file symbol.c.
Referenced by rb_attr(), and rb_to_id().
Converts an instance of rb_cSymbol into an ID.
[in] | obj | An instance of rb_cSymbol. |
rb_eTypeError | obj is not an instance of rb_cSymbol. |
Definition at line 917 of file symbol.c.
Referenced by rb_id_attrset(), and rb_intern3().
Identical to rb_id2str(), except it takes an instance of rb_cSymbol rather than an ID.
[in] | id | An id to query. |
RUBY_Qfalse | No such id ever existed in the history. |
otherwise | An instance of rb_cString with the name of id. |
Definition at line 970 of file symbol.c.
Referenced by rb_enc_get_index(), rb_gc_latest_gc_info(), rb_gc_stat(), rb_str_format(), and rb_sym_to_s().
Identical to rb_intern(), except it takes an instance of rb_cString.
[in] | str | The name of the id. |
str
must either be an instance of rb_cSymbol, or an instance of rb_cString, or responds to #to_str
method. rb_eTypeError | Can't convert str into rb_cString. |
rb_eRuntimeError | Too many symbols. |
Definition at line 12465 of file string.c.
Referenced by rb_f_trace_var().
Identical to rb_intern_str(), except it generates a dynamic symbol if necessary.
[in] | name | The name of the id. |
name
must either be an instance of rb_cSymbol, or an instance of rb_cString, or responds to #to_str
method. rb_eTypeError | Can't convert name into rb_cString. |
rb_eRuntimeError | Too many symbols. |