Skip to content

Commit d970230

Browse files
committedMar 9, 2025··
fix memory leak, add tag to malformed node
1 parent abbcd74 commit d970230

File tree

5 files changed

+30
-10
lines changed

5 files changed

+30
-10
lines changed
 

‎src/check/parse/IR.zig

+20-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ errors: []const Diagnostic,
2323
pub fn deinit(self: *IR) void {
2424
defer self.tokens.deinit();
2525
defer self.store.deinit();
26+
self.store.gpa.free(self.errors);
2627
}
2728

2829
/// Diagnostics related to parsing
@@ -1065,7 +1066,18 @@ pub const NodeStore = struct {
10651066
} };
10661067
},
10671068
.malformed => {
1068-
return .malformed;
1069+
// TODO -- what should we do here?
1070+
const reason: Diagnostic.Tag = @enumFromInt(node.data.lhs);
1071+
// switch (reason) {
1072+
// .missing_header => {
1073+
// // std.debug.print("MISSING HEADER: {}\n", .{reason});
1074+
// return .malformed;
1075+
// },
1076+
// else => {
1077+
// @panic("ASDFASDF");
1078+
// },
1079+
// }
1080+
return .{ .malformed = .{ .reason = reason } };
10691081
},
10701082
else => {
10711083
std.debug.panic("Expected a valid header tag, got {s}", .{@tagName(node.tag)});
@@ -1602,7 +1614,9 @@ pub const NodeStore = struct {
16021614
// TODO: complete this
16031615
region: Region,
16041616
},
1605-
malformed,
1617+
malformed: struct {
1618+
reason: Diagnostic.Tag,
1619+
},
16061620

16071621
const AppHeaderRhs = packed struct { num_packages: u10, num_provides: u22 };
16081622

@@ -1617,8 +1631,10 @@ pub const NodeStore = struct {
16171631

16181632
return header_node;
16191633
},
1620-
.malformed => {
1621-
return sexpr.Expr.init(env.gpa, "malformed");
1634+
.malformed => |a| {
1635+
var node = sexpr.Expr.init(env.gpa, "malformed");
1636+
node.appendStringChild(env.gpa, @tagName(a.reason));
1637+
return node;
16221638
},
16231639
else => @panic("not implemented"),
16241640
}

‎src/coordinate.zig

+3-1
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ fn findRootOfPackage(
462462
const ParsePackageDepsErr = union(enum) {
463463
failed_to_canonicalize_root_file: Filesystem.CanonicalizeError,
464464
failed_to_read_root_file: Filesystem.ReadError,
465+
malformed_header,
465466
};
466467

467468
fn parseDependenciesFromPackageRoot(
@@ -507,7 +508,8 @@ fn parseDependenciesFromPackageRoot(
507508
.len = 0,
508509
} },
509510
.malformed => {
510-
@panic("TODO -- what should we do for a malformed node here?? raise a compiler problem I assume");
511+
// @Sam -- does this look right?
512+
return ParsePackageDepsErr.malformed_header;
511513
},
512514
};
513515

‎src/fmt.zig

+5-2
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,11 @@ fn formatHeader(fmt: *Formatter, hi: HeaderIdx) void {
436436
fmt.newline();
437437
},
438438
.malformed => {
439-
fmt.pushAll("<malformed_header>");
440-
fmt.newline();
439+
// TODO what should we do here?
440+
// const node = fmt.ast.store.nodes.get(@enumFromInt(hi.id));
441+
// const source = fmt.ast.resolve(node.main_token);
442+
// std.debug.print("MALFORMED SOURCE {s}\n", .{source});
443+
// fmt.pushAll(source);
441444
},
442445
else => {
443446
std.debug.panic("TODO: Handle formatting {s}", .{@tagName(header)});

‎src/snapshot.zig

+1-1
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ fn processSnapshotFile(gpa: Allocator, snapshot_path: []const u8, maybe_fuzz_cor
305305
defer parse_ast.deinit();
306306

307307
if (parse_ast.errors.len > 0) {
308-
warn("file {s}: contained {d} errors, skipping", .{ snapshot_path, parse_ast.errors.len });
308+
warn("skipping file {s} as it contains {d} errors", .{ snapshot_path, parse_ast.errors.len });
309309
return false;
310310
}
311311

‎src/snapshots/003.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
~~~META
22
description=Import statement
33
~~~SOURCE
4-
<malformed_header>
54

65
modAle
76

@@ -12,7 +11,7 @@ import json.Json
1211
decoder = Utf8.decode
1312
~~~PARSE
1413
(file
15-
(malformed)
14+
(malformed 'missing_header')
1615
(ident '' 'modAle')
1716
(list
1817
(ident '' 'decoder'))

0 commit comments

Comments
 (0)
Please sign in to comment.