Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
robject.h
Go to the documentation of this file.
1#ifndef RBIMPL_ROBJECT_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_ROBJECT_H
24
25#ifdef HAVE_STDINT_H
26# include <stdint.h>
27#endif
28
32#include "ruby/internal/cast.h"
34#include "ruby/internal/value.h"
36
37#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
38#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
39#define ROBJECT_EMBED ROBJECT_EMBED
41#define ROBJECT_NUMIV ROBJECT_NUMIV
42#define ROBJECT_IVPTR ROBJECT_IVPTR
43#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL
46enum ruby_robject_flags { ROBJECT_EMBED = RUBY_FL_USER1 };
47
48enum ruby_robject_consts { ROBJECT_EMBED_LEN_MAX = RBIMPL_EMBED_LEN_MAX_OF(VALUE) };
49
50struct st_table;
51
52struct RObject {
53 struct RBasic basic;
54 union {
55 struct {
58 struct st_table *iv_index_tbl; /* shortcut for RCLASS_IV_INDEX_TBL(rb_obj_class(obj)) */
59 } heap;
61 } as;
62};
63
66static inline uint32_t
67ROBJECT_NUMIV(VALUE obj)
68{
69 RBIMPL_ASSERT_TYPE(obj, RUBY_T_OBJECT);
70
71 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
73 }
74 else {
75 return ROBJECT(obj)->as.heap.numiv;
76 }
77}
78
81static inline VALUE *
82ROBJECT_IVPTR(VALUE obj)
83{
84 RBIMPL_ASSERT_TYPE(obj, RUBY_T_OBJECT);
85
86 struct RObject *const ptr = ROBJECT(obj);
87
88 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
89 return ptr->as.ary;
90 }
91 else {
92 return ptr->as.heap.ivptr;
93 }
94}
95
96#endif /* RBIMPL_ROBJECT_H */
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
Definition: artificial.h:43
Defines RBIMPL_CAST.
struct RIMemo * ptr
Definition: debug.c:88
Defines RBIMPL_ATTR_DEPRECATED.
Defines enum ruby_fl_type.
Thin wrapper to ruby/config.h.
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE iff.
Definition: pure.h:38
#define ROBJECT(obj)
Definition: robject.h:37
ruby_robject_consts
Definition: robject.h:48
ruby_robject_flags
Definition: robject.h:46
#define ROBJECT_EMBED_LEN_MAX
Definition: robject.h:38
#define ROBJECT_EMBED
Definition: robject.h:39
unsigned int uint32_t
Definition: sha2.h:101
Definition: rbasic.h:47
struct st_table * iv_index_tbl
Definition: robject.h:58
struct RBasic basic
Definition: robject.h:53
VALUE * ivptr
Definition: robject.h:57
uint32_t numiv
Definition: robject.h:56
union RObject::@98 as
Definition: st.h:79
Defines VALUE and ID.
unsigned long VALUE
Definition: value.h:38
Defines enum ruby_value_type.
@ RUBY_T_OBJECT
Definition: value_type.h:113