summaryrefslogtreecommitdiff
path: root/parser/type.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2026-01-09 19:10:27 +0100
committerMarc Vertes <mvertes@free.fr>2026-01-09 19:10:27 +0100
commit7520aa4474ea30985cf26631c6bbdebf38484a0d (patch)
treee1e344c2fdc04affc0095eab26a39eef1fc3ba91 /parser/type.go
parent6ae0a2530c9a57fc093d2159591d9cae8140d641 (diff)
feat: initial support for maps
Diffstat (limited to 'parser/type.go')
-rw-r--r--parser/type.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/parser/type.go b/parser/type.go
index 70ed4d1..5e8df02 100644
--- a/parser/type.go
+++ b/parser/type.go
@@ -127,6 +127,24 @@ func (p *Parser) parseTypeExpr(in Tokens) (typ *vm.Type, err error) {
}
return vm.StructOf(fields), nil
+ case lang.Map:
+ if len(in) < 3 || in[1].Tok != lang.BracketBlock {
+ return nil, fmt.Errorf("%w: %s", ErrInvalidType, in[0].Str)
+ }
+ kin, err := p.Scan(in[1].Block(), false)
+ if err != nil {
+ return nil, err
+ }
+ ktyp, err := p.parseTypeExpr(kin) // Key type
+ if err != nil {
+ return nil, err
+ }
+ etyp, err := p.parseTypeExpr(in[2:]) // Element type
+ if err != nil {
+ return nil, err
+ }
+ return vm.MapOf(ktyp, etyp), nil
+
default:
return nil, fmt.Errorf("%w: %v", ErrNotImplemented, in[0].Name())
}