|
|
|
@ -703,6 +703,7 @@ pub const Parser = struct {
|
|
|
|
|
|
|
|
|
|
if (self.compareAnyOf(&[_]TokenType{
|
|
|
|
|
.ColonEqual, .Equal, .PlusEqual, .MinusEqual, .StarEqual,
|
|
|
|
|
.SlashEqual,
|
|
|
|
|
})) {
|
|
|
|
|
return try self.finishAssignment(expr, mutable);
|
|
|
|
|
}
|
|
|
|
@ -725,15 +726,27 @@ pub const Parser = struct {
|
|
|
|
|
.PlusEqual => .Plus,
|
|
|
|
|
.MinusEqual => .Minus,
|
|
|
|
|
.StarEqual => .Star,
|
|
|
|
|
.SlashEqual => .Slash,
|
|
|
|
|
|
|
|
|
|
else => unreachable,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// we create new_lexeme so that
|
|
|
|
|
// the AST printer properly prints
|
|
|
|
|
// x += 1
|
|
|
|
|
// as
|
|
|
|
|
// (set x (+ x 1))
|
|
|
|
|
// and not
|
|
|
|
|
// (set x (+= x 1))
|
|
|
|
|
const new_lexeme: []const u8 = switch (op.ttype) {
|
|
|
|
|
.ColonEqual => ":=",
|
|
|
|
|
.Equal => "=",
|
|
|
|
|
|
|
|
|
|
.PlusEqual => "+",
|
|
|
|
|
.MinusEqual => "-",
|
|
|
|
|
.StarEqual => "*",
|
|
|
|
|
.SlashEqual => "/",
|
|
|
|
|
|
|
|
|
|
else => unreachable,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|