aboutsummaryrefslogtreecommitdiff
path: root/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'parse.go')
-rw-r--r--parse.go28
1 files changed, 27 insertions, 1 deletions
diff --git a/parse.go b/parse.go
index 7b4469e..c6b21f0 100644
--- a/parse.go
+++ b/parse.go
@@ -801,6 +801,14 @@ func parsePrimary(toks *tokens) (primaryExpr, error) {
return call, nil
}
+ variable, err := parseVariable(toks)
+ if err != nil {
+ return nil, err
+ }
+ if variable != nil {
+ return variable, nil
+ }
+
return nil, expectedPrimary{got: toks.current()}
}
@@ -923,9 +931,14 @@ func parseCall(toks *tokens) (*callExpr, error) {
return nil, nil
}
- if err := toks.mustMatch(lparen); err != nil {
+ ok, err := toks.match(lparen)
+ if err != nil {
return nil, err
}
+ if !ok {
+ toks.unreadTokens(2)
+ return nil, nil
+ }
args, err := parseArg(toks)
if err != nil {
@@ -970,3 +983,16 @@ func parseArg(toks *tokens) (*argument, error) {
return &argument{value: arg, next: next}, nil
}
+
+func parseVariable(toks *tokens) (*varExpr, error) {
+ nameTok, ok := toks.consumeToken()
+ if !ok {
+ return nil, unexpectedEOF
+ }
+ if nameTok.kind != identifier {
+ toks.unreadToken()
+ return nil, nil
+ }
+
+ return &varExpr{name: nameTok.value, ln: nameTok.line}, nil
+}