Skip to content

Commit df3fbf3

Browse files
skoppeGeod24
authored andcommitted
Add WebAssembly definitions to src/core/stdc
1 parent eb95406 commit df3fbf3

File tree

6 files changed

+281
-0
lines changed

6 files changed

+281
-0
lines changed

src/core/stdc/config.d

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,37 @@ else version (Posix)
163163
alias ulong cpp_ulonglong;
164164
}
165165
}
166+
else version (WASI)
167+
{
168+
static if ( (void*).sizeof > int.sizeof )
169+
{
170+
enum __c_longlong : long;
171+
enum __c_ulonglong : ulong;
172+
173+
alias long c_long;
174+
alias ulong c_ulong;
175+
176+
alias long cpp_long;
177+
alias ulong cpp_ulong;
178+
179+
alias __c_longlong cpp_longlong;
180+
alias __c_ulonglong cpp_ulonglong;
181+
}
182+
else
183+
{
184+
enum __c_long : int;
185+
enum __c_ulong : uint;
186+
187+
alias int c_long;
188+
alias uint c_ulong;
189+
190+
alias __c_long cpp_long;
191+
alias __c_ulong cpp_ulong;
192+
193+
alias long cpp_longlong;
194+
alias ulong cpp_ulonglong;
195+
}
196+
}
166197

167198
version (GNU)
168199
alias c_long_double = real;

