Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.
/ druntime Public archive
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions src/core/stdc/config.d
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,35 @@ module core.stdc.config;

version (StdDdoc)
{
private
{
version (Posix)
enum isPosix = true;
else
enum isPosix = false;
static if (isPosix && (void*).sizeof > int.sizeof)
{
alias ddoc_long = long;
Copy link
Contributor

@JinShil JinShil May 18, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see why we need these itermediate ddoc_ aliases here. Can't we just declare c_long and c_ulong here?

alias ddoc_ulong = ulong;
}
else
{
alias ddoc_long = int;
alias ddoc_ulong = uint;
}
}

/***
* Used for a signed integer type that corresponds in size to the associated
* C compiler's `long` type.
*/
alias c_long = int;
alias c_long = ddoc_long;

/***
* Used for an unsigned integer type that corresponds in size to the associated
* C compiler's `unsigned long` type.
*/
alias c_ulong = uint;
alias c_ulong = ddoc_ulong;

/***
* Used for a signed integer type that corresponds in size and mangling to the associated
Expand Down
242 changes: 175 additions & 67 deletions src/core/stdc/stdint.d
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*
* $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_stdint.h.html, _stdint.h)
*
* Copyright: Copyright Sean Kelly 2005 - 2009.
* Copyright: Copyright Sean Kelly 2005 - 2018
* License: Distributed under the
* $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
* (See accompanying file LICENSE)
Expand All @@ -14,6 +14,7 @@

module core.stdc.stdint;

private import core.stdc.config;
private import core.stdc.stddef; // for wchar_t
private import core.stdc.signal; // for sig_atomic_t
private import core.stdc.wchar_; // for wint_t
Expand All @@ -27,85 +28,192 @@ extern (C):
nothrow:
@nogc:

///
alias int8_t = byte ;
///
alias int16_t = short;
///
alias int32_t = int ;
///
alias int64_t = long ;
///
static if (is(ucent))
alias int128_t = cent;

///
alias uint8_t = ubyte ;
///
alias uint16_t = ushort;
///
alias uint32_t = uint ;
///
alias uint64_t = ulong ;
///
static if (is(ucent))
alias uint128_t = ucent;
{
alias int128_t = cent; ///
alias uint128_t = ucent; ///
}

///
alias int_least8_t = byte ;
///
alias int_least16_t = short;
///
alias int_least32_t = int ;
///
alias int_least64_t = long ;
version (Win32)
{
alias int8_t = byte; ///
alias int16_t = short; ///
alias uint8_t = ubyte; ///
alias uint16_t = ushort; ///
alias int32_t = cpp_long; ///
alias uint32_t = cpp_ulong; ///
alias int64_t = long; ///
alias uint64_t = ulong; ///

///
alias uint_least8_t = ubyte ;
///
alias uint_least16_t = ushort;
///
alias uint_least32_t = uint ;
///
alias uint_least64_t = ulong ;
alias int_least8_t = byte; ///
alias uint_least8_t = ubyte; ///
alias int_least16_t = short; ///
alias uint_least16_t = ushort; ///
alias int_least32_t = cpp_long; ///
alias uint_least32_t = cpp_ulong; ///
alias int_least64_t = long; ///
alias uint_least64_t = ulong; ///

///
alias int_fast8_t = byte;
///
alias int_fast16_t = int ;
///
alias int_fast32_t = int ;
///
alias int_fast64_t = long;
alias int_fast8_t = byte; ///
alias uint_fast8_t = ubyte; ///
alias int_fast16_t = int; ///
alias uint_fast16_t = uint; ///
alias int_fast32_t = cpp_long; ///
alias uint_fast32_t = cpp_ulong; ///
alias int_fast64_t = long; ///
alias uint_fast64_t = ulong; ///

///
alias uint_fast8_t = ubyte;
///
alias uint_fast16_t = uint ;
///
alias uint_fast32_t = uint ;
///
alias uint_fast64_t = ulong;
alias intptr_t = int; ///
alias uintptr_t = uint; ///
alias intmax_t = long; ///
alias uintmax_t = ulong; ///
}
else version (Win64)
{
alias int8_t = byte; ///
alias int16_t = short; ///
alias uint8_t = ubyte; ///
alias uint16_t = ushort; ///
alias int32_t = int; ///
alias uint32_t = uint; ///
alias int64_t = long; ///
alias uint64_t = ulong; ///

alias int_least8_t = byte; ///
alias uint_least8_t = ubyte; ///
alias int_least16_t = short; ///
alias uint_least16_t = ushort; ///
alias int_least32_t = int; ///
alias uint_least32_t = uint; ///
alias int_least64_t = long; ///
alias uint_least64_t = ulong; ///

alias int_fast8_t = char; ///
alias uint_fast8_t = ubyte; ///
alias int_fast16_t = int; ///
alias uint_fast16_t = uint; ///
alias int_fast32_t = int; ///
alias uint_fast32_t = uint; ///
alias int_fast64_t = long; ///
alias uint_fast64_t = ulong; ///

alias intptr_t = long; ///
alias uintptr_t = ulong; ///
alias intmax_t = long; ///
alias uintmax_t = ulong; ///
}
else version (OSX)
{
alias int8_t = byte; ///
alias int16_t = short; ///
alias uint8_t = ubyte; ///
alias uint16_t = ushort; ///
alias int32_t = int; ///
alias uint32_t = uint; ///
alias int64_t = long; ///
alias uint64_t = ulong; ///

version( D_LP64 )
alias int_least8_t = byte; ///
alias uint_least8_t = ubyte; ///
alias int_least16_t = short; ///
alias uint_least16_t = ushort; ///
alias int_least32_t = int; ///
alias uint_least32_t = uint; ///
alias int_least64_t = long; ///
alias uint_least64_t = ulong; ///

alias int_fast8_t = byte; ///
alias uint_fast8_t = ubyte; ///
alias int_fast16_t = int; ///
alias uint_fast16_t = uint; ///
alias int_fast32_t = int; ///
alias uint_fast32_t = uint; ///
alias int_fast64_t = long; ///
alias uint_fast64_t = ulong; ///

alias intptr_t = cpp_long; ///
alias uintptr_t = cpp_ulong; ///
alias intmax_t = cpp_long; ///
alias uintmax_t = cpp_ulong; ///
}
else version (Posix)
{
///
alias intptr_t = long ;
///
alias uintptr_t = ulong;
version (D_LP64)
{
alias int8_t = byte; ///
alias int16_t = short; ///
alias uint8_t = ubyte; ///
alias uint16_t = ushort; ///
alias int32_t = int; ///
alias uint32_t = uint; ///
alias int64_t = cpp_long; ///
alias uint64_t = cpp_ulong; ///

alias int_least8_t = byte; ///
alias uint_least8_t = ubyte; ///
alias int_least16_t = short; ///
alias uint_least16_t = ushort; ///
alias int_least32_t = int; ///
alias uint_least32_t = uint; ///
alias int_least64_t = cpp_long; ///
alias uint_least64_t = cpp_ulong; ///

alias int_fast8_t = byte; ///
alias uint_fast8_t = ubyte; ///
alias int_fast16_t = cpp_long; ///
alias uint_fast16_t = cpp_ulong; ///
alias int_fast32_t = cpp_long; ///
alias uint_fast32_t = cpp_ulong; ///
alias int_fast64_t = cpp_long; ///
alias uint_fast64_t = cpp_ulong; ///

alias intptr_t = cpp_long; ///
alias uintptr_t = cpp_ulong; ///
alias intmax_t = cpp_long; ///
alias uintmax_t = cpp_ulong; ///
}
else
{
alias int8_t = byte; ///
alias int16_t = short; ///
alias uint8_t = ubyte; ///
alias uint16_t = ushort; ///
alias int32_t = int; ///
alias uint32_t = uint; ///
alias int64_t = long; ///
alias uint64_t = ulong; ///

alias int_least8_t = byte; ///
alias uint_least8_t = ubyte; ///
alias int_least16_t = short; ///
alias uint_least16_t = ushort; ///
alias int_least32_t = int; ///
alias uint_least32_t = uint; ///
alias int_least64_t = long; ///
alias uint_least64_t = ulong; ///

alias int_fast8_t = byte; ///
alias uint_fast8_t = ubyte; ///
alias int_fast16_t = int; ///
alias uint_fast16_t = uint; ///
alias int_fast32_t = int; ///
alias uint_fast32_t = uint; ///
alias int_fast64_t = long; ///
alias uint_fast64_t = ulong; ///

alias intptr_t = int ; ///
alias uintptr_t = uint; ///
alias intmax_t = long; ///
alias uintmax_t = ulong; ///
}
}
else
{
///
alias intptr_t = int ;
///
alias uintptr_t = uint;
static assert(0);
}

///
alias intmax_t = long ;
///
alias uintmax_t = ulong;


///
enum int8_t INT8_MIN = int8_t.min;
Expand Down