Skip to content

Commit c13fdb3

Browse files
WIP malformed node in header
1 parent bc056cd commit c13fdb3

File tree

5 files changed

+36
-2
lines changed

5 files changed

+36
-2
lines changed

src/check/parse/IR.zig

+15
Original file line numberDiff line numberDiff line change
@@ -1064,6 +1064,9 @@ pub const NodeStore = struct {
10641064
.region = emptyRegion(),
10651065
} };
10661066
},
1067+
.malformed => {
1068+
return .malformed;
1069+
},
10671070
else => {
10681071
std.debug.panic("Expected a valid header tag, got {s}", .{@tagName(node.tag)});
10691072
},
@@ -1600,6 +1603,7 @@ pub const NodeStore = struct {
16001603
// TODO: complete this
16011604
region: Region,
16021605
},
1606+
malformed,
16031607

16041608
const AppHeaderRhs = packed struct { num_packages: u10, num_provides: u22 };
16051609

@@ -1614,6 +1618,9 @@ pub const NodeStore = struct {
16141618

16151619
return header_node;
16161620
},
1621+
.malformed => {
1622+
return sexpr.Expr.init(env.gpa, "malformed");
1623+
},
16171624
else => @panic("not implemented"),
16181625
}
16191626
}
@@ -1942,6 +1949,14 @@ pub const NodeStore = struct {
19421949
ident_sexpr.appendStringChild(env.gpa, ir.resolve(ident.token));
19431950
return ident_sexpr;
19441951
},
1952+
.list => |a| {
1953+
var node = sexpr.Expr.init(env.gpa, "list");
1954+
for (ir.store.exprSlice(a.items)) |b| {
1955+
var child = ir.store.getExpr(b).toSExpr(env, ir);
1956+
node.appendNodeChild(env.gpa, &child);
1957+
}
1958+
return node;
1959+
},
19451960
else => {
19461961
std.log.err("Format for Expr {}", .{self});
19471962
@panic("not implemented yet");

src/coordinate.zig

+3
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,9 @@ fn parseDependenciesFromPackageRoot(
497497
.start = 0,
498498
.len = 0,
499499
} },
500+
.malformed => {
501+
@panic("TODO -- what should we do for a malformed node here?? raise a compiler problem I assume");
502+
},
500503
};
501504

502505
for (parse_ast.store.recordFieldSlice(package_list)) |package_import| {

src/fmt.zig

+4
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,10 @@ fn formatHeader(fmt: *Formatter, hi: HeaderIdx) void {
433433
fmt.push(']');
434434
fmt.newline();
435435
},
436+
.malformed => {
437+
fmt.pushAll("<malformed_header>");
438+
fmt.newline();
439+
},
436440
else => {
437441
std.debug.panic("TODO: Handle formatting {s}", .{@tagName(header)});
438442
},

src/snapshot.zig

+5
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,11 @@ fn processSnapshotFile(gpa: Allocator, snapshot_path: []const u8, maybe_fuzz_cor
294294
var parse_ast = parse.parse(&module_env, content.source);
295295
defer parse_ast.deinit();
296296

297+
if (parse_ast.errors.len > 0) {
298+
warn("file {s}: contained {d} errors, skipping", .{ snapshot_path, parse_ast.errors.len });
299+
return false;
300+
}
301+
297302
// Format the source code
298303
var formatter = fmt.init(parse_ast);
299304
defer formatter.deinit();

src/snapshots/003.txt

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
~~~META
22
description=Import statment
33
~~~SOURCE
4-
module [decoder]
4+
<malformed_header>
5+
6+
modAle
7+
8+
[decoder]
59

610
import json.Json
711

812
decoder = Utf8.decode
913
~~~PARSE
1014
(file
11-
(header 'decoder')
15+
(malformed)
16+
(ident '' 'modAle')
17+
(list
18+
(ident '' 'decoder'))
1219
(import
1320
'json'
1421
'.Json'

0 commit comments

Comments
 (0)