mirror of
https://github.com/github/codeql.git
synced 2026-04-28 18:25:24 +02:00
Added ability to parse nested character classes while using v flag.
This commit is contained in:
@@ -545,6 +545,7 @@ public class RegExpParser {
|
||||
}
|
||||
|
||||
private RegExpTerm parseCharacterClass() {
|
||||
if (flags != null && flags.contains("v")) return parseNestedCharacterClass();
|
||||
SourceLocation loc = new SourceLocation(pos());
|
||||
List<RegExpTerm> elements = new ArrayList<>();
|
||||
|
||||
@@ -560,6 +561,28 @@ public class RegExpParser {
|
||||
return this.finishTerm(new CharacterClass(loc, elements, inverted));
|
||||
}
|
||||
|
||||
// ECMA 2024 `v` flag allows nested character classes.
|
||||
private RegExpTerm parseNestedCharacterClass() {
|
||||
SourceLocation loc = new SourceLocation(pos());
|
||||
List<RegExpTerm> elements = new ArrayList<>();
|
||||
|
||||
this.match("[");
|
||||
boolean inverted = this.match("^");
|
||||
while (!this.match("]")) {
|
||||
if (this.atEOS()) {
|
||||
this.error(Error.EXPECTED_RBRACKET);
|
||||
break;
|
||||
}
|
||||
if (lookahead("[")) {
|
||||
elements.add(parseNestedCharacterClass());
|
||||
}
|
||||
else {
|
||||
elements.add(this.parseCharacterClassElement());
|
||||
}
|
||||
}
|
||||
return this.finishTerm(new CharacterClass(loc, elements, inverted));
|
||||
}
|
||||
|
||||
private static final List<String> escapeClasses = Arrays.asList("d", "D", "s", "S", "w", "W");
|
||||
|
||||
private RegExpTerm parseCharacterClassElement() {
|
||||
|
||||
Reference in New Issue
Block a user