more reliable NI/NU definitions

This commit is contained in:
Araq 2012-07-28 17:28:36 +02:00
commit 58a66a0d70
2 changed files with 21 additions and 14 deletions

View file

@ -800,20 +800,9 @@ proc genVarPrototype(m: BModule, sym: PSym) =
if sfExportc in sym.flags and generatedHeader != nil: if sfExportc in sym.flags and generatedHeader != nil:
genVarPrototypeAux(generatedHeader, sym) genVarPrototypeAux(generatedHeader, sym)
proc addIntTypes(result: var PRope) = proc addIntTypes(result: var PRope) {.inline.} =
case platform.CPU[targetCPU].intSize appf(result, "#define NIM_INTBITS $1", [
of 16: platform.CPU[targetCPU].intSize.toRope])
appff(result,
"$ntypedef short int NI;$n" & "typedef unsigned short int NU;$n",
"$n%NI = type i16$n", [])
of 32:
appff(result,
"$ntypedef long int NI;$n" & "typedef unsigned long int NU;$n",
"$n%NI = type i32$n", [])
of 64:
appff(result, "$ntypedef long long int NI;$n" &
"typedef unsigned long long int NU;$n", "$n%NI = type i64$n", [])
else: nil
proc getCopyright(cfilenoext: string): PRope = proc getCopyright(cfilenoext: string): PRope =
if optCompileOnly in gGlobalOptions: if optCompileOnly in gGlobalOptions:

View file

@ -337,6 +337,24 @@ typedef long long int NI64;
typedef unsigned int NU32; typedef unsigned int NU32;
#endif #endif
#ifdef NIM_INTBITS
# if NIM_INTBITS == 64
typedef NI64 NI;
typedef NU64 NU;
# elif NIM_INTBITS == 32
typedef NI32 NI;
typedef NU32 NU;
# elif NIM_INTBITS == 16
typedef NI16 NI;
typedef NU16 NU;
# elif NIM_INTBITS == 8
typedef NI8 NI;
typedef NU8 NU;
# else
# error "invalid bit width for int"
# endif
#endif
extern NI nim_program_result; extern NI nim_program_result;
typedef float NF32; typedef float NF32;