src/core/stdc/errno.d

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2079,6 +2079,143 @@ else version (Haiku)
20792079
enum B_NO_TRANSLATOR = (B_TRANSLATION_ERROR_BASE + 1);
20802080
enum B_ILLEGAL_DATA = (B_TRANSLATION_ERROR_BASE + 2);
20812081
}
2082+
else version (WASI)
2083+
{
2084+
enum EPERM = 1;
2085+
enum ENOENT = 2;
2086+
enum ESRCH = 3;
2087+
enum EINTR = 4;
2088+
enum EIO = 5;
2089+
enum ENXIO = 6;
2090+
enum E2BIG = 7;
2091+
enum ENOEXEC = 8;
2092+
enum EBADF = 9;
2093+
enum ECHILD = 10;
2094+
enum EAGAIN = 11;
2095+
enum ENOMEM = 12;
2096+
enum EACCES = 13;
2097+
enum EFAULT = 14;
2098+
enum ENOTBLK = 15;
2099+
enum EBUSY = 16;
2100+
enum EEXIST = 17;
2101+
enum EXDEV = 18;
2102+
enum ENODEV = 19;
2103+
enum ENOTDIR = 20;
2104+
enum EISDIR = 21;
2105+
enum EINVAL = 22;
2106+
enum ENFILE = 23;
2107+
enum EMFILE = 24;
2108+
enum ENOTTY = 25;
2109+
enum ETXTBSY = 26;
2110+
enum EFBIG = 27;
2111+
enum ENOSPC = 28;
2112+
enum ESPIPE = 29;
2113+
enum EROFS = 30;
2114+
enum EMLINK = 31;
2115+
enum EPIPE = 32;
2116+
enum EDOM = 33;
2117+
enum ERANGE = 34;
2118+
enum EDEADLK = 35;
2119+
enum ENAMETOOLONG = 36;
2120+
enum ENOLCK = 37;
2121+
enum ENOSYS = 38;
2122+
enum ENOTEMPTY = 39;
2123+
enum ELOOP = 40;
2124+
enum EWOULDBLOCK = EAGAIN;
2125+
enum ENOMSG = 42;
2126+
enum EIDRM = 43;
2127+
enum ECHRNG = 44;
2128+
enum EL2NSYNC = 45;
2129+
enum EL3HLT = 46;
2130+
enum EL3RST = 47;
2131+
enum ELNRNG = 48;
2132+
enum EUNATCH = 49;
2133+
enum ENOCSI = 50;
2134+
enum EL2HLT = 51;
2135+
enum EBADE = 52;
2136+
enum EBADR = 53;
2137+
enum EXFULL = 54;
2138+
enum ENOANO = 55;
2139+
enum EBADRQC = 56;
2140+
enum EBADSLT = 57;
2141+
enum EDEADLOCK = EDEADLK;
2142+
enum EBFONT = 59;
2143+
enum ENOSTR = 60;
2144+
enum ENODATA = 61;
2145+
enum ETIME = 62;
2146+
enum ENOSR = 63;
2147+
enum ENONET = 64;
2148+
enum ENOPKG = 65;
2149+
enum EREMOTE = 66;
2150+
enum ENOLINK = 67;
2151+
enum EADV = 68;
2152+
enum ESRMNT = 69;
2153+
enum ECOMM = 70;
2154+
enum EPROTO = 71;
2155+
enum EMULTIHOP = 72;
2156+
enum EDOTDOT = 73;
2157+
enum EBADMSG = 74;
2158+
enum EOVERFLOW = 75;
2159+
enum ENOTUNIQ = 76;
2160+
enum EBADFD = 77;
2161+
enum EREMCHG = 78;
2162+
enum ELIBACC = 79;
2163+
enum ELIBBAD = 80;
2164+
enum ELIBSCN = 81;
2165+
enum ELIBMAX = 82;
2166+
enum ELIBEXEC = 83;
2167+
enum EILSEQ = 84;
2168+
enum ERESTART = 85;
2169+
enum ESTRPIPE = 86;
2170+
enum EUSERS = 87;
2171+
enum ENOTSOCK = 88;
2172+
enum EDESTADDRREQ = 89;
2173+
enum EMSGSIZE = 90;
2174+
enum EPROTOTYPE = 91;
2175+
enum ENOPROTOOPT = 92;
2176+
enum EPROTONOSUPPORT = 93;
2177+
enum ESOCKTNOSUPPORT = 94;
2178+
enum EOPNOTSUPP = 95;
2179+
enum ENOTSUP = EOPNOTSUPP;
2180+
enum EPFNOSUPPORT = 96;
2181+
enum EAFNOSUPPORT = 97;
2182+
enum EADDRINUSE = 98;
2183+
enum EADDRNOTAVAIL = 99;
2184+
enum ENETDOWN = 100;
2185+
enum ENETUNREACH = 101;
2186+
enum ENETRESET = 102;
2187+
enum ECONNABORTED = 103;
2188+
enum ECONNRESET = 104;
2189+
enum ENOBUFS = 105;
2190+
enum EISCONN = 106;
2191+
enum ENOTCONN = 107;
2192+
enum ESHUTDOWN = 108;
2193+
enum ETOOMANYREFS = 109;
2194+
enum ETIMEDOUT = 110;
2195+
enum ECONNREFUSED = 111;
2196+
enum EHOSTDOWN = 112;
2197+
enum EHOSTUNREACH = 113;
2198+
enum EALREADY = 114;
2199+
enum EINPROGRESS = 115;
2200+
enum ESTALE = 116;
2201+
enum EUCLEAN = 117;
2202+
enum ENOTNAM = 118;
2203+
enum ENAVAIL = 119;
2204+
enum EISNAM = 120;
2205+
enum EREMOTEIO = 121;
2206+
enum EDQUOT = 122;
2207+
enum ENOMEDIUM = 123;
2208+
enum EMEDIUMTYPE = 124;
2209+
enum ECANCELED = 125;
2210+
enum ENOKEY = 126;
2211+
enum EKEYEXPIRED = 127;
2212+
enum EKEYREVOKED = 128;
2213+
enum EKEYREJECTED = 129;
2214+
enum EOWNERDEAD = 130;
2215+
enum ENOTRECOVERABLE = 131;
2216+
enum ERFKILL = 132;
2217+
enum EHWPOISON = 133;
2218+
}
20822219
else
20832220
{
20842221
static assert(false, "Unsupported platform");

src/core/stdc/stddef.d

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,8 @@ else version (Posix)
3434
///
3535
alias dchar wchar_t;
3636
}
37+
else version (WASI)
38+
{
39+
///
40+
alias dchar wchar_t;
41+
}

