summaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2026-01-27 18:54:59 +0100
committerMarc Vertes <mvertes@free.fr>2026-01-27 18:54:59 +0100
commit6983f69d7381c2b3e287a98b5177c0e335e768af (patch)
tree156362ec062d7e3b80192b166ba568674a668e6e /parser
parent60f6ebc8d8369721e105d826145af2b8856ac67e (diff)
fix: improve var declaration with multiple assignHEADmain
Diffstat (limited to 'parser')
-rw-r--r--parser/decl.go28
1 files changed, 25 insertions, 3 deletions
diff --git a/parser/decl.go b/parser/decl.go
index 0ba0075..bbcbb94 100644
--- a/parser/decl.go
+++ b/parser/decl.go
@@ -332,8 +332,10 @@ func (p *Parser) parseVarLine(in Tokens) (out Tokens, err error) {
decl = decl[:i]
}
var vars []string
+ var undefinedType bool
if _, vars, err = p.parseParamTypes(decl, parseTypeVar); err != nil {
if errors.Is(err, ErrMissingType) {
+ undefinedType = true
for _, lt := range decl.Split(lang.Comma) {
vars = append(vars, lt[0].Str)
name := strings.TrimPrefix(p.scope+"/"+lt[0].Str, "/")
@@ -349,8 +351,24 @@ func (p *Parser) parseVarLine(in Tokens) (out Tokens, err error) {
}
}
values := assign.Split(lang.Comma)
- if len(values) == 1 && len(values[0]) == 0 {
- values = nil
+ if len(values) == 1 {
+ if len(values[0]) == 0 {
+ return out, err
+ }
+ for _, v := range vars {
+ out = append(out, newIdent(v, 0))
+ }
+ toks, err := p.parseExpr(values[0], "")
+ if err != nil {
+ return out, err
+ }
+ out = append(out, toks...)
+ if undefinedType {
+ out = append(out, newToken(lang.Define, "", 0, len(vars)))
+ } else {
+ out = append(out, newToken(lang.Assign, "", 0, len(vars)))
+ }
+ return out, err
}
for i, v := range values {
if v, err = p.parseExpr(v, ""); err != nil {
@@ -358,7 +376,11 @@ func (p *Parser) parseVarLine(in Tokens) (out Tokens, err error) {
}
out = append(out, newIdent(vars[i], 0))
out = append(out, v...)
- out = append(out, newToken(lang.Assign, "", 0, 1))
+ if undefinedType {
+ out = append(out, newToken(lang.Define, "", 0, len(vars)))
+ } else {
+ out = append(out, newToken(lang.Assign, "", 0, 1))
+ }
}
return out, err
}