diff options
| author | Veikka Tuominen <git@vexu.eu> | 2021-07-28 21:37:46 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-28 21:37:46 +0300 |
| commit | f476463cd2552d384d0ef6f43f250b3abd45e4cd (patch) | |
| tree | d4730eb7bec3d2554fd39872d7c445deceaba232 /src | |
| parent | eb010ce65ddddb23ceddae86d377432cf1b2b01c (diff) | |
| parent | d4d3a9dcc93d517ffec43c9b4572977c05ee4d4b (diff) | |
| download | zig-f476463cd2552d384d0ef6f43f250b3abd45e4cd.tar.gz zig-f476463cd2552d384d0ef6f43f250b3abd45e4cd.zip | |
Merge pull request #9468 from ehaas/translate-c-inf-nan
translate-c: handle NAN and INFINITY macros
Diffstat (limited to 'src')
| -rw-r--r-- | src/clang.zig | 5 | ||||
| -rw-r--r-- | src/translate_c.zig | 8 | ||||
| -rw-r--r-- | src/zig_clang.cpp | 5 | ||||
| -rw-r--r-- | src/zig_clang.h | 3 |
4 files changed, 19 insertions, 2 deletions
diff --git a/src/clang.zig b/src/clang.zig index 023d1aba4b..0632c5ab67 100644 --- a/src/clang.zig +++ b/src/clang.zig @@ -269,6 +269,11 @@ pub const CharacterLiteral = opaque { extern fn ZigClangCharacterLiteral_getValue(*const CharacterLiteral) c_uint; }; +pub const ChooseExpr = opaque { + pub const getChosenSubExpr = ZigClangChooseExpr_getChosenSubExpr; + extern fn ZigClangChooseExpr_getChosenSubExpr(*const ChooseExpr) *const Expr; +}; + pub const CompoundAssignOperator = opaque { pub const getType = ZigClangCompoundAssignOperator_getType; extern fn ZigClangCompoundAssignOperator_getType(*const CompoundAssignOperator) QualType; diff --git a/src/translate_c.zig b/src/translate_c.zig index 395a314f7c..fb40344b34 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -1308,6 +1308,10 @@ fn transStmt( const shuffle_vec_node = try transShuffleVectorExpr(c, scope, shuffle_vec_expr); return maybeSuppressResult(c, scope, result_used, shuffle_vec_node); }, + .ChooseExprClass => { + const choose_expr = @ptrCast(*const clang.ChooseExpr, stmt); + return transExpr(c, scope, choose_expr.getChosenSubExpr(), result_used); + }, // When adding new cases here, see comment for maybeBlockify() .GCCAsmStmtClass, .GotoStmtClass, @@ -1969,7 +1973,7 @@ fn transBuiltinFnExpr(c: *Context, scope: *Scope, expr: *const clang.Expr, used: const node = try transExpr(c, scope, expr, used); if (node.castTag(.identifier)) |ident| { const name = ident.data; - if (!isBuiltinDefined(name)) return fail(c, error.UnsupportedTranslation, expr.getBeginLoc(), "TODO implement function '{s}' in std.c.builtins", .{name}); + if (!isBuiltinDefined(name)) return fail(c, error.UnsupportedTranslation, expr.getBeginLoc(), "TODO implement function '{s}' in std.zig.c_builtins", .{name}); } return node; } @@ -5574,7 +5578,7 @@ fn parseCPrimaryExprInner(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!N .Identifier => { const mangled_name = scope.getAlias(slice); if (mem.startsWith(u8, mangled_name, "__builtin_") and !isBuiltinDefined(mangled_name)) { - try m.fail(c, "TODO implement function '{s}' in std.c.builtins", .{mangled_name}); + try m.fail(c, "TODO implement function '{s}' in std.zig.c_builtins", .{mangled_name}); return error.ParseError; } const identifier = try Tag.identifier.create(c.arena, builtin_typedef_map.get(mangled_name) orelse mangled_name); diff --git a/src/zig_clang.cpp b/src/zig_clang.cpp index 7c923021d8..4fe1dfc286 100644 --- a/src/zig_clang.cpp +++ b/src/zig_clang.cpp @@ -2832,6 +2832,11 @@ unsigned ZigClangCharacterLiteral_getValue(const struct ZigClangCharacterLiteral return casted->getValue(); } +const struct ZigClangExpr *ZigClangChooseExpr_getChosenSubExpr(const struct ZigClangChooseExpr *self) { + auto casted = reinterpret_cast<const clang::ChooseExpr *>(self); + return reinterpret_cast<const ZigClangExpr *>(casted->getChosenSubExpr()); +} + const struct ZigClangExpr *ZigClangAbstractConditionalOperator_getCond(const struct ZigClangAbstractConditionalOperator *self) { auto casted = reinterpret_cast<const clang::AbstractConditionalOperator *>(self); return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond()); diff --git a/src/zig_clang.h b/src/zig_clang.h index 634534dfb4..dc35df3772 100644 --- a/src/zig_clang.h +++ b/src/zig_clang.h @@ -104,6 +104,7 @@ struct ZigClangCStyleCastExpr; struct ZigClangCallExpr; struct ZigClangCaseStmt; struct ZigClangCharacterLiteral; +struct ZigClangChooseExpr; struct ZigClangCompoundAssignOperator; struct ZigClangCompoundStmt; struct ZigClangConditionalOperator; @@ -1242,6 +1243,8 @@ ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangCharacterLiteral_getBeginLoc( ZIG_EXTERN_C enum ZigClangCharacterLiteral_CharacterKind ZigClangCharacterLiteral_getKind(const struct ZigClangCharacterLiteral *); ZIG_EXTERN_C unsigned ZigClangCharacterLiteral_getValue(const struct ZigClangCharacterLiteral *); +ZIG_EXTERN_C const struct ZigClangExpr *ZigClangChooseExpr_getChosenSubExpr(const struct ZigClangChooseExpr *); + ZIG_EXTERN_C const struct ZigClangExpr *ZigClangAbstractConditionalOperator_getCond(const struct ZigClangAbstractConditionalOperator *); ZIG_EXTERN_C const struct ZigClangExpr *ZigClangAbstractConditionalOperator_getTrueExpr(const struct ZigClangAbstractConditionalOperator *); ZIG_EXTERN_C const struct ZigClangExpr *ZigClangAbstractConditionalOperator_getFalseExpr(const struct ZigClangAbstractConditionalOperator *); |
