summary refs log tree commit diff
path: root/src/main.zig
diff options
context:
space:
mode:
authorBaitinq <manuelpalenzuelamerino@gmail.com>2025-01-27 00:20:37 +0100
committerBaitinq <manuelpalenzuelamerino@gmail.com>2025-01-27 00:20:37 +0100
commit239fce0bd402e44d41042e94ac38b606c5b28a8d (patch)
tree784bb3c3c8703ad0e9f623ff61b740a0f531757d /src/main.zig
parentMisc: Update gitignore (diff)
downloadinterpreter-239fce0bd402e44d41042e94ac38b606c5b28a8d.tar.gz
interpreter-239fce0bd402e44d41042e94ac38b606c5b28a8d.tar.bz2
interpreter-239fce0bd402e44d41042e94ac38b606c5b28a8d.zip
Codegen: Start working on actual AST codegen
Diffstat (limited to '')
-rw-r--r--src/main.zig30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/main.zig b/src/main.zig
index a8dd0b6..526b7e4 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -25,7 +25,7 @@ pub fn main() !void {
     const source_codegen = try codegen.CodeGen.init(arena.allocator());
     defer source_codegen.deinit();
 
-    source_codegen.generate();
+    source_codegen.generate_poc();
 
     if (std.mem.eql(u8, path, "-i")) {
         while (true) {
@@ -34,7 +34,7 @@ pub fn main() !void {
             const buf = try stdin.readUntilDelimiterAlloc(allocator, '\n', 1024);
             defer allocator.free(buf);
 
-            process_buf(buf, allocator, arena.allocator(), source_evaluator) catch |err| {
+            process_buf(buf, allocator, arena.allocator(), source_evaluator, null) catch |err| {
                 try stdout.print("Error processing line: {any}\n", .{err});
             };
         }
@@ -43,11 +43,25 @@ pub fn main() !void {
         const file = try std.fs.cwd().openFile(path, .{});
         const buf = try file.readToEndAlloc(allocator, 1 * 1024 * 1024);
         defer allocator.free(buf);
-        try process_buf(buf, allocator, arena.allocator(), source_evaluator);
+        if (std.os.argv.len < 3) {
+            try process_buf(
+                buf,
+                allocator,
+                arena.allocator(),
+                source_evaluator,
+                null,
+            );
+        } else try process_buf(
+            buf,
+            allocator,
+            arena.allocator(),
+            source_evaluator,
+            source_codegen,
+        );
     }
 }
 
-fn process_buf(buf: []u8, allocator: std.mem.Allocator, arena: std.mem.Allocator, source_evaluator: *evaluator.Evaluator) !void {
+fn process_buf(buf: []u8, allocator: std.mem.Allocator, arena: std.mem.Allocator, source_evaluator: *evaluator.Evaluator, source_codegen: ?*codegen.CodeGen) !void {
     std.debug.print("Buf:\n{s}\n", .{buf});
 
     var token_list = std.ArrayList(tokenizer.Token).init(allocator);
@@ -63,8 +77,12 @@ fn process_buf(buf: []u8, allocator: std.mem.Allocator, arena: std.mem.Allocator
     const ast = try source_parser.parse();
     std.debug.print("AST: {any}\n", .{ast});
 
-    const result = try source_evaluator.evaluate_ast(ast);
-    std.debug.print("Evaluation result: {any}\n", .{result});
+    if (source_codegen != null) {
+        try source_codegen.?.generate(ast);
+    } else {
+        const result = try source_evaluator.evaluate_ast(ast);
+        std.debug.print("Evaluation result: {any}\n", .{result});
+    }
 }
 
 test {