diff --git a/examples/hello.v b/examples/hello.v index c97c934..44821b4 100644 --- a/examples/hello.v +++ b/examples/hello.v @@ -54,9 +54,10 @@ fn main(a int) int { str := 'hello' len := str.len + + // those should yield the same ast str.len = str.len + 1 - x += 1 - // str.len += 1 + str.len += 1 } fn (v Typ) voidfunc() {} diff --git a/src/parser.zig b/src/parser.zig index f3f8605..b0e096b 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -751,21 +751,23 @@ pub const Parser = struct { return Result.CompileError; }, - //.PlusEqual => { - // var plus_op = try self.mkToken(.Plus, "+", op.line); - // return try self.mkAssign( - // expr.Variable, - // try self.mkBinary(expr, plus_op, value), - // ); - //}, + .PlusEqual => { + var new_op = try self.mkToken(.Plus, "+", op.line); + return try self.mkSet( + get.struc, + get.name, + try self.mkBinary(expr, new_op, value), + ); + }, - //.MinusEqual => { - // var new_op = try self.mkToken(.Minus, "-", op.line); - // return try self.mkSet( - // get.struc, get.name, - // try self.mkBinary(expr, new_op, value), - // ); - //}, + .MinusEqual => { + var new_op = try self.mkToken(.Minus, "-", op.line); + return try self.mkSet( + get.struc, + get.name, + try self.mkBinary(expr, new_op, value), + ); + }, .Equal => return try self.mkSet(get.struc, get.name, value), else => unreachable,