more fixes for latest zig
This commit is contained in:
parent
049a388660
commit
74e6beda67
3 changed files with 27 additions and 35 deletions
|
@ -42,7 +42,7 @@ pub const Analyzer = struct {
|
||||||
self.err_tok = tok;
|
self.err_tok = tok;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn doError(self: *@This(), comptime fmt: []const u8, args: ...) void {
|
fn doError(self: *@This(), comptime fmt: []const u8, args: var) void {
|
||||||
self.hadError = true;
|
self.hadError = true;
|
||||||
|
|
||||||
std.debug.warn("analysis error", .{});
|
std.debug.warn("analysis error", .{});
|
||||||
|
@ -85,11 +85,10 @@ pub const Analyzer = struct {
|
||||||
.Enum => SymbolUnderlyingType{ .Enum = val },
|
.Enum => SymbolUnderlyingType{ .Enum = val },
|
||||||
|
|
||||||
else => blk: {
|
else => blk: {
|
||||||
self.doError(
|
self.doError("expected struct or enum for '{}', got {}", .{
|
||||||
"expected struct or enum for '{}', got {}",
|
|
||||||
val,
|
val,
|
||||||
@tagName(@as(comp.SymbolType, sym.?.value.*)),
|
@tagName(@as(comp.SymbolType, sym.?.value.*)),
|
||||||
);
|
});
|
||||||
break :blk null;
|
break :blk null;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -136,12 +135,11 @@ pub const Analyzer = struct {
|
||||||
expected_ident: []const u8,
|
expected_ident: []const u8,
|
||||||
) !void {
|
) !void {
|
||||||
if (!std.mem.eql(u8, sym_ident, expected_ident)) {
|
if (!std.mem.eql(u8, sym_ident, expected_ident)) {
|
||||||
self.doError(
|
self.doError("Expected {} {}, got {}", .{
|
||||||
"Expected {} {}, got {}",
|
|
||||||
@tagName(typ_enum),
|
@tagName(typ_enum),
|
||||||
expected_ident,
|
expected_ident,
|
||||||
sym_ident,
|
sym_ident,
|
||||||
);
|
});
|
||||||
|
|
||||||
return CompileError.TypeError;
|
return CompileError.TypeError;
|
||||||
}
|
}
|
||||||
|
@ -267,12 +265,11 @@ pub const Analyzer = struct {
|
||||||
const param_type_val = @as(comp.SymbolUnderlyingTypeEnum, param_type);
|
const param_type_val = @as(comp.SymbolUnderlyingTypeEnum, param_type);
|
||||||
const arg_type_val = @as(comp.SymbolUnderlyingTypeEnum, arg_type);
|
const arg_type_val = @as(comp.SymbolUnderlyingTypeEnum, arg_type);
|
||||||
|
|
||||||
self.doError(
|
self.doError("Expected parameter {} to be {}, got {}", .{
|
||||||
"Expected parameter {} to be {}, got {}",
|
|
||||||
idx,
|
idx,
|
||||||
@tagName(param_type_val),
|
@tagName(param_type_val),
|
||||||
@tagName(arg_type_val),
|
@tagName(arg_type_val),
|
||||||
);
|
});
|
||||||
|
|
||||||
return CompileError.TypeError;
|
return CompileError.TypeError;
|
||||||
};
|
};
|
||||||
|
@ -322,11 +319,10 @@ pub const Analyzer = struct {
|
||||||
|
|
||||||
var kv = map.get(name);
|
var kv = map.get(name);
|
||||||
if (kv == null) {
|
if (kv == null) {
|
||||||
self.doError(
|
self.doError("Field {} not found in enum {}", .{
|
||||||
"Field {} not found in enum {}",
|
|
||||||
name,
|
name,
|
||||||
lexeme,
|
lexeme,
|
||||||
);
|
});
|
||||||
return CompileError.TypeError;
|
return CompileError.TypeError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,10 +330,9 @@ pub const Analyzer = struct {
|
||||||
},
|
},
|
||||||
|
|
||||||
else => {
|
else => {
|
||||||
self.doError(
|
self.doError("Expected Struct/Enum as get target, got {}", .{
|
||||||
"Expected Struct/Enum as get target, got {}",
|
|
||||||
@as(comp.SymbolUnderlyingTypeEnum, global_typ),
|
@as(comp.SymbolUnderlyingTypeEnum, global_typ),
|
||||||
);
|
});
|
||||||
|
|
||||||
return CompileError.TypeError;
|
return CompileError.TypeError;
|
||||||
},
|
},
|
||||||
|
@ -475,7 +470,10 @@ pub const Analyzer = struct {
|
||||||
self.setErrContext("function {}", .{name});
|
self.setErrContext("function {}", .{name});
|
||||||
var ret_type = self.resolveGlobalType(ctx, decl.return_type.lexeme);
|
var ret_type = self.resolveGlobalType(ctx, decl.return_type.lexeme);
|
||||||
|
|
||||||
std.debug.warn("start analysis of fn {}, ret type: {}\n", .{ decl.func_name.lexeme, ret_type });
|
std.debug.warn("start analysis of fn {}, ret type: {}\n", .{
|
||||||
|
decl.func_name.lexeme,
|
||||||
|
ret_type,
|
||||||
|
});
|
||||||
|
|
||||||
var parameters = comp.TypeList.init(self.allocator);
|
var parameters = comp.TypeList.init(self.allocator);
|
||||||
for (decl.params.toSlice()) |param| {
|
for (decl.params.toSlice()) |param| {
|
||||||
|
|
|
@ -66,11 +66,9 @@ pub fn printNode(node: *const Node, ident: usize) void {
|
||||||
print(ident, "(const (\n", .{});
|
print(ident, "(const (\n", .{});
|
||||||
|
|
||||||
for (consts.toSlice()) |const_decl| {
|
for (consts.toSlice()) |const_decl| {
|
||||||
print(
|
print(ident + 1, "({} ", .{
|
||||||
ident + 1,
|
|
||||||
"({} ",
|
|
||||||
const_decl.name.lexeme,
|
const_decl.name.lexeme,
|
||||||
);
|
});
|
||||||
|
|
||||||
printExpr(const_decl.expr);
|
printExpr(const_decl.expr);
|
||||||
std.debug.warn(")\n", .{});
|
std.debug.warn(")\n", .{});
|
||||||
|
@ -83,11 +81,9 @@ pub fn printNode(node: *const Node, ident: usize) void {
|
||||||
print(ident, "(enum {} (\n", .{decl.name.lexeme});
|
print(ident, "(enum {} (\n", .{decl.name.lexeme});
|
||||||
|
|
||||||
for (decl.fields.toSlice()) |field| {
|
for (decl.fields.toSlice()) |field| {
|
||||||
print(
|
print(ident + 1, "{}\n", .{
|
||||||
ident + 1,
|
|
||||||
"{}\n",
|
|
||||||
field.lexeme,
|
field.lexeme,
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
print(ident, "))\n", .{});
|
print(ident, "))\n", .{});
|
||||||
|
@ -249,7 +245,7 @@ pub fn printExpr(expr: *const Expr) void {
|
||||||
.Get => |get| {
|
.Get => |get| {
|
||||||
warn("(", .{});
|
warn("(", .{});
|
||||||
printExpr(get.target);
|
printExpr(get.target);
|
||||||
warn(".{})", get.name.lexeme);
|
warn(".{})", .{get.name.lexeme});
|
||||||
},
|
},
|
||||||
|
|
||||||
.Set => |set| {
|
.Set => |set| {
|
||||||
|
@ -329,7 +325,7 @@ pub fn printStmt(ident: usize, stmt: *const Stmt) void {
|
||||||
|
|
||||||
// very bad but be like that
|
// very bad but be like that
|
||||||
fn retWithName(prefix: []const u8, inner: []const u8) []const u8 {
|
fn retWithName(prefix: []const u8, inner: []const u8) []const u8 {
|
||||||
var ret_nam_buf = std.heap.direct_allocator.alloc(u8, 256) catch unreachable;
|
var ret_nam_buf = std.heap.page_allocator.alloc(u8, 256) catch unreachable;
|
||||||
return std.fmt.bufPrint(ret_nam_buf[0..], "{}({})", .{ prefix, inner }) catch unreachable;
|
return std.fmt.bufPrint(ret_nam_buf[0..], "{}({})", .{ prefix, inner }) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,19 +383,17 @@ pub fn printContext(ctx: CompilationContext) void {
|
||||||
std.debug.warn("struct '{}'\n", .{kv.key});
|
std.debug.warn("struct '{}'\n", .{kv.key});
|
||||||
var map_it = typemap.iterator();
|
var map_it = typemap.iterator();
|
||||||
while (map_it.next()) |map_kv| {
|
while (map_it.next()) |map_kv| {
|
||||||
std.debug.warn(
|
std.debug.warn("\tfield {} type {}\n", .{
|
||||||
"\tfield {} type {}\n",
|
|
||||||
map_kv.key,
|
map_kv.key,
|
||||||
prettyType(map_kv.value),
|
prettyType(map_kv.value),
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
.Variable => std.debug.warn(
|
.Variable => std.debug.warn("variable {} type {}\n", .{
|
||||||
"variable {} type {}\n",
|
|
||||||
kv.key,
|
kv.key,
|
||||||
kv.value,
|
kv.value,
|
||||||
),
|
}),
|
||||||
|
|
||||||
.Enum => |identmap| {
|
.Enum => |identmap| {
|
||||||
std.debug.warn("enum {}:", .{kv.key});
|
std.debug.warn("enum {}:", .{kv.key});
|
||||||
|
|
|
@ -230,7 +230,7 @@ pub const Codegen = struct {
|
||||||
var buf = try self.allocator.alloc(u8, 512);
|
var buf = try self.allocator.alloc(u8, 512);
|
||||||
errdefer self.allocator.free(buf);
|
errdefer self.allocator.free(buf);
|
||||||
|
|
||||||
var load_str = try std.fmt.bufPrint(buf, "{}_loaded", vari.lexeme);
|
var load_str = try std.fmt.bufPrint(buf, "{}_loaded", .{vari.lexeme});
|
||||||
|
|
||||||
var load_cstr = try std.cstr.addNullByte(self.allocator, load_str);
|
var load_cstr = try std.cstr.addNullByte(self.allocator, load_str);
|
||||||
errdefer self.allocator.free(load_cstr);
|
errdefer self.allocator.free(load_cstr);
|
||||||
|
@ -435,7 +435,7 @@ pub const Codegen = struct {
|
||||||
_ = try self.llvm_table.put(name, func);
|
_ = try self.llvm_table.put(name, func);
|
||||||
|
|
||||||
var buf = try self.allocator.alloc(u8, 512);
|
var buf = try self.allocator.alloc(u8, 512);
|
||||||
var entry_lbl = try std.fmt.bufPrint(buf, "fn_{}_entry", name);
|
var entry_lbl = try std.fmt.bufPrint(buf, "fn_{}_entry", .{name});
|
||||||
var entry_lbl_cstr = try std.cstr.addNullByte(self.allocator, entry_lbl);
|
var entry_lbl_cstr = try std.cstr.addNullByte(self.allocator, entry_lbl);
|
||||||
var entry = llvm.LLVMAppendBasicBlock(func, entry_lbl_cstr.ptr);
|
var entry = llvm.LLVMAppendBasicBlock(func, entry_lbl_cstr.ptr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue