Ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e0ba6b95ab71a441357ed5484e33498)
symbol.h
Go to the documentation of this file.
1#ifndef RBIMPL_SYMBOL_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_SYMBOL_H
23#include "ruby/internal/config.h"
24
25#ifdef STDC_HEADERS
26# include <stddef.h>
27#endif
28
29#ifdef HAVE_STRING_H
30# include <string.h>
31#endif
32
36#include "ruby/internal/cast.h"
40#include "ruby/internal/value.h"
41
42#define RB_ID2SYM rb_id2sym
43#define RB_SYM2ID rb_sym2id
44#define ID2SYM RB_ID2SYM
45#define SYM2ID RB_SYM2ID
46#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
47#define CONST_ID RUBY_CONST_ID
50#define rb_intern_const rb_intern_const
54
55
62ID rb_sym2id(VALUE obj);
63
71VALUE rb_id2sym(ID id);
72
85ID rb_intern(const char *name);
86
101ID rb_intern2(const char *name, long len);
102
118ID rb_intern_str(VALUE str);
119
129const char *rb_id2name(ID id);
130
174ID rb_check_id(volatile VALUE *namep);
175
186ID rb_to_id(VALUE str);
187
201VALUE rb_id2str(ID id);
202
211VALUE rb_sym2str(VALUE id);
212
228VALUE rb_to_symbol(VALUE name);
229
252VALUE rb_check_symbol(volatile VALUE *namep);
254
275static inline ID
276rb_intern_const(const char *str)
277{
278 size_t len = strlen(str);
279 return rb_intern2(str, RBIMPL_CAST((long)len));
280}
281
289static inline ID
290rbimpl_intern_const(ID *ptr, const char *str)
291{
292 while (! *ptr) {
293 *ptr = rb_intern_const(str);
294 }
295
296 return *ptr;
297}
298
303#define RUBY_CONST_ID_CACHE(result, str) \
304 { \
305 static ID rb_intern_id_cache; \
306 rbimpl_intern_const(&rb_intern_id_cache, (str)); \
307 result rb_intern_id_cache; \
308 }
309
314#define RUBY_CONST_ID(var, str) \
315 do { \
316 static ID rbimpl_id; \
317 (var) = rbimpl_intern_const(&rbimpl_id, (str)); \
318 } while (0)
319
320#if defined(HAVE_STMT_AND_DECL_IN_EXPR)
321/* __builtin_constant_p and statement expression is available
322 * since gcc-2.7.2.3 at least. */
323#define rb_intern(str) \
324 (RBIMPL_CONSTANT_P(str) ? \
325 __extension__ ({ \
326 static ID rbimpl_id; \
327 rbimpl_intern_const(&rbimpl_id, (str)); \
328 }) : \
329 (rb_intern)(str))
330#endif
331
332#endif /* RBIMPL_SYMBOL_H */
Defines RBIMPL_CONSTANT_P.
Tweaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition: dllexport.h:106
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition: dllexport.h:97
Defines RBIMPL_HAS_BUILTIN.
ID rb_intern2(const char *name, long len)
Identical to rb_intern(), except it additionally takes the length of the string.
Definition: symbol.c:775
VALUE rb_check_symbol(volatile VALUE *namep)
Identical to rb_check_id(), except it returns an instance of rb_cSymbol instead.
Definition: symbol.c:1099
static ID rb_intern_const(const char *str)
This is a "tiny optimisation" over rb_intern().
Definition: symbol.h:276
VALUE rb_id2sym(ID id)
Allocates an instance of rb_cSymbol that has the given id.
Definition: symbol.c:916
ID rb_check_id(volatile VALUE *namep)
Detects if the given name is already interned or not.
Definition: symbol.c:1066
ID rb_intern(const char *name)
Finds or creates a symbol of the given name.
Definition: symbol.c:782
VALUE rb_sym2str(VALUE id)
Identical to rb_id2str(), except it takes an instance of rb_cSymbol rather than an ID.
Definition: symbol.c:924
VALUE rb_to_symbol(VALUE name)
Identical to rb_intern_str(), except it generates a dynamic symbol if necessary.
Definition: string.c:11902
ID rb_sym2id(VALUE obj)
Converts an instance of rb_cSymbol into an ID.
Definition: symbol.c:882
ID rb_to_id(VALUE str)
Identical to rb_intern(), except it takes an instance of rb_cString.
Definition: string.c:11892
const char * rb_id2name(ID id)
Retrieves the name mapped to the given id.
Definition: symbol.c:941
ID rb_intern_str(VALUE str)
Identical to rb_intern(), except it takes an instance of rb_cString.
Definition: symbol.c:788
VALUE rb_id2str(ID id)
Identical to rb_id2name(), except it returns a Ruby's String instead of C's.
Definition: symbol.c:935
RBIMPL_ATTR_PURE() int rb_io_read_pending(rb_io_t *fptr)
Queries if the passed IO has any pending reads.
Defines RBIMPL_ATTR_NOALIAS.
#define RBIMPL_ATTR_NOALIAS()
Wraps (or simulates) __declspec((noalias))
Definition: noalias.h:62
Defines RBIMPL_ATTR_NONNULL.
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
Definition: nonnull.h:27
Defines RBIMPL_ATTR_PURE.
Defines VALUE and ID.