authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-12 14:26:24+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-12 14:26:24+02:00
log69dee57d95271169898f8382f7e4846bf77a0040
treeb8e2f3f6d25aa33714fd7696b215a969632fe6c8
parentd08dc21116fb2f21b170930475ab122e668144e3
signature Commit is signed but in an unrecognized format.

remove concept of translate mode


8 files changed, 15 insertions(+), 54 deletions(-)

src-self-hosted/stage1.zig+1-11
......@@ -33,12 +33,6 @@ export fn stage2_panic(ptr: [*]const u8, len: usize) void {
3333 @panic(ptr[0..len]);
3434}
3535
36// ABI warning
37const TranslateMode = extern enum {
38 import,
39 translate,
40};
41
4236// ABI warning
4337const Error = extern enum {
4438 None,
......@@ -99,14 +93,10 @@ export fn stage2_translate_c(
9993 out_errors_len: *usize,
10094 args_begin: [*]?[*]const u8,
10195 args_end: [*]?[*]const u8,
102 mode: TranslateMode,
10396 resources_path: [*]const u8,
10497) Error {
10598 var errors: []translate_c.ClangErrMsg = undefined;
106 out_ast.* = translate_c.translate(std.heap.c_allocator, args_begin, args_end, switch (mode) {
107 .import => translate_c.Mode.import,
108 .translate => translate_c.Mode.translate,
109 }, &errors, resources_path) catch |err| switch (err) {
99 out_ast.* = translate_c.translate(std.heap.c_allocator, args_begin, args_end, &errors, resources_path) catch |err| switch (err) {
110100 error.SemanticAnalyzeFail => {
111101 out_errors_ptr.* = errors.ptr;
112102 out_errors_len.* = errors.len;
src-self-hosted/translate_c.zig+1-9
......@@ -7,11 +7,6 @@ const ast = std.zig.ast;
77const Token = std.zig.Token;
88usingnamespace @import("clang.zig");
99
10pub const Mode = enum {
11 import,
12 translate,
13};
14
1510const CallingConvention = std.builtin.TypeInfo.CallingConvention;
1611
1712pub const ClangErrMsg = Stage2ErrorMsg;
......@@ -104,7 +99,6 @@ const Context = struct {
10499 source_manager: *ZigClangSourceManager,
105100 decl_table: DeclTable,
106101 global_scope: *Scope.Root,
107 mode: Mode,
108102 ptr_params: std.BufSet,
109103 clang_context: *ZigClangASTContext,
110104
......@@ -133,7 +127,6 @@ pub fn translate(
133127 backing_allocator: *std.mem.Allocator,
134128 args_begin: [*]?[*]const u8,
135129 args_end: [*]?[*]const u8,
136 mode: Mode,
137130 errors: *[]ClangErrMsg,
138131 resources_path: [*]const u8,
139132) !*ast.Tree {
......@@ -185,7 +178,6 @@ pub fn translate(
185178 .err = undefined,
186179 .decl_table = DeclTable.init(arena),
187180 .global_scope = try arena.create(Scope.Root),
188 .mode = mode,
189181 .ptr_params = std.BufSet.init(arena),
190182 .clang_context = ZigClangASTUnit_getASTContext(ast_unit).?,
191183 };
......@@ -262,7 +254,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
262254 .storage_class = storage_class,
263255 .scope = &scope,
264256 .is_export = switch (storage_class) {
265 .None => has_body and c.mode != .import,
257 .None => has_body,
266258 .Extern, .Static => false,
267259 .PrivateExtern => return failDecl(c, fn_decl_loc, fn_name, "unsupported storage class: private extern", .{}),
268260 .Auto => unreachable, // Not legal on functions
src/codegen.cpp+3-7
......@@ -9020,10 +9020,6 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us
90209020
90219021 init(g);
90229022
9023 Stage2TranslateMode trans_mode = buf_ends_with_str(full_path, ".h") ?
9024 Stage2TranslateModeImport : Stage2TranslateModeTranslate;
9025
9026
90279023 ZigList<const char *> clang_argv = {0};
90289024 add_cc_args(g, clang_argv, nullptr, true);
90299025
......@@ -9047,10 +9043,10 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us
90479043
90489044 if (use_userland_implementation) {
90499045 err = stage2_translate_c(&ast, &errors_ptr, &errors_len,
9050 &clang_argv.at(0), &clang_argv.last(), trans_mode, resources_path);
9046 &clang_argv.at(0), &clang_argv.last(), resources_path);
90519047 } else {
9052 err = parse_h_file(g, &root_node, &errors_ptr, &errors_len, &clang_argv.at(0), &clang_argv.last(),
9053 trans_mode, resources_path);
9048 err = parse_h_file(g, &root_node, &errors_ptr, &errors_len, &clang_argv.at(0),
9049 &clang_argv.last(), resources_path);
90549050 }
90559051
90569052 if (err == ErrorCCompileErrors && errors_len > 0) {
src/ir.cpp+1-1
......@@ -23343,7 +23343,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
2334323343 const char *resources_path = buf_ptr(ira->codegen->zig_c_headers_dir);
2334423344
2334523345 if ((err = parse_h_file(ira->codegen, &root_node, &errors_ptr, &errors_len,
23346 &clang_argv.at(0), &clang_argv.last(), Stage2TranslateModeImport, resources_path)))
23346 &clang_argv.at(0), &clang_argv.last(), resources_path)))
2334723347 {
2334823348 if (err != ErrorCCompileErrors) {
2334923349 ir_add_error_node(ira, node, buf_sprintf("C import failed: %s", err_str(err)));
src/translate_c.cpp+6-15
......@@ -64,8 +64,6 @@ struct TransScopeWhile {
6464
6565struct Context {
6666 AstNode *root;
67 VisibMod visib_mod;
68 bool want_export;
6967 HashMap<const void *, AstNode *, ptr_hash, ptr_eq> decl_table;
7068 HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> macro_table;
7169 HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> global_table;
......@@ -367,7 +365,7 @@ static AstNode *trans_create_node_var_decl(Context *c, VisibMod visib_mod, bool
367365static AstNode *trans_create_node_var_decl_global(Context *c, bool is_const, Buf *var_name, AstNode *type_node,
368366 AstNode *init_node)
369367{
370 return trans_create_node_var_decl(c, c->visib_mod, is_const, var_name, type_node, init_node);
368 return trans_create_node_var_decl(c, VisibModPub, is_const, var_name, type_node, init_node);
371369}
372370
373371static AstNode *trans_create_node_var_decl_local(Context *c, bool is_const, Buf *var_name, AstNode *type_node,
......@@ -379,7 +377,7 @@ static AstNode *trans_create_node_var_decl_local(Context *c, bool is_const, Buf
379377static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, AstNode *ref_node, AstNode *src_proto_node) {
380378 AstNode *fn_def = trans_create_node(c, NodeTypeFnDef);
381379 AstNode *fn_proto = trans_create_node(c, NodeTypeFnProto);
382 fn_proto->data.fn_proto.visib_mod = c->visib_mod;
380 fn_proto->data.fn_proto.visib_mod = VisibModPub;
383381 fn_proto->data.fn_proto.name = fn_name;
384382 fn_proto->data.fn_proto.fn_inline = FnInlineAlways;
385383 fn_proto->data.fn_proto.return_type = src_proto_node->data.fn_proto.return_type; // TODO ok for these to alias?
......@@ -4091,10 +4089,10 @@ static void visit_fn_decl(Context *c, const ZigClangFunctionDecl *fn_decl) {
40914089
40924090 ZigClangStorageClass sc = ZigClangFunctionDecl_getStorageClass(fn_decl);
40934091 if (sc == ZigClangStorageClass_None) {
4094 proto_node->data.fn_proto.visib_mod = c->visib_mod;
4095 proto_node->data.fn_proto.is_export = ZigClangFunctionDecl_hasBody(fn_decl) ? c->want_export : false;
4092 proto_node->data.fn_proto.visib_mod = VisibModPub;
4093 proto_node->data.fn_proto.is_export = ZigClangFunctionDecl_hasBody(fn_decl);
40964094 } else if (sc == ZigClangStorageClass_Extern || sc == ZigClangStorageClass_Static) {
4097 proto_node->data.fn_proto.visib_mod = c->visib_mod;
4095 proto_node->data.fn_proto.visib_mod = VisibModPub;
40984096 } else if (sc == ZigClangStorageClass_PrivateExtern) {
40994097 emit_warning(c, ZigClangFunctionDecl_getLocation(fn_decl), "unsupported storage class: private extern");
41004098 return;
......@@ -5113,18 +5111,11 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *unit) {
51135111Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,
51145112 Stage2ErrorMsg **errors_ptr, size_t *errors_len,
51155113 const char **args_begin, const char **args_end,
5116 Stage2TranslateMode mode, const char *resources_path)
5114 const char *resources_path)
51175115{
51185116 Context context = {0};
51195117 Context *c = &context;
51205118 c->warnings_on = codegen->verbose_cimport;
5121 if (mode == Stage2TranslateModeImport) {
5122 c->visib_mod = VisibModPub;
5123 c->want_export = false;
5124 } else {
5125 c->visib_mod = VisibModPub;
5126 c->want_export = true;
5127 }
51285119 c->decl_table.init(8);
51295120 c->macro_table.init(8);
51305121 c->global_table.init(8);
src/translate_c.hpp+1-1
......@@ -14,6 +14,6 @@
1414Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,
1515 Stage2ErrorMsg **errors_ptr, size_t *errors_len,
1616 const char **args_begin, const char **args_end,
17 Stage2TranslateMode mode, const char *resources_path);
17 const char *resources_path);
1818
1919#endif
src/userland.cpp+1-2
......@@ -9,8 +9,7 @@
99
1010Error stage2_translate_c(struct Stage2Ast **out_ast,
1111 struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len,
12 const char **args_begin, const char **args_end, enum Stage2TranslateMode mode,
13 const char *resources_path)
12 const char **args_begin, const char **args_end, const char *resources_path)
1413{
1514 const char *msg = "stage0 called stage2_translate_c";
1615 stage2_panic(msg, strlen(msg));
src/userland.h+1-8
......@@ -80,12 +80,6 @@ enum Error {
8080 ErrorImportOutsidePkgPath,
8181};
8282
83// ABI warning
84enum Stage2TranslateMode {
85 Stage2TranslateModeImport,
86 Stage2TranslateModeTranslate,
87};
88
8983// ABI warning
9084struct Stage2ErrorMsg {
9185 const char *filename_ptr; // can be null
......@@ -104,8 +98,7 @@ struct Stage2Ast;
10498// ABI warning
10599ZIG_EXTERN_C enum Error stage2_translate_c(struct Stage2Ast **out_ast,
106100 struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len,
107 const char **args_begin, const char **args_end, enum Stage2TranslateMode mode,
108 const char *resources_path);
101 const char **args_begin, const char **args_end, const char *resources_path);
109102
110103// ABI warning
111104ZIG_EXTERN_C void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len);