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.MultiLineBlock:
case terms.SingleLineBlock: case terms.SingleLineBlock: {
case terms.ThenBlock:
case terms.SingleLineThenBlock:
case terms.TryBlock: {
const children = getAllChildren(node) const children = getAllChildren(node)
const instructions: ProgramItem[] = [] const instructions: ProgramItem[] = []

View File

@ -309,7 +309,7 @@ export const getDotGetParts = (node: SyntaxNode, input: string) => {
export const getTryExprParts = (node: SyntaxNode, input: string) => { export const getTryExprParts = (node: SyntaxNode, input: string) => {
const children = getAllChildren(node) 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 const [tryKeyword, _colon, tryBlock, ...rest] = children
if (!tryKeyword || !tryBlock) { if (!tryKeyword || !tryBlock) {

View File

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

View File

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

View File

@ -4,14 +4,14 @@ import {operatorTokenizer} from "./operatorTokenizer"
import {tokenizer, specializeKeyword} from "./tokenizer" import {tokenizer, specializeKeyword} from "./tokenizer"
import {trackScope} from "./scopeTracker" import {trackScope} from "./scopeTracker"
import {highlighting} from "./highlight" 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({ export const parser = LRParser.deserialize({
version: 14, 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", 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!{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~", 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: "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%[", 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 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", 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: 116, maxTerm: 113,
context: trackScope, context: trackScope,
nodeProps: [ nodeProps: [
["closedBy", 46,"end"] ["closedBy", 46,"end"]
@ -19,8 +19,8 @@ export const parser = LRParser.deserialize({
propSources: [highlighting], propSources: [highlighting],
skippedNodes: [0], skippedNodes: [0],
repeatNodeCount: 11, 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~", 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#Q~~", 11)], tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO!}~~", 11)],
topRules: {"Program":[0,25]}, 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}], 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: 1700

View File

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

View File

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

View File

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