Skip to content

Commit 7f9ff22

Browse files
committed
Fix #320
1 parent edcd297 commit 7f9ff22

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

peglib.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,20 +1290,28 @@ class CharacterClass : public Ope,
12901290

12911291
class Character : public Ope, public std::enable_shared_from_this<Character> {
12921292
public:
1293-
Character(char ch) : ch_(ch) {}
1293+
Character(char32_t ch) : ch_(ch) {}
12941294

12951295
size_t parse_core(const char *s, size_t n, SemanticValues & /*vs*/,
12961296
Context &c, std::any & /*dt*/) const override {
1297-
if (n < 1 || s[0] != ch_) {
1297+
if (n < 1) {
12981298
c.set_error_pos(s);
12991299
return static_cast<size_t>(-1);
13001300
}
1301-
return 1;
1301+
1302+
char32_t cp = 0;
1303+
auto len = decode_codepoint(s, n, cp);
1304+
1305+
if (cp != ch_) {
1306+
c.set_error_pos(s);
1307+
return static_cast<size_t>(-1);
1308+
}
1309+
return len;
13021310
}
13031311

13041312
void accept(Visitor &v) override;
13051313

1306-
char ch_;
1314+
char32_t ch_;
13071315
};
13081316

13091317
class AnyCharacter : public Ope,
@@ -1625,7 +1633,7 @@ ncls(const std::vector<std::pair<char32_t, char32_t>> &ranges,
16251633
return std::make_shared<CharacterClass>(ranges, true, ignore_case);
16261634
}
16271635

1628-
inline std::shared_ptr<Ope> chr(char dt) {
1636+
inline std::shared_ptr<Ope> chr(char32_t dt) {
16291637
return std::make_shared<Character>(dt);
16301638
}
16311639

0 commit comments

Comments
 (0)