authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-04-10 21:31:32+03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-04-10 21:31:32+03:00
log1b1cbd93587642ea281dadc6f8b5e33104f38320
tree7cf7654ebd2232de15b60f059f128705e056feae
parent732c0cb58c842279404a8b1acad0f18b6650ea66
parentdf14578c9d3c7f455c7710ecc9bafe56eb0ec826
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4973 from SuperAuguste/nameless-fields

Nameless fields

2 files changed, 47 insertions(+), 2 deletions(-)

src-self-hosted/translate_c.zig+1-1
...@@ -811,7 +811,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -811,7 +811,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
811811
812 var is_anon = false;812 var is_anon = false;
813 var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl)));813 var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl)));
814 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl)) {814 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or raw_name.len == 0) {
815 raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{c.getMangle()});815 raw_name = try std.fmt.allocPrint(c.a(), "unnamed_{}", .{c.getMangle()});
816 is_anon = true;816 is_anon = true;
817 }817 }
test/translate_c.zig+46-1
...@@ -2879,7 +2879,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2879,7 +2879,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2879 , &[_][]const u8{2879 , &[_][]const u8{
2880 \\pub const FOO = 0x61626364;2880 \\pub const FOO = 0x61626364;
2881 });2881 });
28822882
2883 cases.add("Make sure casts are grouped",2883 cases.add("Make sure casts are grouped",
2884 \\typedef struct2884 \\typedef struct
2885 \\{2885 \\{
...@@ -2910,4 +2910,49 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2910,4 +2910,49 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2910 ,2910 ,
2911 \\pub const GPIO_2_MEM_MAP = @intToPtr([*c]c_uint, 0x8008);2911 \\pub const GPIO_2_MEM_MAP = @intToPtr([*c]c_uint, 0x8008);
2912 });2912 });
2913
2914 if (std.Target.current.abi == .msvc) {
2915 cases.add("nameless struct fields",
2916 \\typedef struct NAMED
2917 \\{
2918 \\ long name;
2919 \\} NAMED;
2920 \\
2921 \\typedef struct ONENAMEWITHSTRUCT
2922 \\{
2923 \\ NAMED;
2924 \\ long b;
2925 \\} ONENAMEWITHSTRUCT;
2926 , &[_][]const u8{
2927 \\pub const struct_NAMED = extern struct {
2928 \\ name: c_long,
2929 \\};
2930 \\pub const NAMED = struct_NAMED;
2931 \\pub const struct_ONENAMEWITHSTRUCT = extern struct {
2932 \\ unnamed_1: struct_NAMED,
2933 \\ b: c_long,
2934 \\};
2935 });
2936 } else {
2937 cases.add("nameless struct fields",
2938 \\typedef struct NAMED
2939 \\{
2940 \\ long name;
2941 \\} NAMED;
2942 \\
2943 \\typedef struct ONENAMEWITHSTRUCT
2944 \\{
2945 \\ NAMED;
2946 \\ long b;
2947 \\} ONENAMEWITHSTRUCT;
2948 , &[_][]const u8{
2949 \\pub const struct_NAMED = extern struct {
2950 \\ name: c_long,
2951 \\};
2952 \\pub const NAMED = struct_NAMED;
2953 \\pub const struct_ONENAMEWITHSTRUCT = extern struct {
2954 \\ b: c_long,
2955 \\};
2956 });
2957 }
2913}2958}