Collapse all blocks into SingleLineBlock and MultiLineBlock

This commit is contained in:
Chris Wanstrath 2025-11-03 19:55:41 -08:00
parent ee0e6c6c41
commit dc557deb40
8 changed files with 52 additions and 70 deletions

View File

@ -390,10 +390,7 @@ export class Compiler {
}
case terms.MultiLineBlock:
case terms.SingleLineBlock:
case terms.ThenBlock:
case terms.SingleLineThenBlock:
case terms.TryBlock: {
case terms.SingleLineBlock: {
const children = getAllChildren(node)
const instructions: ProgramItem[] = []

View File

@ -309,7 +309,7 @@ export const getDotGetParts = (node: SyntaxNode, input: string) => {
export const getTryExprParts = (node: SyntaxNode, input: string) => {
const children = getAllChildren(node)
// First child is always 'try' keyword, second is colon, third is TryBlock or statement
// First child is always 'try' keyword, second is colon, third is MultiLineBlock or statement
const [tryKeyword, _colon, tryBlock, ...rest] = children
if (!tryKeyword || !tryBlock) {

View File

@ -125,27 +125,19 @@ IfExpr {
}
singleLineIf {
if (ConditionalOp | expression) colon SingleLineThenBlock end
if (ConditionalOp | expression) colon SingleLineBlock end
}
multilineIf {
if (ConditionalOp | expression) colon newlineOrSemicolon ThenBlock ElseIfExpr* ElseExpr? end
if (ConditionalOp | expression) colon newlineOrSemicolon MultiLineBlock ElseIfExpr* ElseExpr? end
}
ElseIfExpr {
elseif (ConditionalOp | expression) colon newlineOrSemicolon ThenBlock
elseif (ConditionalOp | expression) colon newlineOrSemicolon MultiLineBlock
}
ElseExpr {
else colon newlineOrSemicolon ThenBlock
}
ThenBlock {
block
}
SingleLineThenBlock {
consumeToTerminator
else colon newlineOrSemicolon MultiLineBlock
}
TryExpr {
@ -157,19 +149,15 @@ singleLineTry {
}
multilineTry {
try colon newlineOrSemicolon TryBlock CatchExpr? FinallyExpr? end
try colon newlineOrSemicolon MultiLineBlock CatchExpr? FinallyExpr? end
}
CatchExpr {
catch Identifier colon (newlineOrSemicolon TryBlock | consumeToTerminator)
catch Identifier colon (newlineOrSemicolon MultiLineBlock | consumeToTerminator)
}
FinallyExpr {
finally colon (newlineOrSemicolon TryBlock | consumeToTerminator)
}
TryBlock {
block
finally colon (newlineOrSemicolon MultiLineBlock | consumeToTerminator)
}
Throw {

View File

@ -47,22 +47,19 @@ export const
Null = 45,
colon = 46,
CatchExpr = 47,
keyword = 73,
TryBlock = 49,
keyword = 70,
MultiLineBlock = 49,
FinallyExpr = 50,
Underscore = 53,
Array = 54,
ConditionalOp = 55,
PositionalArg = 56,
WhileExpr = 58,
MultiLineBlock = 60,
SingleLineBlock = 61,
TryExpr = 62,
Throw = 64,
IfExpr = 66,
SingleLineThenBlock = 68,
ThenBlock = 69,
ElseIfExpr = 70,
ElseExpr = 72,
CompoundAssign = 74,
Assign = 75
SingleLineBlock = 60,
TryExpr = 61,
Throw = 63,
IfExpr = 65,
ElseIfExpr = 67,
ElseExpr = 69,
CompoundAssign = 71,
Assign = 72

View File

@ -4,14 +4,14 @@ import {operatorTokenizer} from "./operatorTokenizer"
import {tokenizer, specializeKeyword} from "./tokenizer"
import {trackScope} from "./scopeTracker"
import {highlighting} from "./highlight"
const spec_Identifier = {__proto__:null,null:90, catch:96, finally:102, end:104, while:118, try:126, throw:130, if:134, elseif:142, else:146}
const spec_Identifier = {__proto__:null,null:90, catch:96, finally:102, end:104, while:118, try:124, throw:128, if:132, elseif:136, else:140}
export const parser = LRParser.deserialize({
version: 14,
states: ":|QYQbOOO#wQcO'#C{O$tOSO'#C}OOQa'#DT'#DTO%}QbO'#DdO'`QcO'#EaOOQa'#Ea'#EaO(cQcO'#EaO)eQcO'#E`O)xQRO'#C|O+UQcO'#E[O+fQcO'#E[O+pQbO'#CzO,hOpO'#CxOOQ`'#E]'#E]O,mQbO'#E[OOQ`'#Dl'#DlOOQ`'#Dp'#DpO,tQRO'#DxOOQ`'#E['#E[O-YQQO'#EZOOQ`'#EZ'#EZOOQ`'#Dz'#DzQYQbOOO-bQbO'#DWO-mQbO'#DhO.bQQO'#EpO-mQbO'#DnO-mQbO'#ErO.gQbO'#DUOOQa'#E`'#E`OOQ`'#Df'#DfOOQ`'#Eo'#EoOOQ`'#ES'#ESO.qQbO,59cO/eQbO'#DPO/mQWO'#DQOOOO'#Ec'#EcOOOO'#D{'#D{O0ROSO,59iOOQa,59i,59iOOQ`'#D|'#D|O0aQbO,5:OO0hQQO,59oOOQa,5:O,5:OO0sQbO,5:OO0}QbO,5:eO-mQbO,59hO-mQbO,59hO-mQbO,59hO-mQbO,5:PO-mQbO,5:PO-mQbO,5:PO1bQRO,59fO1iQRO,59fO1zQRO,59fO1uQQO,59fO2VQQO,59fO2_ObO,59dO2jQbO'#ETO2uQbO,59bO0}QbO,5:dOOQ`,5:u,5:uOOQ`-E7x-E7xOOQ`'#D}'#D}O3^QbO'#DXO3iQbO'#DYOOQO'#EO'#EOO3aQQO'#DXO3wQQO,59rO4hQRO,5:SO4oQRO,5:SO4zQbO,5;[O5bQcO,5:YO6WQcO,5:YO6hQcO,5:YO6rQRO,5;^O6yQRO,5;^OOQ`,59p,59pOOQ`-E8Q-E8QOOOO,59k,59kOOOO,59l,59lOOOO-E7y-E7yOOQa1G/T1G/TOOQ`-E7z-E7zO7UQQO1G/ZOOQa1G/j1G/jO7aQbO1G/jOOQO'#EQ'#EQO7UQQO1G/ZOOQa1G/Z1G/ZOOQ`'#ER'#ERO7aQbO1G/jOOQ`1G0P1G0POOQa1G/S1G/SO8YQcO1G/SO8dQcO1G/SO8nQcO1G/SOOQa1G/k1G/kO:^QcO1G/kO:eQcO1G/kO:lQcO1G/kOOQa1G/Q1G/QOOQa1G/O1G/OO!dQbO'#C{O:sQbO'#CwOOQ`,5:o,5:oOOQ`-E8R-E8ROOQ`1G0O1G0OOOQ`-E7{-E7{O;QQQO,59sOOQO,59t,59tOOQO-E7|-E7|O;YQbO1G/^O;pQbO1G/nO<WQbO1G0vO<cQbO1G0wO=SQbO1G0xO=jQQO7+$uOOQa7+$u7+$uO=uQbO7+%UOOQa7+%U7+%UOOQO-E8O-E8OOOQ`-E8P-E8PO>PQbO7+$xO<cQbO7+$xOOQ`'#Dk'#DkO>[QbO7+%YO>uQbO7+%YO>zQbO'#D]O?PQQO'#D`OOQ`7+&b7+&bO?UQbO7+&bO?ZQbO7+&bOOQ`'#EP'#EPO?cQQO'#EPO?hQbO'#ElOOQ`'#D_'#D_O@_QbO7+&cOOQ`'#Dr'#DrO@jQbO7+&dO@oQbO7+&eOOQa<<Ha<<HaOOQa<<Hp<<HpOOQ`<<Hd<<HdOA`QbO<<HdOAeQbO<<HdOAmQbO<<HdOOQ`'#Dj'#DjOAxQbO<<HtOOQ`<<Ht<<HtOA}QQO,59wOBSQbO,59zOOQ`<<I|<<I|OBjQbO<<I|OOQ`,5:k,5:kOOQ`-E7}-E7}OOQ`<<I}<<I}OBoQbO<<I}OBtQbO<<I}OOQ`<<JO<<JOOOQ`'#Ds'#DsOB|QbO<<JPOOQ`AN>OAN>OOCXQbOAN>OOC^QbOAN>OOOQ`AN>`AN>`OCfQbO1G/cO>[QbO1G/fOOQ`1G/f1G/fOOQ`AN?hAN?hOOQ`AN?iAN?iOC|QbOAN?iOOQ`'#EU'#EUODRQbOAN?kO-mQbO'#DtOD^QQO'#DvOOQ`AN?kAN?kODcQbOAN?kOOQ`G23jG23jODhQbOG23jODmQbO7+$}OOQ`7+$}7+$}OOQ`7+%Q7+%QOOQ`G25TG25TOOQ`-E8S-E8SOOQ`G25VG25VOEZQbOG25VOE`QRO,5:`OEgQRO,5:`OErQQO,5:bOOQ`LD)ULD)UOOQ`<<Hi<<HiOOQ`LD*qLD*qOEwQQO1G/zO>[QbO1G/|O@oQbO7+%fOOQ`7+%h7+%hOOQ`<<IQ<<IQ",
stateData: "FP~O!{OS!|OS~OdPOebOfUOg]OhhOmUOuUOvUO}UO!]iO!ajO!ckO!elO#R[O#UQO#]RO#^SO#_eO~OdnOfUOg]OhhOmUOuUOvUOymO}UO!VoO#R[O#UQO#]RO#^SO!ZoX#_oX#hoX#boX!QoX!ToX!UoX~OP#SXQ#SXR#SXS#SXT#SXU#SXW#SXX#SXY#SXZ#SX[#SX]#SX^#SX~P!dOruO#UxO#WsO#XtO~OdnOfUOg]OmUOuUOvUOymO}UO#R[O#UQO#]RO#^SO#_yO~O#a|O~P%SOP#TXQ#TXR#TXS#TXT#TXU#TXW#TXX#TXY#TXZ#TX[#TX]#TX^#TX#_#TX#h#TX!Q#TX!T#TX!U#TX~OdnOfUOg]OhhOmUOuUOvUOymO}UO!VoO#R[O#UQO#]RO#^SO#b#TX~P&UOV!OO~P&UOP#SXQ#SXR#SXS#SXT#SXU#SXW#SXX#SXY#SXZ#SX[#SX]#SX^#SX~O#_#OX#h#OX!Q#OX!T#OX!U#OX~P(jOP!QOQ!QOR!ROS!ROT!TOU!UOW!SOX!SOY!SOZ!SO[!SO]!SO^!PO~O#_#OX#h#OX!Q#OX!T#OX!U#OX~OP!QOQ!QOR!ROS!RO~P*sOT!TOU!UO~P*sOdPOfUOg]OhhOmUOuUOvUO}UO#R[O#UQO#]RO#^SO~O#Q![O~O!Z!]O~P*sOV!OO_!_O`!_Oa!_Ob!_Oc!_O~O#_!`O#h!`O~Od!bOy!dO!O{P~OdnOfUOg]OmUOuUOvUO}UO#R[O#UQO#]RO#^SO~O!O!jO~OhhO!V!pO~P-mOhhOymO!VoO!Zka#_ka#hka#bka!Qka!Tka!Uka~P-mOd!rO#R[O~O#U!sO#W!sO#X!sO#Y!sO#Z!sO#[!sO~OruO#U!uO#WsO#XtO~O#a!xO~P%SOymO#_!zO#a!|O~O#_!}O#a!xO~P-mOebO!]iO!ajO!ckO!elO~P+pO#b#YO~P(jOP!QOQ!QOR!ROS!RO#b#YO~OT!TOU!UO#b#YO~O!Z!]O#b#YO~Od#ZOm#ZO#R[O~Od#[Og]O#R[O~O!Z!]O#_ja#hja#bja!Qja!Tja!Uja~Od!bOy!dO!O{X~Om#cOu#cO}#cO#UQO~O!O#eO~OT!TOU!UOW!SOX!SOY!SOZ!SO[!SO]!SO~O!O#fO~P3|OT!TOU!UO!O#fO~OebO!]iO!ajO!ckO!elO#_#hO~P+pO#_!ba#h!ba!Q!ba!T!ba!U!ba~P)xO#_!ba#h!ba!Q!ba!T!ba!U!ba~OP!QOQ!QOR!ROS!RO~P5uOT!TOU!UO~P5uO!O#iO~P3|OT!TOU!UO!O#iO~OymO#_!zO#a#kO~O#_!}O#a#mO~P-mO^!PORpiSpi#_pi#hpi#bpi!Qpi!Tpi!Upi~OPpiQpi~P7kOP!QOQ!QO~P7kOP!QOQ!QORpiSpi#_pi#hpi#bpi!Qpi!Tpi!Upi~OW!SOX!SOY!SOZ!SO[!SO]!SOT!Xi#_!Xi#h!Xi#b!Xi!O!Xi!Q!Xi!T!Xi!U!Xi~OU!UO~P9`OU!UO~P9rOU!Xi~P9`OhhOymO!VoO~P-mOy!dO!O{a~OebO!]iO!ajO!ckO!elO#_#qO~P+pOebO!]iO!ajO!ckO!elO#_#sO~P+pO!Q#uO!T#vO!U#wO~OebO!]iO!ajO!ckO!elO#_#zO!Q#`P!T#`P!U#`P~P+pOebO!]iO!ajO!ckO!elO#_$RO~P+pOymO#_!zO#a$SO~O#_!}O#a$TO~P-mO!Q#uO!T#vO!U$UO~OebO!]iO!ajO!ckO!elO#_#zO!U#`P~P+pO!U$[O~Od$]O~O!O$^O~O!U$_O~O!T#vO!U$_O~O#_$aO~OebO!]iO!ajO!ckO!elO#_#zO!Q#`X!T#`X!U#`X!i#`X!k#`X~P+pO!Q#uO!T#vO!U$cO~O!U$fO~OebO!]iO!ajO!ckO!elO#_#zO!U#`P!i#`P!k#`P~P+pO!U$iO~O!T#vO!U$iO~O!Q#uO!T#vO!U$iO~O!U$lO~O!O$mO~OebO!]iO!ajO!ckO!elO#_$nO~P+pO!U$pO~O!U$qO~O!T#vO!U$qO~O!U$wO!i$uO!k$vO~O!U$yO~O!T#vO!U$yO~OebO!]iO!ajO!ckO!elO#_${O~P+pO!U%OO~O!U%QO!i$uO!k$vO~O!O%UO~O!U%QO~O!U%VO~OebO!]iO!ajO!ckO!elO#_#zO!T#`P!U#`P~P+pO!U%XO~O!O%YO~P3|OT!TOU!UO!O%YO~O#_%ZO~O#_%[O~Omv~",
goto: "6m#hPPPPPPPPPPPPPPPPPPPPPPPPPP#i$R$jP%m$R&v'iP(j(jPP(n)lP*P*s*vPP*|P+Y+cPPP+y,y-uP-|P.c.f-|P-|P-|P.i.l.uP.yP-|-|/P/V/]/c/i/s0Q0[0f0o0vPPPP0|1Q1yPP2f4SP5UPPPPPPPP5YPP5j5q5q6W6WvcOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[R!Y[{^O[g!O!]!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[xPO[g!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[|nPSTiklmrz}!P!Q!R!S!T!U!y#O#[#]#l$uR#[!]xTO[g!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[|UPSTiklmrz}!P!Q!R!S!T!U!y#O#[#]#l$uQ!rsQ#Z![R#]!]vYOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[Q!W[Q!lkQ#Q!QR#T!R!vUOPST[giklmrz}!O!P!Q!R!S!T!U!_!j!y#O#[#]#e#f#h#i#l#q#s#|$R$^$m$n$u${%Z%[R#c!dTuQw!wUOPST[giklmrz}!O!P!Q!R!S!T!U!_!j!y#O#[#]#e#f#h#i#l#q#s#|$R$^$m$n$u${%Z%[YpPTr#[#]Q{SQ!wzX!z{!w!{#jvcOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[YoPTr#[#]Q!Y[R!pmR!ghX!eh!c!f#bQ#y#gQ$W#pQ$e$OR$k$XQ$O#hQ$}$nR%W${Q#x#gQ$V#pQ$`#yQ$d$OS$j$W$XQ$r$eR$z$k!OUPST[iklmrz}!P!Q!R!S!T!U!y#O#[#]#l$uwVOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[vZOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[Q!X[Q!iiQ!mkQ!olQ#U!UQ#W!TR%T$uZpPTr#[#]wcOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[R$Z#sR#t#fR$Q#iQ$h$RQ%]%ZR%^%[T$s$h$tQ$x$hR%R$tQgOR!agQwQR!twQzSR!vzQ!chR#a!cQ!fhQ#b!cT#d!f#b`#|#h#q#s$R$n${%Z%[R$b#|Q!{{Q#j!wT#n!{#jQ#O}Q#l!yT#o#O#lWrPT#[#]R!qrS!^_!ZR#_!^Q$t$hR%P$tTfOgSdOgQ#P!OQ#`!_Q#g!jQ#p#eQ#r#fb#{#h#q#s#|$R$n${%Z%[Q$P#iQ$o$^R$|$mv_Og!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[Q!Z[R#^!]xXO[g!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[YoPTr#[#]Q}SQ!hiQ!kkQ!nlQ!pmQ!yzW!}}!y#O#lQ#Q!PQ#R!QQ#S!RQ#U!SQ#V!TQ#X!UR%S$uvWOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[|nPSTiklmrz}!P!Q!R!S!T!U!y#O#[#]#l$uR!V[TvQwU#}#h$n${Q$X#qQ$Y#sV$g$R%Z%[ZqPTr#[#]w`Og!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[waOg!O!_!j#e#f#h#i#q#s#|$R$^$m$n${%Z%[",
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Identifier AssignableIdentifier Word IdentifierBeforeDot Do Program PipeExpr FunctionCall DotGet Number ParenExpr FunctionCallOrIdentifier BinOp String StringFragment Interpolation EscapeSeq Boolean Regex Dict NamedArg NamedArgPrefix FunctionDef Params NamedParam Null colon CatchExpr keyword TryBlock FinallyExpr keyword keyword Underscore Array ConditionalOp PositionalArg operator WhileExpr keyword MultiLineBlock SingleLineBlock TryExpr keyword Throw keyword IfExpr keyword SingleLineThenBlock ThenBlock ElseIfExpr keyword ElseExpr keyword CompoundAssign Assign",
maxTerm: 116,
states: ":jQYQbOOO#wQcO'#C{O$tOSO'#C}OOQa'#DT'#DTO%}QbO'#DdO'`QcO'#E^OOQa'#E^'#E^O(cQcO'#E^O)eQcO'#E]O)xQRO'#C|O+UQcO'#EXO+fQcO'#EXO+pQbO'#CzO,hOpO'#CxOOQ`'#EY'#EYO,mQbO'#EXOOQ`'#Dk'#DkOOQ`'#Do'#DoO,tQRO'#DuOOQ`'#EX'#EXO-YQQO'#EWOOQ`'#EW'#EWOOQ`'#Dw'#DwQYQbOOO-bQbO'#DWO-mQbO'#DhO.bQQO'#EmO-mQbO'#DmO-mQbO'#EoO.gQbO'#DUOOQa'#E]'#E]OOQ`'#Df'#DfOOQ`'#El'#ElOOQ`'#EP'#EPO.qQbO,59cO/eQbO'#DPO/mQWO'#DQOOOO'#E`'#E`OOOO'#Dx'#DxO0ROSO,59iOOQa,59i,59iOOQ`'#Dy'#DyO0aQbO,5:OO0hQQO,59oOOQa,5:O,5:OO0sQbO,5:OO0}QbO,5:bO-mQbO,59hO-mQbO,59hO-mQbO,59hO-mQbO,5:PO-mQbO,5:PO-mQbO,5:PO1bQRO,59fO1iQRO,59fO1zQRO,59fO1uQQO,59fO2VQQO,59fO2_ObO,59dO2jQbO'#EQO2uQbO,59bO0}QbO,5:aOOQ`,5:r,5:rOOQ`-E7u-E7uOOQ`'#Dz'#DzO3^QbO'#DXO3iQbO'#DYOOQO'#D{'#D{O3aQQO'#DXO3wQQO,59rO4hQRO,5:SO4oQRO,5:SO4zQbO,5;XO5bQcO,5:XO6WQcO,5:XO6hQcO,5:XO6rQRO,5;ZO6yQRO,5;ZOOQ`,59p,59pOOQ`-E7}-E7}OOOO,59k,59kOOOO,59l,59lOOOO-E7v-E7vOOQa1G/T1G/TOOQ`-E7w-E7wO7UQQO1G/ZOOQa1G/j1G/jO7aQbO1G/jOOQO'#D}'#D}O7UQQO1G/ZOOQa1G/Z1G/ZOOQ`'#EO'#EOO7aQbO1G/jOOQ`1G/|1G/|OOQa1G/S1G/SO8YQcO1G/SO8dQcO1G/SO8nQcO1G/SOOQa1G/k1G/kO:^QcO1G/kO:eQcO1G/kO:lQcO1G/kOOQa1G/Q1G/QOOQa1G/O1G/OO!dQbO'#C{O:sQbO'#CwOOQ`,5:l,5:lOOQ`-E8O-E8OOOQ`1G/{1G/{OOQ`-E7x-E7xO;QQQO,59sOOQO,59t,59tOOQO-E7y-E7yO;YQbO1G/^O;pQbO1G/nO<WQbO1G0sO<cQbO1G0tO=SQbO1G0uO=jQQO7+$uOOQa7+$u7+$uO=uQbO7+%UOOQa7+%U7+%UOOQO-E7{-E7{OOQ`-E7|-E7|O>PQbO7+$xO<cQbO7+$xOOQ`'#Dj'#DjO>[QbO7+%YO>uQbO7+%YO>zQbO'#D]O?PQQO'#D`OOQ`7+&_7+&_O?UQbO7+&_O?ZQbO7+&_OOQ`'#D|'#D|O?cQQO'#D|O?hQbO'#EiOOQ`'#D_'#D_O@_QbO7+&`O@jQbO7+&aO@oQbO7+&bOOQa<<Ha<<HaOOQa<<Hp<<HpOOQ`<<Hd<<HdOA`QbO<<HdOAeQbO<<HdOAmQbO<<HdOAxQbO<<HtOOQ`<<Ht<<HtOA}QQO,59wOBSQbO,59zOOQ`<<Iy<<IyOBjQbO<<IyOOQ`,5:h,5:hOOQ`-E7z-E7zOOQ`<<Iz<<IzOBoQbO<<IzOBtQbO<<IzOOQ`<<I{<<I{OB|QbO<<I|OOQ`AN>OAN>OOCXQbOAN>OOC^QbOAN>OOOQ`AN>`AN>`OCfQbO1G/cO>[QbO1G/fOOQ`1G/f1G/fOOQ`AN?eAN?eOOQ`AN?fAN?fOC|QbOAN?fOOQ`'#ER'#ERODRQbOAN?hO-mQbO'#DqOD^QQO'#DsOOQ`AN?hAN?hODcQbOAN?hOOQ`G23jG23jODhQbOG23jODmQbO7+$}OOQ`7+$}7+$}OOQ`7+%Q7+%QOOQ`G25QG25QOOQ`-E8P-E8POOQ`G25SG25SOEZQbOG25SOE`QRO,5:]OEgQRO,5:]OErQQO,5:_OOQ`LD)ULD)UOOQ`<<Hi<<HiOOQ`LD*nLD*nOEwQQO1G/wO>[QbO1G/yO@oQbO7+%cOOQ`7+%e7+%eOOQ`<<H}<<H}",
stateData: "FP~O!xOS!yOS~OdPOebOfUOg]OhhOmUOuUOvUO}UO!]iO!`jO!bkO!dlO#O[O#RQO#YRO#ZSO#[eO~OdnOfUOg]OhhOmUOuUOvUOymO}UO!VoO#O[O#RQO#YRO#ZSO!ZoX#[oX#eoX#_oX!QoX!ToX!UoX~OP#PXQ#PXR#PXS#PXT#PXU#PXW#PXX#PXY#PXZ#PX[#PX]#PX^#PX~P!dOruO#RxO#TsO#UtO~OdnOfUOg]OmUOuUOvUOymO}UO#O[O#RQO#YRO#ZSO#[yO~O#^|O~P%SOP#QXQ#QXR#QXS#QXT#QXU#QXW#QXX#QXY#QXZ#QX[#QX]#QX^#QX#[#QX#e#QX!Q#QX!T#QX!U#QX~OdnOfUOg]OhhOmUOuUOvUOymO}UO!VoO#O[O#RQO#YRO#ZSO#_#QX~P&UOV!OO~P&UOP#PXQ#PXR#PXS#PXT#PXU#PXW#PXX#PXY#PXZ#PX[#PX]#PX^#PX~O#[!{X#e!{X!Q!{X!T!{X!U!{X~P(jOP!QOQ!QOR!ROS!ROT!TOU!UOW!SOX!SOY!SOZ!SO[!SO]!SO^!PO~O#[!{X#e!{X!Q!{X!T!{X!U!{X~OP!QOQ!QOR!ROS!RO~P*sOT!TOU!UO~P*sOdPOfUOg]OhhOmUOuUOvUO}UO#O[O#RQO#YRO#ZSO~O!}![O~O!Z!]O~P*sOV!OO_!_O`!_Oa!_Ob!_Oc!_O~O#[!`O#e!`O~Od!bOy!dO!O{P~OdnOfUOg]OmUOuUOvUO}UO#O[O#RQO#YRO#ZSO~O!O!jO~OhhO!V!pO~P-mOhhOymO!VoO!Zka#[ka#eka#_ka!Qka!Tka!Uka~P-mOd!rO#O[O~O#R!sO#T!sO#U!sO#V!sO#W!sO#X!sO~OruO#R!uO#TsO#UtO~O#^!xO~P%SOymO#[!zO#^!|O~O#[!}O#^!xO~P-mOebO!]iO!`jO!bkO!dlO~P+pO#_#YO~P(jOP!QOQ!QOR!ROS!RO#_#YO~OT!TOU!UO#_#YO~O!Z!]O#_#YO~Od#ZOm#ZO#O[O~Od#[Og]O#O[O~O!Z!]O#[ja#eja#_ja!Qja!Tja!Uja~Od!bOy!dO!O{X~Om#cOu#cO}#cO#RQO~O!O#eO~OT!TOU!UOW!SOX!SOY!SOZ!SO[!SO]!SO~O!O#fO~P3|OT!TOU!UO!O#fO~OebO!]iO!`jO!bkO!dlO#[#hO~P+pO#[!aa#e!aa!Q!aa!T!aa!U!aa~P)xO#[!aa#e!aa!Q!aa!T!aa!U!aa~OP!QOQ!QOR!ROS!RO~P5uOT!TOU!UO~P5uO!O#iO~P3|OT!TOU!UO!O#iO~OymO#[!zO#^#kO~O#[!}O#^#mO~P-mO^!PORpiSpi#[pi#epi#_pi!Qpi!Tpi!Upi~OPpiQpi~P7kOP!QOQ!QO~P7kOP!QOQ!QORpiSpi#[pi#epi#_pi!Qpi!Tpi!Upi~OW!SOX!SOY!SOZ!SO[!SO]!SOT!Xi#[!Xi#e!Xi#_!Xi!O!Xi!Q!Xi!T!Xi!U!Xi~OU!UO~P9`OU!UO~P9rOU!Xi~P9`OhhOymO!VoO~P-mOy!dO!O{a~OebO!]iO!`jO!bkO!dlO#[#qO~P+pOebO!]iO!`jO!bkO!dlO#[#sO~P+pO!Q#uO!T#vO!U#wO~OebO!]iO!`jO!bkO!dlO#[#zO!Q#]P!T#]P!U#]P~P+pOebO!]iO!`jO!bkO!dlO#[$QO~P+pOymO#[!zO#^$RO~O#[!}O#^$SO~P-mO!Q#uO!T#vO!U$TO~OebO!]iO!`jO!bkO!dlO#[#zO!U#]P~P+pO!U$YO~Od$ZO~O!O$[O~O!U$]O~O!T#vO!U$]O~O#[$_O~OebO!]iO!`jO!bkO!dlO#[#zO!Q#]X!T#]X!U#]X!f#]X!h#]X~P+pO!Q#uO!T#vO!U$aO~O!U$dO~OebO!]iO!`jO!bkO!dlO#[#zO!U#]P!f#]P!h#]P~P+pO!U$fO~O!T#vO!U$fO~O!Q#uO!T#vO!U$fO~O!U$iO~O!O$jO~OebO!]iO!`jO!bkO!dlO#[$kO~P+pO!U$mO~O!U$nO~O!T#vO!U$nO~O!U$tO!f$rO!h$sO~O!U$vO~O!T#vO!U$vO~OebO!]iO!`jO!bkO!dlO#[$xO~P+pO!U${O~O!U$}O!f$rO!h$sO~O!O%RO~O!U$}O~O!U%SO~OebO!]iO!`jO!bkO!dlO#[#zO!T#]P!U#]P~P+pO!U%UO~O!O%VO~P3|OT!TOU!UO!O%VO~O#[%WO~O#[%XO~Omv~",
goto: "6d#ePPPPPPPPPPPPPPPPPPPPPPPPPP#f$O$gP%j$O&s'fP(g(gPP(k)iP)|*p*sPP*yP+V+lPPP,S-S.OP.VP.l.VP.VP.VP.rP.vP.V.V.|/S/Y/`/f/p/}0X0c0l0sPPPP0y0}1tPP2a3}P5PPPPPPPPP5TPP5a5h5h5}5}vcOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XR!Y[{^O[g!O!]!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XxPO[g!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%X|nPSTiklmrz}!P!Q!R!S!T!U!y#O#[#]#l$rR#[!]xTO[g!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%X|UPSTiklmrz}!P!Q!R!S!T!U!y#O#[#]#l$rQ!rsQ#Z![R#]!]vYOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XQ!W[Q!lkQ#Q!QR#T!R!vUOPST[giklmrz}!O!P!Q!R!S!T!U!_!j!y#O#[#]#e#f#h#i#l#q#s#|$Q$[$j$k$r$x%W%XR#c!dTuQw!wUOPST[giklmrz}!O!P!Q!R!S!T!U!_!j!y#O#[#]#e#f#h#i#l#q#s#|$Q$[$j$k$r$x%W%XYpPTr#[#]Q{SQ!wzX!z{!w!{#jvcOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XYoPTr#[#]Q!Y[R!pmR!ghX!eh!c!f#bQ#y#gQ$V#pQ$c$OR$h$WQ$O#hQ$X#sQ$e$QQ$z$kQ%T$xQ%Y%WR%Z%XQ#x#gQ$U#pQ$^#yQ$b$OS$g$V$WQ$o$cR$w$h!OUPST[iklmrz}!P!Q!R!S!T!U!y#O#[#]#l$rwVOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XvZOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XQ!X[Q!iiQ!mkQ!olQ#U!UQ#W!TR%Q$rZpPTr#[#]wcOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XQ#t#fR$P#iT$p$e$qQ$u$eR%O$qQgOR!agQwQR!twQzSR!vzQ!chR#a!cQ!fhQ#b!cT#d!f#b`#|#h#q#s$Q$k$x%W%XR$`#|Q!{{Q#j!wT#n!{#jQ#O}Q#l!yT#o#O#lWrPT#[#]R!qrS!^_!ZR#_!^Q$q$eR$|$qTfOgSdOgQ#P!OQ#`!_Q#g!jQ#p#eS#r#f#ib#{#h#q#s#|$Q$k$x%W%XQ$l$[R$y$jv_Og!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XQ!Z[R#^!]xXO[g!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XYoPTr#[#]Q}SQ!hiQ!kkQ!nlQ!pmQ!yzW!}}!y#O#lQ#Q!PQ#R!QQ#S!RQ#U!SQ#V!TQ#X!UR%P$rvWOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%X|nPSTiklmrz}!P!Q!R!S!T!U!y#O#[#]#l$rR!V[TvQw^#}#h#s$Q$k$x%W%XR$W#qZqPTr#[#]w`Og!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%XwaOg!O!_!j#e#f#h#i#q#s#|$Q$[$j$k$x%W%X",
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Identifier AssignableIdentifier Word IdentifierBeforeDot Do Program PipeExpr FunctionCall DotGet Number ParenExpr FunctionCallOrIdentifier BinOp String StringFragment Interpolation EscapeSeq Boolean Regex Dict NamedArg NamedArgPrefix FunctionDef Params NamedParam Null colon CatchExpr keyword MultiLineBlock FinallyExpr keyword keyword Underscore Array ConditionalOp PositionalArg operator WhileExpr keyword SingleLineBlock TryExpr keyword Throw keyword IfExpr keyword ElseIfExpr keyword ElseExpr keyword CompoundAssign Assign",
maxTerm: 113,
context: trackScope,
nodeProps: [
["closedBy", 46,"end"]
@ -19,8 +19,8 @@ export const parser = LRParser.deserialize({
propSources: [highlighting],
skippedNodes: [0],
repeatNodeCount: 11,
tokenData: "C_~R|OX#{XY$jYZ%TZp#{pq$jqs#{st%ntu'Vuw#{wx'[xy'ayz'zz{#{{|(e|}#{}!O+X!O!P#{!P!Q-n!Q![)S![!]6Z!]!^%T!^!}#{!}#O6t#O#P8j#P#Q8o#Q#R#{#R#S9Y#S#T#{#T#Y,Y#Y#Z9s#Z#b,Y#b#c>q#c#f,Y#f#g?n#g#h,Y#h#i@k#i#o,Y#o#p#{#p#qBo#q;'S#{;'S;=`$d<%l~#{~O#{~~CYS$QUrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{S$gP;=`<%l#{^$qUrS!{YOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U%[UrS#_QOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{^%uZrS!|YOY%nYZ#{Zt%ntu&huw%nwx&hx#O%n#O#P&h#P;'S%n;'S;=`'P<%lO%nY&mS!|YOY&hZ;'S&h;'S;=`&y<%lO&hY&|P;=`<%l&h^'SP;=`<%l%n~'[O#W~~'aO#U~U'hUrS#RQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(RUrS#bQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(jWrSOt#{uw#{x!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U)ZYrSmQOt#{uw#{x!O#{!O!P)y!P!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U*OWrSOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U*oWrSmQOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U+^^rSOt#{uw#{x}#{}!O,Y!O!Q#{!Q![)S![!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U,_[rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U-[UyQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U-sWrSOt#{uw#{x!P#{!P!Q.]!Q#O#{#P;'S#{;'S;=`$d<%lO#{U.b^rSOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q#{!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^U/e^rSvQOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q3U!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^Q0fXvQOY0aZ!P0a!P!Q1R!Q!}0a!}#O1p#O#P2o#P;'S0a;'S;=`3O<%lO0aQ1UP!P!Q1XQ1^UvQ#Z#[1X#]#^1X#a#b1X#g#h1X#i#j1X#m#n1XQ1sVOY1pZ#O1p#O#P2Y#P#Q0a#Q;'S1p;'S;=`2i<%lO1pQ2]SOY1pZ;'S1p;'S;=`2i<%lO1pQ2lP;=`<%l1pQ2rSOY0aZ;'S0a;'S;=`3O<%lO0aQ3RP;=`<%l0aU3ZWrSOt#{uw#{x!P#{!P!Q3s!Q#O#{#P;'S#{;'S;=`$d<%lO#{U3zbrSvQOt#{uw#{x#O#{#P#Z#{#Z#[3s#[#]#{#]#^3s#^#a#{#a#b3s#b#g#{#g#h3s#h#i#{#i#j3s#j#m#{#m#n3s#n;'S#{;'S;=`$d<%lO#{U5X[rSOY5SYZ#{Zt5Stu1puw5Swx1px#O5S#O#P2Y#P#Q/^#Q;'S5S;'S;=`5}<%lO5SU6QP;=`<%l5SU6WP;=`<%l/^U6bUrS!OQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U6{W#^QrSOt#{uw#{x!_#{!_!`7e!`#O#{#P;'S#{;'S;=`$d<%lO#{U7jVrSOt#{uw#{x#O#{#P#Q8P#Q;'S#{;'S;=`$d<%lO#{U8WU#]QrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~8oO#X~U8vU#aQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9aUrS!VQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9x]rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#U:q#U#o,Y#o;'S#{;'S;=`$d<%lO#{U:v^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#`,Y#`#a;r#a#o,Y#o;'S#{;'S;=`$d<%lO#{U;w^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#g,Y#g#h<s#h#o,Y#o;'S#{;'S;=`$d<%lO#{U<x^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#X,Y#X#Y=t#Y#o,Y#o;'S#{;'S;=`$d<%lO#{U={[uQrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^>x[#YWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^?u[#[WrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^@r^#ZWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#f,Y#f#gAn#g#o,Y#o;'S#{;'S;=`$d<%lO#{UAs^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#i,Y#i#j<s#j#o,Y#o;'S#{;'S;=`$d<%lO#{UBvU!ZQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~C_O#h~",
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO#Q~~", 11)],
tokenData: "C_~R|OX#{XY$jYZ%TZp#{pq$jqs#{st%ntu'Vuw#{wx'[xy'ayz'zz{#{{|(e|}#{}!O+X!O!P#{!P!Q-n!Q![)S![!]6Z!]!^%T!^!}#{!}#O6t#O#P8j#P#Q8o#Q#R#{#R#S9Y#S#T#{#T#Y,Y#Y#Z9s#Z#b,Y#b#c>q#c#f,Y#f#g?n#g#h,Y#h#i@k#i#o,Y#o#p#{#p#qBo#q;'S#{;'S;=`$d<%l~#{~O#{~~CYS$QUrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{S$gP;=`<%l#{^$qUrS!xYOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U%[UrS#[QOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{^%uZrS!yYOY%nYZ#{Zt%ntu&huw%nwx&hx#O%n#O#P&h#P;'S%n;'S;=`'P<%lO%nY&mS!yYOY&hZ;'S&h;'S;=`&y<%lO&hY&|P;=`<%l&h^'SP;=`<%l%n~'[O#T~~'aO#R~U'hUrS#OQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(RUrS#_QOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(jWrSOt#{uw#{x!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U)ZYrSmQOt#{uw#{x!O#{!O!P)y!P!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U*OWrSOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U*oWrSmQOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U+^^rSOt#{uw#{x}#{}!O,Y!O!Q#{!Q![)S![!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U,_[rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U-[UyQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U-sWrSOt#{uw#{x!P#{!P!Q.]!Q#O#{#P;'S#{;'S;=`$d<%lO#{U.b^rSOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q#{!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^U/e^rSvQOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q3U!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^Q0fXvQOY0aZ!P0a!P!Q1R!Q!}0a!}#O1p#O#P2o#P;'S0a;'S;=`3O<%lO0aQ1UP!P!Q1XQ1^UvQ#Z#[1X#]#^1X#a#b1X#g#h1X#i#j1X#m#n1XQ1sVOY1pZ#O1p#O#P2Y#P#Q0a#Q;'S1p;'S;=`2i<%lO1pQ2]SOY1pZ;'S1p;'S;=`2i<%lO1pQ2lP;=`<%l1pQ2rSOY0aZ;'S0a;'S;=`3O<%lO0aQ3RP;=`<%l0aU3ZWrSOt#{uw#{x!P#{!P!Q3s!Q#O#{#P;'S#{;'S;=`$d<%lO#{U3zbrSvQOt#{uw#{x#O#{#P#Z#{#Z#[3s#[#]#{#]#^3s#^#a#{#a#b3s#b#g#{#g#h3s#h#i#{#i#j3s#j#m#{#m#n3s#n;'S#{;'S;=`$d<%lO#{U5X[rSOY5SYZ#{Zt5Stu1puw5Swx1px#O5S#O#P2Y#P#Q/^#Q;'S5S;'S;=`5}<%lO5SU6QP;=`<%l5SU6WP;=`<%l/^U6bUrS!OQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U6{W#ZQrSOt#{uw#{x!_#{!_!`7e!`#O#{#P;'S#{;'S;=`$d<%lO#{U7jVrSOt#{uw#{x#O#{#P#Q8P#Q;'S#{;'S;=`$d<%lO#{U8WU#YQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~8oO#U~U8vU#^QrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9aUrS!VQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9x]rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#U:q#U#o,Y#o;'S#{;'S;=`$d<%lO#{U:v^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#`,Y#`#a;r#a#o,Y#o;'S#{;'S;=`$d<%lO#{U;w^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#g,Y#g#h<s#h#o,Y#o;'S#{;'S;=`$d<%lO#{U<x^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#X,Y#X#Y=t#Y#o,Y#o;'S#{;'S;=`$d<%lO#{U={[uQrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^>x[#VWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^?u[#XWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^@r^#WWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#f,Y#f#gAn#g#o,Y#o;'S#{;'S;=`$d<%lO#{UAs^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#i,Y#i#j<s#j#o,Y#o;'S#{;'S;=`$d<%lO#{UBvU!ZQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~C_O#e~",
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO!}~~", 11)],
topRules: {"Program":[0,25]},
specialized: [{term: 20, get: (value: any, stack: any) => (specializeKeyword(value, stack) << 1), external: specializeKeyword},{term: 20, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
tokenPrec: 1700

View File

@ -752,7 +752,7 @@ Assign
EqEq ==
Number 5
colon :
ThenBlock
MultiLineBlock
Boolean true
keyword end
keyword end
@ -794,7 +794,7 @@ Assign
EqEq ==
Number 5
colon :
ThenBlock
MultiLineBlock
Boolean true
keyword end
keyword end

View File

@ -12,7 +12,7 @@ describe('if/elseif/else', () => {
EqEq ==
Number 1
colon :
SingleLineThenBlock
SingleLineBlock
String
StringFragment cool
keyword end
@ -26,7 +26,7 @@ describe('if/elseif/else', () => {
keyword if
Identifier x
colon :
SingleLineThenBlock
SingleLineBlock
Number 2
keyword end
`)
@ -44,7 +44,7 @@ describe('if/elseif/else', () => {
Lt <
Number 9
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier yes
keyword end
@ -61,13 +61,13 @@ describe('if/elseif/else', () => {
keyword if
Identifier with-else
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier x
ElseExpr
keyword else
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier y
keyword end
@ -84,14 +84,14 @@ describe('if/elseif/else', () => {
keyword if
Identifier with-elseif
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier x
ElseIfExpr
keyword elseif
Identifier another-condition
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier y
keyword end
@ -112,27 +112,27 @@ describe('if/elseif/else', () => {
keyword if
Identifier with-elseif-else
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier x
ElseIfExpr
keyword elseif
Identifier another-condition
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier y
ElseIfExpr
keyword elseif
Identifier yet-another-condition
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier z
ElseExpr
keyword else
colon :
ThenBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier oh-no
keyword end
@ -148,7 +148,7 @@ describe('if/elseif/else', () => {
keyword if
Boolean true
colon :
SingleLineThenBlock
SingleLineBlock
Number 2
keyword end
`)

View File

@ -12,14 +12,14 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier risky-operation
CatchExpr
keyword catch
Identifier err
colon :
TryBlock
MultiLineBlock
FunctionCall
Identifier handle-error
PositionalArg
@ -37,13 +37,13 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier do-work
FinallyExpr
keyword finally
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier cleanup
keyword end
@ -61,14 +61,14 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier risky-operation
CatchExpr
keyword catch
Identifier err
colon :
TryBlock
MultiLineBlock
FunctionCall
Identifier handle-error
PositionalArg
@ -76,7 +76,7 @@ describe('try/catch/finally/throw', () => {
FinallyExpr
keyword finally
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier cleanup
keyword end
@ -199,7 +199,7 @@ describe('function-level exception handling', () => {
keyword catch
Identifier e
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier empty-string
keyword end
@ -227,7 +227,7 @@ describe('function-level exception handling', () => {
FinallyExpr
keyword finally
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier close-resources
keyword end
@ -259,7 +259,7 @@ describe('function-level exception handling', () => {
keyword catch
Identifier err
colon :
TryBlock
MultiLineBlock
FunctionCall
Identifier log
PositionalArg
@ -269,7 +269,7 @@ describe('function-level exception handling', () => {
FinallyExpr
keyword finally
colon :
TryBlock
MultiLineBlock
FunctionCallOrIdentifier
Identifier cleanup
keyword end