Skip to content

Commit ca70219

Browse files
author
Hana Dusíková
committed
fix backrefence bug
1 parent 4dfd660 commit ca70219

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

include/ctre/actions/backreference.inc.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,28 @@
22
#define CTRE__ACTIONS__BACKREFERENCE__HPP
33

44
// backreference with name
5-
template <auto... Str, auto V, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_back_reference, ctll::term<V>, pcre_context<ctll::list<id<Str...>, Ts...>, pcre_parameters<Counter>> subject) {
6-
return pcre_context{ctll::push_front(back_reference_with_name<id<Str...>>(), ctll::list<Ts...>()), subject};
5+
template <auto... Str, auto V, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_back_reference, ctll::term<V>, pcre_context<ctll::list<id<Str...>, Ts...>, pcre_parameters<Counter>>) {
6+
return pcre_context{ctll::push_front(back_reference_with_name<id<Str...>>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
77
}
88

99
// with just a number
10-
template <auto V, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_back_reference, ctll::term<V>, pcre_context<ctll::list<number<Id>, Ts...>, pcre_parameters<Counter>> subject) {
10+
template <auto V, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_back_reference, ctll::term<V>, pcre_context<ctll::list<number<Id>, Ts...>, pcre_parameters<Counter>>) {
1111
// if we are looking outside of existing list of Ids ... reject input during parsing
1212
if constexpr (Counter < Id) {
1313
return ctll::reject{};
1414
} else {
15-
return pcre_context{ctll::push_front(back_reference<Id>(), ctll::list<Ts...>()), subject};
15+
return pcre_context{ctll::push_front(back_reference<Id>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
1616
}
1717
}
1818

1919
// relative backreference
20-
template <auto V, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_relative_back_reference, ctll::term<V>, [[maybe_unused]] pcre_context<ctll::list<number<Id>, Ts...>, pcre_parameters<Counter>> subject) {
20+
template <auto V, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_relative_back_reference, ctll::term<V>, [[maybe_unused]] pcre_context<ctll::list<number<Id>, Ts...>, pcre_parameters<Counter>>) {
2121
// if we are looking outside of existing list of Ids ... reject input during parsing
2222
if constexpr (Counter < Id) {
2323
return ctll::reject{};
2424
} else {
2525
constexpr size_t absolute_id = (Counter + 1) - Id;
26-
return pcre_context{ctll::push_front(back_reference<absolute_id>(), ctll::list<Ts...>()), subject};
26+
return pcre_context{ctll::push_front(back_reference<absolute_id>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
2727
}
2828
}
2929

tests/generating.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ static_assert(same_f("((?:a)(b))"_ctre_gen, ctre::capture<1,ctre::character<'a'>
136136
// backreference
137137
static_assert(same_f("(a)\\g{1}"_ctre_gen, ctre::sequence<ctre::capture<1,ctre::character<'a'>>, ctre::back_reference<1>>()));
138138
static_assert(same_f("(?<ab>a)\\g{ab}"_ctre_gen, ctre::sequence<ctre::capture_with_name<1,ctre::id<'a','b'>,ctre::character<'a'>>, ctre::back_reference_with_name<ctre::id<'a','b'>>>()));
139-
139+
static_assert(same_f("((a)\\g{2})"_ctre_gen, ctre::capture<1, ctre::capture<2,ctre::character<'a'>>, ctre::back_reference<2>>()));
140140

141141
// asserts
142142
static_assert(same_f("^"_ctre_gen, ctre::assert_begin()));

0 commit comments

Comments
 (0)