| ... | @@ -668,31 +668,27 @@ fn transTypeDefAsBuiltin(c: *Context, typedef_decl: *const ZigClangTypedefNameDe | ... | @@ -668,31 +668,27 @@ fn transTypeDefAsBuiltin(c: *Context, typedef_decl: *const ZigClangTypedefNameDe |
| 668 | return transCreateNodeIdentifier(c, builtin_name); | 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 { | 671 | fn checkForBuiltinTypedef(checked_name: []const u8) !?[]const u8 { |
| 672 | if (mem.eql(u8, checked_name, "uint8_t")) | 672 | const table = comptime [_][2][]const u8{ |
| 673 | return transTypeDefAsBuiltin(c, typedef_decl, "u8") | 673 | .{ "uint8_t", "u8" }, |
| 674 | else if (mem.eql(u8, checked_name, "int8_t")) | 674 | .{ "int8_t", "i8" }, |
| 675 | return transTypeDefAsBuiltin(c, typedef_decl, "i8") | 675 | .{ "uint16_t", "u16" }, |
| 676 | else if (mem.eql(u8, checked_name, "uint16_t")) | 676 | .{ "int16_t", "i16" }, |
| 677 | return transTypeDefAsBuiltin(c, typedef_decl, "u16") | 677 | .{ "uint32_t", "u32" }, |
| 678 | else if (mem.eql(u8, checked_name, "int16_t")) | 678 | .{ "int32_t", "i32" }, |
| 679 | return transTypeDefAsBuiltin(c, typedef_decl, "i16") | 679 | .{ "uint64_t", "u64" }, |
| 680 | else if (mem.eql(u8, checked_name, "uint32_t")) | 680 | .{ "int64_t", "i64" }, |
| 681 | return transTypeDefAsBuiltin(c, typedef_decl, "u32") | 681 | .{ "intptr_t", "isize" }, |
| 682 | else if (mem.eql(u8, checked_name, "int32_t")) | 682 | .{ "uintptr_t", "usize" }, |
| 683 | return transTypeDefAsBuiltin(c, typedef_decl, "i32") | 683 | .{ "ssize_t", "isize" }, |
| 684 | else if (mem.eql(u8, checked_name, "uint64_t")) | 684 | .{ "size_t", "usize" }, |
| 685 | return transTypeDefAsBuiltin(c, typedef_decl, "u64") | 685 | }; |
| 686 | else if (mem.eql(u8, checked_name, "int64_t")) | 686 | |
| 687 | return transTypeDefAsBuiltin(c, typedef_decl, "i64") | 687 | for (table) |entry| { |
| 688 | else if (mem.eql(u8, checked_name, "intptr_t")) | 688 | if (mem.eql(u8, checked_name, entry[0])) { |
| 689 | return transTypeDefAsBuiltin(c, typedef_decl, "isize") | 689 | return entry[1]; |
| 690 | else if (mem.eql(u8, checked_name, "uintptr_t")) | 690 | } |
| 691 | return transTypeDefAsBuiltin(c, typedef_decl, "usize") | 691 | } |
| 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"); | | |
| 696 | | 692 | |
| 697 | return null; | 693 | return null; |
| 698 | } | 694 | } |
| ... | @@ -707,8 +703,8 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l | ... | @@ -707,8 +703,8 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l |
| 707 | // TODO https://github.com/ziglang/zig/issues/3756 | 703 | // TODO https://github.com/ziglang/zig/issues/3756 |
| 708 | // TODO https://github.com/ziglang/zig/issues/1802 | 704 | // TODO https://github.com/ziglang/zig/issues/1802 |
| 709 | const checked_name = if (isZigPrimitiveType(typedef_name)) try std.fmt.allocPrint(c.a(), "{}_{}", .{ typedef_name, c.getMangle() }) else typedef_name; | 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| { | 706 | if (try checkForBuiltinTypedef(checked_name)) |builtin| { |
| 711 | return node; | 707 | return transTypeDefAsBuiltin(c, typedef_decl, builtin); |
| 712 | } | 708 | } |
| 713 | | 709 | |
| 714 | if (!top_level_visit) { | 710 | if (!top_level_visit) { |
| ... | @@ -716,12 +712,12 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l | ... | @@ -716,12 +712,12 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l |
| 716 | } | 712 | } |
| 717 | | 713 | |
| 718 | _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), checked_name); | 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 | try addTopLevelDecl(c, checked_name, &node.base); | 716 | try addTopLevelDecl(c, checked_name, &node.base); |
| 721 | return transCreateNodeIdentifier(c, checked_name); | 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 | const node = try transCreateNodeVarDecl(rp.c, toplevel, true, checked_name); | 721 | const node = try transCreateNodeVarDecl(rp.c, toplevel, true, checked_name); |
| 726 | node.eq_token = try appendToken(rp.c, .Equal, "="); | 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,14 +1407,20 @@ fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt) |
| 1411 | @ptrCast(*const ZigClangNamedDecl, typedef_decl), | 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 | const mangled_name = try block_scope.makeMangledName(c, name); | 1414 | const mangled_name = try block_scope.makeMangledName(c, name); |
| 1415 | if (try checkForBuiltinTypedef(c, typedef_decl, mangled_name)) |ast_node| { | 1415 | if (try checkForBuiltinTypedef(underlying_name)) |builtin| { |
| 1416 | return ast_node; | 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 | else => |kind| return revertAndWarn( | 1425 | else => |kind| return revertAndWarn( |
| 1424 | rp, | 1426 | rp, |