| author | |
| committer | |
| log | 4ab2f947f9fcd2c6a4181c509d7c1ab27c6e4d58 |
| tree | f089c88ba379215a5eba193456730d0ec27874cc |
| parent | c0654d2db2cd66ee59f2147fbbb19d890e70bed1 |
| signature | Commit is signed but in an unrecognized format. |
Closes #59795 files changed, 55 insertions(+), 2 deletions(-)
src-self-hosted/clang.zig+9| ... | ... | @@ -773,6 +773,14 @@ pub const ZigClangExpr_ConstExprUsage = extern enum { |
| 773 | 773 | EvaluateForMangling, |
| 774 | 774 | }; |
| 775 | 775 | |
| 776 | pub const ZigClangUnaryExprOrTypeTrait_Kind = extern enum { | |
| 777 | SizeOf, | |
| 778 | AlignOf, | |
| 779 | VecStep, | |
| 780 | OpenMPRequiredSimdAlign, | |
| 781 | PreferredAlignOf, | |
| 782 | }; | |
| 783 | ||
| 776 | 784 | pub extern fn ZigClangSourceManager_getSpellingLoc(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) struct_ZigClangSourceLocation; |
| 777 | 785 | pub extern fn ZigClangSourceManager_getFilename(self: *const struct_ZigClangSourceManager, SpellingLoc: struct_ZigClangSourceLocation) ?[*:0]const u8; |
| 778 | 786 | pub extern fn ZigClangSourceManager_getSpellingLineNumber(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint; |
| ... | ... | @@ -1170,6 +1178,7 @@ pub extern fn ZigClangCallExpr_getArgs(*const ZigClangCallExpr) [*]const *const |
| 1170 | 1178 | |
| 1171 | 1179 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangQualType; |
| 1172 | 1180 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangSourceLocation; |
| 1181 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getKind(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangUnaryExprOrTypeTrait_Kind; | |
| 1173 | 1182 | |
| 1174 | 1183 | pub extern fn ZigClangUnaryOperator_getOpcode(*const ZigClangUnaryOperator) ZigClangUO; |
| 1175 | 1184 | pub extern fn ZigClangUnaryOperator_getType(*const ZigClangUnaryOperator) ZigClangQualType; |
src-self-hosted/translate_c.zig+19-2| ... | ... | @@ -3068,13 +3068,30 @@ fn transUnaryExprOrTypeTraitExpr( |
| 3068 | 3068 | stmt: *const ZigClangUnaryExprOrTypeTraitExpr, |
| 3069 | 3069 | result_used: ResultUsed, |
| 3070 | 3070 | ) TransError!*ast.Node { |
| 3071 | const loc = ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(stmt); | |
| 3071 | 3072 | const type_node = try transQualType( |
| 3072 | 3073 | rp, |
| 3073 | 3074 | ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(stmt), |
| 3074 | ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(stmt), | |
| 3075 | loc, | |
| 3075 | 3076 | ); |
| 3076 | 3077 | |
| 3077 | const builtin_node = try rp.c.createBuiltinCall("@sizeOf", 1); | |
| 3078 | const kind = ZigClangUnaryExprOrTypeTraitExpr_getKind(stmt); | |
| 3079 | const kind_str = switch (kind) { | |
| 3080 | .SizeOf => "@sizeOf", | |
| 3081 | .AlignOf => "@alignOf", | |
| 3082 | .PreferredAlignOf, | |
| 3083 | .VecStep, | |
| 3084 | .OpenMPRequiredSimdAlign, | |
| 3085 | => return revertAndWarn( | |
| 3086 | rp, | |
| 3087 | error.UnsupportedTranslation, | |
| 3088 | loc, | |
| 3089 | "Unsupported type trait kind {}", | |
| 3090 | .{kind}, | |
| 3091 | ), | |
| 3092 | }; | |
| 3093 | ||
| 3094 | const builtin_node = try rp.c.createBuiltinCall(kind_str, 1); | |
| 3078 | 3095 | builtin_node.params()[0] = type_node; |
| 3079 | 3096 | builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")"); |
| 3080 | 3097 | return maybeSuppressResult(rp, scope, result_used, &builtin_node.base); |
src/zig_clang.cpp+8| ... | ... | @@ -2714,6 +2714,14 @@ struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc( |
| 2714 | 2714 | return bitcast(casted->getBeginLoc()); |
| 2715 | 2715 | } |
| 2716 | 2716 | |
| 2717 | ||
| 2718 | enum ZigClangUnaryExprOrTypeTrait_Kind ZigClangUnaryExprOrTypeTraitExpr_getKind( | |
| 2719 | const struct ZigClangUnaryExprOrTypeTraitExpr *self) | |
| 2720 | { | |
| 2721 | auto casted = reinterpret_cast<const clang::UnaryExprOrTypeTraitExpr *>(self); | |
| 2722 | return (ZigClangUnaryExprOrTypeTrait_Kind)casted->getKind(); | |
| 2723 | } | |
| 2724 | ||
| 2717 | 2725 | const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *self) { |
| 2718 | 2726 | auto casted = reinterpret_cast<const clang::DoStmt *>(self); |
| 2719 | 2727 | return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody()); |
src/zig_clang.h+9| ... | ... | @@ -845,6 +845,14 @@ enum ZigClangExpr_ConstExprUsage { |
| 845 | 845 | ZigClangExpr_EvaluateForMangling, |
| 846 | 846 | }; |
| 847 | 847 | |
| 848 | enum ZigClangUnaryExprOrTypeTrait_Kind { | |
| 849 | ZigClangUnaryExprOrTypeTrait_KindSizeOf, | |
| 850 | ZigClangUnaryExprOrTypeTrait_KindAlignOf, | |
| 851 | ZigClangUnaryExprOrTypeTrait_KindVecStep, | |
| 852 | ZigClangUnaryExprOrTypeTrait_KindOpenMPRequiredSimdAlign, | |
| 853 | ZigClangUnaryExprOrTypeTrait_KindPreferredAlignOf, | |
| 854 | }; | |
| 855 | ||
| 848 | 856 | ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *, |
| 849 | 857 | struct ZigClangSourceLocation Loc); |
| 850 | 858 | ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *, |
| ... | ... | @@ -1134,6 +1142,7 @@ ZIG_EXTERN_C const struct ZigClangExpr *ZigClangArraySubscriptExpr_getIdx(const |
| 1134 | 1142 | |
| 1135 | 1143 | ZIG_EXTERN_C struct ZigClangQualType ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(const struct ZigClangUnaryExprOrTypeTraitExpr *); |
| 1136 | 1144 | ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(const struct ZigClangUnaryExprOrTypeTraitExpr *); |
| 1145 | ZIG_EXTERN_C enum ZigClangUnaryExprOrTypeTrait_Kind ZigClangUnaryExprOrTypeTraitExpr_getKind(const struct ZigClangUnaryExprOrTypeTraitExpr *); | |
| 1137 | 1146 | |
| 1138 | 1147 | ZIG_EXTERN_C const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *); |
| 1139 | 1148 | ZIG_EXTERN_C const struct ZigClangExpr *ZigClangDoStmt_getCond(const struct ZigClangDoStmt *); |
test/translate_c.zig+10| ... | ... | @@ -3,6 +3,16 @@ const std = @import("std"); |
| 3 | 3 | const CrossTarget = std.zig.CrossTarget; |
| 4 | 4 | |
| 5 | 5 | pub fn addCases(cases: *tests.TranslateCContext) void { |
| 6 | cases.add("alignof", | |
| 7 | \\int main() { | |
| 8 | \\ int a = _Alignof(int); | |
| 9 | \\} | |
| 10 | , &[_][]const u8{ | |
| 11 | \\pub export fn main() c_int { | |
| 12 | \\ var a: c_int = @bitCast(c_int, @truncate(c_uint, @alignOf(c_int))); | |
| 13 | \\} | |
| 14 | }); | |
| 15 | ||
| 6 | 16 | cases.add("initializer list macro", |
| 7 | 17 | \\typedef struct Color { |
| 8 | 18 | \\ unsigned char r; |