summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2024-03-12 10:03:41 +0100
committerMarc Vertes <mvertes@free.fr>2024-03-12 10:03:41 +0100
commitcb8041b04472059703043b827a79287387c9dd8d (patch)
tree240357f8047c9ea79c6a8908860c06104c3d905c
parenta3116a6613363f303b84f5f704f5e87495d4f3b9 (diff)
fixup
-rw-r--r--parser/parse.go8
1 files changed, 5 insertions, 3 deletions
diff --git a/parser/parse.go b/parser/parse.go
index c13c33d..547957b 100644
--- a/parser/parse.go
+++ b/parser/parse.go
@@ -248,8 +248,8 @@ func (p *Parser) ParseFunc(in Tokens) (out Tokens, err error) {
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}})
+ // TODO: detect missing or wrong returns.
+ x, err := p.ParseReturn(nil)
if err != nil {
return out, err
}
@@ -420,10 +420,12 @@ func (p *Parser) ParseLabel(in Tokens) (out Tokens, err error) {
}
func (p *Parser) ParseReturn(in Tokens) (out Tokens, err error) {
- if len(in) > 1 {
+ if l := len(in); l > 1 {
if out, err = p.ParseExpr(in[1:]); err != nil {
return out, err
}
+ } else if l == 0 {
+ in = Tokens{{Id: lang.Return}} // Implicit return in functions with no return parameters.
}
// TODO: the function symbol should be already present in the parser context.