curly -> Curly

This commit is contained in:
Chris Wanstrath 2025-11-06 13:32:31 -08:00
parent 503ca41155
commit 63ee57e7f0
5 changed files with 66 additions and 63 deletions

View File

@ -41,7 +41,7 @@ finally { @specialize[@name=keyword]<Identifier, "finally"> }
throw { @specialize[@name=keyword]<Identifier, "throw"> }
null { @specialize[@name=Null]<Identifier, "null"> }
@external tokens tokenizer from "./tokenizer" { Identifier, AssignableIdentifier, Word, IdentifierBeforeDot, curlyString }
@external tokens tokenizer from "./tokenizer" { Identifier, AssignableIdentifier, Word, IdentifierBeforeDot, CurlyString }
@external specialize {Identifier} specializeKeyword from "./tokenizer" { Do }
@precedence {
@ -234,7 +234,7 @@ expression {
}
String {
"'" stringContent* "'" | curlyString
"'" stringContent* "'" | CurlyString
}
}

View File

@ -31,46 +31,46 @@ export const
AssignableIdentifier = 29,
Word = 30,
IdentifierBeforeDot = 31,
curlyString = 95,
Do = 32,
Comment = 33,
Program = 34,
PipeExpr = 35,
WhileExpr = 37,
keyword = 79,
ConditionalOp = 39,
ParenExpr = 40,
FunctionCallWithNewlines = 41,
DotGet = 42,
Number = 43,
PositionalArg = 44,
FunctionDef = 45,
Params = 46,
NamedParam = 47,
NamedArgPrefix = 48,
String = 49,
StringFragment = 50,
Interpolation = 51,
EscapeSeq = 52,
Boolean = 53,
Null = 54,
colon = 55,
CatchExpr = 56,
Block = 58,
FinallyExpr = 59,
Underscore = 62,
NamedArg = 63,
IfExpr = 64,
FunctionCall = 66,
ElseIfExpr = 67,
ElseExpr = 69,
FunctionCallOrIdentifier = 70,
BinOp = 71,
Regex = 72,
Dict = 73,
Array = 74,
FunctionCallWithBlock = 75,
TryExpr = 76,
Throw = 78,
CompoundAssign = 80,
Assign = 81
CurlyString = 32,
Do = 33,
Comment = 34,
Program = 35,
PipeExpr = 36,
WhileExpr = 38,
keyword = 80,
ConditionalOp = 40,
ParenExpr = 41,
FunctionCallWithNewlines = 42,
DotGet = 43,
Number = 44,
PositionalArg = 45,
FunctionDef = 46,
Params = 47,
NamedParam = 48,
NamedArgPrefix = 49,
String = 50,
StringFragment = 51,
Interpolation = 52,
EscapeSeq = 53,
Boolean = 54,
Null = 55,
colon = 56,
CatchExpr = 57,
Block = 59,
FinallyExpr = 60,
Underscore = 63,
NamedArg = 64,
IfExpr = 65,
FunctionCall = 67,
ElseIfExpr = 68,
ElseExpr = 70,
FunctionCallOrIdentifier = 71,
BinOp = 72,
Regex = 73,
Dict = 74,
Array = 75,
FunctionCallWithBlock = 76,
TryExpr = 77,
Throw = 79,
CompoundAssign = 81,
Assign = 82

View File

