parser: ensure calls only happen to Variables

This commit is contained in:
Luna 2019-08-25 22:55:53 -03:00
parent 5ba807d93f
commit 8f44cbea23

View file

@ -694,10 +694,20 @@ pub const Parser = struct {
} }
fn parseCall(self: *@This()) !*Expr { fn parseCall(self: *@This()) !*Expr {
// we parse a primary expression instead of consuming a .Identifier
// since parseCall is connected to the rest of the parser. doing
// identifiers would break the rest of the rules that want primaries.
// nothing stops us from ensuring expr is a Variable though ;)
var expr = try self.parsePrimary(); var expr = try self.parsePrimary();
while (true) { while (true) {
if (self.check(.LeftParen)) { if (self.check(.LeftParen)) {
if (ast.ExprType(expr.*) != .Variable) {
self.doError("cannot call non-variable{}", ast.ExprType(expr.*));
return Result.CompileError;
}
_ = try self.consumeSingle(.LeftParen); _ = try self.consumeSingle(.LeftParen);
expr = try self.finishCall(expr); expr = try self.finishCall(expr);
} else { } else {