Skip to content

Commit a171c77

Browse files
committed
translate-c: self-hosted implementation can detect C errors
See #1964
1 parent 4dfe787 commit a171c77

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src-self-hosted/clang.zig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -959,3 +959,11 @@ pub const Stage2ErrorMsg = extern struct {
959959
offset: c_uint,
960960
};
961961
pub extern fn ZigClangErrorMsg_delete(ptr: [*c]Stage2ErrorMsg, len: usize) void;
962+
963+
pub extern fn ZigClangLoadFromCommandLine(
964+
args_begin: [*]?[*]const u8,
965+
args_end: [*]?[*]const u8,
966+
errors_ptr: *[*]Stage2ErrorMsg,
967+
errors_len: *usize,
968+
resources_path: [*c]const u8,
969+
) ?*ZigClangASTUnit;

src-self-hosted/stage1.zig

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,15 @@ export fn stage2_translate_c(
8888
out_ast.* = translate_c.translate(args_begin, args_end, switch (mode) {
8989
.import => translate_c.Mode.import,
9090
.translate => translate_c.Mode.translate,
91-
}, &errors) catch |err| switch (err) {
91+
}, &errors, resources_path) catch |err| switch (err) {
9292
error.Unimplemented => return Error.Unimplemented,
93+
error.SemanticAnalyzeFail => {
94+
out_errors_ptr.* = errors.ptr;
95+
out_errors_len.* = errors.len;
96+
return Error.CCompileErrors;
97+
},
98+
error.OutOfMemory => return Error.OutOfMemory,
9399
};
94-
95100
return Error.None;
96101
}
97102

src-self-hosted/translate_c.zig

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,19 @@ pub fn translate(
1717
args_end: [*]?[*]const u8,
1818
mode: Mode,
1919
errors: *[]ClangErrMsg,
20+
resources_path: [*]const u8,
2021
) !*ast.Tree {
22+
const ast_unit = ZigClangLoadFromCommandLine(
23+
args_begin,
24+
args_end,
25+
&errors.ptr,
26+
&errors.len,
27+
resources_path,
28+
) orelse {
29+
if (errors.len == 0) return error.OutOfMemory;
30+
return error.SemanticAnalyzeFail;
31+
};
32+
2133
return error.Unimplemented;
2234
}
2335

0 commit comments

Comments
 (0)