refactor(parser): rename PropertyAccess to DotGet
Aligns naming with ReefVM's DOT_GET opcode and better represents that this syntax works for both dicts and arrays. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
7e819f9c67
commit
22fba65a53
|
|
@ -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