| ... | ... | @@ -668,31 +668,27 @@ fn transTypeDefAsBuiltin(c: *Context, typedef_decl: *const ZigClangTypedefNameDe |
| 668 | 668 | return transCreateNodeIdentifier(c, builtin_name); |
| 669 | 669 | } |
| 670 | 670 | |
| 671 | | fn checkForBuiltinTypedef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, checked_name: []const u8) !?*ast.Node { |
| 672 | | if (mem.eql(u8, checked_name, "uint8_t")) |
| 673 | | return transTypeDefAsBuiltin(c, typedef_decl, "u8") |
| 674 | | else if (mem.eql(u8, checked_name, "int8_t")) |
| 675 | | return transTypeDefAsBuiltin(c, typedef_decl, "i8") |
| 676 | | else if (mem.eql(u8, checked_name, "uint16_t")) |
| 677 | | return transTypeDefAsBuiltin(c, typedef_decl, "u16") |
| 678 | | else if (mem.eql(u8, checked_name, "int16_t")) |
| 679 | | return transTypeDefAsBuiltin(c, typedef_decl, "i16") |
| 680 | | else if (mem.eql(u8, checked_name, "uint32_t")) |
| 681 | | return transTypeDefAsBuiltin(c, typedef_decl, "u32") |
| 682 | | else if (mem.eql(u8, checked_name, "int32_t")) |
| 683 | | return transTypeDefAsBuiltin(c, typedef_decl, "i32") |
| 684 | | else if (mem.eql(u8, checked_name, "uint64_t")) |
| 685 | | return transTypeDefAsBuiltin(c, typedef_decl, "u64") |
| 686 | | else if (mem.eql(u8, checked_name, "int64_t")) |
| 687 | | return transTypeDefAsBuiltin(c, typedef_decl, "i64") |
| 688 | | else if (mem.eql(u8, checked_name, "intptr_t")) |
| 689 | | return transTypeDefAsBuiltin(c, typedef_decl, "isize") |
| 690 | | else if (mem.eql(u8, checked_name, "uintptr_t")) |
| 691 | | return transTypeDefAsBuiltin(c, typedef_decl, "usize") |
| 692 | | else if (mem.eql(u8, checked_name, "ssize_t")) |
| 693 | | return transTypeDefAsBuiltin(c, typedef_decl, "isize") |
| 694 | | else if (mem.eql(u8, checked_name, "size_t")) |
| 695 | | return transTypeDefAsBuiltin(c, typedef_decl, "usize"); |
| 671 | fn checkForBuiltinTypedef(checked_name: []const u8) !?[]const u8 { |
| 672 | const table = comptime [_][2][]const u8{ |
| 673 | .{ "uint8_t", "u8" }, |
| 674 | .{ "int8_t", "i8" }, |
| 675 | .{ "uint16_t", "u16" }, |
| 676 | .{ "int16_t", "i16" }, |
| 677 | .{ "uint32_t", "u32" }, |
| 678 | .{ "int32_t", "i32" }, |
| 679 | .{ "uint64_t", "u64" }, |
| 680 | .{ "int64_t", "i64" }, |
| 681 | .{ "intptr_t", "isize" }, |
| 682 | .{ "uintptr_t", "usize" }, |
| 683 | .{ "ssize_t", "isize" }, |
| 684 | .{ "size_t", "usize" }, |
| 685 | }; |
| 686 | |
| 687 | for (table) |entry| { |
| 688 | if (mem.eql(u8, checked_name, entry[0])) { |
| 689 | return entry[1]; |
| 690 | } |
| 691 | } |
| 696 | 692 | |
| 697 | 693 | return null; |
| 698 | 694 | } |
| ... | ... | @@ -707,8 +703,8 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l |
| 707 | 703 | // TODO https://github.com/ziglang/zig/issues/3756 |
| 708 | 704 | // TODO https://github.com/ziglang/zig/issues/1802 |
| 709 | 705 | const checked_name = if (isZigPrimitiveType(typedef_name)) try std.fmt.allocPrint(c.a(), "{}_{}", .{ typedef_name, c.getMangle() }) else typedef_name; |
| 710 | | if (try checkForBuiltinTypedef(c, typedef_decl, checked_name)) |node| { |
| 711 | | return node; |
| 706 | if (try checkForBuiltinTypedef(checked_name)) |builtin| { |
| 707 | return transTypeDefAsBuiltin(c, typedef_decl, builtin); |
| 712 | 708 | } |
| 713 | 709 | |
| 714 | 710 | if (!top_level_visit) { |
| ... | ... | @@ -716,12 +712,12 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l |
| 716 | 712 | } |
| 717 | 713 | |
| 718 | 714 | _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), checked_name); |
| 719 | | const node = (try transZigTypedef(rp, typedef_decl, true, checked_name)) orelse return null; |
| 715 | const node = (try transCreateNodeTypedef(rp, typedef_decl, true, checked_name)) orelse return null; |
| 720 | 716 | try addTopLevelDecl(c, checked_name, &node.base); |
| 721 | 717 | return transCreateNodeIdentifier(c, checked_name); |
| 722 | 718 | } |
| 723 | 719 | |
| 724 | | fn transZigTypedef(rp: RestorePoint, typedef_decl: *const ZigClangTypedefNameDecl, toplevel: bool, checked_name: []const u8) Error!?*ast.Node.VarDecl { |
| 720 | fn transCreateNodeTypedef(rp: RestorePoint, typedef_decl: *const ZigClangTypedefNameDecl, toplevel: bool, checked_name: []const u8) Error!?*ast.Node.VarDecl { |
| 725 | 721 | const node = try transCreateNodeVarDecl(rp.c, toplevel, true, checked_name); |
| 726 | 722 | node.eq_token = try appendToken(rp.c, .Equal, "="); |
| 727 | 723 | |
| ... | ... | @@ -1411,14 +1407,20 @@ fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt) |
| 1411 | 1407 | @ptrCast(*const ZigClangNamedDecl, typedef_decl), |
| 1412 | 1408 | )); |
| 1413 | 1409 | |
| 1410 | const underlying_qual = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl); |
| 1411 | const underlying_type = ZigClangQualType_getTypePtr(underlying_qual); |
| 1412 | const underlying_name = try c.str(ZigClangType_getTypeClassName(underlying_type)); |
| 1413 | |
| 1414 | 1414 | const mangled_name = try block_scope.makeMangledName(c, name); |
| 1415 | | if (try checkForBuiltinTypedef(c, typedef_decl, mangled_name)) |ast_node| { |
| 1416 | | return ast_node; |
| 1415 | if (try checkForBuiltinTypedef(underlying_name)) |builtin| { |
| 1416 | try block_scope.variables.push(.{ |
| 1417 | .alias = builtin, |
| 1418 | .name = mangled_name, |
| 1419 | }); |
| 1420 | } else { |
| 1421 | const node = (try transCreateNodeTypedef(rp, typedef_decl, false, mangled_name)) orelse return error.UnsupportedTranslation; |
| 1422 | try block_scope.block_node.statements.push(&node.base); |
| 1417 | 1423 | } |
| 1418 | | |
| 1419 | | const node = (try transZigTypedef(rp, typedef_decl, false, mangled_name)) |
| 1420 | | orelse return error.UnsupportedTranslation; |
| 1421 | | try block_scope.block_node.statements.push(&node.base); |
| 1422 | 1424 | }, |
| 1423 | 1425 | else => |kind| return revertAndWarn( |
| 1424 | 1426 | rp, |