src/regexp.c in prism-0.24.0 vs src/regexp.c in prism-0.25.0
- old
+ new
@@ -563,24 +563,39 @@
* | quantified
* ;
*/
static bool
pm_regexp_parse_item(pm_regexp_parser_t *parser) {
- switch (*parser->cursor++) {
+ switch (*parser->cursor) {
case '^':
case '$':
+ parser->cursor++;
return true;
case '\\':
+ parser->cursor++;
if (!pm_regexp_char_is_eof(parser)) {
parser->cursor++;
}
return pm_regexp_parse_quantifier(parser);
case '(':
+ parser->cursor++;
return pm_regexp_parse_group(parser) && pm_regexp_parse_quantifier(parser);
case '[':
+ parser->cursor++;
return pm_regexp_parse_lbracket(parser) && pm_regexp_parse_quantifier(parser);
- default:
+ default: {
+ size_t width;
+ if (!parser->encoding_changed) {
+ width = pm_encoding_utf_8_char_width(parser->cursor, (ptrdiff_t) (parser->end - parser->cursor));
+ } else {
+ width = parser->encoding->char_width(parser->cursor, (ptrdiff_t) (parser->end - parser->cursor));
+ }
+
+ if (width == 0) return false; // TODO: add appropriate error
+ parser->cursor += width;
+
return pm_regexp_parse_quantifier(parser);
+ }
}
}
/**
* expression : item+