aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2021-07-28 21:37:46 +0300
committerGitHub <noreply@github.com>2021-07-28 21:37:46 +0300
commitf476463cd2552d384d0ef6f43f250b3abd45e4cd (patch)
treed4730eb7bec3d2554fd39872d7c445deceaba232 /src
parenteb010ce65ddddb23ceddae86d377432cf1b2b01c (diff)
parentd4d3a9dcc93d517ffec43c9b4572977c05ee4d4b (diff)
downloadzig-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.zig5
-rw-r--r--src/translate_c.zig8
-rw-r--r--src/zig_clang.cpp5
-rw-r--r--src/zig_clang.h3
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 *);