no more single vs multiline blocks

This commit is contained in:
Chris Wanstrath 2025-11-03 20:05:27 -08:00
parent dc557deb40
commit 0d1f132379
8 changed files with 80 additions and 95 deletions

View File

@ -389,8 +389,7 @@ export class Compiler {
return instructions
}
case terms.MultiLineBlock:
case terms.SingleLineBlock: {
case terms.Block: {
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 MultiLineBlock or statement
// First child is always 'try' keyword, second is colon, third is Block or statement
const [tryKeyword, _colon, tryBlock, ...rest] = children
if (!tryKeyword || !tryBlock) {

View File

@ -81,15 +81,11 @@ pipeOperand {
}
WhileExpr {
while (ConditionalOp | expression) colon (newlineOrSemicolon MultiLineBlock | SingleLineBlock) end
while (ConditionalOp | expression) colon Block end
}
SingleLineBlock {
consumeToTerminator
}
MultiLineBlock {
block
Block {
consumeToTerminator | newlineOrSemicolon block
}
FunctionCallOrIdentifier {
@ -121,43 +117,27 @@ FunctionDef {
}
IfExpr {
singleLineIf | multilineIf
}
singleLineIf {
if (ConditionalOp | expression) colon SingleLineBlock end
}
multilineIf {
if (ConditionalOp | expression) colon newlineOrSemicolon MultiLineBlock ElseIfExpr* ElseExpr? end
if (ConditionalOp | expression) colon Block ElseIfExpr* ElseExpr? end
}
ElseIfExpr {
elseif (ConditionalOp | expression) colon newlineOrSemicolon MultiLineBlock
elseif (ConditionalOp | expression) colon Block
}
ElseExpr {
else colon newlineOrSemicolon MultiLineBlock
else colon Block
}
TryExpr {
singleLineTry | multilineTry
}
singleLineTry {
try colon consumeToTerminator CatchExpr? FinallyExpr? end
}
multilineTry {
try colon newlineOrSemicolon MultiLineBlock CatchExpr? FinallyExpr? end
try colon Block CatchExpr? FinallyExpr? end
}
CatchExpr {
catch Identifier colon (newlineOrSemicolon MultiLineBlock | consumeToTerminator)
catch Identifier colon Block
}
FinallyExpr {
finally colon (newlineOrSemicolon MultiLineBlock | consumeToTerminator)
finally colon Block
}
Throw {

View File

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

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:124, throw:128, if:132, elseif:136, else:140}
const spec_Identifier = {__proto__:null,null:90, catch:96, finally:102, end:104, while:118, try:122, throw:126, if:130, elseif:134, else:138}
export const parser = LRParser.deserialize({
version: 14,
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,
states: "7vQYQbOOO#}QcO'#C{O$zOSO'#C}OOQa'#DT'#DTO&TQbO'#DdO'lQcO'#E]OOQa'#E]'#E]O(oQcO'#E]O)qQcO'#E[O*[QRO'#C|O+nQcO'#EWO,OQcO'#EWO,YQbO'#CzO-QOpO'#CxOOQ`'#EX'#EXO-VQbO'#EWO-^QRO'#DtOOQ`'#EW'#EWO-rQQO'#EVOOQ`'#EV'#EVOOQ`'#Dv'#DvQYQbOOO-zQbO'#DWO.VQbO'#DhO.zQQO'#DjO.VQbO'#DlO.VQbO'#DnO/PQbO'#DUOOQa'#E['#E[OOQ`'#Df'#DfOOQ`'#Ek'#EkOOQ`'#EO'#EOO/ZQbO,59cO0TQbO'#DPO0]QWO'#DQOOOO'#E_'#E_OOOO'#Dw'#DwO0qOSO,59iOOQa,59i,59iOOQ`'#Dx'#DxO1PQbO,5:OO1WQQO,59oOOQa,5:O,5:OO1cQbO,5:OO1mQbO,5:aO.VQbO,59hO.VQbO,59hO.VQbO,59hO.VQbO,5:PO.VQbO,5:PO.VQbO,5:PO2QQRO,59fO2XQRO,59fO2jQRO,59fO2eQQO,59fO2uQQO,59fO2}ObO,59dO3YQbO'#EPO3eQbO,59bO1mQbO,5:`OOQ`,5:q,5:qOOQ`-E7t-E7tOOQ`'#Dy'#DyO4SQbO'#DXO4_QbO'#DYOOQO'#Dz'#DzO4VQQO'#DXO4mQQO,59rO5^QRO,5:SO5eQRO,5:SO5pQbO,5:UO6WQcO,5:WO7YQcO,5:WO7jQcO,5:WO7tQRO,5:YO7{QRO,5:YOOQ`,59p,59pOOQ`-E7|-E7|OOOO,59k,59kOOOO,59l,59lOOOO-E7u-E7uOOQa1G/T1G/TOOQ`-E7v-E7vO8WQQO1G/ZOOQa1G/j1G/jO8cQbO1G/jOOQO'#D|'#D|O8WQQO1G/ZOOQa1G/Z1G/ZOOQ`'#D}'#D}O8cQbO1G/jOOQ`1G/{1G/{OOQa1G/S1G/SO9bQcO1G/SO9lQcO1G/SO9vQcO1G/SOOQa1G/k1G/kO;rQcO1G/kO;yQcO1G/kO<QQcO1G/kOOQa1G/Q1G/QOOQa1G/O1G/OO!dQbO'#C{O<XQbO'#CwOOQ`,5:k,5:kOOQ`-E7}-E7}OOQ`1G/z1G/zOOQ`-E7w-E7wO<fQQO,59sOOQO,59t,59tOOQO-E7x-E7xO<nQbO1G/^O5pQbO1G/nOOQ`'#D_'#D_O=UQbO'#D_O={QbO1G/pO5pQbO1G/tO>WQQO7+$uOOQa7+$u7+$uO>cQbO7+%UOOQa7+%U7+%UOOQO-E7z-E7zOOQ`-E7{-E7{O>mQbO7+$xO>xQbO7+$xO?iQbO7+%YOOQ`'#D{'#D{O?nQQO'#D{O?sQbO'#EhOOQ`,59y,59yO@jQbO'#D]O@oQQO'#D`OOQ`7+%[7+%[O@tQbO7+%[O@yQbO7+%[OARQbO7+%`OOQa<<Ha<<HaOOQa<<Hp<<HpOOQ`<<Hd<<HdOA^QbO<<HdOAcQbO<<HdOAkQbO<<HdOOQ`<<Ht<<HtOOQ`,5:g,5:gOOQ`-E7y-E7yOAvQQO,59wO5pQbO,59zOOQ`<<Hv<<HvOA{QbO<<HvOOQ`'#EQ'#EQOBQQbO<<HzO.VQbO'#DpOB]QQO'#DrOOQ`<<Hz<<HzOBbQbO<<HzOOQ`AN>OAN>OOBgQbOAN>OOBlQbOAN>OO5pQbO1G/cOOQ`1G/f1G/fOOQ`AN>bAN>bOOQ`-E8O-E8OOOQ`AN>fAN>fOBtQbOAN>fOByQRO,5:[OCQQRO,5:[O5pQbO,5:^OOQ`G23jG23jOC]QbOG23jOOQ`7+$}7+$}OOQ`G24QG24QO5pQbO1G/vOOQ`1G/x1G/xOOQ`LD)ULD)UOOQ`7+%b7+%b",
stateData: "Ce~O!wOS!xOS~OdPOe`OfUOg]OhfOmUOuUOvUO}UO!]gO!_hO!aiO!cjO!}[O#QQO#XRO#YSO#ZcO~OdlOfUOg]OhfOmUOuUOvUOykO}UO!VmO!}[O#QQO#XRO#YSO!ZoX#ZoX#`oX#^oX!QoX!ToX!UoX!eoX!goX~OP#OXQ#OXR#OXS#OXT#OXU#OXW#OXX#OXY#OXZ#OX[#OX]#OX^#OX~P!dOrsO#QvO#SqO#TrO~OdlOfUOg]OmUOuUOvUOykO}UO!}[O#QQO#XRO#YSO#ZwO~O#]zO~P%YOP#PXQ#PXR#PXS#PXT#PXU#PXW#PXX#PXY#PXZ#PX[#PX]#PX^#PX#Z#PX#`#PX!Q#PX!T#PX!U#PX!e#PX!g#PX~OdlOfUOg]OhfOmUOuUOvUOykO}UO!VmO!}[O#QQO#XRO#YSO#^#PX~P&[OV|O~P&[OP#OXQ#OXR#OXS#OXT#OXU#OXW#OXX#OXY#OXZ#OX[#OX]#OX^#OX~O#Z!zX#`!zX!Q!zX!T!zX!U!zX!e!zX!g!zX~P(vOP!OOQ!OOR!POS!POT!ROU!SOW!QOX!QOY!QOZ!QO[!QO]!QO^}O~O#Z!zX#`!zX!Q!zX!T!zX!U!zX!e!zX!g!zX~OP!OOQ!OOR!POS!PO~P+VOT!ROU!SO~P+VOdPOfUOg]OhfOmUOuUOvUO}UO!}[O#QQO#XRO#YSO~O!|!YO~O!Z!ZO~P+VOV|O_!]O`!]Oa!]Ob!]Oc!]O~O#Z!^O#`!^O~Od!`Oy!bO!O{P~OdlOfUOg]OmUOuUOvUO}UO!}[O#QQO#XRO#YSO~O!O!hO~OhfO!V!nO~P.VOhfOykO!VmO!Zka#Zka#`ka#^ka!Qka!Tka!Uka!eka!gka~P.VOd!pO!}[O~O#Q!qO#S!qO#T!qO#U!qO#V!qO#W!qO~OrsO#Q!sO#SqO#TrO~O#]!vO~P%YOykO#Z!xO#]!zO~O#Z!{O#]!vO~P.VOe`O!]gO!_hO!aiO!cjO~P,YO#^#WO~P(vOP!OOQ!OOR!POS!PO#^#WO~OT!ROU!SO#^#WO~O!Z!ZO#^#WO~Od#XOm#XO!}[O~Od#YOg]O!}[O~O!Z!ZO#Zja#`ja#^ja!Qja!Tja!Uja!eja!gja~Od!`Oy!bO!O{X~Om#aOu#aO}#aO#QQO~O!O#cO~OT!ROU!SOW!QOX!QOY!QOZ!QO[!QO]!QO~O!O#dO~P4rOT!ROU!SO!O#dO~Oe`O!]gO!_hO!aiO!cjO#Z#fO~P,YO#Z!`a#`!`a!Q!`a!T!`a!U!`a!e!`a!g!`a~P*[O#Z!`a#`!`a!Q!`a!T!`a!U!`a!e!`a!g!`a~OP!OOQ!OOR!POS!PO~P6qOT!ROU!SO~P6qO!O#hO~P4rOT!ROU!SO!O#hO~OykO#Z!xO#]#jO~O#Z!{O#]#lO~P.VO^}ORpiSpi#Zpi#`pi#^pi!Qpi!Tpi!Upi!epi!gpi~OPpiQpi~P8mOP!OOQ!OO~P8mOP!OOQ!OORpiSpi#Zpi#`pi#^pi!Qpi!Tpi!Upi!epi!gpi~OW!QOX!QOY!QOZ!QO[!QO]!QOT!Xi#Z!Xi#`!Xi#^!Xi!O!Xi!Q!Xi!T!Xi!U!Xi!e!Xi!g!Xi~OU!SO~P:nOU!SO~P;QOU!Xi~P:nOhfOykO!VmO~P.VOy!bO!O{a~Oe`O!]gO!_hO!aiO!cjO#Z#pO~P,YOe`O!]gO!_hO!aiO!cjO#Z#rO!Q#[P!T#[P!U#[P!e#[P!g#[P~P,YO!Q#vO!T#wO!U#xO~OykO#Z!xO#]#|O~O#Z!{O#]#}O~P.VO!Q#vO!T#wO!U$OO~Oe`O!]gO!_hO!aiO!cjO#Z#rO!Q#[P!T#[P!U#[P~P,YO!U$SO~O#Z$TO~Oe`O!]gO!_hO!aiO!cjO#Z#rO!Q#[X!T#[X!U#[X!e#[X!g#[X~P,YOd$VO~O!O$WO~O!U$XO~O!T#wO!U$XO~O!U$_O!e$]O!g$^O~O!U$aO~O!T#wO!U$aO~O!Q#vO!T#wO!U$aO~O!O$dO~O!U$fO~O!U$hO!e$]O!g$^O~O!O$lO~O!U$hO~O!U$mO~O!T#wO!U$mO~O!U$pO~O!O$qO~P4rOT!ROU!SO!O$qO~O!U$sO~Omv~",
goto: "3b#`PPPPPPPPPPPPPPPPPPPPPPPPPP#a#u$YP%X#u&^&{P'x'xPP'|(vP)Z)y)|PP*SP*]*rPPP+S,O,vP,}P,}P,}P,}P-`P-dP,},}-j-p-v-|.S.^.e.o.y/S/ZPPPP/a/e0QPP0i2RP3PPPPPPPPP3TPP3ZnaOe|!]!h#c#d#f#h#p#t$W$d$l$qR!W[s^O[e|!Z!]!h#c#d#f#h#p#t$W$d$l$qpPO[e|!]!h#c#d#f#h#p#t$W$d$l$q|lPSTgijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]R#Y!ZpTO[e|!]!h#c#d#f#h#p#t$W$d$l$q|UPSTgijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]Q!pqQ#X!YR#Z!ZnYOe|!]!h#c#d#f#h#p#t$W$d$l$qQ!U[Q!jiQ#O!OR#R!P!nUOPST[egijkpx{|}!O!P!Q!R!S!]!h!w!|#Y#Z#c#d#f#h#k#p#t$W$]$d$l$qR#a!bTsQu!oUOPST[egijkpx{|}!O!P!Q!R!S!]!h!w!|#Y#Z#c#d#f#h#k#p#t$W$]$d$l$qYnPTp#Y#ZQySQ!uxX!xy!u!y#inaOe|!]!h#c#d#f#h#p#t$W$d$l$qYmPTp#Y#ZQ!W[R!nkR!efX!cf!a!d#`Q#z#gQ$Q#oR$c$RQ#g!hQ#q#dQ#{#hQ$e$WQ$o$dQ$r$lR$t$qQ#y#gQ$P#oQ$Y#zS$b$Q$RR$n$c!OUPST[gijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]oVOe|!]!h#c#d#f#h#p#t$W$d$l$qnZOe|!]!h#c#d#f#h#p#t$W$d$l$qQ!V[Q!ggQ!kiQ!mjQ#S!SQ#U!RR$k$]ZnPTp#Y#ZoaOe|!]!h#c#d#f#h#p#t$W$d$l$qT$Z#{$[Q$`#{R$i$[QeOR!_eQuQR!ruQxSR!txQ!afR#_!aQ!dfQ#`!aT#b!d#`S#t#f#pR$U#tQ!yyQ#i!uT#m!y#iQ!|{Q#k!wT#n!|#kWpPT#Y#ZR!opS![_!XR#]![Q$[#{R$g$[TdOeSbOeQ!}|Q#^!]^#e!h#d#h$W$d$l$qQ#o#cV#s#f#p#tn_Oe|!]!h#c#d#f#h#p#t$W$d$l$qQ!X[R#[!ZpXO[e|!]!h#c#d#f#h#p#t$W$d$l$qYmPTp#Y#ZQ{SQ!fgQ!iiQ!ljQ!nkQ!wxW!{{!w!|#kQ#O}Q#P!OQ#Q!PQ#S!QQ#T!RQ#V!SR$j$]nWOe|!]!h#c#d#f#h#p#t$W$d$l$q|lPSTgijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]R!T[TtQuQ#u#fR$R#pZoPTp#Y#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 Block FinallyExpr keyword keyword Underscore Array ConditionalOp PositionalArg operator WhileExpr keyword TryExpr keyword Throw keyword IfExpr keyword ElseIfExpr keyword ElseExpr keyword CompoundAssign Assign",
maxTerm: 108,
context: trackScope,
nodeProps: [
["closedBy", 46,"end"]
@ -19,9 +19,9 @@ 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!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)],
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!wYOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U%[UrS#ZQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{^%uZrS!xYOY%nYZ#{Zt%ntu&huw%nwx&hx#O%n#O#P&h#P;'S%n;'S;=`'P<%lO%nY&mS!xYOY&hZ;'S&h;'S;=`&y<%lO&hY&|P;=`<%l&h^'SP;=`<%l%n~'[O#S~~'aO#Q~U'hUrS!}QOt#{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#YQrSOt#{uw#{x!_#{!_!`7e!`#O#{#P;'S#{;'S;=`$d<%lO#{U7jVrSOt#{uw#{x#O#{#P#Q8P#Q;'S#{;'S;=`$d<%lO#{U8WU#XQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~8oO#T~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[#UWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^?u[#WWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^@r^#VWrSOt#{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#`~",
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
tokenPrec: 1582
})

View File

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

View File

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

View File

@ -12,14 +12,14 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier risky-operation
CatchExpr
keyword catch
Identifier err
colon :
MultiLineBlock
Block
FunctionCall
Identifier handle-error
PositionalArg
@ -37,13 +37,13 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier do-work
FinallyExpr
keyword finally
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier cleanup
keyword end
@ -61,14 +61,14 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier risky-operation
CatchExpr
keyword catch
Identifier err
colon :
MultiLineBlock
Block
FunctionCall
Identifier handle-error
PositionalArg
@ -76,7 +76,7 @@ describe('try/catch/finally/throw', () => {
FinallyExpr
keyword finally
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier cleanup
keyword end
@ -91,15 +91,17 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
FunctionCall
Identifier parse-number
PositionalArg
Identifier input
Block
FunctionCall
Identifier parse-number
PositionalArg
Identifier input
CatchExpr
keyword catch
Identifier err
colon :
Number 0
Block
Number 0
keyword end
`)
})
@ -109,18 +111,21 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
FunctionCallOrIdentifier
Identifier work
Block
FunctionCallOrIdentifier
Identifier work
CatchExpr
keyword catch
Identifier err
colon :
Number 0
Block
Number 0
FinallyExpr
keyword finally
colon :
FunctionCallOrIdentifier
Identifier cleanup
Block
FunctionCallOrIdentifier
Identifier cleanup
keyword end
`)
})
@ -164,13 +169,15 @@ describe('try/catch/finally/throw', () => {
TryExpr
keyword try
colon :
FunctionCallOrIdentifier
Identifier work
Block
FunctionCallOrIdentifier
Identifier work
CatchExpr
keyword catch
Identifier err
colon :
Number 0
Block
Number 0
keyword end
`)
})
@ -199,7 +206,7 @@ describe('function-level exception handling', () => {
keyword catch
Identifier e
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier empty-string
keyword end
@ -227,7 +234,7 @@ describe('function-level exception handling', () => {
FinallyExpr
keyword finally
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier close-resources
keyword end
@ -259,7 +266,7 @@ describe('function-level exception handling', () => {
keyword catch
Identifier err
colon :
MultiLineBlock
Block
FunctionCall
Identifier log
PositionalArg
@ -269,7 +276,7 @@ describe('function-level exception handling', () => {
FinallyExpr
keyword finally
colon :
MultiLineBlock
Block
FunctionCallOrIdentifier
Identifier cleanup
keyword end