Ruby 4.1.0dev (2026-09-07 revision 11ce3778c6eacc10897729314e5ab3bed7830971)
re.h
1#ifndef INTERNAL_RE_H /*-*-C-*-vi:se ft=c:*/
2#define INTERNAL_RE_H
11#include "ruby/internal/stdbool.h" /* for bool */
12#include "ruby/ruby.h" /* for VALUE */
13#include "ruby/re.h" /* for struct RMatch and struct re_registers */
14
15#define RREGEXP_INITIALIZED FL_USER5
16
17#define RMATCH_ONIG FL_USER1
18#define RMATCH_OFFSETS_EXTERNAL FL_USER2
19
20static inline OnigPosition *
21RMATCH_BEG_PTR(VALUE match)
22{
23 if (FL_TEST_RAW(match, RMATCH_ONIG)) {
24 return RMATCH(match)->as.onig.beg;
25 }
26 else {
27 return &RMATCH(match)->as.embed[0];
28 }
29}
30
31static inline OnigPosition *
32RMATCH_END_PTR(VALUE match)
33{
34 if (FL_TEST_RAW(match, RMATCH_ONIG)) {
35 return RMATCH(match)->as.onig.end;
36 }
37 else {
38 return &RMATCH(match)->as.embed[RMATCH(match)->num_regs];
39 }
40}
41
42static inline long
43RMATCH_BEG(VALUE match, int i)
44{
45 return RMATCH_BEG_PTR(match)[i];
46}
47
48static inline long
49RMATCH_END(VALUE match, int i)
50{
51 return RMATCH_END_PTR(match)[i];
52}
53
54static inline int
55RMATCH_NREGS(VALUE match)
56{
57 return RMATCH(match)->num_regs;
58}
59
60/* re.c */
61VALUE rb_reg_s_alloc(VALUE klass);
62VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
63VALUE rb_reg_check_preprocess(VALUE);
64long rb_reg_search0(VALUE, VALUE, long, int, int, VALUE *);
65VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
66VALUE rb_reg_regsub_match(VALUE str, VALUE src, VALUE match);
67VALUE rb_match_init_copy(VALUE copy, VALUE orig);
68/* MatchData transfer for the Ractor courier (ractor.c). */
69void *rb_match_blob_dump(VALUE match, VALUE *regexp_out, VALUE *str_out, int *num_regs_out, bool release_source);
70VALUE rb_match_blob_alloc(VALUE klass, int num_regs);
71void rb_match_blob_load(VALUE match, VALUE regexp, VALUE str, int num_regs, const void *blob);
72void rb_match_blob_free(void *blob);
73bool rb_reg_start_with_p(VALUE re, VALUE str);
74VALUE rb_reg_hash(VALUE re);
75VALUE rb_reg_equal(VALUE re1, VALUE re2);
76VALUE rb_backref_set_string(VALUE string, long pos, long len);
77void rb_match_unbusy(VALUE);
78int rb_match_count(VALUE match);
79VALUE rb_reg_new_from_values(long cnt, const VALUE *elements, int opt);
80VALUE rb_reg_last_defined(VALUE match);
81
82#define ARG_REG_OPTION_MASK \
83 (ONIG_OPTION_IGNORECASE|ONIG_OPTION_MULTILINE|ONIG_OPTION_EXTEND)
84#define ARG_ENCODING_FIXED 16
85#define ARG_ENCODING_NONE 32
86
87#endif /* INTERNAL_RE_H */
#define FL_TEST_RAW
Old name of RB_FL_TEST_RAW.
Definition fl_type.h:128
int len
Length of the buffer.
Definition io.h:8
#define RMATCH(obj)
Convenient casting macro.
Definition rmatch.h:37
C99 shim for <stdbool.h>
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40