Ruby 3.5.0dev (2025-02-20 revision 34098b669c0cbc024cd08e686891f1dfe0a10aaf)
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
45#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
47#define RREGEXP_SRC RREGEXP_SRC
48#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
49#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
50#define RREGEXP_SRC_END RREGEXP_SRC_END
53struct re_patter_buffer; /* a.k.a. OnigRegexType, defined in onigmo.h */
54
60struct RRegexp {
61
63 struct RBasic basic;
64
72
74 const VALUE src;
75
90 unsigned long usecnt;
91};
92
102static inline VALUE
104{
105 RBIMPL_ASSERT_TYPE(rexp, RUBY_T_REGEXP);
106 VALUE ret = RREGEXP(rexp)->src;
107 RBIMPL_ASSERT_TYPE(ret, RUBY_T_STRING);
108 return ret;
109}
110
124static inline char *
126{
127 return RSTRING_PTR(RREGEXP_SRC(rexp));
128}
129
143static inline long
145{
146 return RSTRING_LEN(RREGEXP_SRC(rexp));
147}
148
162static inline char *
164{
165 return RSTRING_END(RREGEXP_SRC(rexp));
166}
167
168#endif /* RBIMPL_RREGEXP_H */
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
Definition artificial.h:43
#define inline
Old Visual Studio versions do not support the inline keyword, so we need to define it to be __inline.
Definition defines.h:91
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 VALUE RREGEXP_SRC(VALUE rexp)
Convenient getter function.
Definition rregexp.h:103
static char * RREGEXP_SRC_END(VALUE rexp)
Convenient getter function.
Definition rregexp.h:163
static long RREGEXP_SRC_LEN(VALUE rexp)
Convenient getter function.
Definition rregexp.h:144
static char * RREGEXP_SRC_PTR(VALUE rexp)
Convenient getter function.
Definition rregexp.h:125
Defines struct RString.
static char * RSTRING_END(VALUE str)
Queries the end of the contents pointer of the string.
Definition rstring.h:442
Ruby object's base components.
Definition rbasic.h:63
Ruby's regular expression.
Definition rregexp.h:60
struct RBasic basic
Basic part, including flags and class.
Definition rregexp.h:63
const VALUE src
Source code of this expression.
Definition rregexp.h:74
unsigned long usecnt
Reference count.
Definition rregexp.h:90
struct re_pattern_buffer * ptr
The pattern buffer.
Definition rregexp.h:71
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