@@ -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 {
@@ -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