re2 2.4.0-x64-mingw32 → 2.4.1-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/re2/re2.cc +64 -62
- data/lib/2.6/re2.so +0 -0
- data/lib/2.7/re2.so +0 -0
- data/lib/3.0/re2.so +0 -0
- data/lib/re2/version.rb +1 -1
- data/spec/re2/match_data_spec.rb +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5204828883d54585553684d0891f9bbc33a32a055e36f0927262775bf6a518d8
|
4
|
+
data.tar.gz: c0d3cc30ed092582484dda2b7bb11829a030780b5adc352212413f975acaa44f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 006aa9c97abecb5d8f3e2dfe62471977adc3cb1511d6df2c4bbb06702d3e73ab8b64449dc0d866859a41f1b9f281158efa95ebcc7ba405f00b2042e54a45cde2
|
7
|
+
data.tar.gz: 28b9d6ab47fbdf83e6e040244fb184e9834abc415514d9452d99fc246dc35e4f3d9ab0c411308853a187f776695f5e4ce57f63c0a6fe99efac2db15e46d423f7
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ Ruby bindings to [RE2][], a "fast, safe, thread-friendly alternative to
|
|
5
5
|
backtracking regular expression engines like those used in PCRE, Perl, and
|
6
6
|
Python".
|
7
7
|
|
8
|
-
**Current version:** 2.4.
|
8
|
+
**Current version:** 2.4.1
|
9
9
|
**Supported Ruby versions:** 2.6, 2.7, 3.0, 3.1, 3.2
|
10
10
|
**Bundled RE2 version:** libre2.11 (2023-11-01)
|
11
11
|
**Supported RE2 versions:** libre2.0 (< 2020-03-02), libre2.1 (2020-03-02), libre2.6 (2020-03-03), libre2.7 (2020-05-01), libre2.8 (2020-07-06), libre2.9 (2020-11-01), libre2.10 (2022-12-01), libre2.11 (2023-07-01)
|
data/ext/re2/re2.cc
CHANGED
@@ -130,33 +130,33 @@ static void parse_re2_options(RE2::Options* re2_options, const VALUE options) {
|
|
130
130
|
#define re2_compact_callback(x)
|
131
131
|
#endif
|
132
132
|
|
133
|
-
static void re2_matchdata_mark(void *
|
134
|
-
re2_matchdata *
|
135
|
-
rb_gc_mark_movable(
|
136
|
-
rb_gc_mark_movable(
|
133
|
+
static void re2_matchdata_mark(void *ptr) {
|
134
|
+
re2_matchdata *m = reinterpret_cast<re2_matchdata *>(ptr);
|
135
|
+
rb_gc_mark_movable(m->regexp);
|
136
|
+
rb_gc_mark_movable(m->text);
|
137
137
|
}
|
138
138
|
|
139
139
|
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
140
|
-
static void
|
141
|
-
re2_matchdata *
|
142
|
-
|
143
|
-
|
140
|
+
static void re2_matchdata_compact(void *ptr) {
|
141
|
+
re2_matchdata *m = reinterpret_cast<re2_matchdata *>(ptr);
|
142
|
+
m->regexp = rb_gc_location(m->regexp);
|
143
|
+
m->text = rb_gc_location(m->text);
|
144
144
|
}
|
145
145
|
#endif
|
146
146
|
|
147
|
-
static void re2_matchdata_free(void *
|
148
|
-
re2_matchdata *
|
149
|
-
if (
|
150
|
-
delete[]
|
147
|
+
static void re2_matchdata_free(void *ptr) {
|
148
|
+
re2_matchdata *m = reinterpret_cast<re2_matchdata *>(ptr);
|
149
|
+
if (m->matches) {
|
150
|
+
delete[] m->matches;
|
151
151
|
}
|
152
|
-
xfree(
|
152
|
+
xfree(m);
|
153
153
|
}
|
154
154
|
|
155
|
-
static size_t re2_matchdata_memsize(const void *
|
156
|
-
const re2_matchdata *
|
157
|
-
size_t size = sizeof(
|
158
|
-
if (
|
159
|
-
size += sizeof(
|
155
|
+
static size_t re2_matchdata_memsize(const void *ptr) {
|
156
|
+
const re2_matchdata *m = reinterpret_cast<const re2_matchdata *>(ptr);
|
157
|
+
size_t size = sizeof(*m);
|
158
|
+
if (m->matches) {
|
159
|
+
size += sizeof(*m->matches) * m->number_of_matches;
|
160
160
|
}
|
161
161
|
|
162
162
|
return size;
|
@@ -168,40 +168,40 @@ static const rb_data_type_t re2_matchdata_data_type = {
|
|
168
168
|
.dmark = re2_matchdata_mark,
|
169
169
|
.dfree = re2_matchdata_free,
|
170
170
|
.dsize = re2_matchdata_memsize,
|
171
|
-
re2_compact_callback(
|
171
|
+
re2_compact_callback(re2_matchdata_compact)
|
172
172
|
},
|
173
173
|
// IMPORTANT: WB_PROTECTED objects must only use the RB_OBJ_WRITE()
|
174
174
|
// macro to update VALUE references, as to trigger write barriers.
|
175
175
|
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
|
176
176
|
};
|
177
177
|
|
178
|
-
static void re2_scanner_mark(void *
|
179
|
-
re2_scanner *
|
180
|
-
rb_gc_mark_movable(
|
181
|
-
rb_gc_mark_movable(
|
178
|
+
static void re2_scanner_mark(void *ptr) {
|
179
|
+
re2_scanner *s = reinterpret_cast<re2_scanner *>(ptr);
|
180
|
+
rb_gc_mark_movable(s->regexp);
|
181
|
+
rb_gc_mark_movable(s->text);
|
182
182
|
}
|
183
183
|
|
184
184
|
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
185
|
-
static void
|
186
|
-
re2_scanner *
|
187
|
-
|
188
|
-
|
185
|
+
static void re2_scanner_compact(void *ptr) {
|
186
|
+
re2_scanner *s = reinterpret_cast<re2_scanner *>(ptr);
|
187
|
+
s->regexp = rb_gc_location(s->regexp);
|
188
|
+
s->text = rb_gc_location(s->text);
|
189
189
|
}
|
190
190
|
#endif
|
191
191
|
|
192
|
-
static void re2_scanner_free(void *
|
193
|
-
re2_scanner *
|
194
|
-
if (
|
195
|
-
delete
|
192
|
+
static void re2_scanner_free(void *ptr) {
|
193
|
+
re2_scanner *s = reinterpret_cast<re2_scanner *>(ptr);
|
194
|
+
if (s->input) {
|
195
|
+
delete s->input;
|
196
196
|
}
|
197
|
-
xfree(
|
197
|
+
xfree(s);
|
198
198
|
}
|
199
199
|
|
200
|
-
static size_t re2_scanner_memsize(const void *
|
201
|
-
const re2_scanner *
|
202
|
-
size_t size = sizeof(
|
203
|
-
if (
|
204
|
-
size += sizeof(
|
200
|
+
static size_t re2_scanner_memsize(const void *ptr) {
|
201
|
+
const re2_scanner *s = reinterpret_cast<const re2_scanner *>(ptr);
|
202
|
+
size_t size = sizeof(*s);
|
203
|
+
if (s->input) {
|
204
|
+
size += sizeof(s->input);
|
205
205
|
}
|
206
206
|
|
207
207
|
return size;
|
@@ -213,26 +213,26 @@ static const rb_data_type_t re2_scanner_data_type = {
|
|
213
213
|
.dmark = re2_scanner_mark,
|
214
214
|
.dfree = re2_scanner_free,
|
215
215
|
.dsize = re2_scanner_memsize,
|
216
|
-
re2_compact_callback(
|
216
|
+
re2_compact_callback(re2_scanner_compact)
|
217
217
|
},
|
218
218
|
// IMPORTANT: WB_PROTECTED objects must only use the RB_OBJ_WRITE()
|
219
219
|
// macro to update VALUE references, as to trigger write barriers.
|
220
220
|
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
|
221
221
|
};
|
222
222
|
|
223
|
-
static void re2_regexp_free(void *
|
224
|
-
re2_pattern *
|
225
|
-
if (
|
226
|
-
delete
|
223
|
+
static void re2_regexp_free(void *ptr) {
|
224
|
+
re2_pattern *p = reinterpret_cast<re2_pattern *>(ptr);
|
225
|
+
if (p->pattern) {
|
226
|
+
delete p->pattern;
|
227
227
|
}
|
228
|
-
xfree(
|
228
|
+
xfree(p);
|
229
229
|
}
|
230
230
|
|
231
|
-
static size_t re2_regexp_memsize(const void *
|
232
|
-
const re2_pattern *
|
233
|
-
size_t size = sizeof(
|
234
|
-
if (
|
235
|
-
size += sizeof(
|
231
|
+
static size_t re2_regexp_memsize(const void *ptr) {
|
232
|
+
const re2_pattern *p = reinterpret_cast<const re2_pattern *>(ptr);
|
233
|
+
size_t size = sizeof(*p);
|
234
|
+
if (p->pattern) {
|
235
|
+
size += sizeof(p->pattern);
|
236
236
|
}
|
237
237
|
|
238
238
|
return size;
|
@@ -1579,19 +1579,19 @@ static VALUE re2_QuoteMeta(VALUE, VALUE unquoted) {
|
|
1579
1579
|
return rb_str_new(quoted_string.data(), quoted_string.size());
|
1580
1580
|
}
|
1581
1581
|
|
1582
|
-
static void re2_set_free(void *
|
1583
|
-
re2_set *
|
1584
|
-
if (
|
1585
|
-
delete
|
1582
|
+
static void re2_set_free(void *ptr) {
|
1583
|
+
re2_set *s = reinterpret_cast<re2_set *>(ptr);
|
1584
|
+
if (s->set) {
|
1585
|
+
delete s->set;
|
1586
1586
|
}
|
1587
|
-
xfree(
|
1587
|
+
xfree(s);
|
1588
1588
|
}
|
1589
1589
|
|
1590
|
-
static size_t re2_set_memsize(const void *
|
1591
|
-
const re2_set *
|
1592
|
-
size_t size = sizeof(
|
1593
|
-
if (
|
1594
|
-
size += sizeof(
|
1590
|
+
static size_t re2_set_memsize(const void *ptr) {
|
1591
|
+
const re2_set *s = reinterpret_cast<const re2_set *>(ptr);
|
1592
|
+
size_t size = sizeof(*s);
|
1593
|
+
if (s->set) {
|
1594
|
+
size += sizeof(s->set);
|
1595
1595
|
}
|
1596
1596
|
|
1597
1597
|
return size;
|
@@ -1877,12 +1877,14 @@ extern "C" void Init_re2(void) {
|
|
1877
1877
|
re2_eSetUnsupportedError = rb_define_class_under(re2_cSet, "UnsupportedError",
|
1878
1878
|
rb_const_get(rb_cObject, rb_intern("StandardError")));
|
1879
1879
|
|
1880
|
-
rb_define_alloc_func(re2_cRegexp,
|
1880
|
+
rb_define_alloc_func(re2_cRegexp,
|
1881
|
+
reinterpret_cast<VALUE (*)(VALUE)>(re2_regexp_allocate));
|
1881
1882
|
rb_define_alloc_func(re2_cMatchData,
|
1882
|
-
|
1883
|
+
reinterpret_cast<VALUE (*)(VALUE)>(re2_matchdata_allocate));
|
1883
1884
|
rb_define_alloc_func(re2_cScanner,
|
1884
|
-
|
1885
|
-
rb_define_alloc_func(re2_cSet,
|
1885
|
+
reinterpret_cast<VALUE (*)(VALUE)>(re2_scanner_allocate));
|
1886
|
+
rb_define_alloc_func(re2_cSet,
|
1887
|
+
reinterpret_cast<VALUE (*)(VALUE)>(re2_set_allocate));
|
1886
1888
|
|
1887
1889
|
rb_define_method(re2_cMatchData, "string",
|
1888
1890
|
RUBY_METHOD_FUNC(re2_matchdata_string), 0);
|
data/lib/2.6/re2.so
CHANGED
Binary file
|
data/lib/2.7/re2.so
CHANGED
Binary file
|
data/lib/3.0/re2.so
CHANGED
Binary file
|
data/lib/re2/version.rb
CHANGED
data/spec/re2/match_data_spec.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require 'objspace'
|
3
|
+
|
2
4
|
RSpec.describe RE2::MatchData do
|
5
|
+
it "reports a larger consuming memory size when it has more matches" do
|
6
|
+
matches1 = RE2::Regexp.new('w(o)').match('woo')
|
7
|
+
matches2 = RE2::Regexp.new('w(o)(o)').match('woo')
|
8
|
+
|
9
|
+
expect(ObjectSpace.memsize_of(matches1)).to be < ObjectSpace.memsize_of(matches2)
|
10
|
+
end
|
11
|
+
|
3
12
|
describe "#to_a" do
|
4
13
|
it "is populated with the match and capturing groups" do
|
5
14
|
a = RE2::Regexp.new('w(o)(o)').match('woo').to_a
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: re2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.1
|
5
5
|
platform: x64-mingw32
|
6
6
|
authors:
|
7
7
|
- Paul Mucur
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-11-
|
12
|
+
date: 2023-11-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|