mirror of
https://github.com/justinian/jsix.git
synced 2025-12-09 16:04:32 -08:00
j6libc.py was initially made for libc to generate stdint.h, but it gained a few things that aren't libc-specific. Move it to a package and split the int-types-specific code into codegen.int_types.
69 lines
2.8 KiB
C
69 lines
2.8 KiB
C
#pragma once
|
|
/** \file stdint.h
|
|
* Fixed-width integer types
|
|
*
|
|
* This file is part of the C standard library for the jsix operating
|
|
* system.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
/**[[[cog code generation
|
|
import cog
|
|
from codegen.int_types import definition, int_widths, int_mods
|
|
|
|
for width in int_widths:
|
|
definition("typedef", f"__INT{width}_TYPE__", f"int{width}_t;")
|
|
definition("#define", f"INT{width}_WIDTH", f"{width}")
|
|
definition("#define", f"INT{width}_MAX", f"__INT{width}_MAX__")
|
|
definition("#define", f"INT{width}_MIN", f"((-__INT{width}_MAX__) - 1)")
|
|
definition("#define", f"INT{width}_C( x )", f"x ## __INT{width}_C_SUFFIX__")
|
|
|
|
cog.outl()
|
|
definition("typedef", f"__UINT{width}_TYPE__", f"uint{width}_t;")
|
|
definition("#define", f"UINT{width}_WIDTH", f"{width}")
|
|
definition("#define", f"UINT{width}_MAX", f"__UINT{width}_MAX__")
|
|
definition("#define", f"UINT{width}_C( x )", f"x ## __UINT{width}_C_SUFFIX__")
|
|
|
|
for mod in int_mods:
|
|
cog.outl()
|
|
definition("typedef", f"__INT_{mod.upper()}{width}_TYPE__", f"int_{mod}{width}_t;")
|
|
definition("typedef", f"__UINT_{mod.upper()}{width}_TYPE__", f"uint_{mod}{width}_t;")
|
|
definition("#define", f"INT_{mod.upper()}{width}_WIDTH", f"{width}")
|
|
definition("#define", f"INT_{mod.upper()}{width}_MAX", f"__INT_{mod.upper()}{width}_MAX__")
|
|
definition("#define", f"INT_{mod.upper()}{width}_MIN", f"((-__INT_{mod.upper()}{width}_MAX) - 1)")
|
|
|
|
cog.outl()
|
|
definition("typedef", f"__UINT_{mod.upper()}{width}_TYPE__", f"uint_least{width}_t;")
|
|
definition("#define", f"UINT_{mod.upper()}{width}_WIDTH", f"{width}")
|
|
definition("#define", f"UINT_{mod.upper()}{width}_MAX", f"__UINT_{mod.upper()}{width}_MAX__")
|
|
|
|
cog.outl()
|
|
|
|
]]]*/
|
|
/*[[[end]]]*/
|
|
|
|
typedef __INTMAX_TYPE__ intmax_t;
|
|
#define INTMAX_WIDTH __INTMAX_WIDTH__
|
|
#define INTMAX_MAX __INTMAX_MAX__
|
|
#define INTMAX_MIN ((-__INTMAX_MAX__) - 1)
|
|
#define INTMAX_C( x ) x ## __INTMAX_C_SUFFIX__
|
|
|
|
typedef __UINTMAX_TYPE__ uintmax_t;
|
|
#define UINTMAX_WIDTH __UINTMAX_WIDTH__
|
|
#define UINTMAX_MAX __UINTMAX_MAX__
|
|
#define UINTMAX_C( x ) x ## __UINTMAX_C_SUFFIX__
|
|
|
|
typedef __INTPTR_TYPE__ intptr_t;
|
|
#define INTPTR_WIDTH __INTPTR_WIDTH__
|
|
#define INTPTR_MAX __INTPTR_MAX__
|
|
#define INTPTR_MIN ((-__INTPTR_MAX__) - 1)
|
|
|
|
typedef __UINTPTR_TYPE__ uintptr_t;
|
|
#define UINTPTR_WIDTH __UINTPTR_WIDTH__
|
|
#define UINTPTR_MAX __UINTPTR_MAX__
|
|
|
|
/* vim: set ft=c: */
|