summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2024-08-12 00:44:26 -0500
committerNic Gaffney <gaffney_nic@protonmail.com>2024-08-12 00:44:26 -0500
commitcf80bb7f1b6fb4ee1d08d3d6850966b4951274b5 (patch)
treeb7521e70e2e921aef64f58ca2ce04de89f408c8c /src/main.zig
parent013086f9c55e33f7bfcfd775c8b9d03fb2311de4 (diff)
downloadcalico-cf80bb7f1b6fb4ee1d08d3d6850966b4951274b5.tar.gz
Calling functions and Function args now works.
You can also import functions now.
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/main.zig b/src/main.zig
index 1e54dec..a326685 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -47,22 +47,27 @@ 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);
+ defer arena.deinit();
+ 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 arena = std.heap.ArenaAllocator.init(allocator);
- defer arena.deinit();
- var generator = gen.Generator.init(arena.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 +88,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;
}