Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit 111bfc4

Browse files
authored
Merge pull request #2183 from WalterBright/stdint
set core.stdc.stdint types so mangling matches C++ merged-on-behalf-of: Walter Bright <WalterBright@users.noreply.github.com>
2 parents 7e3b408 + 7a8eb71 commit 111bfc4

File tree

2 files changed

+195
-69
lines changed

2 files changed

+195
-69
lines changed

src/core/stdc/config.d

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,35 @@ module core.stdc.config;
1515

1616
version (StdDdoc)
1717
{
18+
private
19+
{
20+
version (Posix)
21+
enum isPosix = true;
22+
else
23+
enum isPosix = false;
24+
static if (isPosix && (void*).sizeof > int.sizeof)
25+
{
26+
alias ddoc_long = long;
27+
alias ddoc_ulong = ulong;
28+
}
29+
else
30+
{
31+
alias ddoc_long = int;
32+
alias ddoc_ulong = uint;
33+
}
34+
}
35+
1836
/***
1937
* Used for a signed integer type that corresponds in size to the associated
2038
* C compiler's `long` type.
2139
*/
22-
alias c_long = int;
40+
alias c_long = ddoc_long;
2341

2442
/***
2543
* Used for an unsigned integer type that corresponds in size to the associated
2644
* C compiler's `unsigned long` type.
2745
*/
28-
alias c_ulong = uint;
46+
alias c_ulong = ddoc_ulong;
2947

3048
/***
3149
* Used for a signed integer type that corresponds in size and mangling to the associated

src/core/stdc/stdint.d

Lines changed: 175 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_stdint.h.html, _stdint.h)
55
*
6-
* Copyright: Copyright Sean Kelly 2005 - 2009.
6+
* Copyright: Copyright Sean Kelly 2005 - 2018
77
* License: Distributed under the
88
* $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
99
* (See accompanying file LICENSE)
@@ -14,6 +14,7 @@
1414

1515
module core.stdc.stdint;
1616

17+
private import core.stdc.config;
1718
private import core.stdc.stddef; // for wchar_t
1819
private import core.stdc.signal; // for sig_atomic_t
1920
private import core.stdc.wchar_; // for wint_t
@@ -27,85 +28,192 @@ extern (C):
2728
nothrow:
2829
@nogc:
2930

30-
///
31-
alias int8_t = byte ;
32-
///
33-
alias int16_t = short;
34-
///
35-
alias int32_t = int ;
36-
///
37-
alias int64_t = long ;
38-
///
39-
static if (is(ucent))
40-
alias int128_t = cent;
4131

42-
///
43-
alias uint8_t = ubyte ;
44-
///
45-
alias uint16_t = ushort;
46-
///
47-
alias uint32_t = uint ;
48-
///
49-
alias uint64_t = ulong ;
50-
///
5132
static if (is(ucent))
52-
alias uint128_t = ucent;
33+
{
34+
alias int128_t = cent; ///
35+
alias uint128_t = ucent; ///
36+
}
5337

54-
///
55-
alias int_least8_t = byte ;
56-
///
57-
alias int_least16_t = short;
58-
///
59-
alias int_least32_t = int ;
60-
///
61-
alias int_least64_t = long ;
38+
version (Win32)
39+
{
40+
alias int8_t = byte; ///
41+
alias int16_t = short; ///
42+
alias uint8_t = ubyte; ///
43+
alias uint16_t = ushort; ///
44+
alias int32_t = cpp_long; ///
45+
alias uint32_t = cpp_ulong; ///
46+
alias int64_t = long; ///
47+
alias uint64_t = ulong; ///
6248

63-
///
64-
alias uint_least8_t = ubyte ;
65-
///
66-
alias uint_least16_t = ushort;
67-
///
68-
alias uint_least32_t = uint ;
69-
///
70-
alias uint_least64_t = ulong ;
49+
alias int_least8_t = byte; ///
50+
alias uint_least8_t = ubyte; ///
51+
alias int_least16_t = short; ///
52+
alias uint_least16_t = ushort; ///
53+
alias int_least32_t = cpp_long; ///
54+
alias uint_least32_t = cpp_ulong; ///
55+
alias int_least64_t = long; ///
56+
alias uint_least64_t = ulong; ///
7157

72-
///
73-
alias int_fast8_t = byte;
74-
///
75-
alias int_fast16_t = int ;
76-
///
77-
alias int_fast32_t = int ;
78-
///
79-
alias int_fast64_t = long;
58+
alias int_fast8_t = byte; ///
59+
alias uint_fast8_t = ubyte; ///
60+
alias int_fast16_t = int; ///
61+
alias uint_fast16_t = uint; ///
62+
alias int_fast32_t = cpp_long; ///
63+
alias uint_fast32_t = cpp_ulong; ///
64+
alias int_fast64_t = long; ///
65+
alias uint_fast64_t = ulong; ///
8066

81-
///
82-
alias uint_fast8_t = ubyte;
83-
///
84-
alias uint_fast16_t = uint ;
85-
///
86-
alias uint_fast32_t = uint ;
87-
///
88-
alias uint_fast64_t = ulong;
67+
alias intptr_t = int; ///
68+
alias uintptr_t = uint; ///
69+
alias intmax_t = long; ///
70+
alias uintmax_t = ulong; ///
71+
}
72+
else version (Win64)
73+
{
74+
alias int8_t = byte; ///
75+
alias int16_t = short; ///
76+
alias uint8_t = ubyte; ///
77+
alias uint16_t = ushort; ///
78+
alias int32_t = int; ///
79+
alias uint32_t = uint; ///
80+
alias int64_t = long; ///
81+
alias uint64_t = ulong; ///
82+
83+
alias int_least8_t = byte; ///
84+
alias uint_least8_t = ubyte; ///
85+
alias int_least16_t = short; ///
86+
alias uint_least16_t = ushort; ///
87+
alias int_least32_t = int; ///
88+
alias uint_least32_t = uint; ///
89+
alias int_least64_t = long; ///
90+
alias uint_least64_t = ulong; ///
91+
92+
alias int_fast8_t = char; ///
93+
alias uint_fast8_t = ubyte; ///
94+
alias int_fast16_t = int; ///
95+
alias uint_fast16_t = uint; ///
96+
alias int_fast32_t = int; ///
97+
alias uint_fast32_t = uint; ///
98+
alias int_fast64_t = long; ///
99+
alias uint_fast64_t = ulong; ///
100+
101+
alias intptr_t = long; ///
102+
alias uintptr_t = ulong; ///
103+
alias intmax_t = long; ///
104+
alias uintmax_t = ulong; ///
105+
}
106+
else version (OSX)
107+
{
108+
alias int8_t = byte; ///
109+
alias int16_t = short; ///
110+
alias uint8_t = ubyte; ///
111+
alias uint16_t = ushort; ///
112+
alias int32_t = int; ///
113+
alias uint32_t = uint; ///
114+
alias int64_t = long; ///
115+
alias uint64_t = ulong; ///
89116

90-
version( D_LP64 )
117+
alias int_least8_t = byte; ///
118+
alias uint_least8_t = ubyte; ///
119+
alias int_least16_t = short; ///
120+
alias uint_least16_t = ushort; ///
121+
alias int_least32_t = int; ///
122+
alias uint_least32_t = uint; ///
123+
alias int_least64_t = long; ///
124+
alias uint_least64_t = ulong; ///
125+
126+
alias int_fast8_t = byte; ///
127+
alias uint_fast8_t = ubyte; ///
128+
alias int_fast16_t = int; ///
129+
alias uint_fast16_t = uint; ///
130+
alias int_fast32_t = int; ///
131+
alias uint_fast32_t = uint; ///
132+
alias int_fast64_t = long; ///
133+
alias uint_fast64_t = ulong; ///
134+
135+
alias intptr_t = cpp_long; ///
136+
alias uintptr_t = cpp_ulong; ///
137+
alias intmax_t = cpp_long; ///
138+
alias uintmax_t = cpp_ulong; ///
139+
}
140+
else version (Posix)
91141
{
92-
///
93-
alias intptr_t = long ;
94-
///
95-
alias uintptr_t = ulong;
142+
version (D_LP64)
143+
{
144+
alias int8_t = byte; ///
145+
alias int16_t = short; ///
146+
alias uint8_t = ubyte; ///
147+
alias uint16_t = ushort; ///
148+
alias int32_t = int; ///
149+
alias uint32_t = uint; ///
150+
alias int64_t = cpp_long; ///
151+
alias uint64_t = cpp_ulong; ///
152+
153+
alias int_least8_t = byte; ///
154+
alias uint_least8_t = ubyte; ///
155+
alias int_least16_t = short; ///
156+
alias uint_least16_t = ushort; ///
157+
alias int_least32_t = int; ///
158+
alias uint_least32_t = uint; ///
159+
alias int_least64_t = cpp_long; ///
160+
alias uint_least64_t = cpp_ulong; ///
161+
162+
alias int_fast8_t = byte; ///
163+
alias uint_fast8_t = ubyte; ///
164+
alias int_fast16_t = cpp_long; ///
165+
alias uint_fast16_t = cpp_ulong; ///
166+
alias int_fast32_t = cpp_long; ///
167+
alias uint_fast32_t = cpp_ulong; ///
168+
alias int_fast64_t = cpp_long; ///
169+
alias uint_fast64_t = cpp_ulong; ///
170+
171+
alias intptr_t = cpp_long; ///
172+
alias uintptr_t = cpp_ulong; ///
173+
alias intmax_t = cpp_long; ///
174+
alias uintmax_t = cpp_ulong; ///
175+
}
176+
else
177+
{
178+
alias int8_t = byte; ///
179+
alias int16_t = short; ///
180+
alias uint8_t = ubyte; ///
181+
alias uint16_t = ushort; ///
182+
alias int32_t = int; ///
183+
alias uint32_t = uint; ///
184+
alias int64_t = long; ///
185+
alias uint64_t = ulong; ///
186+
187+
alias int_least8_t = byte; ///
188+
alias uint_least8_t = ubyte; ///
189+
alias int_least16_t = short; ///
190+
alias uint_least16_t = ushort; ///
191+
alias int_least32_t = int; ///
192+
alias uint_least32_t = uint; ///
193+
alias int_least64_t = long; ///
194+
alias uint_least64_t = ulong; ///
195+
196+
alias int_fast8_t = byte; ///
197+
alias uint_fast8_t = ubyte; ///
198+
alias int_fast16_t = int; ///
199+
alias uint_fast16_t = uint; ///
200+
alias int_fast32_t = int; ///
201+
alias uint_fast32_t = uint; ///
202+
alias int_fast64_t = long; ///
203+
alias uint_fast64_t = ulong; ///
204+
205+
alias intptr_t = int ; ///
206+
alias uintptr_t = uint; ///
207+
alias intmax_t = long; ///
208+
alias uintmax_t = ulong; ///
209+
}
96210
}
97211
else
98212
{
99-
///
100-
alias intptr_t = int ;
101-
///
102-
alias uintptr_t = uint;
213+
static assert(0);
103214
}
104215

105-
///
106-
alias intmax_t = long ;
107-
///
108-
alias uintmax_t = ulong;
216+
109217

110218
///
111219
enum int8_t INT8_MIN = int8_t.min;

0 commit comments

Comments
 (0)