@@ -410,11 +410,17 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
410
410
const param_name = tokenSlice (c , param .name_token orelse
411
411
return failDecl (c , fn_decl_loc , fn_name , "function {} parameter has no name" , .{fn_name }));
412
412
413
- const checked_param_name = if (try scope .createAlias (rp .c , param_name )) | a | blk : {
414
- try block_scope .variables .push (.{ .name = param_name , .alias = a });
415
- break :blk a ;
416
- } else param_name ;
417
- const arg_name = try std .fmt .allocPrint (c .a (), "_arg_{}" , .{checked_param_name });
413
+ // in Zig top level declarations are order-independent so this might be shadowed later
414
+ const checked_param_name = try std .fmt .allocPrint (c .a (), "{}_{}" , .{ param_name , c .getMangle () });
415
+ try block_scope .variables .push (.{ .name = param_name , .alias = checked_param_name });
416
+
417
+ const arg_name = blk : {
418
+ const bare_arg_name = try std .fmt .allocPrint (c .a (), "_arg_{}" , .{checked_param_name });
419
+ break :blk if (try scope .createAlias (rp .c , bare_arg_name )) | a |
420
+ a
421
+ else
422
+ bare_arg_name ;
423
+ };
418
424
419
425
const node = try transCreateNodeVarDecl (c , false , false , checked_param_name );
420
426
node .eq_token = try appendToken (c , .Equal , "=" );
@@ -533,49 +539,53 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl) Error
533
539
534
540
const typedef_name = try c .str (ZigClangDecl_getName_bytes_begin (@ptrCast (* const ZigClangDecl , typedef_decl )));
535
541
536
- if (mem .eql (u8 , typedef_name , "uint8_t" ))
542
+ // TODO https://github.com/ziglang/zig/issues/3756
543
+ // TODO https://github.com/ziglang/zig/issues/1802
544
+ const checked_name = if (isZigPrimitiveType (typedef_name )) try std .fmt .allocPrint (c .a (), "_{}" , .{typedef_name }) else typedef_name ;
545
+
546
+ if (mem .eql (u8 , checked_name , "uint8_t" ))
537
547
return transTypeDefAsBuiltin (c , typedef_decl , "u8" )
538
- else if (mem .eql (u8 , typedef_name , "int8_t" ))
548
+ else if (mem .eql (u8 , checked_name , "int8_t" ))
539
549
return transTypeDefAsBuiltin (c , typedef_decl , "i8" )
540
- else if (mem .eql (u8 , typedef_name , "uint16_t" ))
550
+ else if (mem .eql (u8 , checked_name , "uint16_t" ))
541
551
return transTypeDefAsBuiltin (c , typedef_decl , "u16" )
542
- else if (mem .eql (u8 , typedef_name , "int16_t" ))
552
+ else if (mem .eql (u8 , checked_name , "int16_t" ))
543
553
return transTypeDefAsBuiltin (c , typedef_decl , "i16" )
544
- else if (mem .eql (u8 , typedef_name , "uint32_t" ))
554
+ else if (mem .eql (u8 , checked_name , "uint32_t" ))
545
555
return transTypeDefAsBuiltin (c , typedef_decl , "u32" )
546
- else if (mem .eql (u8 , typedef_name , "int32_t" ))
556
+ else if (mem .eql (u8 , checked_name , "int32_t" ))
547
557
return transTypeDefAsBuiltin (c , typedef_decl , "i32" )
548
- else if (mem .eql (u8 , typedef_name , "uint64_t" ))
558
+ else if (mem .eql (u8 , checked_name , "uint64_t" ))
549
559
return transTypeDefAsBuiltin (c , typedef_decl , "u64" )
550
- else if (mem .eql (u8 , typedef_name , "int64_t" ))
560
+ else if (mem .eql (u8 , checked_name , "int64_t" ))
551
561
return transTypeDefAsBuiltin (c , typedef_decl , "i64" )
552
- else if (mem .eql (u8 , typedef_name , "intptr_t" ))
562
+ else if (mem .eql (u8 , checked_name , "intptr_t" ))
553
563
return transTypeDefAsBuiltin (c , typedef_decl , "isize" )
554
- else if (mem .eql (u8 , typedef_name , "uintptr_t" ))
564
+ else if (mem .eql (u8 , checked_name , "uintptr_t" ))
555
565
return transTypeDefAsBuiltin (c , typedef_decl , "usize" )
556
- else if (mem .eql (u8 , typedef_name , "ssize_t" ))
566
+ else if (mem .eql (u8 , checked_name , "ssize_t" ))
557
567
return transTypeDefAsBuiltin (c , typedef_decl , "isize" )
558
- else if (mem .eql (u8 , typedef_name , "size_t" ))
568
+ else if (mem .eql (u8 , checked_name , "size_t" ))
559
569
return transTypeDefAsBuiltin (c , typedef_decl , "usize" );
560
570
561
- _ = try c .decl_table .put (@ptrToInt (ZigClangTypedefNameDecl_getCanonicalDecl (typedef_decl )), typedef_name );
571
+ _ = try c .decl_table .put (@ptrToInt (ZigClangTypedefNameDecl_getCanonicalDecl (typedef_decl )), checked_name );
562
572
const visib_tok = try appendToken (c , .Keyword_pub , "pub" );
563
573
const const_tok = try appendToken (c , .Keyword_const , "const" );
564
- const node = try transCreateNodeVarDecl (c , true , true , typedef_name );
574
+ const node = try transCreateNodeVarDecl (c , true , true , checked_name );
565
575
node .eq_token = try appendToken (c , .Equal , "=" );
566
576
567
577
const child_qt = ZigClangTypedefNameDecl_getUnderlyingType (typedef_decl );
568
578
const typedef_loc = ZigClangTypedefNameDecl_getLocation (typedef_decl );
569
579
node .init_node = transQualType (rp , child_qt , typedef_loc ) catch | err | switch (err ) {
570
580
error .UnsupportedType = > {
571
- try failDecl (c , typedef_loc , typedef_name , "unable to resolve typedef child type" , .{});
581
+ try failDecl (c , typedef_loc , checked_name , "unable to resolve typedef child type" , .{});
572
582
return null ;
573
583
},
574
584
error .OutOfMemory = > | e | return e ,
575
585
};
576
586
node .semicolon_token = try appendToken (c , .Semicolon , ";" );
577
- try addTopLevelDecl (c , typedef_name , & node .base );
578
- return transCreateNodeIdentifier (c , typedef_name );
587
+ try addTopLevelDecl (c , checked_name , & node .base );
588
+ return transCreateNodeIdentifier (c , checked_name );
579
589
}
580
590
581
591
fn transRecordDecl (c : * Context , record_decl : * const ZigClangRecordDecl ) Error ! ? * ast.Node {
@@ -4226,7 +4236,7 @@ fn transMacroFnDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u
4226
4236
_ = try appendToken (c , .RParen , ")" );
4227
4237
4228
4238
const type_of = try transCreateNodeBuiltinFnCall (c , "@TypeOf" );
4229
- type_of .rparen_token = try appendToken (c , .LParen , ")" );
4239
+ type_of .rparen_token = try appendToken (c , .RParen , ")" );
4230
4240
4231
4241
const fn_proto = try c .a ().create (ast .Node .FnProto );
4232
4242
fn_proto .* = .{
@@ -4383,8 +4393,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4383
4393
const type_of_1 = try transCreateNodeBuiltinFnCall (c , "@TypeOf" );
4384
4394
try type_id_1 .params .push (& type_of_1 .base );
4385
4395
try type_of_1 .params .push (node_to_cast );
4386
- type_of_1 .rparen_token = try appendToken (c , .LParen , ")" );
4387
- type_id_1 .rparen_token = try appendToken (c , .LParen , ")" );
4396
+ type_of_1 .rparen_token = try appendToken (c , .RParen , ")" );
4397
+ type_id_1 .rparen_token = try appendToken (c , .RParen , ")" );
4388
4398
4389
4399
const cmp_1 = try c .a ().create (ast .Node .InfixOp );
4390
4400
cmp_1 .* = .{
@@ -4394,12 +4404,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4394
4404
.rhs = try transCreateNodeEnumLiteral (c , "Pointer" ),
4395
4405
};
4396
4406
if_1 .condition = & cmp_1 .base ;
4397
- _ = try appendToken (c , .LParen , ")" );
4407
+ _ = try appendToken (c , .RParen , ")" );
4398
4408
4399
4409
const ptr_cast = try transCreateNodeBuiltinFnCall (c , "@ptrCast" );
4400
4410
try ptr_cast .params .push (inner_node );
4401
4411
try ptr_cast .params .push (node_to_cast );
4402
- ptr_cast .rparen_token = try appendToken (c , .LParen , ")" );
4412
+ ptr_cast .rparen_token = try appendToken (c , .RParen , ")" );
4403
4413
if_1 .body = & ptr_cast .base ;
4404
4414
4405
4415
const else_1 = try transCreateNodeElse (c );
@@ -4410,8 +4420,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4410
4420
const type_of_2 = try transCreateNodeBuiltinFnCall (c , "@TypeOf" );
4411
4421
try type_id_2 .params .push (& type_of_2 .base );
4412
4422
try type_of_2 .params .push (node_to_cast );
4413
- type_of_2 .rparen_token = try appendToken (c , .LParen , ")" );
4414
- type_id_2 .rparen_token = try appendToken (c , .LParen , ")" );
4423
+ type_of_2 .rparen_token = try appendToken (c , .RParen , ")" );
4424
+ type_id_2 .rparen_token = try appendToken (c , .RParen , ")" );
4415
4425
4416
4426
const cmp_2 = try c .a ().create (ast .Node .InfixOp );
4417
4427
cmp_2 .* = .{
@@ -4422,12 +4432,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4422
4432
};
4423
4433
if_2 .condition = & cmp_2 .base ;
4424
4434
else_1 .body = & if_2 .base ;
4425
- _ = try appendToken (c , .LParen , ")" );
4435
+ _ = try appendToken (c , .RParen , ")" );
4426
4436
4427
4437
const int_to_ptr = try transCreateNodeBuiltinFnCall (c , "@intToPtr" );
4428
4438
try int_to_ptr .params .push (inner_node );
4429
4439
try int_to_ptr .params .push (node_to_cast );
4430
- int_to_ptr .rparen_token = try appendToken (c , .LParen , ")" );
4440
+ int_to_ptr .rparen_token = try appendToken (c , .RParen , ")" );
4431
4441
if_2 .body = & int_to_ptr .base ;
4432
4442
4433
4443
const else_2 = try transCreateNodeElse (c );
@@ -4436,7 +4446,7 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
4436
4446
const as = try transCreateNodeBuiltinFnCall (c , "@as" );
4437
4447
try as .params .push (inner_node );
4438
4448
try as .params .push (node_to_cast );
4439
- as .rparen_token = try appendToken (c , .LParen , ")" );
4449
+ as .rparen_token = try appendToken (c , .RParen , ")" );
4440
4450
else_2 .body = & as .base ;
4441
4451
4442
4452
return & if_1 .base ;
@@ -4638,7 +4648,11 @@ fn parseCPrefixOpExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: Zig
4638
4648
4639
4649
fn tokenSlice (c : * Context , token : ast.TokenIndex ) []u8 {
4640
4650
const tok = c .tree .tokens .at (token );
4641
- return c .source_buffer .toSlice ()[tok .start .. tok .end ];
4651
+ const slice = c .source_buffer .toSlice ()[tok .start .. tok .end ];
4652
+ return if (mem .startsWith (u8 , slice , "@\" " ))
4653
+ slice [2 .. slice .len - 1 ]
4654
+ else
4655
+ slice ;
4642
4656
}
4643
4657
4644
4658
fn getContainer (c : * Context , node : * ast.Node ) ? * ast.Node {
0 commit comments