src/core/stdc/stdint.d

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,41 @@ else version (Solaris)
377377
alias intmax_t = long; ///
378378
alias uintmax_t = ulong; ///
379379
}
380+
else version (WASI)
381+
{
382+
alias int8_t = byte; ///
383+
alias int16_t = short; ///
384+
alias uint8_t = ubyte; ///
385+
alias uint16_t = ushort; ///
386+
alias int32_t = int; ///
387+
alias uint32_t = uint; ///
388+
alias int64_t = long; ///
389+
alias uint64_t = ulong; ///
390+
391+
alias int_least8_t = byte; ///
392+
alias uint_least8_t = ubyte; ///
393+
alias int_least16_t = short; ///
394+
alias uint_least16_t = ushort; ///
395+
alias int_least32_t = int; ///
396+
alias uint_least32_t = uint; ///
397+
alias int_least64_t = long; ///
398+
alias uint_least64_t = ulong; ///
399+
400+
alias int_fast8_t = byte; ///
401+
alias uint_fast8_t = ubyte; ///
402+
alias int_fast16_t = ptrdiff_t; ///
403+
alias uint_fast16_t = size_t; ///
404+
alias int_fast32_t = ptrdiff_t; ///
405+
alias uint_fast32_t = size_t; ///
406+
407+
alias int_fast64_t = long; ///
408+
alias uint_fast64_t = ulong; ///
409+
410+
alias intptr_t = ptrdiff_t; ///
411+
alias uintptr_t = size_t; ///
412+
alias intmax_t = long; ///
413+
alias uintmax_t = ulong; ///
414+
}
380415
else
381416
{
382417
static assert(false, "Unsupported architecture.");

src/core/stdc/stdio.d

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,24 @@ else version (CRuntime_UClibc)
347347
L_tmpnam = 20
348348
}
349349
}
350+
else version (WASI)
351+
{
352+
enum
353+
{
354+
///
355+
BUFSIZ = 1024,
356+
///
357+
EOF = -1,
358+
///
359+
FOPEN_MAX = 1000,
360+
///
361+
FILENAME_MAX = 4096,
362+
///
363+
TMP_MAX = 10000,
364+
///
365+
L_tmpnam = 20
366+
}
367+
}
350368
else
351369
{
352370
static assert( false, "Unsupported platform" );
@@ -449,6 +467,20 @@ else version (CRuntime_Glibc)
449467
///
450468
alias shared(_IO_FILE) FILE;
451469
}
470+
else version (WASI)
471+
{
472+
union fpos_t
473+
{
474+
char[16] __opaque = 0;
475+
double __align;
476+
}
477+
struct _IO_FILE;
478+
479+
///
480+
alias _IO_FILE _iobuf; // needed for phobos
481+
///
482+
alias shared(_IO_FILE) FILE;
483+
}
452484
else version (CRuntime_Musl)
453485
{
454486
union fpos_t
@@ -1125,6 +1157,24 @@ else version (CRuntime_UClibc)
11251157
///
11261158
extern shared FILE* stderr;
11271159
}
1160+
else version (WASI)
1161+
{
1162+
// needs tail const
1163+
extern shared FILE* stdin;
1164+
///
1165+
extern shared FILE* stdout;
1166+
///
1167+
extern shared FILE* stderr;
1168+
enum
1169+
{
1170+
///
1171+
_IOFBF = 0,
1172+
///
1173+
_IOLBF = 1,
1174+
///
1175+
_IONBF = 2,
1176+
}
1177+
}
11281178
else
11291179
{
11301180
static assert( false, "Unsupported platform" );
@@ -1793,6 +1843,28 @@ else version (CRuntime_UClibc)
17931843
pragma(printf)
17941844
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
17951845
}
1846+
else version (WASI)
1847+
{
1848+
// No unsafe pointer manipulation.
1849+
@trusted
1850+
{
1851+
///
1852+
void rewind(FILE* stream);
1853+
///
1854+
pure void clearerr(FILE* stream);
1855+
///
1856+
pure int feof(FILE* stream);
1857+
///
1858+
pure int ferror(FILE* stream);
1859+
///
1860+
int fileno(FILE *);
1861+
}
1862+
1863+
///
1864+
int snprintf(scope char* s, size_t n, scope const char* format, ...);
1865+
///
1866+
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
1867+
}
17961868
else
17971869
{
17981870
static assert( false, "Unsupported platform" );

src/core/stdc/stdlib.d

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ else version (Solaris) enum RAND_MAX = 0x7fff;
9999
else version (CRuntime_Bionic) enum RAND_MAX = 0x7fffffff;
100100
else version (CRuntime_Musl) enum RAND_MAX = 0x7fffffff;
101101
else version (CRuntime_UClibc) enum RAND_MAX = 0x7fffffff;
102+
else version (WASI) enum RAND_MAX = 0x7fffffff;
102103
else static assert( false, "Unsupported platform" );
103104

104105
///

0 commit comments

Comments
 (0)