Ruby 4.1.0dev (2026-09-11 revision 5831948a66412922e1abafd2c38fd6400e420581)
rregexp.h
Go to the documentation of this file.
1#ifndef RBIMPL_RREGEXP_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_RREGEXP_H
25#include "ruby/internal/cast.h"
28#include "ruby/internal/value.h"
30
37#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
38
40#define RREGEXP_SRC RREGEXP_SRC
41#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
42#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
43#define RREGEXP_SRC_END RREGEXP_SRC_END
51struct RRegexp {
52
54 struct RBasic basic;
55
57 const VALUE src;
58
73 unsigned long usecnt;
74};
75
85static inline struct re_pattern_buffer *
87{
88 RBIMPL_ASSERT_TYPE(rexp, RUBY_T_REGEXP);
89 return (struct re_pattern_buffer *)(((struct RRegexp *)rexp) + 1);
90}
91
101static inline VALUE
103{
104 RBIMPL_ASSERT_TYPE(rexp, RUBY_T_REGEXP);
105 VALUE ret = RREGEXP(rexp)->src;
106 RBIMPL_ASSERT_TYPE(ret, RUBY_T_STRING);
107 return ret;
108}
109
123static inline char *
125{
126 return RSTRING_PTR(RREGEXP_SRC(rexp));
127}
128
142static inline long
144{
145 return RSTRING_LEN(RREGEXP_SRC(rexp));
146}
147
161static inline char *
163{
164 return RSTRING_END(RREGEXP_SRC(rexp));
165}
166
167#endif /* RBIMPL_RREGEXP_H */
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
Definition artificial.h:43
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE if and only if.
Definition pure.h:38
Defines struct RBasic.
#define RREGEXP(obj)
Convenient casting macro.
Definition rregexp.h:37
static struct re_pattern_buffer * RREGEXP_PTR(VALUE rexp)
Convenient getter function.
Definition rregexp.h:86
static VALUE RREGEXP_SRC(VALUE rexp)
Convenient getter function.
Definition rregexp.h:102
static char * RREGEXP_SRC_END(VALUE rexp)
Convenient getter function.
Definition rregexp.h:162
static long RREGEXP_SRC_LEN(VALUE rexp)
Convenient getter function.
Definition rregexp.h:143
static char * RREGEXP_SRC_PTR(VALUE rexp)
Convenient getter function.
Definition rregexp.h:124
Defines struct RString.
static char * RSTRING_END(VALUE str)
Queries the end of the contents pointer of the string.
Definition rstring.h:409
Ruby object's base components.
Definition rbasic.h:69
Ruby's regular expression.
Definition rregexp.h:51
struct RBasic basic
Basic part, including flags and class.
Definition rregexp.h:54
const VALUE src
Source code of this expression.
Definition rregexp.h:57
unsigned long usecnt
Reference count.
Definition rregexp.h:73
Defines VALUE and ID.
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40
Defines enum ruby_value_type.
@ RUBY_T_STRING
Definition value_type.h:120
@ RUBY_T_REGEXP
Definition value_type.h:121