From 1cd7511ced868f12d843ecae2516af37f1f54049 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Tue, 11 Oct 2022 11:23:50 -0400 Subject: [PATCH] Add dereference to tree --- parser/tree-tostring.go | 13 +++++++++++++ parser/tree.go | 13 ++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/parser/tree-tostring.go b/parser/tree-tostring.go index 157e3ca..2db8f60 100644 --- a/parser/tree-tostring.go +++ b/parser/tree-tostring.go @@ -133,6 +133,9 @@ func (argument Argument) ToString (indent int, breakLine bool) (output string) { case ArgumentKindList: output += argument.value.(List).ToString(indent, breakLine) + + case ArgumentKindDereference: + output += argument.value.(Dereference).ToString(indent) case ArgumentKindIdentifier: output += doIndent ( @@ -276,6 +279,16 @@ func (behavior FaceBehavior) ToString (indent int) (output string) { return } +func (dereference Dereference) ToString (indent int) (output string) { + output += "{" + output += dereference.argument.ToString(indent, false) + if dereference.offset != 0 { + output += fmt.Sprint(" ", dereference.offset) + } + output += "}" + return +} + func (phrase Phrase) ToString (indent int, ownLine bool) (output string) { if ownLine { output += doIndent(indent) diff --git a/parser/tree.go b/parser/tree.go index 0b3f09f..92bfb34 100644 --- a/parser/tree.go +++ b/parser/tree.go @@ -97,10 +97,8 @@ const ( ArgumentKindList // {name} - ArgumentKindDereference - // {name 23} - ArgumentKindSubscript + ArgumentKindDereference // name.name // name.name.name @@ -220,6 +218,15 @@ type FaceSection struct { FaceBehavior } +// Dereference represents a pointer dereference or array subscript. +type Dereference struct { + locatable + valuable + + // if a simple dereference was parsed, this should just be zero. + offset int +} + // PhraseKind determines what semantic role a phrase plays. type PhraseKind int