diff options
| author | Marc Vertes <mvertes@free.fr> | 2024-03-12 09:50:32 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2024-03-12 09:50:32 +0100 |
| commit | a3116a6613363f303b84f5f704f5e87495d4f3b9 (patch) | |
| tree | 3cf04ff2687e6e3f15bd96f752fc758aeac005c3 /parser/parse.go | |
| parent | 89e1575f1d7e542b843a53ba7434ac0f034a63fb (diff) | |
fix: force adding a return at end of function
This will avoid infinite loops, and is necessary for functions with
no returned values. This doesn't remove the need to better check the
consistency of return statements in general.
Diffstat (limited to 'parser/parse.go')
| -rw-r--r-- | parser/parse.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/parser/parse.go b/parser/parse.go index ffa8102..c13c33d 100644 --- a/parser/parse.go +++ b/parser/parse.go @@ -246,6 +246,15 @@ func (p *Parser) ParseFunc(in Tokens) (out Tokens, err error) { out = append(out, scanner.Token{Id: lang.Grow, Beg: l}) } out = append(out, toks...) + if out[len(out)-1].Id != lang.Return { + // Ensure that a return statment is always added at end of function. + // TODO: detect missing or wrong returns + x, err := p.ParseReturn([]scanner.Token{{Id: lang.Return}}) + if err != nil { + return out, err + } + out = append(out, x...) + } out = append(out, scanner.Token{Id: lang.Label, Str: fname + "_end"}) return out, err } |
