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:
Corey Johnson 2025-10-16 18:10:21 -07:00
parent 7e819f9c67
commit 22fba65a53
5 changed files with 12 additions and 21 deletions

@ -1 +1 @@
Subproject commit 0844e99d2d04fb9ba0999f25248a17430bdc5ee6
Subproject commit 1a18a713d7ae86b03a6bef38cc53d12ecfbf9627

View File

@ -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(),
})

View File

@ -62,7 +62,7 @@ item {
consumeToTerminator {
PipeExpr |
ambiguousFunctionCall |
PropertyAccess |
DotGet |
IfExpr |
FunctionDef |
Assign |
@ -158,7 +158,7 @@ Assign {
Identifier "=" consumeToTerminator
}
PropertyAccess {
DotGet {
Identifier "." Identifier
}

View File

@ -25,7 +25,7 @@ export const
Underscore = 36,
NamedArg = 37,
NamedArgPrefix = 38,
PropertyAccess = 40,
DotGet = 40,
IfExpr = 41,
ThenBlock = 44,
ElsifExpr = 45,

View File

@ -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: [