diff options
Diffstat (limited to 'parser/decl.go')
| -rw-r--r-- | parser/decl.go | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/parser/decl.go b/parser/decl.go index f6e8102..015f4bd 100644 --- a/parser/decl.go +++ b/parser/decl.go @@ -69,7 +69,7 @@ func (p *Parser) parseConstLine(in Tokens) (out Tokens, err error) { values = nil } for i, v := range values { - if v, err = p.parseExpr(v); err != nil { + if v, err = p.parseExpr(v, ""); err != nil { return out, err } cval, _, err := p.evalConstExpr(v) @@ -99,11 +99,11 @@ func (p *Parser) evalConstExpr(in Tokens) (cval constant.Value, length int, err id := t.Tok switch { case id.IsBinaryOp(): - op1, l1, err := p.evalConstExpr(in[:l]) + op2, l2, err := p.evalConstExpr(in[:l]) if err != nil { return nil, 0, err } - op2, l2, err := p.evalConstExpr(in[:l-l1]) + op1, l1, err := p.evalConstExpr(in[:l-l2]) if err != nil { return nil, 0, err } @@ -164,6 +164,8 @@ func constValue(c constant.Value) any { return nil } +// Correspondence between language independent parscan tokens and Go stdlib tokens, +// To enable the use of the Go constant expression evaluator. var gotok = map[lang.Token]token.Token{ lang.Char: token.CHAR, lang.Imag: token.IMAG, @@ -352,13 +354,12 @@ func (p *Parser) parseVarLine(in Tokens) (out Tokens, err error) { values = nil } for i, v := range values { - if v, err = p.parseExpr(v); err != nil { + if v, err = p.parseExpr(v, ""); err != nil { return out, err } + out = append(out, scanner.Token{Tok: lang.Ident, Str: vars[i]}) out = append(out, v...) - out = append(out, - scanner.Token{Tok: lang.Ident, Str: vars[i]}, - scanner.Token{Tok: lang.Assign}) + out = append(out, scanner.Token{Tok: lang.Assign}) } return out, err } |
