diff options
author | Araq <rumpf_a@web.de> | 2012-07-15 10:00:34 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-07-15 10:00:34 +0200 |
commit | 1279bd285507524d32bc7bfe6c2d4c706d1157a9 (patch) | |
tree | 9d193e884517740f6e658472e8d26bf10b332844 | |
parent | 96be38e79419d646190fa16122804edef7b51f8a (diff) | |
download | Nim-1279bd285507524d32bc7bfe6c2d4c706d1157a9.tar.gz |
c2nim and system.nim now agree on a C type mapping
-rwxr-xr-x | compiler/c2nim/cparse.nim | 21 | ||||
-rwxr-xr-x | compiler/c2nim/tests/systest.c | 4 | ||||
-rw-r--r-- | examples/lazarus/nimlaz.rc | 6 | ||||
-rwxr-xr-x | lib/system.nim | 11 |
4 files changed, 34 insertions, 8 deletions
diff --git a/compiler/c2nim/cparse.nim b/compiler/c2nim/cparse.nim index 67ab6cf26..5715e1089 100755 --- a/compiler/c2nim/cparse.nim +++ b/compiler/c2nim/cparse.nim @@ -434,14 +434,21 @@ proc typeAtom(p: var TParser): PNode = getTok(p, nil) result = skipIdent(p) elif isIntType(p.tok.s): - var x = "c" & p.tok.s - getTok(p, nil) - while p.tok.xkind == pxSymbol and - (isIntType(p.tok.s) or p.tok.s == "char"): - add(x, p.tok.s) + var x = "" + #getTok(p, nil) + var isUnsigned = false + while p.tok.xkind == pxSymbol and (isIntType(p.tok.s) or p.tok.s == "char"): + if p.tok.s == "unsigned": + isUnsigned = true + elif p.tok.s == "signed" or p.tok.s == "int": + nil + else: + add(x, p.tok.s) getTok(p, nil) - result = mangledIdent(x, p) - else: + if x.len == 0: x = "int" + let xx = if isUnsigned: "cu" & x else: "c" & x + result = mangledIdent(xx, p) + else: result = mangledIdent(p.tok.s, p) getTok(p, result) diff --git a/compiler/c2nim/tests/systest.c b/compiler/c2nim/tests/systest.c index 389fdfdc2..241526e07 100755 --- a/compiler/c2nim/tests/systest.c +++ b/compiler/c2nim/tests/systest.c @@ -15,6 +15,8 @@ typedef const char* (*callback2)(int rc, long L, const char* buffer); int aw_callback_set (AW_CALLBACK c, callback_t callback ); int aw_instance_callback_set (AW_CALLBACK c, callback_t callback); +unsigned long int wawa; + #define AW_BUILD 85 // AW 5.0 // Limits #define AW_MAX_AVCHANGE_PER_SECOND 10 @@ -34,7 +36,7 @@ int aw_instance_callback_set (AW_CALLBACK c, callback_t callback); #mangle "'XML_'{.*}" "$1" #private "'XML_ParserStruct'" -#mangle cunsignedint cint +#mangle cuint cint unsigned int uiVar; diff --git a/examples/lazarus/nimlaz.rc b/examples/lazarus/nimlaz.rc new file mode 100644 index 000000000..d66bb817c --- /dev/null +++ b/examples/lazarus/nimlaz.rc @@ -0,0 +1,6 @@ +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 +#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "nimlaz.manifest" diff --git a/lib/system.nim b/lib/system.nim index 5e223eb10..6cb99b6cf 100755 --- a/lib/system.nim +++ b/lib/system.nim @@ -946,6 +946,17 @@ type # these work for most platforms: ## This is the same as the type ``long double`` in *C*. ## This C type is not supported by Nimrod's code generator + cuchar* {.importc: "unsigned char", nodecl.} = char + ## This is the same as the type ``unsigned char`` in *C*. + cushort* {.importc: "unsigned short", nodecl.} = uint16 + ## This is the same as the type ``unsigned short`` in *C*. + cuint* {.importc: "int", nodecl.} = uint32 + ## This is the same as the type ``unsigned int`` in *C*. + culong* {.importc: "unsigned long", nodecl.} = uint + ## This is the same as the type ``unsigned long`` in *C*. + culonglong* {.importc: "unsigned long long", nodecl.} = uint64 + ## This is the same as the type ``unsigned long long`` in *C*. + cstringArray* {.importc: "char**", nodecl.} = ptr array [0..50_000, cstring] ## This is binary compatible to the type ``char**`` in *C*. The array's ## high value is large enough to disable bounds checking in practice. |