dot-get #1
|
|
@ -1 +1 @@
|
|||
Subproject commit 0844e99d2d04fb9ba0999f25248a17430bdc5ee6
|
||||
Subproject commit 1a18a713d7ae86b03a6bef38cc53d12ecfbf9627
|
||||
|
|
@ -2,24 +2,15 @@ import { ContextTracker } from '@lezer/lr'
|
|||
import * as terms from './shrimp.terms'
|
||||
|
||||
export class Scope {
|
||||
constructor(
|
||||
public parent: Scope | null,
|
||||
public vars: Set<string>
|
||||
) {}
|
||||
constructor(public parent: Scope | null, public vars: Set<string>) {}
|
||||
|
||||
has(name: string): boolean {
|
||||
return this.vars.has(name) || (this.parent?.has(name) ?? false)
|
||||
return this.vars.has(name) ?? this.parent?.has(name)
|
||||
}
|
||||
|
||||
add(name: string): Scope {
|
||||
add(...names: string[]): Scope {
|
||||
const newVars = new Set(this.vars)
|
||||
newVars.add(name)
|
||||
return new Scope(this.parent, newVars)
|
||||
}
|
||||
|
||||
addAll(names: string[]): Scope {
|
||||
const newVars = new Set(this.vars)
|
||||
names.forEach(name => newVars.add(name))
|
||||
names.forEach((name) => newVars.add(name))
|
||||
return new Scope(this.parent, newVars)
|
||||
}
|
||||
|
||||
|
|
@ -94,7 +85,7 @@ export const trackScope = new ContextTracker<Scope>({
|
|||
if (term === terms.Params) {
|
||||
const newScope = context.push()
|
||||
if (pendingIdentifiers.length > 0) {
|
||||
const newContext = newScope.addAll(pendingIdentifiers)
|
||||
const newContext = newScope.add(...pendingIdentifiers)
|
||||
pendingIdentifiers = []
|
||||
isInParams = false
|
||||
return newContext
|
||||
|
|
@ -109,12 +100,12 @@ export const trackScope = new ContextTracker<Scope>({
|
|||
}
|
||||
|
||||
// Clear stale identifiers after non-assignment statements
|
||||
if (term === terms.PropertyAccess || term === terms.FunctionCallOrIdentifier) {
|
||||
if (term === terms.DotGet || term === terms.FunctionCallOrIdentifier) {
|
||||
pendingIdentifiers = []
|
||||
}
|
||||
|
||||
return context
|
||||
},
|
||||
|
||||
hash: (context) => context.hash()
|
||||
hash: (context) => context.hash(),
|
||||
})
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ item {
|
|||
consumeToTerminator {
|
||||
PipeExpr |
|
||||
ambiguousFunctionCall |
|
||||
PropertyAccess |
|
||||
DotGet |
|
||||
IfExpr |
|
||||
FunctionDef |
|
||||
Assign |
|
||||
|
|
@ -158,7 +158,7 @@ Assign {
|
|||
Identifier "=" consumeToTerminator
|
||||
}
|
||||
|
||||
PropertyAccess {
|
||||
DotGet {
|
||||
Identifier "." Identifier
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ export const
|
|||
Underscore = 36,
|
||||
NamedArg = 37,
|
||||
NamedArgPrefix = 38,
|
||||
PropertyAccess = 40,
|
||||
DotGet = 40,
|
||||
IfExpr = 41,
|
||||
ThenBlock = 44,
|
||||
ElsifExpr = 45,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ export const parser = LRParser.deserialize({
|
|||
states: ".dQVQaOOO#OQbO'#CdO#cQPO'#CeO#qQPO'#DkO$qQaO'#CcO$xOSO'#CsOOQ`'#Do'#DoO%WQPO'#DnO%oQaO'#DyOOQ`'#C{'#C{OOQO'#Dl'#DlO%wQPO'#DkO&VQaO'#EOOOQO'#DV'#DVOOQO'#Dk'#DkO&^QPO'#DjOOQ`'#Dj'#DjOOQ`'#D`'#D`QVQaOOOOQ`'#Dn'#DnOOQ`'#Cb'#CbO&fQaO'#DROOQ`'#Dm'#DmOOQ`'#Da'#DaO&sQbO,58{O'dQaO,59pO'iQaO,59yO&VQaO,59PO&VQaO,59PO'vQbO'#CdO)RQPO'#CeO)cQPO,58}O)tQPO,58}O)oQPO,58}O*oQPO,58}O*wQaO'#CuO+PQWO'#CvOOOO'#Ds'#DsOOOO'#Db'#DbO+eOSO,59_OOQ`,59_,59_OOQ`'#Dc'#DcO+sQaO'#C}O+{QPO,5:eO,QQaO'#DeO,VQPO,58zO,hQPO,5:jO,oQPO,5:jOOQ`,5:U,5:UOOQ`-E7^-E7^OOQ`,59m,59mOOQ`-E7_-E7_OOQO1G/[1G/[OOQO1G/e1G/eOOQO1G.k1G.kO,tQPO1G.kO&VQaO,59UO&VQaO,59UOOQ`1G.i1G.iOOOO,59a,59aOOOO,59b,59bOOOO-E7`-E7`OOQ`1G.y1G.yOOQ`-E7a-E7aO-`QaO1G0PO-pQbO'#CdOOQO,5:P,5:POOQO-E7c-E7cO.aQaO1G0UOOQO1G.p1G.pO.qQPO1G.pO.{QPO7+%kO/QQaO7+%lOOQO'#DX'#DXOOQO7+%p7+%pO/bQaO7+%qOOQ`<<IV<<IVO/xQPO'#DdO/}QaO'#D|O0eQPO<<IWOOQO'#DY'#DYO0jQPO<<I]OOQ`,5:O,5:OOOQ`-E7b-E7bOOQ`AN>rAN>rO&VQaO'#DZOOQO'#Df'#DfO0uQPOAN>wO1QQPO'#D]OOQOAN>wAN>wO1VQPOAN>wO1[QPO,59uO1cQPO,59uOOQO-E7d-E7dOOQOG24cG24cO1hQPOG24cO1mQPO,59wO1rQPO1G/aOOQOLD)}LD)}O/QQaO1G/cO/bQaO7+${OOQO7+$}7+$}OOQO<<Hg<<Hg",
|
||||
stateData: "1}~O!]OS~OPPOQUOkUOlUOmUOnUOpWOz[O!dSO!fTO!o`O~OPcOQUOkUOlUOmUOnUOpWOtdOveO!dSO!fTOY!bXZ!bX[!bX]!bXwWX~O_jO!qiO!oWX!tWXsWX~PzOYkOZkO[lO]lO~OYkOZkO[lO]lO!o!_X!t!_Xs!_X~OQUOkUOlUOmUOnUO!dSO!fTO~OPmO~P$YOhuO!fxO!hsO!itO~OY!bXZ!bX[!bX]!bX!o!_X!t!_Xs!_X~OPyOrqP~Ow|O!o!_X!t!_Xs!_X~OPcO~P$YO!o!QO!t!QO~OPcOpWOt!SO~P$YOPcOpWOtdOveOwTa!oTa!tTa!eTasTa~P$YOP!UO~OPPOpWOz[O~P$YO_!bX`!bXa!bXb!bXc!bXd!bXe!bXf!bX!eWX~PzO_!YO`!YOa!YOb!YOc!YOd!YOe!ZOf!ZO~OYkOZkO[lO]lO~P(gOYkOZkO[lO]lO!e![O~O!e![OY!bXZ!bX[!bX]!bX_!bX`!bXa!bXb!bXc!bXd!bXe!bXf!bX~Ow|O!e![O~OP!]O!dSO~O!f!^O!h!^O!i!^O!j!^O!k!^O!l!^O~OhuO!f!`O!hsO!itO~OPyOrqX~Or!bO~OP!cO~Ow|O!oSa!tSa!eSasSa~Or!fO~P(gOr!fO~OYkOZkO[Xi]Xi!oXi!tXi!eXisXi~OPPOpWOz[O!o!jO~P$YOPcOpWOtdOveOwWX!oWX!tWX!eWXsWX~P$YOPPOpWOz[O!o!mO~P$YO!e^ir^i~P(gOs!nO~OPPOpWOz[Os!pP~P$YOPPOpWOz[Os!pP!O!pP!Q!pP~P$YO!o!tO~OPPOpWOz[Os!pX!O!pX!Q!pX~P$YOs!vO~Os!{O!O!wO!Q!zO~Os#QO!O!wO!Q!zO~Or#SO~Os#QO~Or#TO~P(gOr#TO~Os#UO~O!o#VO~O!o#WO~Ok]mZm~",
|
||||
goto: "+Z!tPPPP!u#U#d#j#U$VPPPP$lPPPPPPPP$xP%b%bPPPP%fP%{PPP#dPP&O&OP&[&_&hP&lP&O&r&x'Q'W'^'g'nPPP't'x(^(p(v)rPPP*`PPPPP*d*dP*uP*}*}d^Obj!b!f!j!m!p#V#WRqSiYOSbj|!b!f!j!m!p#V#WXfPhm!c|UOPS[behjklm!Y!Z!b!c!f!j!m!p!w#V#WR!]sdRObj!b!f!j!m!p#V#WQoSQ!WkR!XlQqSQ!P[Q!g!ZR#O!w}UOPS[behjklm!Y!Z!b!c!f!j!m!p!w#V#WTuTwd^Obj!b!f!j!m!p#V#WWdPhm!cR!SeR{We^Obj!b!f!j!m!p#V#WR!l!fQ!s!mQ#X#VR#Y#WT!x!s!yQ!|!sR#R!yQbOR!RbUhPm!cR!ThQwTR!_wQzWR!azW!p!j!m#V#WR!u!pS}ZrR!e}Q!y!sR#P!yTaObS_ObQ!VjQ!i!bQ!k!fZ!o!j!m!p#V#WdZObj!b!f!j!m!p#V#WQrSR!d|XgPhm!cdQObj!b!f!j!m!p#V#WWdPhm!cQnSQ!O[Q!SeQ!WkQ!XlQ!g!YQ!h!ZR!}!wdVObj!b!f!j!m!p#V#WfcP[ehklm!Y!Z!c!wRpSTvTwoXOPbehjm!b!c!f!j!m!p#V#WQ!q!jV!r!m#V#We]Obj!b!f!j!m!p#V#W",
|
||||
nodeNames: "⚠ Identifier Word Program PipeExpr FunctionCall PositionalArg ParenExpr FunctionCallOrIdentifier BinOp operator operator operator operator ConditionalOp operator operator operator operator operator operator operator operator String StringFragment Interpolation EscapeSeq Number Boolean Regex Null FunctionDef keyword Params colon end Underscore NamedArg NamedArgPrefix operator PropertyAccess IfExpr keyword ThenBlock ThenBlock ElsifExpr keyword ElseExpr keyword Assign",
|
||||
nodeNames: "⚠ Identifier Word Program PipeExpr FunctionCall PositionalArg ParenExpr FunctionCallOrIdentifier BinOp operator operator operator operator ConditionalOp operator operator operator operator operator operator operator operator String StringFragment Interpolation EscapeSeq Number Boolean Regex Null FunctionDef keyword Params colon end Underscore NamedArg NamedArgPrefix operator DotGet IfExpr keyword ThenBlock ThenBlock ElsifExpr keyword ElseExpr keyword Assign",
|
||||
maxTerm: 82,
|
||||
context: trackScope,
|
||||
nodeProps: [
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user