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