summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2025-02-18 17:13:13 -0600
committerNic Gaffney <gaffney_nic@protonmail.com>2025-02-18 17:13:13 -0600
commit296564bbced8c3fa197ede9b16af60a4f88e350f (patch)
tree7d3e4c1c4a8b68e2ee4a9d38dddf9b6b982aaadf /src/main.zig
parent8f2595c71bce8d2f14de334d6e1b6378cc9f7cbf (diff)
parent7db4d88fe0455a6f3bd58414afa0565cd4a74f9d (diff)
downloadcalico-296564bbced8c3fa197ede9b16af60a4f88e350f.tar.gz
Merge branch 'repairBranch'
Restored lost progress from previous `git push --force`
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/main.zig b/src/main.zig
index 9e53ecd..b51b170 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -49,20 +49,26 @@ pub fn main() !void {
const tokens = try tokenizer.tokenize();
// Parse
- var symbTable = try initSymbolTable(allocator);
- defer symbTable.deinit();
+ // var arena = std.heap.ArenaAllocator.init(allocator);
+ const symbTable = try initSymbolTable(arena.allocator());
- var parser = parse.Parser.init(allocator, tokens, symbTable);
- defer parser.deinit();
+ var parser = parse.Parser.init(arena.allocator(), tokens, symbTable);
const tree = try parser.parse();
var treeNode = tree.asNode();
- var pop = symb.Populator.init(allocator);
+ var pop = symb.Populator.init(arena.allocator());
try pop.populateSymtable(&treeNode);
+ // var iter = symbTable.scope.?.symbs.iterator();
+ // while (iter.next()) |entry| {
+ // std.debug.print("{s} -> {any}\n", .{ entry.key_ptr.*, entry.value_ptr.* });
+ // }
// Codegen
- var generator = gen.Generator.init(allocator, tree);
+ const fname = try allocator.dupeZ(u8, inputFileName.?);
+ defer allocator.free(fname);
+ var generator = gen.Generator.init(arena.allocator(), tree, @ptrCast(fname));
defer generator.deinit();
const code = try generator.generate();
+ // std.debug.print("{s}\n", .{code});
try outWriter.writeAll(code);
const binFile = try getFileName(allocator, out_name, "");
@@ -83,6 +89,10 @@ inline fn getFileName(allocator: std.mem.Allocator, out_name: []const u8, fileTy
pub fn initSymbolTable(allocator: std.mem.Allocator) !*symb.SymbolTable {
var table = try symb.SymbolTable.init(allocator);
const intSymb: symb.SymbType = symb.SymbType.Integer;
+ const charSymb: symb.SymbType = symb.SymbType.Character;
+ const strSymb: symb.SymbType = symb.SymbType.String;
if (!try table.insert("i32", intSymb.toSymb())) return error.FailedToInsert;
+ if (!try table.insert("u8", charSymb.toSymb())) return error.FailedToInsert;
+ if (!try table.insert("[u8]", strSymb.toSymb())) return error.FailedToInsert;
return table;
}