translate-c-2 use intCast
in most places
This commit is contained in:
parent
1a3633d786
commit
59cc7072e2
@ -584,7 +584,7 @@ pub const Node = struct {
|
||||
}
|
||||
|
||||
pub const Root = struct {
|
||||
base: Node = Node {.id = .Root},
|
||||
base: Node = Node{ .id = .Root },
|
||||
decls: DeclList,
|
||||
eof_token: TokenIndex,
|
||||
|
||||
@ -607,7 +607,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const VarDecl = struct {
|
||||
base: Node = Node {.id = .VarDecl},
|
||||
base: Node = Node{ .id = .VarDecl },
|
||||
doc_comments: ?*DocComment,
|
||||
visib_token: ?TokenIndex,
|
||||
thread_local_token: ?TokenIndex,
|
||||
@ -664,7 +664,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Use = struct {
|
||||
base: Node = Node {.id = .Use},
|
||||
base: Node = Node{ .id = .Use },
|
||||
doc_comments: ?*DocComment,
|
||||
visib_token: ?TokenIndex,
|
||||
use_token: TokenIndex,
|
||||
@ -691,7 +691,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const ErrorSetDecl = struct {
|
||||
base: Node = Node {.id = .ErrorSetDecl},
|
||||
base: Node = Node{ .id = .ErrorSetDecl },
|
||||
error_token: TokenIndex,
|
||||
decls: DeclList,
|
||||
rbrace_token: TokenIndex,
|
||||
@ -717,7 +717,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const ContainerDecl = struct {
|
||||
base: Node = Node {.id = .ContainerDecl},
|
||||
base: Node = Node{ .id = .ContainerDecl },
|
||||
layout_token: ?TokenIndex,
|
||||
kind_token: TokenIndex,
|
||||
init_arg_expr: InitArg,
|
||||
@ -804,7 +804,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const ErrorTag = struct {
|
||||
base: Node = Node {.id = .ErrorTag},
|
||||
base: Node = Node{ .id = .ErrorTag },
|
||||
doc_comments: ?*DocComment,
|
||||
name_token: TokenIndex,
|
||||
|
||||
@ -829,7 +829,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Identifier = struct {
|
||||
base: Node = Node {.id = .Identifier},
|
||||
base: Node = Node{ .id = .Identifier },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *Identifier, index: usize) ?*Node {
|
||||
@ -846,7 +846,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const FnProto = struct {
|
||||
base: Node = Node {.id = .FnProto},
|
||||
base: Node = Node{ .id = .FnProto },
|
||||
doc_comments: ?*DocComment,
|
||||
visib_token: ?TokenIndex,
|
||||
fn_token: TokenIndex,
|
||||
@ -928,7 +928,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const AnyFrameType = struct {
|
||||
base: Node = Node {.id = .AnyFrameType},
|
||||
base: Node = Node{ .id = .AnyFrameType },
|
||||
anyframe_token: TokenIndex,
|
||||
result: ?Result,
|
||||
|
||||
@ -959,7 +959,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const ParamDecl = struct {
|
||||
base: Node = Node {.id = .ParamDecl},
|
||||
base: Node = Node{ .id = .ParamDecl },
|
||||
doc_comments: ?*DocComment,
|
||||
comptime_token: ?TokenIndex,
|
||||
noalias_token: ?TokenIndex,
|
||||
@ -992,7 +992,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Block = struct {
|
||||
base: Node = Node {.id = .Block},
|
||||
base: Node = Node{ .id = .Block },
|
||||
label: ?TokenIndex,
|
||||
lbrace: TokenIndex,
|
||||
statements: StatementList,
|
||||
@ -1023,7 +1023,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Defer = struct {
|
||||
base: Node = Node {.id = .Defer},
|
||||
base: Node = Node{ .id = .Defer },
|
||||
defer_token: TokenIndex,
|
||||
expr: *Node,
|
||||
|
||||
@ -1046,7 +1046,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Comptime = struct {
|
||||
base: Node = Node {.id = .Comptime},
|
||||
base: Node = Node{ .id = .Comptime },
|
||||
doc_comments: ?*DocComment,
|
||||
comptime_token: TokenIndex,
|
||||
expr: *Node,
|
||||
@ -1070,7 +1070,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Payload = struct {
|
||||
base: Node = Node {.id = .Payload},
|
||||
base: Node = Node{ .id = .Payload },
|
||||
lpipe: TokenIndex,
|
||||
error_symbol: *Node,
|
||||
rpipe: TokenIndex,
|
||||
@ -1094,7 +1094,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const PointerPayload = struct {
|
||||
base: Node = Node {.id = .PointerPayload},
|
||||
base: Node = Node{ .id = .PointerPayload },
|
||||
lpipe: TokenIndex,
|
||||
ptr_token: ?TokenIndex,
|
||||
value_symbol: *Node,
|
||||
@ -1119,7 +1119,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const PointerIndexPayload = struct {
|
||||
base: Node = Node {.id = .PointerIndexPayload},
|
||||
base: Node = Node{ .id = .PointerIndexPayload },
|
||||
lpipe: TokenIndex,
|
||||
ptr_token: ?TokenIndex,
|
||||
value_symbol: *Node,
|
||||
@ -1150,7 +1150,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Else = struct {
|
||||
base: Node = Node {.id = .Else},
|
||||
base: Node = Node{ .id = .Else },
|
||||
else_token: TokenIndex,
|
||||
payload: ?*Node,
|
||||
body: *Node,
|
||||
@ -1179,7 +1179,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Switch = struct {
|
||||
base: Node = Node {.id = .Switch},
|
||||
base: Node = Node{ .id = .Switch },
|
||||
switch_token: TokenIndex,
|
||||
expr: *Node,
|
||||
|
||||
@ -1211,7 +1211,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const SwitchCase = struct {
|
||||
base: Node = Node {.id = .SwitchCase},
|
||||
base: Node = Node{ .id = .SwitchCase },
|
||||
items: ItemList,
|
||||
arrow_token: TokenIndex,
|
||||
payload: ?*Node,
|
||||
@ -1246,7 +1246,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const SwitchElse = struct {
|
||||
base: Node = Node {.id = .SwitchElse},
|
||||
base: Node = Node{ .id = .SwitchElse },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *SwitchElse, index: usize) ?*Node {
|
||||
@ -1263,7 +1263,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const While = struct {
|
||||
base: Node = Node {.id = .While},
|
||||
base: Node = Node{ .id = .While },
|
||||
label: ?TokenIndex,
|
||||
inline_token: ?TokenIndex,
|
||||
while_token: TokenIndex,
|
||||
@ -1322,7 +1322,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const For = struct {
|
||||
base: Node = Node {.id = .For},
|
||||
base: Node = Node{ .id = .For },
|
||||
label: ?TokenIndex,
|
||||
inline_token: ?TokenIndex,
|
||||
for_token: TokenIndex,
|
||||
@ -1373,7 +1373,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const If = struct {
|
||||
base: Node = Node {.id = .If},
|
||||
base: Node = Node{ .id = .If },
|
||||
if_token: TokenIndex,
|
||||
condition: *Node,
|
||||
payload: ?*Node,
|
||||
@ -1416,7 +1416,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const InfixOp = struct {
|
||||
base: Node = Node {.id = .InfixOp},
|
||||
base: Node = Node{ .id = .InfixOp },
|
||||
op_token: TokenIndex,
|
||||
lhs: *Node,
|
||||
op: Op,
|
||||
@ -1649,7 +1649,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const FieldInitializer = struct {
|
||||
base: Node = Node {.id = .FieldInitializer},
|
||||
base: Node = Node{ .id = .FieldInitializer },
|
||||
period_token: TokenIndex,
|
||||
name_token: TokenIndex,
|
||||
expr: *Node,
|
||||
@ -1673,7 +1673,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const SuffixOp = struct {
|
||||
base: Node = Node {.id = .SuffixOp},
|
||||
base: Node = Node{ .id = .SuffixOp },
|
||||
lhs: Lhs,
|
||||
op: Op,
|
||||
rtoken: TokenIndex,
|
||||
@ -1774,7 +1774,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const GroupedExpression = struct {
|
||||
base: Node = Node {.id = .GroupedExpression},
|
||||
base: Node = Node{ .id = .GroupedExpression },
|
||||
lparen: TokenIndex,
|
||||
expr: *Node,
|
||||
rparen: TokenIndex,
|
||||
@ -1798,7 +1798,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const ControlFlowExpression = struct {
|
||||
base: Node = Node {.id = .ControlFlowExpression},
|
||||
base: Node = Node{ .id = .ControlFlowExpression },
|
||||
ltoken: TokenIndex,
|
||||
kind: Kind,
|
||||
rhs: ?*Node,
|
||||
@ -1864,7 +1864,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Suspend = struct {
|
||||
base: Node = Node {.id = .Suspend},
|
||||
base: Node = Node{ .id = .Suspend },
|
||||
suspend_token: TokenIndex,
|
||||
body: ?*Node,
|
||||
|
||||
@ -1893,7 +1893,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const IntegerLiteral = struct {
|
||||
base: Node = Node {.id = .IntegerLiteral},
|
||||
base: Node = Node{ .id = .IntegerLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *IntegerLiteral, index: usize) ?*Node {
|
||||
@ -1910,7 +1910,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const EnumLiteral = struct {
|
||||
base: Node = Node {.id = .EnumLiteral},
|
||||
base: Node = Node{ .id = .EnumLiteral },
|
||||
dot: TokenIndex,
|
||||
name: TokenIndex,
|
||||
|
||||
@ -1928,7 +1928,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const FloatLiteral = struct {
|
||||
base: Node = Node {.id = .FloatLiteral},
|
||||
base: Node = Node{ .id = .FloatLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *FloatLiteral, index: usize) ?*Node {
|
||||
@ -1945,7 +1945,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const BuiltinCall = struct {
|
||||
base: Node = Node {.id = .BuiltinCall},
|
||||
base: Node = Node{ .id = .BuiltinCall },
|
||||
builtin_token: TokenIndex,
|
||||
params: ParamList,
|
||||
rparen_token: TokenIndex,
|
||||
@ -1971,7 +1971,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const StringLiteral = struct {
|
||||
base: Node = Node {.id = .StringLiteral},
|
||||
base: Node = Node{ .id = .StringLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *StringLiteral, index: usize) ?*Node {
|
||||
@ -1988,7 +1988,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const MultilineStringLiteral = struct {
|
||||
base: Node = Node {.id = .MultilineStringLiteral},
|
||||
base: Node = Node{ .id = .MultilineStringLiteral },
|
||||
lines: LineList,
|
||||
|
||||
pub const LineList = SegmentedList(TokenIndex, 4);
|
||||
@ -2007,7 +2007,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const CharLiteral = struct {
|
||||
base: Node = Node {.id = .CharLiteral},
|
||||
base: Node = Node{ .id = .CharLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *CharLiteral, index: usize) ?*Node {
|
||||
@ -2024,7 +2024,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const BoolLiteral = struct {
|
||||
base: Node = Node {.id = .BoolLiteral},
|
||||
base: Node = Node{ .id = .BoolLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *BoolLiteral, index: usize) ?*Node {
|
||||
@ -2041,7 +2041,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const NullLiteral = struct {
|
||||
base: Node = Node {.id = .NullLiteral},
|
||||
base: Node = Node{ .id = .NullLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *NullLiteral, index: usize) ?*Node {
|
||||
@ -2058,7 +2058,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const UndefinedLiteral = struct {
|
||||
base: Node = Node {.id = .UndefinedLiteral},
|
||||
base: Node = Node{ .id = .UndefinedLiteral },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *UndefinedLiteral, index: usize) ?*Node {
|
||||
@ -2075,7 +2075,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const AsmOutput = struct {
|
||||
base: Node = Node {.id = .AsmOutput},
|
||||
base: Node = Node{ .id = .AsmOutput },
|
||||
lbracket: TokenIndex,
|
||||
symbolic_name: *Node,
|
||||
constraint: *Node,
|
||||
@ -2120,7 +2120,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const AsmInput = struct {
|
||||
base: Node = Node {.id = .AsmInput},
|
||||
base: Node = Node{ .id = .AsmInput },
|
||||
lbracket: TokenIndex,
|
||||
symbolic_name: *Node,
|
||||
constraint: *Node,
|
||||
@ -2152,7 +2152,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Asm = struct {
|
||||
base: Node = Node {.id = .Asm},
|
||||
base: Node = Node{ .id = .Asm },
|
||||
asm_token: TokenIndex,
|
||||
volatile_token: ?TokenIndex,
|
||||
template: *Node,
|
||||
@ -2187,7 +2187,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const Unreachable = struct {
|
||||
base: Node = Node {.id = .Unreachable},
|
||||
base: Node = Node{ .id = .Unreachable },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *Unreachable, index: usize) ?*Node {
|
||||
@ -2204,7 +2204,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const ErrorType = struct {
|
||||
base: Node = Node {.id = .ErrorType},
|
||||
base: Node = Node{ .id = .ErrorType },
|
||||
token: TokenIndex,
|
||||
|
||||
pub fn iterate(self: *ErrorType, index: usize) ?*Node {
|
||||
@ -2238,7 +2238,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const DocComment = struct {
|
||||
base: Node = Node {.id = .DocComment},
|
||||
base: Node = Node{ .id = .DocComment },
|
||||
lines: LineList,
|
||||
|
||||
pub const LineList = SegmentedList(TokenIndex, 4);
|
||||
@ -2257,7 +2257,7 @@ pub const Node = struct {
|
||||
};
|
||||
|
||||
pub const TestDecl = struct {
|
||||
base: Node = Node {.id = .TestDecl},
|
||||
base: Node = Node{ .id = .TestDecl },
|
||||
doc_comments: ?*DocComment,
|
||||
test_token: TokenIndex,
|
||||
name: *Node,
|
||||
|
@ -1194,7 +1194,7 @@ fn transImplicitCastExpr(
|
||||
const dest_type = getExprQualType(c, @ptrCast(*const ZigClangExpr, expr));
|
||||
const src_type = getExprQualType(c, sub_expr);
|
||||
switch (ZigClangImplicitCastExpr_getCastKind(expr)) {
|
||||
.BitCast, .FloatingCast, .FloatingToIntegral, .IntegralToFloating, .IntegralCast => {
|
||||
.BitCast, .FloatingCast, .FloatingToIntegral, .IntegralToFloating, .IntegralCast, .PointerToIntegral, .IntegralToPointer => {
|
||||
return transCCast(rp, scope, ZigClangImplicitCastExpr_getBeginLoc(expr), dest_type, src_type, sub_expr_node);
|
||||
},
|
||||
.LValueToRValue, .NoOp, .FunctionToPointerDecay, .ArrayToPointerDecay => {
|
||||
@ -1221,29 +1221,6 @@ fn transImplicitCastExpr(
|
||||
const rhs_node = try transCreateNodeInt(rp.c, 0);
|
||||
return transCreateNodeInfixOp(rp, scope, node, .BangEqual, op_token, rhs_node, result_used, false);
|
||||
},
|
||||
.PointerToIntegral => {
|
||||
// @intCast(dest_type, @ptrToInt(val))
|
||||
const cast_node = try transCreateNodeBuiltinFnCall(rp.c, "@intCast");
|
||||
try cast_node.params.push(try transQualType(rp, dest_type, ZigClangImplicitCastExpr_getBeginLoc(expr)));
|
||||
_ = try appendToken(rp.c, .Comma, ",");
|
||||
|
||||
const ptr_to_int = try transCreateNodeBuiltinFnCall(rp.c, "@ptrToInt");
|
||||
try ptr_to_int.params.push(try transExpr(rp, scope, sub_expr, .used, .r_value));
|
||||
ptr_to_int.rparen_token = try appendToken(rp.c, .RParen, ")");
|
||||
try cast_node.params.push(&ptr_to_int.base);
|
||||
cast_node.rparen_token = try appendToken(rp.c, .RParen, ")");
|
||||
return maybeSuppressResult(rp, scope, result_used, &cast_node.base);
|
||||
},
|
||||
.IntegralToPointer => {
|
||||
// @intToPtr(dest_type, val)
|
||||
const int_to_ptr = try transCreateNodeBuiltinFnCall(rp.c, "@intToPtr");
|
||||
try int_to_ptr.params.push(try transQualType(rp, dest_type, ZigClangImplicitCastExpr_getBeginLoc(expr)));
|
||||
_ = try appendToken(rp.c, .Comma, ",");
|
||||
|
||||
try int_to_ptr.params.push(try transExpr(rp, scope, sub_expr, .used, .r_value));
|
||||
int_to_ptr.rparen_token = try appendToken(rp.c, .RParen, ")");
|
||||
return maybeSuppressResult(rp, scope, result_used, &int_to_ptr.base);
|
||||
},
|
||||
else => |kind| return revertAndWarn(
|
||||
rp,
|
||||
error.UnsupportedTranslation,
|
||||
@ -1509,8 +1486,18 @@ fn transCCast(
|
||||
if (ZigClangQualType_eq(dst_type, src_type)) return expr;
|
||||
if (qualTypeIsPtr(dst_type) and qualTypeIsPtr(src_type))
|
||||
return transCPtrCast(rp, loc, dst_type, src_type, expr);
|
||||
if (cIsUnsignedInteger(dst_type) and qualTypeIsPtr(src_type)) {
|
||||
const cast_node = try transCreateNodeBuiltinFnCall(rp.c, "@as");
|
||||
if (cIsInteger(dst_type) and cIsInteger(src_type)) {
|
||||
// @intCast(dest_type, val)
|
||||
const cast_node = try transCreateNodeBuiltinFnCall(rp.c, "@intCast");
|
||||
try cast_node.params.push(try transQualType(rp, dst_type, loc));
|
||||
_ = try appendToken(rp.c, .Comma, ",");
|
||||
try cast_node.params.push(expr);
|
||||
cast_node.rparen_token = try appendToken(rp.c, .RParen, ")");
|
||||
return &cast_node.base;
|
||||
}
|
||||
if (cIsInteger(dst_type) and qualTypeIsPtr(src_type)) {
|
||||
// @intCast(dest_type, @ptrToInt(val))
|
||||
const cast_node = try transCreateNodeBuiltinFnCall(rp.c, "@intCast");
|
||||
try cast_node.params.push(try transQualType(rp, dst_type, loc));
|
||||
_ = try appendToken(rp.c, .Comma, ",");
|
||||
const builtin_node = try transCreateNodeBuiltinFnCall(rp.c, "@ptrToInt");
|
||||
@ -1520,7 +1507,8 @@ fn transCCast(
|
||||
cast_node.rparen_token = try appendToken(rp.c, .RParen, ")");
|
||||
return &cast_node.base;
|
||||
}
|
||||
if (cIsUnsignedInteger(src_type) and qualTypeIsPtr(dst_type)) {
|
||||
if (cIsInteger(src_type) and qualTypeIsPtr(dst_type)) {
|
||||
// @intToPtr(dest_type, val)
|
||||
const builtin_node = try transCreateNodeBuiltinFnCall(rp.c, "@intToPtr");
|
||||
try builtin_node.params.push(try transQualType(rp, dst_type, loc));
|
||||
_ = try appendToken(rp.c, .Comma, ",");
|
||||
@ -2870,6 +2858,10 @@ fn typeIsOpaque(c: *Context, ty: *const ZigClangType, loc: ZigClangSourceLocatio
|
||||
}
|
||||
}
|
||||
|
||||
fn cIsInteger(qt: ZigClangQualType) bool {
|
||||
return cIsSignedInteger(qt) or cIsUnsignedInteger(qt);
|
||||
}
|
||||
|
||||
fn cIsUnsignedInteger(qt: ZigClangQualType) bool {
|
||||
const c_type = qualTypeCanon(qt);
|
||||
if (ZigClangType_getTypeClass(c_type) != .Builtin) return false;
|
||||
|
@ -21,9 +21,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
, &[_][]const u8{
|
||||
\\pub export fn foo() void {
|
||||
\\ var a: c_int = undefined;
|
||||
\\ var b: u8 = @as(u8, 123);
|
||||
\\ var b: u8 = @intCast(u8, 123);
|
||||
\\ const c: c_int = undefined;
|
||||
\\ const d: c_uint = @as(c_uint, 440);
|
||||
\\ const d: c_uint = @intCast(c_uint, 440);
|
||||
\\}
|
||||
});
|
||||
|
||||
@ -110,7 +110,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\pub extern fn foo() void;
|
||||
\\pub export fn bar() void {
|
||||
\\ var func_ptr: ?*c_void = @ptrCast(?*c_void, foo);
|
||||
\\ var typed_func_ptr: ?extern fn () void = @intToPtr(?extern fn () void, @as(c_ulong, @ptrToInt(func_ptr)));
|
||||
\\ var typed_func_ptr: ?extern fn () void = @intToPtr(?extern fn () void, @intCast(c_ulong, @ptrToInt(func_ptr)));
|
||||
\\}
|
||||
});
|
||||
|
||||
@ -855,7 +855,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
, &[_][]const u8{
|
||||
\\pub fn foo() void {
|
||||
\\ var arr: [10]u8 = .{
|
||||
\\ @as(u8, 1),
|
||||
\\ @intCast(u8, 1),
|
||||
\\ } ++ .{0} ** 9;
|
||||
\\ var arr1: [10][*c]u8 = .{
|
||||
\\ null,
|
||||
@ -1082,18 +1082,18 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\ unsigned d = 440;
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
\\pub var a: c_long = @as(c_long, 2);
|
||||
\\pub var b: c_long = @as(c_long, 2);
|
||||
\\pub var a: c_long = @intCast(c_long, 2);
|
||||
\\pub var b: c_long = @intCast(c_long, 2);
|
||||
\\pub var c: c_int = 4;
|
||||
\\pub export fn foo(_arg_c_1: u8) void {
|
||||
\\ var c_1 = _arg_c_1;
|
||||
\\ var a_2: c_int = undefined;
|
||||
\\ var b_3: u8 = @as(u8, 123);
|
||||
\\ b_3 = @as(u8, a_2);
|
||||
\\ var b_3: u8 = @intCast(u8, 123);
|
||||
\\ b_3 = @intCast(u8, a_2);
|
||||
\\ {
|
||||
\\ var d: c_int = 5;
|
||||
\\ }
|
||||
\\ var d: c_uint = @as(c_uint, 440);
|
||||
\\ var d: c_uint = @intCast(c_uint, 440);
|
||||
\\}
|
||||
});
|
||||
|
||||
@ -1216,14 +1216,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\ _ = 7;
|
||||
\\ }
|
||||
\\ }
|
||||
\\ var i: u8 = @as(u8, 2);
|
||||
\\ var i: u8 = @intCast(u8, 2);
|
||||
\\}
|
||||
});
|
||||
|
||||
cases.add("shadowing primitive types",
|
||||
\\unsigned anyerror = 2;
|
||||
, &[_][]const u8{
|
||||
\\pub export var _anyerror: c_uint = @as(c_uint, 2);
|
||||
\\pub export var _anyerror: c_uint = @intCast(c_uint, 2);
|
||||
});
|
||||
|
||||
cases.add("floats",
|
||||
@ -1397,17 +1397,17 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\
|
||||
, &[_][]const u8{
|
||||
\\pub export fn escapes() [*c]const u8 {
|
||||
\\ var a: u8 = @as(u8, '\'');
|
||||
\\ var b: u8 = @as(u8, '\\');
|
||||
\\ var c: u8 = @as(u8, '\x07');
|
||||
\\ var d: u8 = @as(u8, '\x08');
|
||||
\\ var e: u8 = @as(u8, '\x0c');
|
||||
\\ var f: u8 = @as(u8, '\n');
|
||||
\\ var g: u8 = @as(u8, '\r');
|
||||
\\ var h: u8 = @as(u8, '\t');
|
||||
\\ var i: u8 = @as(u8, '\x0b');
|
||||
\\ var j: u8 = @as(u8, '\x00');
|
||||
\\ var k: u8 = @as(u8, '\"');
|
||||
\\ var a: u8 = @intCast(u8, '\'');
|
||||
\\ var b: u8 = @intCast(u8, '\\');
|
||||
\\ var c: u8 = @intCast(u8, '\x07');
|
||||
\\ var d: u8 = @intCast(u8, '\x08');
|
||||
\\ var e: u8 = @intCast(u8, '\x0c');
|
||||
\\ var f: u8 = @intCast(u8, '\n');
|
||||
\\ var g: u8 = @intCast(u8, '\r');
|
||||
\\ var h: u8 = @intCast(u8, '\t');
|
||||
\\ var i: u8 = @intCast(u8, '\x0b');
|
||||
\\ var j: u8 = @intCast(u8, '\x00');
|
||||
\\ var k: u8 = @intCast(u8, '\"');
|
||||
\\ return "\'\\\x07\x08\x0c\n\r\t\x0b\x00\"";
|
||||
\\}
|
||||
});
|
||||
@ -1818,7 +1818,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
, &[_][]const u8{
|
||||
\\pub export fn foo() void {
|
||||
\\ var i: c_int = 0;
|
||||
\\ var u: c_uint = @as(c_uint, 0);
|
||||
\\ var u: c_uint = @intCast(c_uint, 0);
|
||||
\\ i += 1;
|
||||
\\ i -= 1;
|
||||
\\ u +%= 1;
|
||||
@ -1858,7 +1858,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\pub export fn log2(_arg_a: c_uint) c_int {
|
||||
\\ var a = _arg_a;
|
||||
\\ var i: c_int = 0;
|
||||
\\ while (a > @as(c_uint, 0)) {
|
||||
\\ while (a > @intCast(c_uint, 0)) {
|
||||
\\ a >>= @as(@import("std").math.Log2Int(c_int), 1);
|
||||
\\ }
|
||||
\\ return i;
|
||||
@ -1878,7 +1878,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\pub export fn log2(_arg_a: u32) c_int {
|
||||
\\ var a = _arg_a;
|
||||
\\ var i: c_int = 0;
|
||||
\\ while (a > @as(c_uint, 0)) {
|
||||
\\ while (a > @intCast(c_uint, 0)) {
|
||||
\\ a >>= @as(@import("std").math.Log2Int(c_int), 1);
|
||||
\\ }
|
||||
\\ return i;
|
||||
@ -1957,35 +1957,35 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
\\pub export fn foo() void {
|
||||
\\ var a: c_uint = @as(c_uint, 0);
|
||||
\\ var a: c_uint = @intCast(c_uint, 0);
|
||||
\\ a +%= (blk: {
|
||||
\\ const _ref_1 = &a;
|
||||
\\ _ref_1.* = _ref_1.* +% @as(c_uint, 1);
|
||||
\\ _ref_1.* = _ref_1.* +% @intCast(c_uint, 1);
|
||||
\\ break :blk _ref_1.*;
|
||||
\\ });
|
||||
\\ a -%= (blk: {
|
||||
\\ const _ref_2 = &a;
|
||||
\\ _ref_2.* = _ref_2.* -% @as(c_uint, 1);
|
||||
\\ _ref_2.* = _ref_2.* -% @intCast(c_uint, 1);
|
||||
\\ break :blk _ref_2.*;
|
||||
\\ });
|
||||
\\ a *%= (blk: {
|
||||
\\ const _ref_3 = &a;
|
||||
\\ _ref_3.* = _ref_3.* *% @as(c_uint, 1);
|
||||
\\ _ref_3.* = _ref_3.* *% @intCast(c_uint, 1);
|
||||
\\ break :blk _ref_3.*;
|
||||
\\ });
|
||||
\\ a &= (blk: {
|
||||
\\ const _ref_4 = &a;
|
||||
\\ _ref_4.* = _ref_4.* & @as(c_uint, 1);
|
||||
\\ _ref_4.* = _ref_4.* & @intCast(c_uint, 1);
|
||||
\\ break :blk _ref_4.*;
|
||||
\\ });
|
||||
\\ a |= (blk: {
|
||||
\\ const _ref_5 = &a;
|
||||
\\ _ref_5.* = _ref_5.* | @as(c_uint, 1);
|
||||
\\ _ref_5.* = _ref_5.* | @intCast(c_uint, 1);
|
||||
\\ break :blk _ref_5.*;
|
||||
\\ });
|
||||
\\ a ^= (blk: {
|
||||
\\ const _ref_6 = &a;
|
||||
\\ _ref_6.* = _ref_6.* ^ @as(c_uint, 1);
|
||||
\\ _ref_6.* = _ref_6.* ^ @intCast(c_uint, 1);
|
||||
\\ break :blk _ref_6.*;
|
||||
\\ });
|
||||
\\ a >>= @as(@import("std").math.Log2Int(c_uint), (blk: {
|
||||
@ -2017,7 +2017,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
, &[_][]const u8{
|
||||
\\pub export fn foo() void {
|
||||
\\ var i: c_int = 0;
|
||||
\\ var u: c_uint = @as(c_uint, 0);
|
||||
\\ var u: c_uint = @intCast(c_uint, 0);
|
||||
\\ i += 1;
|
||||
\\ i -= 1;
|
||||
\\ u +%= 1;
|
||||
@ -2092,9 +2092,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
||||
\\ fn_int(1094861636);
|
||||
\\ fn_f32(@intToFloat(f32, 3));
|
||||
\\ fn_f64(@intToFloat(f64, 3));
|
||||
\\ fn_char(@as(u8, '3'));
|
||||
\\ fn_char(@as(u8, '\x01'));
|
||||
\\ fn_char(@as(u8, 0));
|
||||
\\ fn_char(@intCast(u8, '3'));
|
||||
\\ fn_char(@intCast(u8, '\x01'));
|
||||
\\ fn_char(@intCast(u8, 0));
|
||||
\\ fn_f32(3);
|
||||
\\ fn_f64(3);
|
||||
\\ fn_bool(123 != 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user