Removed Union as standard character class is already an union.

This commit is contained in:
Napalys
2025-03-05 10:07:20 +01:00
parent 8099423b6d
commit 8086c25abe
8 changed files with 518 additions and 602 deletions

View File

@@ -1,22 +0,0 @@
package com.semmle.js.ast.regexp;
import com.semmle.js.ast.SourceLocation;
import java.util.List;
public class CharacterClassUnion extends RegExpTerm {
private final List<RegExpTerm> elements;
public CharacterClassUnion(SourceLocation loc, List<RegExpTerm> elements) {
super(loc, "CharacterClassUnion");
this.elements = elements;
}
@Override
public void accept(Visitor v) {
v.visit(this);
}
public List<RegExpTerm> getElements() {
return elements;
}
}

View File

@@ -67,6 +67,4 @@ public interface Visitor {
public void visit(CharacterClassIntersection nd);
public void visit(CharacterClassSubtraction nd);
public void visit(CharacterClassUnion nd);
}

View File

@@ -13,7 +13,6 @@ import com.semmle.js.ast.regexp.CharacterClassEscape;
import com.semmle.js.ast.regexp.CharacterClassQuotedString;
import com.semmle.js.ast.regexp.CharacterClassRange;
import com.semmle.js.ast.regexp.CharacterClassSubtraction;
import com.semmle.js.ast.regexp.CharacterClassUnion;
import com.semmle.js.ast.regexp.Constant;
import com.semmle.js.ast.regexp.ControlEscape;
import com.semmle.js.ast.regexp.ControlLetter;
@@ -99,7 +98,6 @@ public class RegExpExtractor {
termkinds.put("CharacterClassQuotedString", 28);
termkinds.put("CharacterClassIntersection", 29);
termkinds.put("CharacterClassSubtraction", 30);
termkinds.put("CharacterClassUnion", 31);
}
private static final String[] errmsgs =
@@ -374,14 +372,6 @@ public class RegExpExtractor {
for (RegExpTerm element : nd.getElements())
visit(element, lbl, i++);
}
@Override
public void visit(CharacterClassUnion nd) {
Label lbl = extractTerm(nd, parent, idx);
int i = 0;
for (RegExpTerm element : nd.getElements())
visit(element, lbl, i++);
}
}
public void extract(String src, SourceMap sourceMap, Node parent, boolean isSpeculativeParsing, String flags) {

View File

@@ -9,7 +9,6 @@ import com.semmle.js.ast.regexp.CharacterClassEscape;
import com.semmle.js.ast.regexp.CharacterClassQuotedString;
import com.semmle.js.ast.regexp.CharacterClassRange;
import com.semmle.js.ast.regexp.CharacterClassSubtraction;
import com.semmle.js.ast.regexp.CharacterClassUnion;
import com.semmle.js.ast.regexp.Constant;
import com.semmle.js.ast.regexp.ControlEscape;
import com.semmle.js.ast.regexp.ControlLetter;
@@ -568,8 +567,7 @@ public class RegExpParser {
private enum CharacterClassType {
STANDARD,
INTERSECTION,
SUBTRACTION,
UNION
SUBTRACTION
}
// ECMA 2024 `v` flag allows nested character classes.
@@ -601,26 +599,12 @@ public class RegExpParser {
}
}
boolean containsComplex = elements.stream().anyMatch(term -> term instanceof UnicodePropertyEscape ||
term instanceof CharacterClassQuotedString ||
term instanceof CharacterClass);
// Set type to UNION only if:
// 1. We haven't already determined a specific type (intersection/subtraction)
// 2. We have more than one element
// 3. We have at least one complex element (i.e. a nested character class or a UnicodePropertyEscape)
if (containsComplex && classType == CharacterClassType.STANDARD && elements.size() > 1) {
classType = CharacterClassType.UNION;
}
// Create appropriate RegExpTerm based on the detected class type
switch (classType) {
case INTERSECTION:
return this.finishTerm(new CharacterClass(loc, Collections.singletonList(new CharacterClassIntersection(loc, elements)), inverted));
case SUBTRACTION:
return this.finishTerm(new CharacterClass(loc, Collections.singletonList(new CharacterClassSubtraction(loc, elements)), inverted));
case UNION:
return this.finishTerm(new CharacterClass(loc, Collections.singletonList(new CharacterClassUnion(loc, elements)), inverted));
case STANDARD:
default:
return this.finishTerm(new CharacterClass(loc, elements, inverted));

View File

@@ -137,81 +137,75 @@ regexpterm(#20042,23,#20041,0,"[ [] [ [] [] ] ]")
locations_default(#20043,#10000,3,2,3,17)
hasLocation(#20042,#20043)
#20044=*
regexpterm(#20044,31,#20042,0,"[ [] [ [] [] ] ]")
hasLocation(#20044,#20043)
#20045=*
regexpterm(#20045,14,#20044,0," ")
#20046=@"loc,{#10000},3,3,3,3"
locations_default(#20046,#10000,3,3,3,3)
hasLocation(#20045,#20046)
regexp_const_value(#20045," ")
#20047=*
regexpterm(#20047,23,#20044,1,"[]")
#20048=@"loc,{#10000},3,4,3,5"
locations_default(#20048,#10000,3,4,3,5)
hasLocation(#20047,#20048)
#20049=*
regexpterm(#20049,14,#20044,2," ")
#20050=@"loc,{#10000},3,6,3,6"
locations_default(#20050,#10000,3,6,3,6)
hasLocation(#20049,#20050)
regexp_const_value(#20049," ")
#20051=*
regexpterm(#20051,23,#20044,3,"[ [] [] ]")
#20052=@"loc,{#10000},3,7,3,15"
locations_default(#20052,#10000,3,7,3,15)
hasLocation(#20051,#20052)
#20053=*
regexpterm(#20053,31,#20051,0,"[ [] [] ]")
hasLocation(#20053,#20052)
regexpterm(#20044,14,#20042,0," ")
#20045=@"loc,{#10000},3,3,3,3"
locations_default(#20045,#10000,3,3,3,3)
hasLocation(#20044,#20045)
regexp_const_value(#20044," ")
#20046=*
regexpterm(#20046,23,#20042,1,"[]")
#20047=@"loc,{#10000},3,4,3,5"
locations_default(#20047,#10000,3,4,3,5)
hasLocation(#20046,#20047)
#20048=*
regexpterm(#20048,14,#20042,2," ")
#20049=@"loc,{#10000},3,6,3,6"
locations_default(#20049,#10000,3,6,3,6)
hasLocation(#20048,#20049)
regexp_const_value(#20048," ")
#20050=*
regexpterm(#20050,23,#20042,3,"[ [] [] ]")
#20051=@"loc,{#10000},3,7,3,15"
locations_default(#20051,#10000,3,7,3,15)
hasLocation(#20050,#20051)
#20052=*
regexpterm(#20052,14,#20050,0," ")
#20053=@"loc,{#10000},3,8,3,8"
locations_default(#20053,#10000,3,8,3,8)
hasLocation(#20052,#20053)
regexp_const_value(#20052," ")
#20054=*
regexpterm(#20054,14,#20053,0," ")
#20055=@"loc,{#10000},3,8,3,8"
locations_default(#20055,#10000,3,8,3,8)
regexpterm(#20054,23,#20050,1,"[]")
#20055=@"loc,{#10000},3,9,3,10"
locations_default(#20055,#10000,3,9,3,10)
hasLocation(#20054,#20055)
regexp_const_value(#20054," ")
#20056=*
regexpterm(#20056,23,#20053,1,"[]")
#20057=@"loc,{#10000},3,9,3,10"
locations_default(#20057,#10000,3,9,3,10)
regexpterm(#20056,14,#20050,2," ")
#20057=@"loc,{#10000},3,11,3,11"
locations_default(#20057,#10000,3,11,3,11)
hasLocation(#20056,#20057)
regexp_const_value(#20056," ")
#20058=*
regexpterm(#20058,14,#20053,2," ")
#20059=@"loc,{#10000},3,11,3,11"
locations_default(#20059,#10000,3,11,3,11)
regexpterm(#20058,23,#20050,3,"[]")
#20059=@"loc,{#10000},3,12,3,13"
locations_default(#20059,#10000,3,12,3,13)
hasLocation(#20058,#20059)
regexp_const_value(#20058," ")
#20060=*
regexpterm(#20060,23,#20053,3,"[]")
#20061=@"loc,{#10000},3,12,3,13"
locations_default(#20061,#10000,3,12,3,13)
regexpterm(#20060,14,#20050,4," ")
#20061=@"loc,{#10000},3,14,3,14"
locations_default(#20061,#10000,3,14,3,14)
hasLocation(#20060,#20061)
regexp_const_value(#20060," ")
#20062=*
regexpterm(#20062,14,#20053,4," ")
#20063=@"loc,{#10000},3,14,3,14"
locations_default(#20063,#10000,3,14,3,14)
regexpterm(#20062,14,#20042,4," ")
#20063=@"loc,{#10000},3,16,3,16"
locations_default(#20063,#10000,3,16,3,16)
hasLocation(#20062,#20063)
regexp_const_value(#20062," ")
#20064=*
regexpterm(#20064,14,#20044,4," ")
#20065=@"loc,{#10000},3,16,3,16"
locations_default(#20065,#10000,3,16,3,16)
entry_cfg_node(#20064,#20001)
#20065=@"loc,{#10000},1,1,1,0"
locations_default(#20065,#10000,1,1,1,0)
hasLocation(#20064,#20065)
regexp_const_value(#20064," ")
#20066=*
entry_cfg_node(#20066,#20001)
#20067=@"loc,{#10000},1,1,1,0"
locations_default(#20067,#10000,1,1,1,0)
hasLocation(#20066,#20067)
#20068=*
exit_cfg_node(#20068,#20001)
hasLocation(#20068,#20023)
exit_cfg_node(#20066,#20001)
hasLocation(#20066,#20023)
successor(#20040,#20041)
successor(#20041,#20068)
successor(#20041,#20066)
successor(#20032,#20033)
successor(#20033,#20040)
successor(#20025,#20027)
successor(#20027,#20032)
successor(#20066,#20025)
successor(#20064,#20025)
numlines(#10000,3,3,1)
filetype(#10000,"javascript")

View File

@@ -201,325 +201,310 @@ regexpterm(#20066,23,#20063,1,"[\p{P}<>]")
locations_default(#20067,#10000,1,55,1,63)
hasLocation(#20066,#20067)
#20068=*
regexpterm(#20068,31,#20066,0,"[\p{P}<>]")
hasLocation(#20068,#20067)
#20069=*
regexpterm(#20069,27,#20068,0,"\p{P}")
#20070=@"loc,{#10000},1,56,1,60"
locations_default(#20070,#10000,1,56,1,60)
hasLocation(#20069,#20070)
unicode_property_escapename(#20069,"P")
#20071=*
regexpterm(#20071,14,#20068,1,"<")
#20072=@"loc,{#10000},1,61,1,61"
locations_default(#20072,#10000,1,61,1,61)
hasLocation(#20071,#20072)
regexp_const_value(#20071,"<")
#20073=*
regexpterm(#20073,14,#20068,2,">")
#20074=@"loc,{#10000},1,62,1,62"
locations_default(#20074,#10000,1,62,1,62)
hasLocation(#20073,#20074)
regexp_const_value(#20073,">")
#20075=*
regexpterm(#20075,21,#20059,1,"\/")
#20076=@"loc,{#10000},1,66,1,67"
locations_default(#20076,#10000,1,66,1,67)
hasLocation(#20075,#20076)
regexp_const_value(#20075,"/")
#20077=*
regexpterm(#20077,1,#20059,2,"[\S--[\[\]]]+[\S--[\p{P}<>]]")
#20078=@"loc,{#10000},1,69,1,96"
locations_default(#20078,#10000,1,69,1,96)
hasLocation(#20077,#20078)
#20079=*
regexpterm(#20079,9,#20077,0,"[\S--[\[\]]]+")
#20080=@"loc,{#10000},1,69,1,81"
locations_default(#20080,#10000,1,69,1,81)
hasLocation(#20079,#20080)
is_greedy(#20079)
#20081=*
regexpterm(#20081,23,#20079,0,"[\S--[\[\]]]")
#20082=@"loc,{#10000},1,69,1,80"
locations_default(#20082,#10000,1,69,1,80)
hasLocation(#20081,#20082)
regexpterm(#20068,27,#20066,0,"\p{P}")
#20069=@"loc,{#10000},1,56,1,60"
locations_default(#20069,#10000,1,56,1,60)
hasLocation(#20068,#20069)
unicode_property_escapename(#20068,"P")
#20070=*
regexpterm(#20070,14,#20066,1,"<")
#20071=@"loc,{#10000},1,61,1,61"
locations_default(#20071,#10000,1,61,1,61)
hasLocation(#20070,#20071)
regexp_const_value(#20070,"<")
#20072=*
regexpterm(#20072,14,#20066,2,">")
#20073=@"loc,{#10000},1,62,1,62"
locations_default(#20073,#10000,1,62,1,62)
hasLocation(#20072,#20073)
regexp_const_value(#20072,">")
#20074=*
regexpterm(#20074,21,#20059,1,"\/")
#20075=@"loc,{#10000},1,66,1,67"
locations_default(#20075,#10000,1,66,1,67)
hasLocation(#20074,#20075)
regexp_const_value(#20074,"/")
#20076=*
regexpterm(#20076,1,#20059,2,"[\S--[\[\]]]+[\S--[\p{P}<>]]")
#20077=@"loc,{#10000},1,69,1,96"
locations_default(#20077,#10000,1,69,1,96)
hasLocation(#20076,#20077)
#20078=*
regexpterm(#20078,9,#20076,0,"[\S--[\[\]]]+")
#20079=@"loc,{#10000},1,69,1,81"
locations_default(#20079,#10000,1,69,1,81)
hasLocation(#20078,#20079)
is_greedy(#20078)
#20080=*
regexpterm(#20080,23,#20078,0,"[\S--[\[\]]]")
#20081=@"loc,{#10000},1,69,1,80"
locations_default(#20081,#10000,1,69,1,80)
hasLocation(#20080,#20081)
#20082=*
regexpterm(#20082,30,#20080,0,"[\S--[\[\]]]")
hasLocation(#20082,#20081)
#20083=*
regexpterm(#20083,30,#20081,0,"[\S--[\[\]]]")
hasLocation(#20083,#20082)
#20084=*
regexpterm(#20084,20,#20083,0,"\S")
#20085=@"loc,{#10000},1,70,1,71"
locations_default(#20085,#10000,1,70,1,71)
hasLocation(#20084,#20085)
char_class_escape(#20084,"S")
#20086=*
regexpterm(#20086,23,#20083,1,"[\[\]]")
#20087=@"loc,{#10000},1,74,1,79"
locations_default(#20087,#10000,1,74,1,79)
hasLocation(#20086,#20087)
#20088=*
regexpterm(#20088,21,#20086,0,"\[")
#20089=@"loc,{#10000},1,75,1,76"
locations_default(#20089,#10000,1,75,1,76)
hasLocation(#20088,#20089)
regexp_const_value(#20088,"[")
#20090=*
regexpterm(#20090,21,#20086,1,"\]")
#20091=@"loc,{#10000},1,77,1,78"
locations_default(#20091,#10000,1,77,1,78)
hasLocation(#20090,#20091)
regexp_const_value(#20090,"]")
#20092=*
regexpterm(#20092,23,#20077,1,"[\S--[\p{P}<>]]")
#20093=@"loc,{#10000},1,82,1,96"
locations_default(#20093,#10000,1,82,1,96)
hasLocation(#20092,#20093)
regexpterm(#20083,20,#20082,0,"\S")
#20084=@"loc,{#10000},1,70,1,71"
locations_default(#20084,#10000,1,70,1,71)
hasLocation(#20083,#20084)
char_class_escape(#20083,"S")
#20085=*
regexpterm(#20085,23,#20082,1,"[\[\]]")
#20086=@"loc,{#10000},1,74,1,79"
locations_default(#20086,#10000,1,74,1,79)
hasLocation(#20085,#20086)
#20087=*
regexpterm(#20087,21,#20085,0,"\[")
#20088=@"loc,{#10000},1,75,1,76"
locations_default(#20088,#10000,1,75,1,76)
hasLocation(#20087,#20088)
regexp_const_value(#20087,"[")
#20089=*
regexpterm(#20089,21,#20085,1,"\]")
#20090=@"loc,{#10000},1,77,1,78"
locations_default(#20090,#10000,1,77,1,78)
hasLocation(#20089,#20090)
regexp_const_value(#20089,"]")
#20091=*
regexpterm(#20091,23,#20076,1,"[\S--[\p{P}<>]]")
#20092=@"loc,{#10000},1,82,1,96"
locations_default(#20092,#10000,1,82,1,96)
hasLocation(#20091,#20092)
#20093=*
regexpterm(#20093,30,#20091,0,"[\S--[\p{P}<>]]")
hasLocation(#20093,#20092)
#20094=*
regexpterm(#20094,30,#20092,0,"[\S--[\p{P}<>]]")
hasLocation(#20094,#20093)
#20095=*
regexpterm(#20095,20,#20094,0,"\S")
#20096=@"loc,{#10000},1,83,1,84"
locations_default(#20096,#10000,1,83,1,84)
hasLocation(#20095,#20096)
char_class_escape(#20095,"S")
#20097=*
regexpterm(#20097,23,#20094,1,"[\p{P}<>]")
#20098=@"loc,{#10000},1,87,1,95"
locations_default(#20098,#10000,1,87,1,95)
hasLocation(#20097,#20098)
#20099=*
regexpterm(#20099,31,#20097,0,"[\p{P}<>]")
hasLocation(#20099,#20098)
regexpterm(#20094,20,#20093,0,"\S")
#20095=@"loc,{#10000},1,83,1,84"
locations_default(#20095,#10000,1,83,1,84)
hasLocation(#20094,#20095)
char_class_escape(#20094,"S")
#20096=*
regexpterm(#20096,23,#20093,1,"[\p{P}<>]")
#20097=@"loc,{#10000},1,87,1,95"
locations_default(#20097,#10000,1,87,1,95)
hasLocation(#20096,#20097)
#20098=*
regexpterm(#20098,27,#20096,0,"\p{P}")
#20099=@"loc,{#10000},1,88,1,92"
locations_default(#20099,#10000,1,88,1,92)
hasLocation(#20098,#20099)
unicode_property_escapename(#20098,"P")
#20100=*
regexpterm(#20100,27,#20099,0,"\p{P}")
#20101=@"loc,{#10000},1,88,1,92"
locations_default(#20101,#10000,1,88,1,92)
regexpterm(#20100,14,#20096,1,"<")
#20101=@"loc,{#10000},1,93,1,93"
locations_default(#20101,#10000,1,93,1,93)
hasLocation(#20100,#20101)
unicode_property_escapename(#20100,"P")
regexp_const_value(#20100,"<")
#20102=*
regexpterm(#20102,14,#20099,1,"<")
#20103=@"loc,{#10000},1,93,1,93"
locations_default(#20103,#10000,1,93,1,93)
regexpterm(#20102,14,#20096,2,">")
#20103=@"loc,{#10000},1,94,1,94"
locations_default(#20103,#10000,1,94,1,94)
hasLocation(#20102,#20103)
regexp_const_value(#20102,"<")
regexp_const_value(#20102,">")
#20104=*
regexpterm(#20104,14,#20099,2,">")
#20105=@"loc,{#10000},1,94,1,94"
locations_default(#20105,#10000,1,94,1,94)
regexpterm(#20104,1,#20023,1,"\b[\S--[@\p{Ps}\p{Pe}<>]]+@([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)")
#20105=@"loc,{#10000},1,100,1,167"
locations_default(#20105,#10000,1,100,1,167)
hasLocation(#20104,#20105)
regexp_const_value(#20104,">")
#20106=*
regexpterm(#20106,1,#20023,1,"\b[\S--[@\p{Ps}\p{Pe}<>]]+@([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)")
#20107=@"loc,{#10000},1,100,1,167"
locations_default(#20107,#10000,1,100,1,167)
regexpterm(#20106,4,#20104,0,"\b")
#20107=@"loc,{#10000},1,100,1,101"
locations_default(#20107,#10000,1,100,1,101)
hasLocation(#20106,#20107)
#20108=*
regexpterm(#20108,4,#20106,0,"\b")
#20109=@"loc,{#10000},1,100,1,101"
locations_default(#20109,#10000,1,100,1,101)
regexpterm(#20108,9,#20104,1,"[\S--[@\p{Ps}\p{Pe}<>]]+")
#20109=@"loc,{#10000},1,102,1,125"
locations_default(#20109,#10000,1,102,1,125)
hasLocation(#20108,#20109)
is_greedy(#20108)
#20110=*
regexpterm(#20110,9,#20106,1,"[\S--[@\p{Ps}\p{Pe}<>]]+")
#20111=@"loc,{#10000},1,102,1,125"
locations_default(#20111,#10000,1,102,1,125)
regexpterm(#20110,23,#20108,0,"[\S--[@\p{Ps}\p{Pe}<>]]")
#20111=@"loc,{#10000},1,102,1,124"
locations_default(#20111,#10000,1,102,1,124)
hasLocation(#20110,#20111)
is_greedy(#20110)
#20112=*
regexpterm(#20112,23,#20110,0,"[\S--[@\p{Ps}\p{Pe}<>]]")
#20113=@"loc,{#10000},1,102,1,124"
locations_default(#20113,#10000,1,102,1,124)
hasLocation(#20112,#20113)
#20114=*
regexpterm(#20114,30,#20112,0,"[\S--[@\p{Ps}\p{Pe}<>]]")
hasLocation(#20114,#20113)
regexpterm(#20112,30,#20110,0,"[\S--[@\p{Ps}\p{Pe}<>]]")
hasLocation(#20112,#20111)
#20113=*
regexpterm(#20113,20,#20112,0,"\S")
#20114=@"loc,{#10000},1,103,1,104"
locations_default(#20114,#10000,1,103,1,104)
hasLocation(#20113,#20114)
char_class_escape(#20113,"S")
#20115=*
regexpterm(#20115,20,#20114,0,"\S")
#20116=@"loc,{#10000},1,103,1,104"
locations_default(#20116,#10000,1,103,1,104)
regexpterm(#20115,23,#20112,1,"[@\p{Ps}\p{Pe}<>]")
#20116=@"loc,{#10000},1,107,1,123"
locations_default(#20116,#10000,1,107,1,123)
hasLocation(#20115,#20116)
char_class_escape(#20115,"S")
#20117=*
regexpterm(#20117,23,#20114,1,"[@\p{Ps}\p{Pe}<>]")
#20118=@"loc,{#10000},1,107,1,123"
locations_default(#20118,#10000,1,107,1,123)
regexpterm(#20117,14,#20115,0,"@")
#20118=@"loc,{#10000},1,108,1,108"
locations_default(#20118,#10000,1,108,1,108)
hasLocation(#20117,#20118)
regexp_const_value(#20117,"@")
#20119=*
regexpterm(#20119,31,#20117,0,"[@\p{Ps}\p{Pe}<>]")
hasLocation(#20119,#20118)
#20120=*
regexpterm(#20120,14,#20119,0,"@")
#20121=@"loc,{#10000},1,108,1,108"
locations_default(#20121,#10000,1,108,1,108)
hasLocation(#20120,#20121)
regexp_const_value(#20120,"@")
#20122=*
regexpterm(#20122,27,#20119,1,"\p{Ps}")
#20123=@"loc,{#10000},1,109,1,114"
locations_default(#20123,#10000,1,109,1,114)
hasLocation(#20122,#20123)
unicode_property_escapename(#20122,"Ps")
#20124=*
regexpterm(#20124,27,#20119,2,"\p{Pe}")
#20125=@"loc,{#10000},1,115,1,120"
locations_default(#20125,#10000,1,115,1,120)
hasLocation(#20124,#20125)
unicode_property_escapename(#20124,"Pe")
#20126=*
regexpterm(#20126,14,#20119,3,"<")
#20127=@"loc,{#10000},1,121,1,121"
locations_default(#20127,#10000,1,121,1,121)
hasLocation(#20126,#20127)
regexp_const_value(#20126,"<")
#20128=*
regexpterm(#20128,14,#20119,4,">")
#20129=@"loc,{#10000},1,122,1,122"
locations_default(#20129,#10000,1,122,1,122)
hasLocation(#20128,#20129)
regexp_const_value(#20128,">")
#20130=*
regexpterm(#20130,14,#20106,2,"@")
#20131=@"loc,{#10000},1,126,1,126"
locations_default(#20131,#10000,1,126,1,126)
hasLocation(#20130,#20131)
regexp_const_value(#20130,"@")
#20132=*
regexpterm(#20132,13,#20106,3,"([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)")
#20133=@"loc,{#10000},1,127,1,167"
locations_default(#20133,#10000,1,127,1,167)
hasLocation(#20132,#20133)
is_capture(#20132,1)
#20134=*
regexpterm(#20134,1,#20132,0,"[\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+")
#20135=@"loc,{#10000},1,128,1,166"
locations_default(#20135,#10000,1,128,1,166)
hasLocation(#20134,#20135)
#20136=*
regexpterm(#20136,9,#20134,0,"[\S--[\p{P}<>]]+")
#20137=@"loc,{#10000},1,128,1,143"
locations_default(#20137,#10000,1,128,1,143)
hasLocation(#20136,#20137)
is_greedy(#20136)
regexpterm(#20119,27,#20115,1,"\p{Ps}")
#20120=@"loc,{#10000},1,109,1,114"
locations_default(#20120,#10000,1,109,1,114)
hasLocation(#20119,#20120)
unicode_property_escapename(#20119,"Ps")
#20121=*
regexpterm(#20121,27,#20115,2,"\p{Pe}")
#20122=@"loc,{#10000},1,115,1,120"
locations_default(#20122,#10000,1,115,1,120)
hasLocation(#20121,#20122)
unicode_property_escapename(#20121,"Pe")
#20123=*
regexpterm(#20123,14,#20115,3,"<")
#20124=@"loc,{#10000},1,121,1,121"
locations_default(#20124,#10000,1,121,1,121)
hasLocation(#20123,#20124)
regexp_const_value(#20123,"<")
#20125=*
regexpterm(#20125,14,#20115,4,">")
#20126=@"loc,{#10000},1,122,1,122"
locations_default(#20126,#10000,1,122,1,122)
hasLocation(#20125,#20126)
regexp_const_value(#20125,">")
#20127=*
regexpterm(#20127,14,#20104,2,"@")
#20128=@"loc,{#10000},1,126,1,126"
locations_default(#20128,#10000,1,126,1,126)
hasLocation(#20127,#20128)
regexp_const_value(#20127,"@")
#20129=*
regexpterm(#20129,13,#20104,3,"([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)")
#20130=@"loc,{#10000},1,127,1,167"
locations_default(#20130,#10000,1,127,1,167)
hasLocation(#20129,#20130)
is_capture(#20129,1)
#20131=*
regexpterm(#20131,1,#20129,0,"[\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+")
#20132=@"loc,{#10000},1,128,1,166"
locations_default(#20132,#10000,1,128,1,166)
hasLocation(#20131,#20132)
#20133=*
regexpterm(#20133,9,#20131,0,"[\S--[\p{P}<>]]+")
#20134=@"loc,{#10000},1,128,1,143"
locations_default(#20134,#10000,1,128,1,143)
hasLocation(#20133,#20134)
is_greedy(#20133)
#20135=*
regexpterm(#20135,23,#20133,0,"[\S--[\p{P}<>]]")
#20136=@"loc,{#10000},1,128,1,142"
locations_default(#20136,#10000,1,128,1,142)
hasLocation(#20135,#20136)
#20137=*
regexpterm(#20137,30,#20135,0,"[\S--[\p{P}<>]]")
hasLocation(#20137,#20136)
#20138=*
regexpterm(#20138,23,#20136,0,"[\S--[\p{P}<>]]")
#20139=@"loc,{#10000},1,128,1,142"
locations_default(#20139,#10000,1,128,1,142)
regexpterm(#20138,20,#20137,0,"\S")
#20139=@"loc,{#10000},1,129,1,130"
locations_default(#20139,#10000,1,129,1,130)
hasLocation(#20138,#20139)
char_class_escape(#20138,"S")
#20140=*
regexpterm(#20140,30,#20138,0,"[\S--[\p{P}<>]]")
hasLocation(#20140,#20139)
#20141=*
regexpterm(#20141,20,#20140,0,"\S")
#20142=@"loc,{#10000},1,129,1,130"
locations_default(#20142,#10000,1,129,1,130)
hasLocation(#20141,#20142)
char_class_escape(#20141,"S")
#20143=*
regexpterm(#20143,23,#20140,1,"[\p{P}<>]")
#20144=@"loc,{#10000},1,133,1,141"
locations_default(#20144,#10000,1,133,1,141)
hasLocation(#20143,#20144)
#20145=*
regexpterm(#20145,31,#20143,0,"[\p{P}<>]")
hasLocation(#20145,#20144)
regexpterm(#20140,23,#20137,1,"[\p{P}<>]")
#20141=@"loc,{#10000},1,133,1,141"
locations_default(#20141,#10000,1,133,1,141)
hasLocation(#20140,#20141)
#20142=*
regexpterm(#20142,27,#20140,0,"\p{P}")
#20143=@"loc,{#10000},1,134,1,138"
locations_default(#20143,#10000,1,134,1,138)
hasLocation(#20142,#20143)
unicode_property_escapename(#20142,"P")
#20144=*
regexpterm(#20144,14,#20140,1,"<")
#20145=@"loc,{#10000},1,139,1,139"
locations_default(#20145,#10000,1,139,1,139)
hasLocation(#20144,#20145)
regexp_const_value(#20144,"<")
#20146=*
regexpterm(#20146,27,#20145,0,"\p{P}")
#20147=@"loc,{#10000},1,134,1,138"
locations_default(#20147,#10000,1,134,1,138)
regexpterm(#20146,14,#20140,2,">")
#20147=@"loc,{#10000},1,140,1,140"
locations_default(#20147,#10000,1,140,1,140)
hasLocation(#20146,#20147)
unicode_property_escapename(#20146,"P")
regexp_const_value(#20146,">")
#20148=*
regexpterm(#20148,14,#20145,1,"<")
#20149=@"loc,{#10000},1,139,1,139"
locations_default(#20149,#10000,1,139,1,139)
regexpterm(#20148,9,#20131,1,"(?:\.[\S--[\p{P}<>]]+)+")
#20149=@"loc,{#10000},1,144,1,166"
locations_default(#20149,#10000,1,144,1,166)
hasLocation(#20148,#20149)
regexp_const_value(#20148,"<")
is_greedy(#20148)
#20150=*
regexpterm(#20150,14,#20145,2,">")
#20151=@"loc,{#10000},1,140,1,140"
locations_default(#20151,#10000,1,140,1,140)
regexpterm(#20150,13,#20148,0,"(?:\.[\S--[\p{P}<>]]+)")
#20151=@"loc,{#10000},1,144,1,165"
locations_default(#20151,#10000,1,144,1,165)
hasLocation(#20150,#20151)
regexp_const_value(#20150,">")
#20152=*
regexpterm(#20152,9,#20134,1,"(?:\.[\S--[\p{P}<>]]+)+")
#20153=@"loc,{#10000},1,144,1,166"
locations_default(#20153,#10000,1,144,1,166)
regexpterm(#20152,1,#20150,0,"\.[\S--[\p{P}<>]]+")
#20153=@"loc,{#10000},1,147,1,164"
locations_default(#20153,#10000,1,147,1,164)
hasLocation(#20152,#20153)
is_greedy(#20152)
#20154=*
regexpterm(#20154,13,#20152,0,"(?:\.[\S--[\p{P}<>]]+)")
#20155=@"loc,{#10000},1,144,1,165"
locations_default(#20155,#10000,1,144,1,165)
regexpterm(#20154,21,#20152,0,"\.")
#20155=@"loc,{#10000},1,147,1,148"
locations_default(#20155,#10000,1,147,1,148)
hasLocation(#20154,#20155)
regexp_const_value(#20154,".")
#20156=*
regexpterm(#20156,1,#20154,0,"\.[\S--[\p{P}<>]]+")
#20157=@"loc,{#10000},1,147,1,164"
locations_default(#20157,#10000,1,147,1,164)
regexpterm(#20156,9,#20152,1,"[\S--[\p{P}<>]]+")
#20157=@"loc,{#10000},1,149,1,164"
locations_default(#20157,#10000,1,149,1,164)
hasLocation(#20156,#20157)
is_greedy(#20156)
#20158=*
regexpterm(#20158,21,#20156,0,"\.")
#20159=@"loc,{#10000},1,147,1,148"
locations_default(#20159,#10000,1,147,1,148)
regexpterm(#20158,23,#20156,0,"[\S--[\p{P}<>]]")
#20159=@"loc,{#10000},1,149,1,163"
locations_default(#20159,#10000,1,149,1,163)
hasLocation(#20158,#20159)
regexp_const_value(#20158,".")
#20160=*
regexpterm(#20160,9,#20156,1,"[\S--[\p{P}<>]]+")
#20161=@"loc,{#10000},1,149,1,164"
locations_default(#20161,#10000,1,149,1,164)
hasLocation(#20160,#20161)
is_greedy(#20160)
#20162=*
regexpterm(#20162,23,#20160,0,"[\S--[\p{P}<>]]")
#20163=@"loc,{#10000},1,149,1,163"
locations_default(#20163,#10000,1,149,1,163)
hasLocation(#20162,#20163)
#20164=*
regexpterm(#20164,30,#20162,0,"[\S--[\p{P}<>]]")
hasLocation(#20164,#20163)
regexpterm(#20160,30,#20158,0,"[\S--[\p{P}<>]]")
hasLocation(#20160,#20159)
#20161=*
regexpterm(#20161,20,#20160,0,"\S")
#20162=@"loc,{#10000},1,150,1,151"
locations_default(#20162,#10000,1,150,1,151)
hasLocation(#20161,#20162)
char_class_escape(#20161,"S")
#20163=*
regexpterm(#20163,23,#20160,1,"[\p{P}<>]")
#20164=@"loc,{#10000},1,154,1,162"
locations_default(#20164,#10000,1,154,1,162)
hasLocation(#20163,#20164)
#20165=*
regexpterm(#20165,20,#20164,0,"\S")
#20166=@"loc,{#10000},1,150,1,151"
locations_default(#20166,#10000,1,150,1,151)
regexpterm(#20165,27,#20163,0,"\p{P}")
#20166=@"loc,{#10000},1,155,1,159"
locations_default(#20166,#10000,1,155,1,159)
hasLocation(#20165,#20166)
char_class_escape(#20165,"S")
unicode_property_escapename(#20165,"P")
#20167=*
regexpterm(#20167,23,#20164,1,"[\p{P}<>]")
#20168=@"loc,{#10000},1,154,1,162"
locations_default(#20168,#10000,1,154,1,162)
regexpterm(#20167,14,#20163,1,"<")
#20168=@"loc,{#10000},1,160,1,160"
locations_default(#20168,#10000,1,160,1,160)
hasLocation(#20167,#20168)
regexp_const_value(#20167,"<")
#20169=*
regexpterm(#20169,31,#20167,0,"[\p{P}<>]")
hasLocation(#20169,#20168)
#20170=*
regexpterm(#20170,27,#20169,0,"\p{P}")
#20171=@"loc,{#10000},1,155,1,159"
locations_default(#20171,#10000,1,155,1,159)
hasLocation(#20170,#20171)
unicode_property_escapename(#20170,"P")
#20172=*
regexpterm(#20172,14,#20169,1,"<")
#20173=@"loc,{#10000},1,160,1,160"
locations_default(#20173,#10000,1,160,1,160)
hasLocation(#20172,#20173)
regexp_const_value(#20172,"<")
#20174=*
regexpterm(#20174,14,#20169,2,">")
#20175=@"loc,{#10000},1,161,1,161"
locations_default(#20175,#10000,1,161,1,161)
hasLocation(#20174,#20175)
regexp_const_value(#20174,">")
#20176=*
entry_cfg_node(#20176,#20001)
#20177=@"loc,{#10000},1,1,1,0"
locations_default(#20177,#10000,1,1,1,0)
hasLocation(#20176,#20177)
#20178=*
exit_cfg_node(#20178,#20001)
hasLocation(#20178,#20015)
regexpterm(#20169,14,#20163,2,">")
#20170=@"loc,{#10000},1,161,1,161"
locations_default(#20170,#10000,1,161,1,161)
hasLocation(#20169,#20170)
regexp_const_value(#20169,">")
#20171=*
entry_cfg_node(#20171,#20001)
#20172=@"loc,{#10000},1,1,1,0"
locations_default(#20172,#10000,1,1,1,0)
hasLocation(#20171,#20172)
#20173=*
exit_cfg_node(#20173,#20001)
hasLocation(#20173,#20015)
successor(#20018,#20021)
successor(#20022,#20019)
successor(#20021,#20022)
successor(#20019,#20178)
successor(#20176,#20018)
successor(#20019,#20173)
successor(#20171,#20018)
numlines(#10000,1,1,0)
filetype(#10000,"javascript")

View File

@@ -131,274 +131,262 @@ regexpterm(#20043,23,#20042,0,"[\p{Script_Extensions=Greek}\p{RGI_Emoji}]")
locations_default(#20044,#10000,1,2,1,43)
hasLocation(#20043,#20044)
#20045=*
regexpterm(#20045,31,#20043,0,"[\p{Script_Extensions=Greek}\p{RGI_Emoji}]")
hasLocation(#20045,#20044)
#20046=*
regexpterm(#20046,27,#20045,0,"\p{Script_Extensions=Greek}")
#20047=@"loc,{#10000},1,3,1,29"
locations_default(#20047,#10000,1,3,1,29)
hasLocation(#20046,#20047)
unicode_property_escapename(#20046,"Script_Extensions")
unicode_property_escapevalue(#20046,"Greek")
#20048=*
regexpterm(#20048,27,#20045,1,"\p{RGI_Emoji}")
#20049=@"loc,{#10000},1,30,1,42"
locations_default(#20049,#10000,1,30,1,42)
hasLocation(#20048,#20049)
unicode_property_escapename(#20048,"RGI_Emoji")
regexpterm(#20045,27,#20043,0,"\p{Script_Extensions=Greek}")
#20046=@"loc,{#10000},1,3,1,29"
locations_default(#20046,#10000,1,3,1,29)
hasLocation(#20045,#20046)
unicode_property_escapename(#20045,"Script_Extensions")
unicode_property_escapevalue(#20045,"Greek")
#20047=*
regexpterm(#20047,27,#20043,1,"\p{RGI_Emoji}")
#20048=@"loc,{#10000},1,30,1,42"
locations_default(#20048,#10000,1,30,1,42)
hasLocation(#20047,#20048)
unicode_property_escapename(#20047,"RGI_Emoji")
#20049=*
stmts(#20049,2,#20001,1,"/[[abc][cbd]]/v;")
hasLocation(#20049,#20005)
stmt_containers(#20049,#20001)
#20050=*
stmts(#20050,2,#20001,1,"/[[abc][cbd]]/v;")
hasLocation(#20050,#20005)
stmt_containers(#20050,#20001)
exprs(#20050,5,#20049,0,"/[[abc][cbd]]/v")
hasLocation(#20050,#20019)
enclosing_stmt(#20050,#20049)
expr_containers(#20050,#20001)
literals("/[[abc][cbd]]/v","/[[abc][cbd]]/v",#20050)
#20051=*
exprs(#20051,5,#20050,0,"/[[abc][cbd]]/v")
hasLocation(#20051,#20019)
enclosing_stmt(#20051,#20050)
expr_containers(#20051,#20001)
literals("/[[abc][cbd]]/v","/[[abc][cbd]]/v",#20051)
#20052=*
regexpterm(#20052,23,#20051,0,"[[abc][cbd]]")
#20053=@"loc,{#10000},2,2,2,13"
locations_default(#20053,#10000,2,2,2,13)
hasLocation(#20052,#20053)
#20054=*
regexpterm(#20054,31,#20052,0,"[[abc][cbd]]")
hasLocation(#20054,#20053)
regexpterm(#20051,23,#20050,0,"[[abc][cbd]]")
#20052=@"loc,{#10000},2,2,2,13"
locations_default(#20052,#10000,2,2,2,13)
hasLocation(#20051,#20052)
#20053=*
regexpterm(#20053,23,#20051,0,"[abc]")
#20054=@"loc,{#10000},2,3,2,7"
locations_default(#20054,#10000,2,3,2,7)
hasLocation(#20053,#20054)
#20055=*
regexpterm(#20055,23,#20054,0,"[abc]")
#20056=@"loc,{#10000},2,3,2,7"
locations_default(#20056,#10000,2,3,2,7)
regexpterm(#20055,14,#20053,0,"a")
#20056=@"loc,{#10000},2,4,2,4"
locations_default(#20056,#10000,2,4,2,4)
hasLocation(#20055,#20056)
regexp_const_value(#20055,"a")
#20057=*
regexpterm(#20057,14,#20055,0,"a")
#20058=@"loc,{#10000},2,4,2,4"
locations_default(#20058,#10000,2,4,2,4)
regexpterm(#20057,14,#20053,1,"b")
#20058=@"loc,{#10000},2,5,2,5"
locations_default(#20058,#10000,2,5,2,5)
hasLocation(#20057,#20058)
regexp_const_value(#20057,"a")
regexp_const_value(#20057,"b")
#20059=*
regexpterm(#20059,14,#20055,1,"b")
#20060=@"loc,{#10000},2,5,2,5"
locations_default(#20060,#10000,2,5,2,5)
regexpterm(#20059,14,#20053,2,"c")
#20060=@"loc,{#10000},2,6,2,6"
locations_default(#20060,#10000,2,6,2,6)
hasLocation(#20059,#20060)
regexp_const_value(#20059,"b")
regexp_const_value(#20059,"c")
#20061=*
regexpterm(#20061,14,#20055,2,"c")
#20062=@"loc,{#10000},2,6,2,6"
locations_default(#20062,#10000,2,6,2,6)
regexpterm(#20061,23,#20051,1,"[cbd]")
#20062=@"loc,{#10000},2,8,2,12"
locations_default(#20062,#10000,2,8,2,12)
hasLocation(#20061,#20062)
regexp_const_value(#20061,"c")
#20063=*
regexpterm(#20063,23,#20054,1,"[cbd]")
#20064=@"loc,{#10000},2,8,2,12"
locations_default(#20064,#10000,2,8,2,12)
regexpterm(#20063,14,#20061,0,"c")
#20064=@"loc,{#10000},2,9,2,9"
locations_default(#20064,#10000,2,9,2,9)
hasLocation(#20063,#20064)
regexp_const_value(#20063,"c")
#20065=*
regexpterm(#20065,14,#20063,0,"c")
#20066=@"loc,{#10000},2,9,2,9"
locations_default(#20066,#10000,2,9,2,9)
regexpterm(#20065,14,#20061,1,"b")
#20066=@"loc,{#10000},2,10,2,10"
locations_default(#20066,#10000,2,10,2,10)
hasLocation(#20065,#20066)
regexp_const_value(#20065,"c")
regexp_const_value(#20065,"b")
#20067=*
regexpterm(#20067,14,#20063,1,"b")
#20068=@"loc,{#10000},2,10,2,10"
locations_default(#20068,#10000,2,10,2,10)
regexpterm(#20067,14,#20061,2,"d")
#20068=@"loc,{#10000},2,11,2,11"
locations_default(#20068,#10000,2,11,2,11)
hasLocation(#20067,#20068)
regexp_const_value(#20067,"b")
regexp_const_value(#20067,"d")
#20069=*
regexpterm(#20069,14,#20063,2,"d")
#20070=@"loc,{#10000},2,11,2,11"
locations_default(#20070,#10000,2,11,2,11)
hasLocation(#20069,#20070)
regexp_const_value(#20069,"d")
stmts(#20069,2,#20001,2,"/[\p{Em ... byz]/v;")
hasLocation(#20069,#20007)
stmt_containers(#20069,#20001)
#20070=*
exprs(#20070,5,#20069,0,"/[\p{Em ... }byz]/v")
hasLocation(#20070,#20023)
enclosing_stmt(#20070,#20069)
expr_containers(#20070,#20001)
literals("/[\p{Emoji}\q{a&}byz]/v","/[\p{Emoji}\q{a&}byz]/v",#20070)
#20071=*
stmts(#20071,2,#20001,2,"/[\p{Em ... byz]/v;")
hasLocation(#20071,#20007)
stmt_containers(#20071,#20001)
#20072=*
exprs(#20072,5,#20071,0,"/[\p{Em ... }byz]/v")
hasLocation(#20072,#20023)
enclosing_stmt(#20072,#20071)
expr_containers(#20072,#20001)
literals("/[\p{Emoji}\q{a&}byz]/v","/[\p{Emoji}\q{a&}byz]/v",#20072)
regexpterm(#20071,23,#20070,0,"[\p{Emoji}\q{a&}byz]")
#20072=@"loc,{#10000},3,2,3,21"
locations_default(#20072,#10000,3,2,3,21)
hasLocation(#20071,#20072)
#20073=*
regexpterm(#20073,23,#20072,0,"[\p{Emoji}\q{a&}byz]")
#20074=@"loc,{#10000},3,2,3,21"
locations_default(#20074,#10000,3,2,3,21)
regexpterm(#20073,27,#20071,0,"\p{Emoji}")
#20074=@"loc,{#10000},3,3,3,11"
locations_default(#20074,#10000,3,3,3,11)
hasLocation(#20073,#20074)
unicode_property_escapename(#20073,"Emoji")
#20075=*
regexpterm(#20075,31,#20073,0,"[\p{Emoji}\q{a&}byz]")
hasLocation(#20075,#20074)
#20076=*
regexpterm(#20076,27,#20075,0,"\p{Emoji}")
#20077=@"loc,{#10000},3,3,3,11"
locations_default(#20077,#10000,3,3,3,11)
hasLocation(#20076,#20077)
unicode_property_escapename(#20076,"Emoji")
#20078=*
regexpterm(#20078,28,#20075,1,"\q{a&}")
#20079=@"loc,{#10000},3,12,3,17"
locations_default(#20079,#10000,3,12,3,17)
hasLocation(#20078,#20079)
#20080=*
regexpterm(#20080,14,#20078,0,"a&")
#20081=@"loc,{#10000},3,15,3,16"
locations_default(#20081,#10000,3,15,3,16)
hasLocation(#20080,#20081)
regexp_const_value(#20080,"a&")
#20082=*
regexpterm(#20082,14,#20075,2,"b")
#20083=@"loc,{#10000},3,18,3,18"
locations_default(#20083,#10000,3,18,3,18)
hasLocation(#20082,#20083)
regexp_const_value(#20082,"b")
#20084=*
regexpterm(#20084,14,#20075,3,"y")
#20085=@"loc,{#10000},3,19,3,19"
locations_default(#20085,#10000,3,19,3,19)
hasLocation(#20084,#20085)
regexp_const_value(#20084,"y")
regexpterm(#20075,28,#20071,1,"\q{a&}")
#20076=@"loc,{#10000},3,12,3,17"
locations_default(#20076,#10000,3,12,3,17)
hasLocation(#20075,#20076)
#20077=*
regexpterm(#20077,14,#20075,0,"a&")
#20078=@"loc,{#10000},3,15,3,16"
locations_default(#20078,#10000,3,15,3,16)
hasLocation(#20077,#20078)
regexp_const_value(#20077,"a&")
#20079=*
regexpterm(#20079,14,#20071,2,"b")
#20080=@"loc,{#10000},3,18,3,18"
locations_default(#20080,#10000,3,18,3,18)
hasLocation(#20079,#20080)
regexp_const_value(#20079,"b")
#20081=*
regexpterm(#20081,14,#20071,3,"y")
#20082=@"loc,{#10000},3,19,3,19"
locations_default(#20082,#10000,3,19,3,19)
hasLocation(#20081,#20082)
regexp_const_value(#20081,"y")
#20083=*
regexpterm(#20083,14,#20071,4,"z")
#20084=@"loc,{#10000},3,20,3,20"
locations_default(#20084,#10000,3,20,3,20)
hasLocation(#20083,#20084)
regexp_const_value(#20083,"z")
#20085=*
stmts(#20085,2,#20001,3,"/[\q{\\\}a&}byz]/v;")
hasLocation(#20085,#20009)
stmt_containers(#20085,#20001)
#20086=*
regexpterm(#20086,14,#20075,4,"z")
#20087=@"loc,{#10000},3,20,3,20"
locations_default(#20087,#10000,3,20,3,20)
hasLocation(#20086,#20087)
regexp_const_value(#20086,"z")
#20088=*
stmts(#20088,2,#20001,3,"/[\q{\\\}a&}byz]/v;")
hasLocation(#20088,#20009)
stmt_containers(#20088,#20001)
exprs(#20086,5,#20085,0,"/[\q{\\\}a&}byz]/v")
hasLocation(#20086,#20027)
enclosing_stmt(#20086,#20085)
expr_containers(#20086,#20001)
literals("/[\q{\\\}a&}byz]/v","/[\q{\\\}a&}byz]/v",#20086)
#20087=*
regexpterm(#20087,23,#20086,0,"[\q{\\\}a&}byz]")
#20088=@"loc,{#10000},4,2,4,16"
locations_default(#20088,#10000,4,2,4,16)
hasLocation(#20087,#20088)
#20089=*
exprs(#20089,5,#20088,0,"/[\q{\\\}a&}byz]/v")
hasLocation(#20089,#20027)
enclosing_stmt(#20089,#20088)
expr_containers(#20089,#20001)
literals("/[\q{\\\}a&}byz]/v","/[\q{\\\}a&}byz]/v",#20089)
#20090=*
regexpterm(#20090,23,#20089,0,"[\q{\\\}a&}byz]")
#20091=@"loc,{#10000},4,2,4,16"
locations_default(#20091,#10000,4,2,4,16)
hasLocation(#20090,#20091)
#20092=*
regexpterm(#20092,31,#20090,0,"[\q{\\\}a&}byz]")
hasLocation(#20092,#20091)
regexpterm(#20089,28,#20087,0,"\q{\\\}a&}")
#20090=@"loc,{#10000},4,3,4,12"
locations_default(#20090,#10000,4,3,4,12)
hasLocation(#20089,#20090)
#20091=*
regexpterm(#20091,14,#20089,0,"\\\}a&")
#20092=@"loc,{#10000},4,6,4,11"
locations_default(#20092,#10000,4,6,4,11)
hasLocation(#20091,#20092)
regexp_const_value(#20091,"\\\}a&")
#20093=*
regexpterm(#20093,28,#20092,0,"\q{\\\}a&}")
#20094=@"loc,{#10000},4,3,4,12"
locations_default(#20094,#10000,4,3,4,12)
regexpterm(#20093,14,#20087,1,"b")
#20094=@"loc,{#10000},4,13,4,13"
locations_default(#20094,#10000,4,13,4,13)
hasLocation(#20093,#20094)
regexp_const_value(#20093,"b")
#20095=*
regexpterm(#20095,14,#20093,0,"\\\}a&")
#20096=@"loc,{#10000},4,6,4,11"
locations_default(#20096,#10000,4,6,4,11)
regexpterm(#20095,14,#20087,2,"y")
#20096=@"loc,{#10000},4,14,4,14"
locations_default(#20096,#10000,4,14,4,14)
hasLocation(#20095,#20096)
regexp_const_value(#20095,"\\\}a&")
regexp_const_value(#20095,"y")
#20097=*
regexpterm(#20097,14,#20092,1,"b")
#20098=@"loc,{#10000},4,13,4,13"
locations_default(#20098,#10000,4,13,4,13)
regexpterm(#20097,14,#20087,3,"z")
#20098=@"loc,{#10000},4,15,4,15"
locations_default(#20098,#10000,4,15,4,15)
hasLocation(#20097,#20098)
regexp_const_value(#20097,"b")
regexp_const_value(#20097,"z")
#20099=*
regexpterm(#20099,14,#20092,2,"y")
#20100=@"loc,{#10000},4,14,4,14"
locations_default(#20100,#10000,4,14,4,14)
hasLocation(#20099,#20100)
regexp_const_value(#20099,"y")
stmts(#20099,2,#20001,4,"/[\q{\\}]/v;")
hasLocation(#20099,#20011)
stmt_containers(#20099,#20001)
#20100=*
exprs(#20100,5,#20099,0,"/[\q{\\}]/v")
hasLocation(#20100,#20031)
enclosing_stmt(#20100,#20099)
expr_containers(#20100,#20001)
literals("/[\q{\\}]/v","/[\q{\\}]/v",#20100)
#20101=*
regexpterm(#20101,14,#20092,3,"z")
#20102=@"loc,{#10000},4,15,4,15"
locations_default(#20102,#10000,4,15,4,15)
regexpterm(#20101,23,#20100,0,"[\q{\\}]")
#20102=@"loc,{#10000},5,2,5,9"
locations_default(#20102,#10000,5,2,5,9)
hasLocation(#20101,#20102)
regexp_const_value(#20101,"z")
#20103=*
stmts(#20103,2,#20001,4,"/[\q{\\}]/v;")
hasLocation(#20103,#20011)
stmt_containers(#20103,#20001)
#20104=*
exprs(#20104,5,#20103,0,"/[\q{\\}]/v")
hasLocation(#20104,#20031)
enclosing_stmt(#20104,#20103)
expr_containers(#20104,#20001)
literals("/[\q{\\}]/v","/[\q{\\}]/v",#20104)
regexpterm(#20103,28,#20101,0,"\q{\\}")
#20104=@"loc,{#10000},5,3,5,8"
locations_default(#20104,#10000,5,3,5,8)
hasLocation(#20103,#20104)
#20105=*
regexpterm(#20105,23,#20104,0,"[\q{\\}]")
#20106=@"loc,{#10000},5,2,5,9"
locations_default(#20106,#10000,5,2,5,9)
regexpterm(#20105,14,#20103,0,"\\")
#20106=@"loc,{#10000},5,6,5,7"
locations_default(#20106,#10000,5,6,5,7)
hasLocation(#20105,#20106)
regexp_const_value(#20105,"\\")
#20107=*
regexpterm(#20107,28,#20105,0,"\q{\\}")
#20108=@"loc,{#10000},5,3,5,8"
locations_default(#20108,#10000,5,3,5,8)
hasLocation(#20107,#20108)
stmts(#20107,2,#20001,5,"/[\q{abc|cbd|\}}]/v;")
hasLocation(#20107,#20013)
stmt_containers(#20107,#20001)
#20108=*
exprs(#20108,5,#20107,0,"/[\q{abc|cbd|\}}]/v")
hasLocation(#20108,#20035)
enclosing_stmt(#20108,#20107)
expr_containers(#20108,#20001)
literals("/[\q{abc|cbd|\}}]/v","/[\q{abc|cbd|\}}]/v",#20108)
#20109=*
regexpterm(#20109,14,#20107,0,"\\")
#20110=@"loc,{#10000},5,6,5,7"
locations_default(#20110,#10000,5,6,5,7)
regexpterm(#20109,23,#20108,0,"[\q{abc|cbd|\}}]")
#20110=@"loc,{#10000},6,2,6,17"
locations_default(#20110,#10000,6,2,6,17)
hasLocation(#20109,#20110)
regexp_const_value(#20109,"\\")
#20111=*
stmts(#20111,2,#20001,5,"/[\q{abc|cbd|\}}]/v;")
hasLocation(#20111,#20013)
stmt_containers(#20111,#20001)
#20112=*
exprs(#20112,5,#20111,0,"/[\q{abc|cbd|\}}]/v")
hasLocation(#20112,#20035)
enclosing_stmt(#20112,#20111)
expr_containers(#20112,#20001)
literals("/[\q{abc|cbd|\}}]/v","/[\q{abc|cbd|\}}]/v",#20112)
regexpterm(#20111,28,#20109,0,"\q{abc|cbd|\}}")
#20112=@"loc,{#10000},6,3,6,16"
locations_default(#20112,#10000,6,3,6,16)
hasLocation(#20111,#20112)
#20113=*
regexpterm(#20113,23,#20112,0,"[\q{abc|cbd|\}}]")
#20114=@"loc,{#10000},6,2,6,17"
locations_default(#20114,#10000,6,2,6,17)
regexpterm(#20113,0,#20111,0,"abc|cbd|\}")
#20114=@"loc,{#10000},6,6,6,15"
locations_default(#20114,#10000,6,6,6,15)
hasLocation(#20113,#20114)
#20115=*
regexpterm(#20115,28,#20113,0,"\q{abc|cbd|\}}")
#20116=@"loc,{#10000},6,3,6,16"
locations_default(#20116,#10000,6,3,6,16)
regexpterm(#20115,14,#20113,0,"abc")
#20116=@"loc,{#10000},6,6,6,8"
locations_default(#20116,#10000,6,6,6,8)
hasLocation(#20115,#20116)
regexp_const_value(#20115,"abc")
#20117=*
regexpterm(#20117,0,#20115,0,"abc|cbd|\}")
#20118=@"loc,{#10000},6,6,6,15"
locations_default(#20118,#10000,6,6,6,15)
regexpterm(#20117,14,#20113,1,"cbd")
#20118=@"loc,{#10000},6,10,6,12"
locations_default(#20118,#10000,6,10,6,12)
hasLocation(#20117,#20118)
regexp_const_value(#20117,"cbd")
#20119=*
regexpterm(#20119,14,#20117,0,"abc")
#20120=@"loc,{#10000},6,6,6,8"
locations_default(#20120,#10000,6,6,6,8)
regexpterm(#20119,14,#20113,2,"\}")
#20120=@"loc,{#10000},6,14,6,15"
locations_default(#20120,#10000,6,14,6,15)
hasLocation(#20119,#20120)
regexp_const_value(#20119,"abc")
regexp_const_value(#20119,"\}")
#20121=*
regexpterm(#20121,14,#20117,1,"cbd")
#20122=@"loc,{#10000},6,10,6,12"
locations_default(#20122,#10000,6,10,6,12)
entry_cfg_node(#20121,#20001)
#20122=@"loc,{#10000},1,1,1,0"
locations_default(#20122,#10000,1,1,1,0)
hasLocation(#20121,#20122)
regexp_const_value(#20121,"cbd")
#20123=*
regexpterm(#20123,14,#20117,2,"\}")
#20124=@"loc,{#10000},6,14,6,15"
locations_default(#20124,#10000,6,14,6,15)
hasLocation(#20123,#20124)
regexp_const_value(#20123,"\}")
#20125=*
entry_cfg_node(#20125,#20001)
#20126=@"loc,{#10000},1,1,1,0"
locations_default(#20126,#10000,1,1,1,0)
hasLocation(#20125,#20126)
#20127=*
exit_cfg_node(#20127,#20001)
hasLocation(#20127,#20039)
successor(#20111,#20112)
successor(#20112,#20127)
successor(#20103,#20104)
successor(#20104,#20111)
successor(#20088,#20089)
successor(#20089,#20103)
successor(#20071,#20072)
successor(#20072,#20088)
successor(#20050,#20051)
successor(#20051,#20071)
exit_cfg_node(#20123,#20001)
hasLocation(#20123,#20039)
successor(#20107,#20108)
successor(#20108,#20123)
successor(#20099,#20100)
successor(#20100,#20107)
successor(#20085,#20086)
successor(#20086,#20099)
successor(#20069,#20070)
successor(#20070,#20085)
successor(#20049,#20050)
successor(#20050,#20069)
successor(#20041,#20042)
successor(#20042,#20050)
successor(#20125,#20041)
successor(#20042,#20049)
successor(#20121,#20041)
numlines(#10000,6,6,0)
filetype(#10000,"javascript")

View File

@@ -862,8 +862,7 @@ case @regexpterm.kind of
| 27 = @regexp_unicode_property_escape
| 28 = @regexp_quoted_string
| 29 = @regexp_intersection
| 30 = @regexp_subtraction
| 31 = @regexp_union;
| 30 = @regexp_subtraction;
regexp_parse_errors (unique int id: @regexp_parse_error,
int regexp: @regexpterm ref,