Skip to content

Commit

Permalink
Added module core.stdc.datamodel
Browse files Browse the repository at this point in the history
  • Loading branch information
denizzzka committed Jul 2, 2024
1 parent c6d0eee commit 624b019
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 71 deletions.
85 changes: 14 additions & 71 deletions druntime/src/core/stdc/config.d
Original file line number Diff line number Diff line change
Expand Up @@ -118,82 +118,25 @@ else version (TVOS)
else version (WatchOS)
version = Darwin;

version (Windows)
{
enum __c_long : int;
enum __c_ulong : uint;

alias int c_long;
alias uint c_ulong;

alias __c_long cpp_long;
alias __c_ulong cpp_ulong;
import core.stdc.datamodel;

alias long cpp_longlong;
alias ulong cpp_ulonglong;
}
else version (Posix)
static if (dataModel == "ILP32" || dataModel == "LLP64")
{
static if ( (void*).sizeof > int.sizeof )
{
enum __c_longlong : long;
enum __c_ulonglong : ulong;

alias long c_long;
alias ulong c_ulong;

alias long cpp_long;
alias ulong cpp_ulong;

alias __c_longlong cpp_longlong;
alias __c_ulonglong cpp_ulonglong;
}
else
{
enum __c_long : int;
enum __c_ulong : uint;

alias int c_long;
alias uint c_ulong;

alias __c_long cpp_long;
alias __c_ulong cpp_ulong;

alias long cpp_longlong;
alias ulong cpp_ulonglong;
}
alias c_long = int;
alias c_ulong = uint;
}
else version (WASI)
else static if (dataModel == "LP64")
{
static if ( (void*).sizeof > int.sizeof )
{
enum __c_longlong : long;
enum __c_ulonglong : ulong;

alias long c_long;
alias ulong c_ulong;

alias long cpp_long;
alias ulong cpp_ulong;

alias __c_longlong cpp_longlong;
alias __c_ulonglong cpp_ulonglong;
}
else
{
enum __c_long : int;
enum __c_ulong : uint;

alias int c_long;
alias uint c_ulong;

alias __c_long cpp_long;
alias __c_ulong cpp_ulong;

alias long cpp_longlong;
alias ulong cpp_ulonglong;
}
alias c_long = long;
alias c_ulong = ulong;
}
else
static assert(false, "Unsupported C data model: "~dataModel);

alias cpp_long = c_long;
alias cpp_ulong = c_long;
alias cpp_longlong = long;
alias cpp_ulonglong = ulong;

version (GNU)
alias c_long_double = real;
Expand Down
29 changes: 29 additions & 0 deletions druntime/src/core/stdc/datamodel.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* Defines C data model
*
* Copyright: Copyright Denis Feklushkin 2024.
* License: Distributed under the
* $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
* (See accompanying file LICENSE)
* Authors: Denis Feklushkin
* Source: $(DRUNTIMESRC core/stdc/datamodel.d)
* Standards: ISO/IEC 9899:1999 (E)
*/

module core.stdc.datamodel;

version (D_LP64)
{
version (Cygwin)
enum dataModel = "LP64";
else version (Windows)
enum dataModel = "LLP64";
else
enum dataModel = "LP64";
}
else // 32-bit pointers
{
enum dataModel = "ILP32";
}

static assert(__traits(compiles, dataModel !is null));

0 comments on commit 624b019

Please sign in to comment.