diff options
| author | Baitinq <[email protected]> | 2025-02-15 10:56:08 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-02-15 11:00:04 +0100 |
| commit | fa6d9cdf57db4244a331035d35d1b962630e3ae1 (patch) | |
| tree | d3926279eb046bbc11d4102ba8b336d037596da1 /src/parser.zig | |
| parent | Examples: Update initial example with types (diff) | |
| download | interpreter-fa6d9cdf57db4244a331035d35d1b962630e3ae1.tar.gz interpreter-fa6d9cdf57db4244a331035d35d1b962630e3ae1.tar.bz2 interpreter-fa6d9cdf57db4244a331035d35d1b962630e3ae1.zip | |
Feature: Introduce initial support for function return types
Diffstat (limited to '')
| -rw-r--r-- | src/parser.zig | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/parser.zig b/src/parser.zig index c5eb623..7d71de3 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -62,6 +62,7 @@ pub const Node = union(enum) { FUNCTION_DEFINITION: struct { statements: []*Node, parameters: []*Node, + return_type: []const u8, }, RETURN_STATEMENT: struct { expression: *Node, @@ -376,7 +377,7 @@ pub const Parser = struct { }; } - // FunctionDefinition ::= LPAREN FunctionParamters? RPAREN ARROW LBRACE Statement* ReturnStatement RBRACE + // FunctionDefinition ::= LPAREN FunctionParameters? RPAREN ARROW IDENTIFIER LBRACE Statement* ReturnStatement SEMICOLON RBRACE fn parse_function_definition(self: *Parser) ParserError!*Node { errdefer if (!self.try_context) std.debug.print("Error parsing function definition {any}\n", .{self.peek_token()}); @@ -387,6 +388,10 @@ pub const Parser = struct { _ = try self.parse_token(tokenizer.TokenType.RPAREN); _ = try self.parse_token(tokenizer.TokenType.ARROW); + + const type_expr = try self.parse_primary_expression(); + if (type_expr.PRIMARY_EXPRESSION != .IDENTIFIER) return ParserError.ParsingError; + _ = try self.parse_token(tokenizer.TokenType.LBRACE); var nodes = std.ArrayList(*Node).init(self.arena); @@ -401,6 +406,7 @@ pub const Parser = struct { return self.create_node(.{ .FUNCTION_DEFINITION = .{ .statements = nodes.items, .parameters = parameters, + .return_type = type_expr.PRIMARY_EXPRESSION.IDENTIFIER.name, } }); } |