| author | |
| committer | |
| log | 69dee57d95271169898f8382f7e4846bf77a0040 |
| tree | b8e2f3f6d25aa33714fd7696b215a969632fe6c8 |
| parent | d08dc21116fb2f21b170930475ab122e668144e3 |
| signature | Commit is signed but in an unrecognized format. |
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 { |
| 33 | 33 | @panic(ptr[0..len]); |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | // ABI warning | |
| 37 | const TranslateMode = extern enum { | |
| 38 | import, | |
| 39 | translate, | |
| 40 | }; | |
| 41 | ||
| 42 | 36 | // ABI warning |
| 43 | 37 | const Error = extern enum { |
| 44 | 38 | None, |
| ... | ... | @@ -99,14 +93,10 @@ export fn stage2_translate_c( |
| 99 | 93 | out_errors_len: *usize, |
| 100 | 94 | args_begin: [*]?[*]const u8, |
| 101 | 95 | args_end: [*]?[*]const u8, |
| 102 | mode: TranslateMode, | |
| 103 | 96 | resources_path: [*]const u8, |
| 104 | 97 | ) Error { |
| 105 | 98 | 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) { | |
| 110 | 100 | error.SemanticAnalyzeFail => { |
| 111 | 101 | out_errors_ptr.* = errors.ptr; |
| 112 | 102 | out_errors_len.* = errors.len; |
src-self-hosted/translate_c.zig+1-9| ... | ... | @@ -7,11 +7,6 @@ const ast = std.zig.ast; |
| 7 | 7 | const Token = std.zig.Token; |
| 8 | 8 | usingnamespace @import("clang.zig"); |
| 9 | 9 | |
| 10 | pub const Mode = enum { | |
| 11 | import, | |
| 12 | translate, | |
| 13 | }; | |
| 14 | ||
| 15 | 10 | const CallingConvention = std.builtin.TypeInfo.CallingConvention; |
| 16 | 11 | |
| 17 | 12 | pub const ClangErrMsg = Stage2ErrorMsg; |
| ... | ... | @@ -104,7 +99,6 @@ const Context = struct { |
| 104 | 99 | source_manager: *ZigClangSourceManager, |
| 105 | 100 | decl_table: DeclTable, |
| 106 | 101 | global_scope: *Scope.Root, |
| 107 | mode: Mode, | |
| 108 | 102 | ptr_params: std.BufSet, |
| 109 | 103 | clang_context: *ZigClangASTContext, |
| 110 | 104 | |
| ... | ... | @@ -133,7 +127,6 @@ pub fn translate( |
| 133 | 127 | backing_allocator: *std.mem.Allocator, |
| 134 | 128 | args_begin: [*]?[*]const u8, |
| 135 | 129 | args_end: [*]?[*]const u8, |
| 136 | mode: Mode, | |
| 137 | 130 | errors: *[]ClangErrMsg, |
| 138 | 131 | resources_path: [*]const u8, |
| 139 | 132 | ) !*ast.Tree { |
| ... | ... | @@ -185,7 +178,6 @@ pub fn translate( |
| 185 | 178 | .err = undefined, |
| 186 | 179 | .decl_table = DeclTable.init(arena), |
| 187 | 180 | .global_scope = try arena.create(Scope.Root), |
| 188 | .mode = mode, | |
| 189 | 181 | .ptr_params = std.BufSet.init(arena), |
| 190 | 182 | .clang_context = ZigClangASTUnit_getASTContext(ast_unit).?, |
| 191 | 183 | }; |
| ... | ... | @@ -262,7 +254,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void { |
| 262 | 254 | .storage_class = storage_class, |
| 263 | 255 | .scope = &scope, |
| 264 | 256 | .is_export = switch (storage_class) { |
| 265 | .None => has_body and c.mode != .import, | |
| 257 | .None => has_body, | |
| 266 | 258 | .Extern, .Static => false, |
| 267 | 259 | .PrivateExtern => return failDecl(c, fn_decl_loc, fn_name, "unsupported storage class: private extern", .{}), |
| 268 | 260 | .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 |
| 9020 | 9020 | |
| 9021 | 9021 | init(g); |
| 9022 | 9022 | |
| 9023 | Stage2TranslateMode trans_mode = buf_ends_with_str(full_path, ".h") ? | |
| 9024 | Stage2TranslateModeImport : Stage2TranslateModeTranslate; | |
| 9025 | ||
| 9026 | ||
| 9027 | 9023 | ZigList<const char *> clang_argv = {0}; |
| 9028 | 9024 | add_cc_args(g, clang_argv, nullptr, true); |
| 9029 | 9025 | |
| ... | ... | @@ -9047,10 +9043,10 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us |
| 9047 | 9043 | |
| 9048 | 9044 | if (use_userland_implementation) { |
| 9049 | 9045 | 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); | |
| 9051 | 9047 | } 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); | |
| 9054 | 9050 | } |
| 9055 | 9051 | |
| 9056 | 9052 | 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 |
| 23343 | 23343 | const char *resources_path = buf_ptr(ira->codegen->zig_c_headers_dir); |
| 23344 | 23344 | |
| 23345 | 23345 | 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))) | |
| 23347 | 23347 | { |
| 23348 | 23348 | if (err != ErrorCCompileErrors) { |
| 23349 | 23349 | 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 { |
| 64 | 64 | |
| 65 | 65 | struct Context { |
| 66 | 66 | AstNode *root; |
| 67 | VisibMod visib_mod; | |
| 68 | bool want_export; | |
| 69 | 67 | HashMap<const void *, AstNode *, ptr_hash, ptr_eq> decl_table; |
| 70 | 68 | HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> macro_table; |
| 71 | 69 | 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 |
| 367 | 365 | static AstNode *trans_create_node_var_decl_global(Context *c, bool is_const, Buf *var_name, AstNode *type_node, |
| 368 | 366 | AstNode *init_node) |
| 369 | 367 | { |
| 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); | |
| 371 | 369 | } |
| 372 | 370 | |
| 373 | 371 | static 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 |
| 379 | 377 | static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, AstNode *ref_node, AstNode *src_proto_node) { |
| 380 | 378 | AstNode *fn_def = trans_create_node(c, NodeTypeFnDef); |
| 381 | 379 | 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; | |
| 383 | 381 | fn_proto->data.fn_proto.name = fn_name; |
| 384 | 382 | fn_proto->data.fn_proto.fn_inline = FnInlineAlways; |
| 385 | 383 | 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) { |
| 4091 | 4089 | |
| 4092 | 4090 | ZigClangStorageClass sc = ZigClangFunctionDecl_getStorageClass(fn_decl); |
| 4093 | 4091 | 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); | |
| 4096 | 4094 | } 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; | |
| 4098 | 4096 | } else if (sc == ZigClangStorageClass_PrivateExtern) { |
| 4099 | 4097 | emit_warning(c, ZigClangFunctionDecl_getLocation(fn_decl), "unsupported storage class: private extern"); |
| 4100 | 4098 | return; |
| ... | ... | @@ -5113,18 +5111,11 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *unit) { |
| 5113 | 5111 | Error parse_h_file(CodeGen *codegen, AstNode **out_root_node, |
| 5114 | 5112 | Stage2ErrorMsg **errors_ptr, size_t *errors_len, |
| 5115 | 5113 | const char **args_begin, const char **args_end, |
| 5116 | Stage2TranslateMode mode, const char *resources_path) | |
| 5114 | const char *resources_path) | |
| 5117 | 5115 | { |
| 5118 | 5116 | Context context = {0}; |
| 5119 | 5117 | Context *c = &context; |
| 5120 | 5118 | 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 | } | |
| 5128 | 5119 | c->decl_table.init(8); |
| 5129 | 5120 | c->macro_table.init(8); |
| 5130 | 5121 | c->global_table.init(8); |
src/translate_c.hpp+1-1| ... | ... | @@ -14,6 +14,6 @@ |
| 14 | 14 | Error parse_h_file(CodeGen *codegen, AstNode **out_root_node, |
| 15 | 15 | Stage2ErrorMsg **errors_ptr, size_t *errors_len, |
| 16 | 16 | const char **args_begin, const char **args_end, |
| 17 | Stage2TranslateMode mode, const char *resources_path); | |
| 17 | const char *resources_path); | |
| 18 | 18 | |
| 19 | 19 | #endif |
src/userland.cpp+1-2| ... | ... | @@ -9,8 +9,7 @@ |
| 9 | 9 | |
| 10 | 10 | Error stage2_translate_c(struct Stage2Ast **out_ast, |
| 11 | 11 | 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) | |
| 14 | 13 | { |
| 15 | 14 | const char *msg = "stage0 called stage2_translate_c"; |
| 16 | 15 | stage2_panic(msg, strlen(msg)); |
src/userland.h+1-8| ... | ... | @@ -80,12 +80,6 @@ enum Error { |
| 80 | 80 | ErrorImportOutsidePkgPath, |
| 81 | 81 | }; |
| 82 | 82 | |
| 83 | // ABI warning | |
| 84 | enum Stage2TranslateMode { | |
| 85 | Stage2TranslateModeImport, | |
| 86 | Stage2TranslateModeTranslate, | |
| 87 | }; | |
| 88 | ||
| 89 | 83 | // ABI warning |
| 90 | 84 | struct Stage2ErrorMsg { |
| 91 | 85 | const char *filename_ptr; // can be null |
| ... | ... | @@ -104,8 +98,7 @@ struct Stage2Ast; |
| 104 | 98 | // ABI warning |
| 105 | 99 | ZIG_EXTERN_C enum Error stage2_translate_c(struct Stage2Ast **out_ast, |
| 106 | 100 | 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); | |
| 109 | 102 | |
| 110 | 103 | // ABI warning |
| 111 | 104 | ZIG_EXTERN_C void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len); |