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 {...@@ -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}
3535
36// ABI warning
37const TranslateMode = extern enum {
38 import,
39 translate,
40};
41
42// ABI warning36// ABI warning
43const Error = extern enum {37const 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;
7const Token = std.zig.Token;7const Token = std.zig.Token;
8usingnamespace @import("clang.zig");8usingnamespace @import("clang.zig");
99
10pub const Mode = enum {
11 import,
12 translate,
13};
14
15const CallingConvention = std.builtin.TypeInfo.CallingConvention;10const CallingConvention = std.builtin.TypeInfo.CallingConvention;
1611
17pub const ClangErrMsg = Stage2ErrorMsg;12pub 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,
110104
...@@ -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 functions260 .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
90209020
9021 init(g);9021 init(g);
90229022
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);
90299025
...@@ -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
90479043
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 }
90559051
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);
2334423344
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 {
6464
65struct Context {65struct 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
367static AstNode *trans_create_node_var_decl_global(Context *c, bool is_const, Buf *var_name, AstNode *type_node,365static 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}
372370
373static AstNode *trans_create_node_var_decl_local(Context *c, bool is_const, Buf *var_name, AstNode *type_node,371static 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
379static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, AstNode *ref_node, AstNode *src_proto_node) {377static 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) {
40914089
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) {
5113Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,5111Error 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 @@
14Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,14Error 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);
1818
19#endif19#endif
src/userland.cpp+1-2
...@@ -9,8 +9,7 @@...@@ -9,8 +9,7 @@
99
10Error stage2_translate_c(struct Stage2Ast **out_ast,10Error 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};
8282
83// ABI warning
84enum Stage2TranslateMode {
85 Stage2TranslateModeImport,
86 Stage2TranslateModeTranslate,
87};
88
89// ABI warning83// ABI warning
90struct Stage2ErrorMsg {84struct Stage2ErrorMsg {
91 const char *filename_ptr; // can be null85 const char *filename_ptr; // can be null
...@@ -104,8 +98,7 @@ struct Stage2Ast;...@@ -104,8 +98,7 @@ struct Stage2Ast;
104// ABI warning98// ABI warning
105ZIG_EXTERN_C enum Error stage2_translate_c(struct Stage2Ast **out_ast,99ZIG_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);
109102
110// ABI warning103// ABI warning
111ZIG_EXTERN_C void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len);104ZIG_EXTERN_C void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len);