diff --git a/src/parser.zig b/src/parser.zig index bad8f67..e8154ea 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -1256,11 +1256,19 @@ pub const Parser = struct { } // Method body is optional: `;` → declaration (foreign or inherited - // method we just want to call); `{ ... }` → sx-side implementation - // for sx-defined classes. + // method we just want to call); `{ ... }` → sx-side block body + // for sx-defined classes; `=> expr;` → expression-body form + // (M1.0), lowered as a single-statement block holding `expr`. var body_node: ?*Node = null; if (self.current.tag == .l_brace) { body_node = try self.parseBlock(); + } else if (self.current.tag == .fat_arrow) { + self.advance(); + const expr = try self.parseExpr(); + try self.expect(.semicolon); + const stmts = try self.allocator.alloc(*Node, 1); + stmts[0] = expr; + body_node = try self.createNode(expr.span.start, .{ .block = .{ .stmts = stmts } }); } else { try self.expect(.semicolon); } diff --git a/tests/expected/140-expression-bodied-objc-method.exit b/tests/expected/140-expression-bodied-objc-method.exit index d00491f..573541a 100644 --- a/tests/expected/140-expression-bodied-objc-method.exit +++ b/tests/expected/140-expression-bodied-objc-method.exit @@ -1 +1 @@ -1 +0 diff --git a/tests/expected/140-expression-bodied-objc-method.txt b/tests/expected/140-expression-bodied-objc-method.txt index 57d4f6e..8b13789 100644 --- a/tests/expected/140-expression-bodied-objc-method.txt +++ b/tests/expected/140-expression-bodied-objc-method.txt @@ -1 +1 @@ -/Users/agra/projects/sx/examples/140-expression-bodied-objc-method.sx:15:35: error: expected ';' +