mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
88 lines
1.9 KiB
C
88 lines
1.9 KiB
C
// Copyright (c) 2021 Christoffer Lerno. All rights reserved.
|
|
// Use of this source code is governed by the MIT license
|
|
// a copy of which can be found in the LICENSE_STDLIB file.
|
|
module std::core::cinterop;
|
|
|
|
const C_INT_SIZE = $$C_INT_SIZE;
|
|
const C_LONG_SIZE = $$C_LONG_SIZE;
|
|
const C_SHORT_SIZE = $$C_SHORT_SIZE;
|
|
const C_LONG_LONG_SIZE = $$C_LONG_LONG_SIZE;
|
|
|
|
$assert (C_SHORT_SIZE < 32);
|
|
$assert (C_INT_SIZE < 128);
|
|
$assert (C_LONG_SIZE < 128);
|
|
$assert (C_LONG_LONG_SIZE <= 128);
|
|
$assert (C_SHORT_SIZE <= C_INT_SIZE);
|
|
$assert (C_INT_SIZE <= C_LONG_SIZE);
|
|
$assert (C_LONG_SIZE <= C_LONG_LONG_SIZE);
|
|
|
|
$switch ($$C_INT_SIZE):
|
|
$case 64:
|
|
define CInt = long;
|
|
define CUInt = ulong;
|
|
$case 32:
|
|
define CInt = int;
|
|
define CUInt = uint;
|
|
$case 16:
|
|
define CInt = short;
|
|
define CUInt = ushort;
|
|
$default:
|
|
$assert(false, "Invalid C int size");
|
|
$endswitch;
|
|
|
|
$switch ($$C_LONG_SIZE):
|
|
$case 64:
|
|
define CLong = long;
|
|
define CULong = ulong;
|
|
$case 32:
|
|
define CLong = int;
|
|
define CULong = uint;
|
|
$case 16:
|
|
define CLong = short;
|
|
define CULong = ushort;
|
|
$default:
|
|
$assert(false, "Invalid C long size");
|
|
$endswitch;
|
|
|
|
$switch ($$C_SHORT_SIZE):
|
|
$case 32:
|
|
define CShort = int;
|
|
define CUShort = uint;
|
|
$case 16:
|
|
define CShort = short;
|
|
define CUShort = ushort;
|
|
$case 8:
|
|
define CShort = ichar;
|
|
define CUShort = char;
|
|
$default:
|
|
$assert(false, "Invalid C short size");
|
|
$endswitch;
|
|
|
|
$switch ($$C_LONG_LONG_SIZE):
|
|
$case 128:
|
|
define CLongLong = int128;
|
|
define CULongLong = uint128;
|
|
$case 64:
|
|
define CLongLong = long;
|
|
define CULongLong = ulong;
|
|
$case 32:
|
|
define CLongLong = int;
|
|
define CULongLong = uint;
|
|
$case 16:
|
|
define CLongLong = short;
|
|
define CULongLong = ushort;
|
|
$default:
|
|
$assert(false, "Invalid C long long size");
|
|
$endswitch;
|
|
|
|
|
|
|
|
define CSChar = ichar;
|
|
define CUChar = char;
|
|
|
|
$if ($$C_CHAR_IS_SIGNED):
|
|
define CChar = ichar;
|
|
$else:
|
|
define CChar = char;
|
|
$endif;
|