about summary refs log tree commit diff
path: root/src/parser.zig
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-03-21 20:22:45 +0100
committerBaitinq <[email protected]>2025-03-22 20:30:56 +0100
commit95999cb6a286871e245e8b9e20d79bc6cd22252c (patch)
treeb9ae565e1284fc58c255725fb78ee877a3bd960f /src/parser.zig
parentMisc: Improve error handling (diff)
downloadinterpreter-95999cb6a286871e245e8b9e20d79bc6cd22252c.tar.gz
interpreter-95999cb6a286871e245e8b9e20d79bc6cd22252c.tar.bz2
interpreter-95999cb6a286871e245e8b9e20d79bc6cd22252c.zip
Feature: Add initial support for linking external symbols
Diffstat (limited to 'src/parser.zig')
-rw-r--r--src/parser.zig12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/parser.zig b/src/parser.zig
index b0a469c..d2067a1 100644
--- a/src/parser.zig
+++ b/src/parser.zig
@@ -142,7 +142,7 @@ pub const Parser = struct {
         });
     }
 
-    // AssignmentStatement ::= "let" IDENTIFIER EQUALS Expression
+    // AssignmentStatement ::= "let" IDENTIFIER EQUALS (Type | Expression)
     fn parse_assignment_statement(self: *Parser) ParserError!*Node {
         errdefer if (!self.try_context) std.debug.print("Error parsing assignment statement {any}\n", .{self.peek_token()});
 
@@ -155,6 +155,16 @@ pub const Parser = struct {
 
         _ = try self.parse_token(tokenizer.TokenType.EQUALS);
 
+        if (self.accept_parse(parse_type)) |typ| {
+            return self.create_node(.{
+                .ASSIGNMENT_STATEMENT = .{
+                    .is_declaration = is_declaration,
+                    .name = try self.arena.dupe(u8, identifier.type.IDENTIFIER),
+                    .expression = @constCast(typ),
+                },
+            });
+        }
+
         const expression = try self.parse_expression();
 
         return self.create_node(.{