Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JS: Add ECMAScript 2024 v Flag Operators for Regex Parsing #18899

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added test cases for union.
  • Loading branch information
Napalys committed Mar 3, 2025
commit 1e05f327d635b92adbf143fbd67cc4c9f8bcb44b
6 changes: 6 additions & 0 deletions javascript/extractor/tests/es2024/input/union.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/[\p{Script_Extensions=Greek}\p{RGI_Emoji}]/v;
/[[abc][cbd]]/v;
/[\p{Emoji}\q{a&}byz]/v;
/[\q{\\\}a&}byz]/v;
/[\q{\\}]/v;
/[\q{abc|cbd|\}}]/v;
392 changes: 392 additions & 0 deletions javascript/extractor/tests/es2024/output/trap/union.js.trap
Original file line number Diff line number Diff line change
@@ -0,0 +1,392 @@
#10000=@"/union.js;sourcefile"
files(#10000,"/union.js")
#10001=@"/;folder"
folders(#10001,"/")
containerparent(#10001,#10000)
#10002=@"loc,{#10000},0,0,0,0"
locations_default(#10002,#10000,0,0,0,0)
hasLocation(#10000,#10002)
#20000=@"global_scope"
scopes(#20000,0)
#20001=@"script;{#10000},1,1"
#20002=*
lines(#20002,#20001,"/[\p{Script_Extensions=Greek}\p{RGI_Emoji}]/v;","
")
#20003=@"loc,{#10000},1,1,1,46"
locations_default(#20003,#10000,1,1,1,46)
hasLocation(#20002,#20003)
#20004=*
lines(#20004,#20001,"/[[abc][cbd]]/v;","
")
#20005=@"loc,{#10000},2,1,2,16"
locations_default(#20005,#10000,2,1,2,16)
hasLocation(#20004,#20005)
#20006=*
lines(#20006,#20001,"/[\p{Emoji}\q{a&}byz]/v;","
")
#20007=@"loc,{#10000},3,1,3,24"
locations_default(#20007,#10000,3,1,3,24)
hasLocation(#20006,#20007)
#20008=*
lines(#20008,#20001,"/[\q{\\\}a&}byz]/v;","
")
#20009=@"loc,{#10000},4,1,4,19"
locations_default(#20009,#10000,4,1,4,19)
hasLocation(#20008,#20009)
#20010=*
lines(#20010,#20001,"/[\q{\\}]/v;","
")
#20011=@"loc,{#10000},5,1,5,12"
locations_default(#20011,#10000,5,1,5,12)
hasLocation(#20010,#20011)
#20012=*
lines(#20012,#20001,"/[\q{abc|cbd|\}}]/v;","
")
#20013=@"loc,{#10000},6,1,6,20"
locations_default(#20013,#10000,6,1,6,20)
hasLocation(#20012,#20013)
numlines(#20001,6,6,0)
#20014=*
tokeninfo(#20014,5,#20001,0,"/[\p{Script_Extensions=Greek}\p{RGI_Emoji}]/v")
#20015=@"loc,{#10000},1,1,1,45"
locations_default(#20015,#10000,1,1,1,45)
hasLocation(#20014,#20015)
#20016=*
tokeninfo(#20016,8,#20001,1,";")
#20017=@"loc,{#10000},1,46,1,46"
locations_default(#20017,#10000,1,46,1,46)
hasLocation(#20016,#20017)
#20018=*
tokeninfo(#20018,5,#20001,2,"/[[abc][cbd]]/v")
#20019=@"loc,{#10000},2,1,2,15"
locations_default(#20019,#10000,2,1,2,15)
hasLocation(#20018,#20019)
#20020=*
tokeninfo(#20020,8,#20001,3,";")
#20021=@"loc,{#10000},2,16,2,16"
locations_default(#20021,#10000,2,16,2,16)
hasLocation(#20020,#20021)
#20022=*
tokeninfo(#20022,5,#20001,4,"/[\p{Emoji}\q{a&}byz]/v")
#20023=@"loc,{#10000},3,1,3,23"
locations_default(#20023,#10000,3,1,3,23)
hasLocation(#20022,#20023)
#20024=*
tokeninfo(#20024,8,#20001,5,";")
#20025=@"loc,{#10000},3,24,3,24"
locations_default(#20025,#10000,3,24,3,24)
hasLocation(#20024,#20025)
#20026=*
tokeninfo(#20026,5,#20001,6,"/[\q{\\\}a&}byz]/v")
#20027=@"loc,{#10000},4,1,4,18"
locations_default(#20027,#10000,4,1,4,18)
hasLocation(#20026,#20027)
#20028=*
tokeninfo(#20028,8,#20001,7,";")
#20029=@"loc,{#10000},4,19,4,19"
locations_default(#20029,#10000,4,19,4,19)
hasLocation(#20028,#20029)
#20030=*
tokeninfo(#20030,5,#20001,8,"/[\q{\\}]/v")
#20031=@"loc,{#10000},5,1,5,11"
locations_default(#20031,#10000,5,1,5,11)
hasLocation(#20030,#20031)
#20032=*
tokeninfo(#20032,8,#20001,9,";")
#20033=@"loc,{#10000},5,12,5,12"
locations_default(#20033,#10000,5,12,5,12)
hasLocation(#20032,#20033)
#20034=*
tokeninfo(#20034,5,#20001,10,"/[\q{abc|cbd|\}}]/v")
#20035=@"loc,{#10000},6,1,6,19"
locations_default(#20035,#10000,6,1,6,19)
hasLocation(#20034,#20035)
#20036=*
tokeninfo(#20036,8,#20001,11,";")
#20037=@"loc,{#10000},6,20,6,20"
locations_default(#20037,#10000,6,20,6,20)
hasLocation(#20036,#20037)
#20038=*
tokeninfo(#20038,0,#20001,12,"")
#20039=@"loc,{#10000},7,1,7,0"
locations_default(#20039,#10000,7,1,7,0)
hasLocation(#20038,#20039)
toplevels(#20001,0)
#20040=@"loc,{#10000},1,1,7,0"
locations_default(#20040,#10000,1,1,7,0)
hasLocation(#20001,#20040)
#20041=*
stmts(#20041,2,#20001,0,"/[\p{Sc ... ji}]/v;")
hasLocation(#20041,#20003)
stmt_containers(#20041,#20001)
#20042=*
exprs(#20042,5,#20041,0,"/[\p{Sc ... oji}]/v")
hasLocation(#20042,#20015)
enclosing_stmt(#20042,#20041)
expr_containers(#20042,#20001)
literals("/[\p{Script_Extensions=Greek}\p{RGI_Emoji}]/v","/[\p{Script_Extensions=Greek}\p{RGI_Emoji}]/v",#20042)
#20043=*
regexpterm(#20043,23,#20042,0,"[\p{Script_Extensions=Greek}\p{RGI_Emoji}]")
#20044=@"loc,{#10000},1,2,1,43"
locations_default(#20044,#10000,1,2,1,43)
hasLocation(#20043,#20044)
#20045=*
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=*
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=*
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,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,#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,"b")
#20059=*
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,"c")
#20061=*
regexpterm(#20061,23,#20051,1,"[cbd]")
#20062=@"loc,{#10000},2,8,2,12"
locations_default(#20062,#10000,2,8,2,12)
hasLocation(#20061,#20062)
#20063=*
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,#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,"b")
#20067=*
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,"d")
#20069=*
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=*
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,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,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=*
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=*
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,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,#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,"y")
#20097=*
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,"z")
#20099=*
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,23,#20100,0,"[\q{\\}]")
#20102=@"loc,{#10000},5,2,5,9"
locations_default(#20102,#10000,5,2,5,9)
hasLocation(#20101,#20102)
#20103=*
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,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=*
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,23,#20108,0,"[\q{abc|cbd|\}}]")
#20110=@"loc,{#10000},6,2,6,17"
locations_default(#20110,#10000,6,2,6,17)
hasLocation(#20109,#20110)
#20111=*
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,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,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,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,#20113,2,"\}")
#20120=@"loc,{#10000},6,14,6,15"
locations_default(#20120,#10000,6,14,6,15)
hasLocation(#20119,#20120)
regexp_const_value(#20119,"\}")
#20121=*
entry_cfg_node(#20121,#20001)
#20122=@"loc,{#10000},1,1,1,0"
locations_default(#20122,#10000,1,1,1,0)
hasLocation(#20121,#20122)
#20123=*
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,#20049)
successor(#20121,#20041)
numlines(#10000,6,6,0)
filetype(#10000,"javascript")