1 #ifndef RBIMPL_SYMBOL_H
2 #define RBIMPL_SYMBOL_H
23 #include "ruby/internal/config.h"
36 #include "ruby/internal/cast.h"
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
279 size_t len = strlen(str);
291 rbimpl_intern_const(
ID *
ptr, const
char *str)
304 #define RUBY_CONST_ID_CACHE(result, str) \
306 static ID rb_intern_id_cache; \
307 rbimpl_intern_const(&rb_intern_id_cache, (str)); \
308 result rb_intern_id_cache; \
315 #define RUBY_CONST_ID(var, str) \
317 static ID rbimpl_id; \
318 (var) = rbimpl_intern_const(&rbimpl_id, (str)); \
321 #if defined(HAVE_STMT_AND_DECL_IN_EXPR)
324 #define rb_intern(str) \
325 (RBIMPL_CONSTANT_P(str) ? \
327 static ID rbimpl_id; \
328 rbimpl_intern_const(&rbimpl_id, (str)); \
Defines RBIMPL_CONSTANT_P.
Tweaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
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.
VALUE rb_check_symbol(volatile VALUE *namep)
Identical to rb_check_id(), except it returns an instance of rb_cSymbol instead.
static ID rb_intern_const(const char *str)
This is a "tiny optimisation" over rb_intern().
VALUE rb_id2sym(ID id)
Allocates an instance of rb_cSymbol that has the given id.
ID rb_check_id(volatile VALUE *namep)
Detects if the given name is already interned or not.
const char * rb_id2name(ID id)
Retrieves the name mapped to the given id.
ID rb_intern(const char *name)
Finds or creates a symbol of the given name.
VALUE rb_sym2str(VALUE symbol)
Obtain a frozen string representation of a symbol (not including the leading colon).
VALUE rb_to_symbol(VALUE name)
Identical to rb_intern_str(), except it generates a dynamic symbol if necessary.
ID rb_sym2id(VALUE obj)
Converts an instance of rb_cSymbol into an ID.
ID rb_to_id(VALUE str)
Identical to rb_intern(), except it takes an instance of rb_cString.
ID rb_intern_str(VALUE str)
Identical to rb_intern(), except it takes an instance of rb_cString.
VALUE rb_id2str(ID id)
Identical to rb_id2name(), except it returns a frozen Ruby String instead of a C String.
char * ptr
Pointer to the underlying memory region, of at least capa bytes.
RBIMPL_ATTR_PURE() int rb_io_read_pending(rb_io_t *fptr)
Queries if the passed IO has any pending reads.
int len
Length of the buffer.
Defines RBIMPL_ATTR_NOALIAS.
#define RBIMPL_ATTR_NOALIAS()
Wraps (or simulates) __declspec((noalias))
Defines RBIMPL_ATTR_NONNULL.
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
#define inline
Old Visual Studio versions do not support the inline keyword, so we need to define it to be __inline.
Defines RBIMPL_ATTR_PURE.
uintptr_t ID
Type that represents a Ruby identifier such as a variable name.
uintptr_t VALUE
Type that represents a Ruby object.