Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
rbasic.h
Go to the documentation of this file.
1#ifndef RBIMPL_RBASIC_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_RBASIC_H
28#include "ruby/internal/cast.h"
31#include "ruby/internal/value.h"
32#include "ruby/assert.h"
33
34#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
35#define RBASIC_CLASS RBASIC_CLASS
36#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
37
39#define RBIMPL_EMBED_LEN_MAX_OF(T) \
40 RBIMPL_CAST((int)(sizeof(VALUE[RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
44
45struct
47RBasic {
49 const VALUE klass;
50
51#ifdef __cplusplus
52 public:
64 flags(RBIMPL_VALUE_NULL),
66 {
67 }
68#endif
69};
70
73VALUE rb_obj_reveal(VALUE obj, VALUE klass); /* do not use this API to change klass information */
75
78static inline VALUE
80{
81 RBIMPL_ASSERT_OR_ASSUME(! RB_SPECIAL_CONST_P(obj));
82 return RBASIC(obj)->klass;
83}
84
85#endif /* RBIMPL_RBASIC_H */
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
Definition: artificial.h:43
#define RBIMPL_ASSERT_OR_ASSUME(expr)
This is either RUBY_ASSERT or RBIMPL_ASSUME, depending on RUBY_DEBUG.
Definition: assert.h:229
#define RUBY_ALIGNAS
Definition: stdalign.h:27
Defines RBIMPL_CAST.
RBIMPL_ATTR_CONSTEXPR.
#define RBIMPL_ATTR_CONSTEXPR(_)
Wraps (or simulates) C++11 constexpr.
Definition: constexpr.h:75
Tewaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition: dllexport.h:86
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition: dllexport.h:77
Defines RBIMPL_ATTR_FORCEINLINE.
#define RBIMPL_ATTR_FORCEINLINE()
Wraps (or simulates) __forceinline.
Definition: forceinline.h:37
VALUE rb_obj_reveal(VALUE obj, VALUE klass)
Make a hidden object visible again.
Definition: object.c:109
VALUE rb_obj_hide(VALUE obj)
Make the object invisible from Ruby code.
Definition: object.c:92
Defines RBIMPL_ATTR_NOALIAS.
#define RBIMPL_ATTR_NOALIAS()
Wraps (or simulates) __declspec((noalias))
Definition: noalias.h:55
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE iff.
Definition: pure.h:38
#define RBASIC(obj)
Definition: rbasic.h:34
ruby_rvalue_flags
Definition: rbasic.h:43
#define RBASIC_CLASS
Definition: rbasic.h:35
#define RVALUE_EMBED_LEN_MAX
Definition: rbasic.h:36
Defines enum ruby_special_consts.
Definition: rbasic.h:47
const VALUE klass
Definition: rbasic.h:49
VALUE flags
Definition: rbasic.h:48
Defines VALUE and ID.
#define RBIMPL_VALUE_NULL
Definition: value.h:43
unsigned long VALUE
Definition: value.h:38
#define SIZEOF_VALUE
Definition: value.h:41