@ -4,24 +4,24 @@ import {operatorTokenizer} from "./operatorTokenizer"
import {tokenizer, specializeKeyword} from "./tokenizer"
import {trackScope} from "./parserScopeContext"
import {highlighting} from "./highlight"
const spec_Identifier = {__proto__:null,while:76, null:108, catch:114, finally:120, end:122, if:130, else:136, try:154, throw:158}
const spec_Identifier = {__proto__:null,while:78, null:110, catch:116, finally:122, end:124, if:132, else:138, try:156, throw:160}
export const parser = LRParser.deserialize({
version: 14,
states: "<zQYQbOOO!gOpO'#DWO!lOSO'#D_OOQa'#D_'#D_O%dQcO'#DtO(aQcO'#EeOOQ`'#Es'#EsO(zQRO'#DuO+PQcO'#EcO+jQbO'#DUOOQa'#Dw'#DwO-uQbO'#DxOOQa'#Ee'#EeO-|QcO'#EeO/zQcO'#EdO1PQcO'#EcO1^QRO'#EOOOQ`'#Ec'#EcO1uQbO'#EcO1|QQO'#EbOOQ`'#Eb'#EbOOQ`'#EQ'#EQQYQbOOO2XQbO'#DZO2dQbO'#DnO3[QbO'#DRO4SQQO'#DzO3[QbO'#D|O4XObO,59rO4dQbO'#DaO4lQWO'#DbOOOO'#Ek'#EkOOOO'#EV'#EVO5QOSO,59yOOQa,59y,59yOOQ`'#DY'#DYO5`QbO'#DmOOQ`'#Ei'#EiOOQ`'#EY'#EYO5jQbO,5:[OOQa'#Ed'#EdO3[QbO,5:aO3[QbO,5:aO3[QbO,5:aO3[QbO,5:aO3[QbO,59oO3[QbO,59oO3[QbO,59oO3[QbO,59oOOQ`'#ES'#ESO+jQbO,59pO6dQcO'#DtO6kQcO'#EeO6rQRO,59pO6|QQO,59pO7RQQO,59pO7ZQQO,59pO7fQRO,59pO8OQRO,59pO8VQQO'#DPO8[QbO,5:dO8cQQO,5:cOOQa,5:d,5:dO8nQbO,5:dO8xQbO,5:kO8xQbO,5:jO:SQbO,5:eO:ZQbO,59kOOQ`,5:|,5:|O8xQbO'#EROOQ`-E8O-E8OOOQ`'#ET'#ETO:uQbO'#D[O;QQbO'#D]OOQO'#EU'#EUO:xQQO'#D[O;cQQO,59uO;hQcO'#EdO<eQRO'#ErO=bQRO'#ErOOQO'#Er'#ErO=iQQO,5:YO=nQRO,59mO=uQRO,59mO:SQbO,5:fO>TQcO,5:hO?cQcO,5:hO@PQcO,5:hOOQa1G/^1G/^OOOO,59{,59{OOOO,59|,59|OOOO-E8T-E8TOOQa1G/e1G/eOOQ`,5:X,5:XOOQ`-E8W-E8WOOQa1G/{1G/{OA{QcO1G/{OBVQcO1G/{OCeQcO1G/{OCoQcO1G/{OC|QcO1G/{OOQa1G/Z1G/ZOE_QcO1G/ZOEfQcO1G/ZOEmQcO1G/ZOFlQcO1G/ZOEtQcO1G/ZOOQ`-E8Q-E8QOGSQRO1G/[OG^QQO1G/[OGcQQO1G/[OGkQQO1G/[OGvQRO1G/[OG}QRO1G/[OHUQbO,59qOH`QQO1G/[OOQa1G/[1G/[OHhQQO1G/}OOQa1G0O1G0OOHsQbO1G0OOOQO'#E['#E[OHhQQO1G/}OOQa1G/}1G/}OOQ`'#E]'#E]OHsQbO1G0OOH}QbO1G0VOIiQbO1G0UOJTQbO'#DhOJfQbO'#DhOJyQbO1G0POOQ`-E8P-E8POOQ`,5:m,5:mOOQ`-E8R-E8ROKUQQO,59vOOQO,59w,59wOOQO-E8S-E8SOK^QbO1G/aO:SQbO1G/tO:SQbO1G/XOKeQbO1G0QOKpQQO7+$vOOQa7+$v7+$vOKxQQO1G/]OLQQQO7+%iOOQa7+%i7+%iOL]QbO7+%jOOQa7+%j7+%jOOQO-E8Y-E8YOOQ`-E8Z-E8ZOOQ`'#EW'#EWOLgQQO'#EWOLoQbO'#EqOOQ`,5:S,5:SOMSQbO'#DfOMXQQO'#DiOOQ`7+%k7+%kOM^QbO7+%kOMcQbO7+%kOMkQbO7+${OMyQbO7+${ONZQbO7+%`ONcQbO7+$sOOQ`7+%l7+%lONhQbO7+%lONmQbO7+%lOOQa<<Hb<<HbONuQbO7+$wO! SQQO7+$wOOQa<<IT<<ITOOQa<<IU<<IUOOQ`,5:r,5:rOOQ`-E8U-E8UO! [QQO,5:QO:SQbO,5:TOOQ`<<IV<<IVO! aQbO<<IVOOQ`<<Hg<<HgO! fQbO<<HgO! kQbO<<HgO! sQbO<<HgOOQ`'#EZ'#EZO!!OQbO<<HzO!!WQbO'#DsOOQ`<<Hz<<HzO!!`QbO<<HzOOQ`<<H_<<H_OOQ`<<IW<<IWO!!eQbO<<IWOOQO,5:s,5:sO!!jQbO<<HcOOQO-E8V-E8VO:SQbO1G/lOOQ`1G/o1G/oOOQ`AN>qAN>qOOQ`AN>RAN>RO!!wQbOAN>RO!!|QbOAN>ROOQ`-E8X-E8XOOQ`AN>fAN>fO!#UQbOAN>fO2dQbO,5:]O:SQbO,5:_OOQ`AN>rAN>rPHUQbO'#ESOOQ`7+%W7+%WOOQ`G23mG23mO!#ZQbOG23mP!!ZQbO'#DqOOQ`G24QG24QO!#`QQO1G/wOOQ`1G/y1G/yOOQ`LD)XLD)XO:SQbO7+%cOOQ`<<H}<<H}",
stateData: "!#h~O#TOSqOS~OlSOm`On[OoPOpgOviO{[O!V[O!W[O!chO!j[O!ojO!qkO#RRO#YXO#ZdO#^QO#iYO#jZO~O#[lO~O!SoO#^rO#`mO#anO~OlxOn[OoPOpgO{[O!QtO!V[O!W[O!`sO!j[O#RRO#YXO#^QO#iYO#jZOP#WXQ#WXR#WXS#WXT#WXU#WXW#WXX#WXY#WXZ#WX[#WX]#WX^#WXd#WXe#WXf#WXg#WXh#WXi#WXj#WXt!hX!X!hX#h!hX~O#Z!hX#l!hX!Z!hX!^!hX!_!hX!f!hX~P!zOlxOn[OoPOpgO{[O!QtO!V[O!W[O!`sO!j[O#RRO#YXO#^QO#iYO#jZOP#XXQ#XXR#XXS#XXT#XXU#XXW#XXX#XXY#XXZ#XX[#XX]#XX^#XXd#XXe#XXf#XXg#XXh#XXi#XXj#XXt#XX#h#XX~O#Z#XX#l#XX!X#XX!Z#XX!^#XX!_#XX!f#XX~P%zOPzOQzOR{OS{OT!OOU!POW}OX}OY}OZ}O[}O]}O^yOd|Oe|Of|Og|Oh|Oi|Oj!QO~OPzOQzOR{OS{Od|Oe|Of|Og|Oh|Oi|Ot#VX~O#Z#VX#l#VX!Z#VX!^#VX!_#VX#h#VX!f#VX~P*[Ol!TOm`On[OoPOpgOviO{[O!V[O!W[O!chO!j[O!ojO!qkO#RRO#YXO#Z!RO#^QO#iYO#jZO~OlxOn[OoPO{[O!QtO!V[O!W[O!j[O#RRO#YXO#Z!RO#^QO#iYO#jZO~O#k!`O~P,wOV!bO#Z#XX#l#XX!Z#XX!^#XX!_#XX!f#XX~P&yOP#WXQ#WXR#WXS#WXT#WXU#WXW#WXX#WXY#WXZ#WX[#WX]#WX^#WXd#WXe#WXf#WXg#WXh#WXi#WXj#WXt#VX~O#Z#VX#l#VX!Z#VX!^#VX!_#VX#h#VX!f#VX~P.gOt#VX#Z#VX#l#VX!Z#VX!^#VX!_#VX#h#VX!f#VX~OT!OOU!POj!QO~P0eOV!bO_!cO`!cOa!cOb!cOc!cOk!cO~O!X!dO~P0eOt!gO#Z!fO#l!fO~Ol!iO!Q!kO!X!OP~Ol!oOn[OoPO{[O!V[O!W[O!j[O#RRO#YXO#^QO#iYO#jZO~OlxOn[OoPO{[O!V[O!W[O!j[O#RRO#YXO#^QO#iYO#jZO~O!X!vO~Ol!zO{!zO#YXO~Ol!{O#YXO~O#^!|O#`!|O#a!|O#b!|O#c!|O#d!|O~O!SoO#^#OO#`mO#anO~OpgO!`#PO~P3[OpgO!QtO!`sOt!da!X!da#Z!da#l!da#h!da!Z!da!^!da!_!da!f!da~P3[O#Z!RO~P!zO#Z!RO~P%zO#Z!RO#h#hO~P*[O#h#hO~O#h#hOt#VX~O!X!dO#h#hOt#VX~O#h#hO~P.gOT!OOU!POj!QO#Z!ROt#VX~O#h#hO~P7mOt!gO~O#k#jO~P,wO!QtO#Z#lO#k#nO~O#Z#oO#k#jO~P3[OlSOm`On[OoPOpgOviO{[O!V[O!W[O!chO!j[O!ojO!qkO#RRO#YXO#^QO#iYO#jZO~O#Z#tO~P8xOt!gO#Zsa#lsa#hsa!Zsa!^sa!_sa!fsa~Ol!iO!Q!kO!X!OX~O{#zO!V#zO!W#zO#RRO#^QO~O!X#|O~OpgO!QtO!`sOT#WXU#WXW#WXX#WXY#WXZ#WX[#WX]#WXj#WX!X#WX~P3[OT!OOU!POj!QO!X#fX~OT!OOU!POW}OX}OY}OZ}O[}O]}Oj!QO~O!X#fX~P<sO!X#}O~O!X$OO~P<sOT!OOU!POj!QO!X$OO~Ot!pa#Z!pa#l!pa!Z!pa!^!pa!_!pa#h!pa!f!pa~P(zOPzOQzOR{OS{Od|Oe|Of|Og|Oh|Oi|O~Ot!pa#Z!pa#l!pa!Z!pa!^!pa!_!pa#h!pa!f!pa~P>qOT!OOU!POj!QOt!pa#Z!pa#l!pa!Z!pa!^!pa!_!pa#h!pa!f!pa~O^yOR!iiS!iid!iie!iif!iig!iih!iii!iit!ii#Z!ii#l!ii#h!ii!Z!ii!^!ii!_!ii!f!ii~OP!iiQ!ii~P@tOPzOQzO~P@tOPzOQzOd!iie!iif!iig!iih!iii!iit!ii#Z!ii#l!ii#h!ii!Z!ii!^!ii!_!ii!f!ii~OR!iiS!ii~PBaOR{OS{O^yO~PBaOR{OS{O~PBaOW}OX}OY}OZ}O[}O]}OTwijwitwi#Zwi#lwi#hwi!Xwi!Zwi!^wi!_wi!fwi~OU!PO~PDWOU!PO~PDjOUwi~PDWOT!OOU!POjwitwi#Zwi#lwi#hwi!Xwi!Zwi!^wi!_wi!fwi~OW}OX}OY}OZ}O[}O]}O~PEtO#Z!RO#h$RO~P*[O#h$RO~O#h$ROt#VX~O!X!dO#h$ROt#VX~O#h$RO~P.gO#h$RO~P7mOpgO!`sO~P,wO#Z!RO#h$RO~O!QtO#Z#lO#k$UO~O#Z#oO#k$WO~P3[Ot!gO#Z!si#l!si!Z!si!^!si!_!si#h!si!f!si~Ot!gO#Z!ri#l!ri!Z!ri!^!ri!_!ri#h!ri!f!ri~Ot!gO!Z![X!^![X!_![X!f![X~O#Z$ZO!Z#eP!^#eP!_#eP!f#eP~P8xO!Z$_O!^$`O!_$aO~O!Q!kO!X!Oa~O#Z$eO~P8xO!Z$_O!^$`O!_$hO~O#Z!RO#h$kO~O#Z!RO#hyi~O!QtO#Z#lO#k$nO~O#Z#oO#k$oO~P3[Ot!gO#Z$pO~O#Z$ZO!Z#eX!^#eX!_#eX!f#eX~P8xOl$rO~O!X$sO~O!_$tO~O!^$`O!_$tO~Ot!gO!Z$_O!^$`O!_$vO~O#Z$ZO!Z#eP!^#eP!_#eP~P8xO!_$}O!f$|O~O!_%PO~O!_%QO~O!^$`O!_%QO~OpgO!`sO#hyq~P,wO#Z!RO#hyq~O!X%VO~O!_%XO~O!_%YO~O!^$`O!_%YO~O!Z$_O!^$`O!_%YO~O!_%^O!f$|O~O!X%aO!c%`O~O!_%^O~O!_%bO~OpgO!`sO#hyy~P,wO!_%eO~O!^$`O!_%eO~O!_%hO~O!_%kO~O!X%lO~O{!j~",
goto: "8g#hPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#iP$SP$i%g&u&{P(V(c)])`P)fP*m*mPPP*qP*}+gPPP+}#iP,g-QP-U-[-qP.h/l$S$SP$SP$S$S0r0x1U1x2O2Y2`2g2m2w2}3XPPPP3c3g4[6QPPP7[P7lPPPPP7p7v7|raOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ!XXR#b!SwaOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lr_Of!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ![XS!ph%`Q!uiQ!ykQ#X!PQ#Z!OQ#^!QR#e!SvTOfh!b!c!d!g!v#t#|#}$O$]$e$s%V%`%a%l!W[STZiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%cS!UX!SQ!zlR!{mQ!WXR#a!SrSOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%l!WxSTZiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%cS!TX!ST!oh%`euSTw!T!U!o#f$l%T%craOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%ldsSTw!T!U!o#f$l%T%cQ!XXQ#PtR#b!SR!ngX!lg!j!m#y#S[OSTXZfhiktwyz{|}!O!P!Q!S!T!U!^!a!b!c!d!g!o!v#f#k#p#t#|#}$O$V$]$e$l$s%T%V%`%a%c%lR#z!kToQqQ$c#uQ$j$PQ$x$dR%[$yQ#u!dQ$P!vQ$f#}Q$g$OQ%W$sQ%d%VQ%j%aR%m%lQ$b#uQ$i$PQ$u$cQ$w$dQ%R$jS%Z$x$yR%f%[duSTw!T!U!o#f$l%T%cQ!_ZQ#i!^X#l!_#i#m$TvUOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lT!rh%`T$z$f${Q%O$fR%_${wUOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lrWOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ!VXQ!xkQ#RzQ#U{Q#W|R#`!S#T[OSTXZfhiktwyz{|}!O!P!Q!S!T!U!^!a!b!c!d!g!o!v#f#k#p#t#|#}$O$V$]$e$l$s%T%V%`%a%c%l![[STZhiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%`%cw]OXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQfOR!hf^!ec!]#q#r#s$[$dR#v!eQ!SXQ!^Z`#_!S!^#f#g$Q$l%T%cS#f!T!US#g!V![S$Q#`#eQ$l$SR%T$mQ!jgR#x!jQ!mgQ#y!jT#{!m#yQqQR!}qS$]#t$eR$q$]Q$m$SR%U$mYwST!T!U!oR#QwQ${$fR%]${Q#m!_Q$T#iT$X#m$TQ#p!aQ$V#kT$Y#p$VTeOfScOfS!]X!SQ#q!bQ#r!c`#s!d!v#}$O$s%V%a%lQ#w!gU$[#t$]$eR$d#|vVOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%ldsSTw!T!U!o#f$l%T%cQ!aZS!qh%`Q!tiQ!wkQ#PtQ#RyQ#SzQ#T{Q#V|Q#X}Q#Y!OQ#[!PQ#]!QQ#k!^X#o!a#k#p$Vr^Of!b!c!d!g!v#t#|#}$O$]$e$s%V%a%l![xSTZhiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%`%cQ!ZXR#d!S[vSTw!T!U!oQ$S#fV%S$l%T%cTpQqQ$^#tR$y$eQ!shR%i%`rbOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ!YXR#c!S",
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Band Bor Bxor Shl Shr Ushr NullishCoalesce NullishEq Identifier AssignableIdentifier Word IdentifierBeforeDot Do Comment Program PipeExpr operator WhileExpr keyword ConditionalOp ParenExpr FunctionCall DotGet Number PositionalArg FunctionDef Params NamedParam NamedArgPrefix String StringFragment Interpolation EscapeSeq Boolean Null colon CatchExpr keyword Block FinallyExpr keyword keyword Underscore NamedArg IfExpr keyword FunctionCall ElseIfExpr keyword ElseExpr FunctionCallOrIdentifier BinOp Regex Dict Array FunctionCallWithBlock TryExpr keyword Throw keyword CompoundAssign Assign",
states: "<zQYQbOOO!gOpO'#DXO!lOSO'#D`OOQa'#D`'#D`O%dQcO'#DuO(aQcO'#EeOOQ`'#Es'#EsO(zQRO'#DvO+PQcO'#EcO+jQbO'#DVOOQa'#Dx'#DxO-uQbO'#DyOOQa'#Ee'#EeO-|QcO'#EeO/zQcO'#EdO1PQcO'#EcO1^QRO'#EPOOQ`'#Ec'#EcO1uQbO'#EcO1|QQO'#EbOOQ`'#Eb'#EbOOQ`'#ER'#ERQYQbOOO2XQbO'#D[O2dQbO'#DoO3[QbO'#DSO4SQQO'#D{O3[QbO'#D}O4XObO,59sO4dQbO'#DbO4lQWO'#DcOOOO'#Ek'#EkOOOO'#EW'#EWO5QOSO,59zOOQa,59z,59zOOQ`'#DZ'#DZO5`QbO'#DnOOQ`'#Ei'#EiOOQ`'#EZ'#EZO5jQbO,5:]OOQa'#Ed'#EdO3[QbO,5:bO3[QbO,5:bO3[QbO,5:bO3[QbO,5:bO3[QbO,59pO3[QbO,59pO3[QbO,59pO3[QbO,59pOOQ`'#ET'#ETO+jQbO,59qO6dQcO'#DuO6kQcO'#EeO6rQRO,59qO6|QQO,59qO7RQQO,59qO7ZQQO,59qO7fQRO,59qO8OQRO,59qO8VQQO'#DQO8[QbO,5:eO8cQQO,5:dOOQa,5:e,5:eO8nQbO,5:eO8xQbO,5:lO8xQbO,5:kO:SQbO,5:fO:ZQbO,59lOOQ`,5:|,5:|O8xQbO'#ESOOQ`-E8P-E8POOQ`'#EU'#EUO:uQbO'#D]O;QQbO'#D^OOQO'#EV'#EVO:xQQO'#D]O;cQQO,59vO;hQcO'#EdO<eQRO'#ErO=bQRO'#ErOOQO'#Er'#ErO=iQQO,5:ZO=nQRO,59nO=uQRO,59nO:SQbO,5:gO>TQcO,5:iO?cQcO,5:iO@PQcO,5:iOOQa1G/_1G/_OOOO,59|,59|OOOO,59},59}OOOO-E8U-E8UOOQa1G/f1G/fOOQ`,5:Y,5:YOOQ`-E8X-E8XOOQa1G/|1G/|OA{QcO1G/|OBVQcO1G/|OCeQcO1G/|OCoQcO1G/|OC|QcO1G/|OOQa1G/[1G/[OE_QcO1G/[OEfQcO1G/[OEmQcO1G/[OFlQcO1G/[OEtQcO1G/[OOQ`-E8R-E8ROGSQRO1G/]OG^QQO1G/]OGcQQO1G/]OGkQQO1G/]OGvQRO1G/]OG}QRO1G/]OHUQbO,59rOH`QQO1G/]OOQa1G/]1G/]OHhQQO1G0OOOQa1G0P1G0POHsQbO1G0POOQO'#E]'#E]OHhQQO1G0OOOQa1G0O1G0OOOQ`'#E^'#E^OHsQbO1G0POH}QbO1G0WOIiQbO1G0VOJTQbO'#DiOJfQbO'#DiOJyQbO1G0QOOQ`-E8Q-E8QOOQ`,5:n,5:nOOQ`-E8S-E8SOKUQQO,59wOOQO,59x,59xOOQO-E8T-E8TOK^QbO1G/bO:SQbO1G/uO:SQbO1G/YOKeQbO1G0ROKpQQO7+$wOOQa7+$w7+$wOKxQQO1G/^OLQQQO7+%jOOQa7+%j7+%jOL]QbO7+%kOOQa7+%k7+%kOOQO-E8Z-E8ZOOQ`-E8[-E8[OOQ`'#EX'#EXOLgQQO'#EXOLoQbO'#EqOOQ`,5:T,5:TOMSQbO'#DgOMXQQO'#DjOOQ`7+%l7+%lOM^QbO7+%lOMcQbO7+%lOMkQbO7+$|OMyQbO7+$|ONZQbO7+%aONcQbO7+$tOOQ`7+%m7+%mONhQbO7+%mONmQbO7+%mOOQa<<Hc<<HcONuQbO7+$xO! SQQO7+$xOOQa<<IU<<IUOOQa<<IV<<IVOOQ`,5:s,5:sOOQ`-E8V-E8VO! [QQO,5:RO:SQbO,5:UOOQ`<<IW<<IWO! aQbO<<IWOOQ`<<Hh<<HhO! fQbO<<HhO! kQbO<<HhO! sQbO<<HhOOQ`'#E['#E[O!!OQbO<<H{O!!WQbO'#DtOOQ`<<H{<<H{O!!`QbO<<H{OOQ`<<H`<<H`OOQ`<<IX<<IXO!!eQbO<<IXOOQO,5:t,5:tO!!jQbO<<HdOOQO-E8W-E8WO:SQbO1G/mOOQ`1G/p1G/pOOQ`AN>rAN>rOOQ`AN>SAN>SO!!wQbOAN>SO!!|QbOAN>SOOQ`-E8Y-E8YOOQ`AN>gAN>gO!#UQbOAN>gO2dQbO,5:^O:SQbO,5:`OOQ`AN>sAN>sPHUQbO'#ETOOQ`7+%X7+%XOOQ`G23nG23nO!#ZQbOG23nP!!ZQbO'#DrOOQ`G24RG24RO!#`QQO1G/xOOQ`1G/z1G/zOOQ`LD)YLD)YO:SQbO7+%dOOQ`<<IO<<IO",
stateData: "!#h~O#TOSrOS~OlSOm`On[OoPOpROqgOwiO|[O!W[O!X[O!dhO!k[O!pjO!rkO#YXO#ZdO#^QO#iYO#jZO~O#[lO~O!ToO#^rO#`mO#anO~OlxOn[OoPOpROqgO|[O!RtO!W[O!X[O!asO!k[O#YXO#^QO#iYO#jZOP#WXQ#WXR#WXS#WXT#WXU#WXW#WXX#WXY#WXZ#WX[#WX]#WX^#WXd#WXe#WXf#WXg#WXh#WXi#WXj#WXu!iX!Y!iX#h!iX~O#Z!iX#l!iX![!iX!_!iX!`!iX!g!iX~P!zOlxOn[OoPOpROqgO|[O!RtO!W[O!X[O!asO!k[O#YXO#^QO#iYO#jZOP#XXQ#XXR#XXS#XXT#XXU#XXW#XXX#XXY#XXZ#XX[#XX]#XX^#XXd#XXe#XXf#XXg#XXh#XXi#XXj#XXu#XX#h#XX~O#Z#XX#l#XX!Y#XX![#XX!_#XX!`#XX!g#XX~P%zOPzOQzOR{OS{OT!OOU!POW}OX}OY}OZ}O[}O]}O^yOd|Oe|Of|Og|Oh|Oi|Oj!QO~OPzOQzOR{OS{Od|Oe|Of|Og|Oh|Oi|Ou#VX~O#Z#VX#l#VX![#VX!_#VX!`#VX#h#VX!g#VX~P*[Ol!TOm`On[OoPOpROqgOwiO|[O!W[O!X[O!dhO!k[O!pjO!rkO#YXO#Z!RO#^QO#iYO#jZO~OlxOn[OoPOpRO|[O!RtO!W[O!X[O!k[O#YXO#Z!RO#^QO#iYO#jZO~O#k!`O~P,wOV!bO#Z#XX#l#XX![#XX!_#XX!`#XX!g#XX~P&yOP#WXQ#WXR#WXS#WXT#WXU#WXW#WXX#WXY#WXZ#WX[#WX]#WX^#WXd#WXe#WXf#WXg#WXh#WXi#WXj#WXu#VX~O#Z#VX#l#VX![#VX!_#VX!`#VX#h#VX!g#VX~P.gOu#VX#Z#VX#l#VX![#VX!_#VX!`#VX#h#VX!g#VX~OT!OOU!POj!QO~P0eOV!bO_!cO`!cOa!cOb!cOc!cOk!cO~O!Y!dO~P0eOu!gO#Z!fO#l!fO~Ol!iO!R!kO!Y!PP~Ol!oOn[OoPOpRO|[O!W[O!X[O!k[O#YXO#^QO#iYO#jZO~OlxOn[OoPOpRO|[O!W[O!X[O!k[O#YXO#^QO#iYO#jZO~O!Y!vO~Ol!zO|!zO#YXO~Ol!{O#YXO~O#^!|O#`!|O#a!|O#b!|O#c!|O#d!|O~O!ToO#^#OO#`mO#anO~OqgO!a#PO~P3[OqgO!RtO!asOu!ea!Y!ea#Z!ea#l!ea#h!ea![!ea!_!ea!`!ea!g!ea~P3[O#Z!RO~P!zO#Z!RO~P%zO#Z!RO#h#hO~P*[O#h#hO~O#h#hOu#VX~O!Y!dO#h#hOu#VX~O#h#hO~P.gOT!OOU!POj!QO#Z!ROu#VX~O#h#hO~P7mOu!gO~O#k#jO~P,wO!RtO#Z#lO#k#nO~O#Z#oO#k#jO~P3[OlSOm`On[OoPOpROqgOwiO|[O!W[O!X[O!dhO!k[O!pjO!rkO#YXO#^QO#iYO#jZO~O#Z#tO~P8xOu!gO#Zta#lta#hta![ta!_ta!`ta!gta~Ol!iO!R!kO!Y!PX~OpRO|#zO!W#zO!X#zO#^QO~O!Y#|O~OqgO!RtO!asOT#WXU#WXW#WXX#WXY#WXZ#WX[#WX]#WXj#WX!Y#WX~P3[OT!OOU!POj!QO!Y#fX~OT!OOU!POW}OX}OY}OZ}O[}O]}Oj!QO~O!Y#fX~P<sO!Y#}O~O!Y$OO~P<sOT!OOU!POj!QO!Y$OO~Ou!qa#Z!qa#l!qa![!qa!_!qa!`!qa#h!qa!g!qa~P(zOPzOQzOR{OS{Od|Oe|Of|Og|Oh|Oi|O~Ou!qa#Z!qa#l!qa![!qa!_!qa!`!qa#h!qa!g!qa~P>qOT!OOU!POj!QOu!qa#Z!qa#l!qa![!qa!_!qa!`!qa#h!qa!g!qa~O^yOR!jiS!jid!jie!jif!jig!jih!jii!jiu!ji#Z!ji#l!ji#h!ji![!ji!_!ji!`!ji!g!ji~OP!jiQ!ji~P@tOPzOQzO~P@tOPzOQzOd!jie!jif!jig!jih!jii!jiu!ji#Z!ji#l!ji#h!ji![!ji!_!ji!`!ji!g!ji~OR!jiS!ji~PBaOR{OS{O^yO~PBaOR{OS{O~PBaOW}OX}OY}OZ}O[}O]}OTxijxiuxi#Zxi#lxi#hxi!Yxi![xi!_xi!`xi!gxi~OU!PO~PDWOU!PO~PDjOUxi~PDWOT!OOU!POjxiuxi#Zxi#lxi#hxi!Yxi![xi!_xi!`xi!gxi~OW}OX}OY}OZ}O[}O]}O~PEtO#Z!RO#h$RO~P*[O#h$RO~O#h$ROu#VX~O!Y!dO#h$ROu#VX~O#h$RO~P.gO#h$RO~P7mOqgO!asO~P,wO#Z!RO#h$RO~O!RtO#Z#lO#k$UO~O#Z#oO#k$WO~P3[Ou!gO#Z!ti#l!ti![!ti!_!ti!`!ti#h!ti!g!ti~Ou!gO#Z!si#l!si![!si!_!si!`!si#h!si!g!si~Ou!gO![!]X!_!]X!`!]X!g!]X~O#Z$ZO![#eP!_#eP!`#eP!g#eP~P8xO![$_O!_$`O!`$aO~O!R!kO!Y!Pa~O#Z$eO~P8xO![$_O!_$`O!`$hO~O#Z!RO#h$kO~O#Z!RO#hzi~O!RtO#Z#lO#k$nO~O#Z#oO#k$oO~P3[Ou!gO#Z$pO~O#Z$ZO![#eX!_#eX!`#eX!g#eX~P8xOl$rO~O!Y$sO~O!`$tO~O!_$`O!`$tO~Ou!gO![$_O!_$`O!`$vO~O#Z$ZO![#eP!_#eP!`#eP~P8xO!`$}O!g$|O~O!`%PO~O!`%QO~O!_$`O!`%QO~OqgO!asO#hzq~P,wO#Z!RO#hzq~O!Y%VO~O!`%XO~O!`%YO~O!_$`O!`%YO~O![$_O!_$`O!`%YO~O!`%^O!g$|O~O!Y%aO!d%`O~O!`%^O~O!`%bO~OqgO!asO#hzy~P,wO!`%eO~O!_$`O!`%eO~O!`%hO~O!`%kO~O!Y%lO~O|!k~",
goto: "8g#hPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#iP$SP$i%g&u&{P(V(c)])`P)fP*m*mPPP*qP*}+gPPP+}#iP,g-QP-U-[-qP.h/l$S$SP$SP$S$S0r0x1U1x2O2Y2`2g2m2w2}3XPPP3c3g4[6QPPP7[P7lPPPPP7p7v7|raOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ!XXR#b!SwaOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lr_Of!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ![XS!ph%`Q!uiQ!ykQ#X!PQ#Z!OQ#^!QR#e!SvTOfh!b!c!d!g!v#t#|#}$O$]$e$s%V%`%a%l!W[STZiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%cS!UX!SQ!zlR!{mQ!WXR#a!SrSOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%l!WxSTZiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%cS!TX!ST!oh%`euSTw!T!U!o#f$l%T%craOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%ldsSTw!T!U!o#f$l%T%cQ!XXQ#PtR#b!SR!ngX!lg!j!m#y#S[OSTXZfhiktwyz{|}!O!P!Q!S!T!U!^!a!b!c!d!g!o!v#f#k#p#t#|#}$O$V$]$e$l$s%T%V%`%a%c%lR#z!kToQqQ$c#uQ$j$PQ$x$dR%[$yQ#u!dQ$P!vQ$f#}Q$g$OQ%W$sQ%d%VQ%j%aR%m%lQ$b#uQ$i$PQ$u$cQ$w$dQ%R$jS%Z$x$yR%f%[duSTw!T!U!o#f$l%T%cQ!_ZQ#i!^X#l!_#i#m$TvUOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lT!rh%`T$z$f${Q%O$fR%_${wUOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lrWOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ!VXQ!xkQ#RzQ#U{Q#W|R#`!S#T[OSTXZfhiktwyz{|}!O!P!Q!S!T!U!^!a!b!c!d!g!o!v#f#k#p#t#|#}$O$V$]$e$l$s%T%V%`%a%c%l![[STZhiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%`%cw]OXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQfOR!hf^!ec!]#q#r#s$[$dR#v!eQ!SXQ!^Z`#_!S!^#f#g$Q$l%T%cS#f!T!US#g!V![S$Q#`#eQ$l$SR%T$mQ!jgR#x!jQ!mgQ#y!jT#{!m#yQqQR!}qS$]#t$eR$q$]Q$m$SR%U$mYwST!T!U!oR#QwQ${$fR%]${Q#m!_Q$T#iT$X#m$TQ#p!aQ$V#kT$Y#p$VTeOfScOfS!]X!SQ#q!bQ#r!c`#s!d!v#}$O$s%V%a%lQ#w!gU$[#t$]$eR$d#|vVOXf!S!b!c!d!g!v#t#|#}$O$]$e$s%V%a%ldsSTw!T!U!o#f$l%T%cQ!aZS!qh%`Q!tiQ!wkQ#PtQ#RyQ#SzQ#T{Q#V|Q#X}Q#Y!OQ#[!PQ#]!QQ#k!^X#o!a#k#p$Vr^Of!b!c!d!g!v#t#|#}$O$]$e$s%V%a%l![xSTZhiktwyz{|}!O!P!Q!T!U!^!a!o#f#k#p$V$l%T%`%cQ!ZXR#d!S[vSTw!T!U!oQ$S#fV%S$l%T%cTpQqQ$^#tR$y$eQ!shR%i%`rbOf!b!c!d!g!v#t#|#}$O$]$e$s%V%a%lQ!YXR#c!S",
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Band Bor Bxor Shl Shr Ushr NullishCoalesce NullishEq Identifier AssignableIdentifier Word IdentifierBeforeDot CurlyString Do Comment Program PipeExpr operator WhileExpr keyword ConditionalOp ParenExpr FunctionCall DotGet Number PositionalArg FunctionDef Params NamedParam NamedArgPrefix String StringFragment Interpolation EscapeSeq Boolean Null colon CatchExpr keyword Block FinallyExpr keyword keyword Underscore NamedArg IfExpr keyword FunctionCall ElseIfExpr keyword ElseExpr FunctionCallOrIdentifier BinOp Regex Dict Array FunctionCallWithBlock TryExpr keyword Throw keyword CompoundAssign Assign",
maxTerm: 120,
context: trackScope,
nodeProps: [
["closedBy", 55,"end"]
["closedBy", 56,"end"]
],
propSources: [highlighting],
skippedNodes: [0,33],
skippedNodes: [0,34],
repeatNodeCount: 12,
tokenData: "IS~R}OX$OXY$mYZ%WZp$Opq$mqs$Ost%qtu'Yuw$Owx'_xy'dyz'}z{$O{|(h|}$O}!O(h!O!P$O!P!Q0o!Q!R)Y!R![+w![!]9[!]!^%W!^!}$O!}#O9u#O#P;k#P#Q;p#Q#R$O#R#S<Z#S#T$O#T#Y<t#Y#Z>`#Z#b<t#b#cC|#c#f<t#f#gEP#g#h<t#h#iFS#i#o<t#o#p$O#p#qHd#q;'S$O;'S;=`$g<%l~$O~O$O~~H}S$TU!SSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OS$jP;=`<%l$O^$tU!SS#TYOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU%_U!SS#ZQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$O^%xZqY!SSOY%qYZ$OZt%qtu&kuw%qwx&kx#O%q#O#P&k#P;'S%q;'S;=`'S<%lO%qY&pSqYOY&kZ;'S&k;'S;=`&|<%lO&kY'PP;=`<%l&k^'VP;=`<%l%q~'_O#`~~'dO#^~U'kU!SS#YQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU(UU!SS#hQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU(mX!SSOt$Ouw$Ox!Q$O!Q!R)Y!R![+w![#O$O#P;'S$O;'S;=`$g<%lO$OU)a`!SS{QOt$Ouw$Ox!O$O!O!P*c!P!Q$O!Q![+w![#O$O#P#R$O#R#S,t#S#U$O#U#V-c#V#l$O#l#m.w#m;'S$O;'S;=`$g<%lO$OU*hW!SSOt$Ouw$Ox!Q$O!Q![+Q![#O$O#P;'S$O;'S;=`$g<%lO$OU+XY!SS{QOt$Ouw$Ox!Q$O!Q![+Q![#O$O#P#R$O#R#S*c#S;'S$O;'S;=`$g<%lO$OU,O[!SS{QOt$Ouw$Ox!O$O!O!P*c!P!Q$O!Q![+w![#O$O#P#R$O#R#S,t#S;'S$O;'S;=`$g<%lO$OU,yW!SSOt$Ouw$Ox!Q$O!Q![+w![#O$O#P;'S$O;'S;=`$g<%lO$OU-hX!SSOt$Ouw$Ox!Q$O!Q!R.T!R!S.T!S#O$O#P;'S$O;'S;=`$g<%lO$OU.[X!SS{QOt$Ouw$Ox!Q$O!Q!R.T!R!S.T!S#O$O#P;'S$O;'S;=`$g<%lO$OU.|[!SSOt$Ouw$Ox!Q$O!Q![/r![!c$O!c!i/r!i#O$O#P#T$O#T#Z/r#Z;'S$O;'S;=`$g<%lO$OU/y[!SS{QOt$Ouw$Ox!Q$O!Q![/r![!c$O!c!i/r!i#O$O#P#T$O#T#Z/r#Z;'S$O;'S;=`$g<%lO$OU0tW!SSOt$Ouw$Ox!P$O!P!Q1^!Q#O$O#P;'S$O;'S;=`$g<%lO$OU1c^!SSOY2_YZ$OZt2_tu3buw2_wx3bx!P2_!P!Q$O!Q!}2_!}#O8T#O#P5p#P;'S2_;'S;=`9U<%lO2_U2f^!SS!jQOY2_YZ$OZt2_tu3buw2_wx3bx!P2_!P!Q6V!Q!}2_!}#O8T#O#P5p#P;'S2_;'S;=`9U<%lO2_Q3gX!jQOY3bZ!P3b!P!Q4S!Q!}3b!}#O4q#O#P5p#P;'S3b;'S;=`6P<%lO3bQ4VP!P!Q4YQ4_U!jQ#Z#[4Y#]#^4Y#a#b4Y#g#h4Y#i#j4Y#m#n4YQ4tVOY4qZ#O4q#O#P5Z#P#Q3b#Q;'S4q;'S;=`5j<%lO4qQ5^SOY4qZ;'S4q;'S;=`5j<%lO4qQ5mP;=`<%l4qQ5sSOY3bZ;'S3b;'S;=`6P<%lO3bQ6SP;=`<%l3bU6[W!SSOt$Ouw$Ox!P$O!P!Q6t!Q#O$O#P;'S$O;'S;=`$g<%lO$OU6{b!SS!jQOt$Ouw$Ox#O$O#P#Z$O#Z#[6t#[#]$O#]#^6t#^#a$O#a#b6t#b#g$O#g#h6t#h#i$O#i#j6t#j#m$O#m#n6t#n;'S$O;'S;=`$g<%lO$OU8Y[!SSOY8TYZ$OZt8Ttu4quw8Twx4qx#O8T#O#P5Z#P#Q2_#Q;'S8T;'S;=`9O<%lO8TU9RP;=`<%l8TU9XP;=`<%l2_U9cU!SS!XQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU9|W#jQ!SSOt$Ouw$Ox!_$O!_!`:f!`#O$O#P;'S$O;'S;=`$g<%lO$OU:kV!SSOt$Ouw$Ox#O$O#P#Q;Q#Q;'S$O;'S;=`$g<%lO$OU;XU#iQ!SSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$O~;pO#a~U;wU#kQ!SSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU<bU!SS!`QOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU<y^!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$OU=|U!QQ!SSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU>e_!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#U?d#U#o<t#o;'S$O;'S;=`$g<%lO$OU?i`!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#`<t#`#a@k#a#o<t#o;'S$O;'S;=`$g<%lO$OU@p`!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#g<t#g#hAr#h#o<t#o;'S$O;'S;=`$g<%lO$OUAw`!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#X<t#X#YBy#Y#o<t#o;'S$O;'S;=`$g<%lO$OUCQ^!VQ!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$O^DT^#bW!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$O^EW^#dW!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$O^FZ`#cW!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#f<t#f#gG]#g#o<t#o;'S$O;'S;=`$g<%lO$OUGb`!SSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#i<t#i#jAr#j#o<t#o;'S$O;'S;=`$g<%lO$OUHkUtQ!SSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$O~ISO#l~",
tokenData: "IS~R}OX$OXY$mYZ%WZp$Opq$mqs$Ost%qtu'Yuw$Owx'_xy'dyz'}z{$O{|(h|}$O}!O(h!O!P$O!P!Q0o!Q!R)Y!R![+w![!]9[!]!^%W!^!}$O!}#O9u#O#P;k#P#Q;p#Q#R$O#R#S<Z#S#T$O#T#Y<t#Y#Z>`#Z#b<t#b#cC|#c#f<t#f#gEP#g#h<t#h#iFS#i#o<t#o#p$O#p#qHd#q;'S$O;'S;=`$g<%l~$O~O$O~~H}S$TU!TSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OS$jP;=`<%l$O^$tU!TS#TYOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU%_U!TS#ZQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$O^%xZrY!TSOY%qYZ$OZt%qtu&kuw%qwx&kx#O%q#O#P&k#P;'S%q;'S;=`'S<%lO%qY&pSrYOY&kZ;'S&k;'S;=`&|<%lO&kY'PP;=`<%l&k^'VP;=`<%l%q~'_O#`~~'dO#^~U'kU!TS#YQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU(UU!TS#hQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU(mX!TSOt$Ouw$Ox!Q$O!Q!R)Y!R![+w![#O$O#P;'S$O;'S;=`$g<%lO$OU)a`!TS|QOt$Ouw$Ox!O$O!O!P*c!P!Q$O!Q![+w![#O$O#P#R$O#R#S,t#S#U$O#U#V-c#V#l$O#l#m.w#m;'S$O;'S;=`$g<%lO$OU*hW!TSOt$Ouw$Ox!Q$O!Q![+Q![#O$O#P;'S$O;'S;=`$g<%lO$OU+XY!TS|QOt$Ouw$Ox!Q$O!Q![+Q![#O$O#P#R$O#R#S*c#S;'S$O;'S;=`$g<%lO$OU,O[!TS|QOt$Ouw$Ox!O$O!O!P*c!P!Q$O!Q![+w![#O$O#P#R$O#R#S,t#S;'S$O;'S;=`$g<%lO$OU,yW!TSOt$Ouw$Ox!Q$O!Q![+w![#O$O#P;'S$O;'S;=`$g<%lO$OU-hX!TSOt$Ouw$Ox!Q$O!Q!R.T!R!S.T!S#O$O#P;'S$O;'S;=`$g<%lO$OU.[X!TS|QOt$Ouw$Ox!Q$O!Q!R.T!R!S.T!S#O$O#P;'S$O;'S;=`$g<%lO$OU.|[!TSOt$Ouw$Ox!Q$O!Q![/r![!c$O!c!i/r!i#O$O#P#T$O#T#Z/r#Z;'S$O;'S;=`$g<%lO$OU/y[!TS|QOt$Ouw$Ox!Q$O!Q![/r![!c$O!c!i/r!i#O$O#P#T$O#T#Z/r#Z;'S$O;'S;=`$g<%lO$OU0tW!TSOt$Ouw$Ox!P$O!P!Q1^!Q#O$O#P;'S$O;'S;=`$g<%lO$OU1c^!TSOY2_YZ$OZt2_tu3buw2_wx3bx!P2_!P!Q$O!Q!}2_!}#O8T#O#P5p#P;'S2_;'S;=`9U<%lO2_U2f^!TS!kQOY2_YZ$OZt2_tu3buw2_wx3bx!P2_!P!Q6V!Q!}2_!}#O8T#O#P5p#P;'S2_;'S;=`9U<%lO2_Q3gX!kQOY3bZ!P3b!P!Q4S!Q!}3b!}#O4q#O#P5p#P;'S3b;'S;=`6P<%lO3bQ4VP!P!Q4YQ4_U!kQ#Z#[4Y#]#^4Y#a#b4Y#g#h4Y#i#j4Y#m#n4YQ4tVOY4qZ#O4q#O#P5Z#P#Q3b#Q;'S4q;'S;=`5j<%lO4qQ5^SOY4qZ;'S4q;'S;=`5j<%lO4qQ5mP;=`<%l4qQ5sSOY3bZ;'S3b;'S;=`6P<%lO3bQ6SP;=`<%l3bU6[W!TSOt$Ouw$Ox!P$O!P!Q6t!Q#O$O#P;'S$O;'S;=`$g<%lO$OU6{b!TS!kQOt$Ouw$Ox#O$O#P#Z$O#Z#[6t#[#]$O#]#^6t#^#a$O#a#b6t#b#g$O#g#h6t#h#i$O#i#j6t#j#m$O#m#n6t#n;'S$O;'S;=`$g<%lO$OU8Y[!TSOY8TYZ$OZt8Ttu4quw8Twx4qx#O8T#O#P5Z#P#Q2_#Q;'S8T;'S;=`9O<%lO8TU9RP;=`<%l8TU9XP;=`<%l2_U9cU!TS!YQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU9|W#jQ!TSOt$Ouw$Ox!_$O!_!`:f!`#O$O#P;'S$O;'S;=`$g<%lO$OU:kV!TSOt$Ouw$Ox#O$O#P#Q;Q#Q;'S$O;'S;=`$g<%lO$OU;XU#iQ!TSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$O~;pO#a~U;wU#kQ!TSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU<bU!TS!aQOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU<y^!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$OU=|U!RQ!TSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$OU>e_!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#U?d#U#o<t#o;'S$O;'S;=`$g<%lO$OU?i`!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#`<t#`#a@k#a#o<t#o;'S$O;'S;=`$g<%lO$OU@p`!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#g<t#g#hAr#h#o<t#o;'S$O;'S;=`$g<%lO$OUAw`!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#X<t#X#YBy#Y#o<t#o;'S$O;'S;=`$g<%lO$OUCQ^!WQ!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$O^DT^#bW!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$O^EW^#dW!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#o<t#o;'S$O;'S;=`$g<%lO$O^FZ`#cW!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#f<t#f#gG]#g#o<t#o;'S$O;'S;=`$g<%lO$OUGb`!TSOt$Ouw$Ox}$O}!O<t!O!Q$O!Q![<t![!_$O!_!`=u!`#O$O#P#T$O#T#i<t#i#jAr#j#o<t#o;'S$O;'S;=`$g<%lO$OUHkUuQ!TSOt$Ouw$Ox#O$O#P;'S$O;'S;=`$g<%lO$O~ISO#l~",
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO#[~~", 11)],
topRules: {"Program":[0,34]},
topRules: {"Program":[0,35]},
specialized: [{term: 28, get: (value: any, stack: any) => (specializeKeyword(value, stack) << 1), external: specializeKeyword},{term: 28, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
tokenPrec: 2229
})

View File

@ -131,7 +131,8 @@ describe('string escape sequences', () => {
describe('curly strings', () => {
test('work on one line', () => {
expect('{ one two three }').toMatchTree(`
String one two three
String
CurlyString { one two three }
`)
})
@ -141,17 +142,19 @@ describe('curly strings', () => {
two
three }`).toMatchTree(`
String
CurlyString {
one
two
three `)
three }`)
})
test('can contain other curlies', () => {
expect(`{ { one }
two
{ three } }`).toMatchTree(`
String { one }
String
CurlyString { { one }
two
{ three } `)
{ three } }`)
})
})

View File

@ -1,5 +1,5 @@
import { ExternalTokenizer, InputStream, Stack } from '@lezer/lr'
import { Identifier, AssignableIdentifier, Word, IdentifierBeforeDot, Do, curlyString } from './shrimp.terms'
import { Identifier, AssignableIdentifier, Word, IdentifierBeforeDot, Do, CurlyString } from './shrimp.terms'
// doobie doobie do (we need the `do` keyword to know when we're defining params)
export function specializeKeyword(ident: string) {
@ -164,7 +164,7 @@ const consumeRestOfWord = (input: InputStream, startPos: number, canBeWord: bool
}
const consumeCurlyString = (input: InputStream, stack: Stack) => {
if (!stack.canShift(curlyString)) return
if (!stack.canShift(CurlyString)) return
let depth = 0
let pos = 0
@ -185,7 +185,7 @@ const consumeCurlyString = (input: InputStream, stack: Stack) => {
pos++
}
input.acceptToken(curlyString, pos)
input.acceptToken(CurlyString, pos)
}
// Check if this identifier is in scope (for property access detection)