summaryrefslogtreecommitdiff
path: root/parser/symbol.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-11-17 16:45:58 +0100
committerMarc Vertes <mvertes@free.fr>2023-11-17 16:45:58 +0100
commitee21c324ce8c41b589e5a39e5715223ffd154315 (patch)
tree9dfe692c787ceb65d85f3a9e04524759fab31200 /parser/symbol.go
parenta79e558d825c5b777c95c5e098b01391ee36781e (diff)
parser: support selector expression to get / set struct fields
The structures are reresented by reflect values. New instructions `Field` and `Vassign` have been added to the VM to assign reflect values and access struct fields.
Diffstat (limited to 'parser/symbol.go')
-rw-r--r--parser/symbol.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/parser/symbol.go b/parser/symbol.go
index f707feb..7edcef3 100644
--- a/parser/symbol.go
+++ b/parser/symbol.go
@@ -30,6 +30,13 @@ type symbol struct {
used bool
}
+func symtype(s *symbol) reflect.Type {
+ if s.Type != nil {
+ return s.Type
+ }
+ return reflect.TypeOf(s.value)
+}
+
func (p *Parser) AddSym(i int, name string, v any) { p.addSym(i, name, v, symValue, nil, false) }
func (p *Parser) addSym(i int, name string, v any, k symKind, t reflect.Type, local bool) {