From 36149e5828df1bb35e06905c65f007dd5869aaec Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Fri, 13 Oct 2023 18:32:13 +0200 Subject: parser: include absolute paths in symbols --- parser/parse.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'parser/parse.go') diff --git a/parser/parse.go b/parser/parse.go index 4ccb151..c51a73b 100644 --- a/parser/parse.go +++ b/parser/parse.go @@ -208,10 +208,8 @@ func (p *Parser) ParseFunc(in Tokens) (out Tokens, err error) { }() out = Tokens{ - {Id: lang.Enter, Str: "enter " + p.scope}, {Id: lang.Goto, Str: "goto " + fname + "_end"}, // Skip function definition. - {Id: lang.Label, Pos: in[0].Pos, Str: fname}, - } + {Id: lang.Label, Pos: in[0].Pos, Str: fname}} bi := in.Index(lang.BraceBlock) if bi < 0 { @@ -231,10 +229,7 @@ func (p *Parser) ParseFunc(in Tokens) (out Tokens, err error) { return out, err } out = append(out, toks...) - out = append(out, - scanner.Token{Id: lang.Label, Str: fname + "_end"}, - scanner.Token{Id: lang.Exit}, - ) + out = append(out, scanner.Token{Id: lang.Label, Str: fname + "_end"}) log.Println("symbols", p.symbols) return out, err } @@ -325,7 +320,16 @@ func (p *Parser) ParseExpr(in Tokens) (out Tokens, err error) { t := in[i] // temporary assumptions: binary operators, returning 1 value switch t.Id { - case lang.Ident, lang.Int, lang.String: + case lang.Ident: + // resolve symbol if not a selector rhs. + // TODO: test for selector expr. + _, sc, ok := p.getSym(t.Str, p.scope) + if ok && sc != "" { + t.Str = sc + "/" + t.Str + } + out = append(out, t) + vl++ + case lang.Int, lang.String: out = append(out, t) vl++ case lang.Define, lang.Add, lang.Sub, lang.Assign, lang.Equal, lang.Less: -- cgit v1.2.3