@@ -239,22 +239,22 @@ fn void Generator.emitEnumType(Generator* gen, string_buffer.Buf* out, Decl* d)
239239
240240const char*[BuiltinKind] builtinType_cnames = {
241241 "char",
242- "int8_t ",
243- "int16_t ",
244- "int32_t ",
245- "int64_t ",
246- "uint8_t ",
247- "uint16_t ",
248- "uint32_t ",
249- "uint64_t ",
242+ "i8 ",
243+ "i16 ",
244+ "int ",
245+ "i64 ",
246+ "u8 ",
247+ "u16 ",
248+ "u32 ",
249+ "u64 ",
250250 "float",
251251 "double",
252252 "ssize_t",
253253 "size_t",
254254 "bool",
255255}
256256
257- fn void Generator.emitTypePre(Generator* gen, string_buffer.Buf* out, QualType qt) {
257+ fn void Generator.emitTypePre(Generator* gen, string_buffer.Buf* out, QualType qt, bool bitfield = false ) {
258258 Decl* decl = nil;
259259
260260 if (qt.isConst()) out.add("const ");
@@ -263,6 +263,8 @@ fn void Generator.emitTypePre(Generator* gen, string_buffer.Buf* out, QualType q
263263 switch (qt.getKind()) {
264264 case Builtin:
265265 BuiltinType* bt = (BuiltinType*)qt.getType();
266+ // special case to ensure signed behavior
267+ if (bitfield && bt.getKind() == Int32) out.add("signed ");
266268 out.add(builtinType_cnames[bt.getKind()]);
267269 return;
268270 case Pointer:
@@ -385,13 +387,14 @@ fn void Generator.emitStructMember(Generator* gen, string_buffer.Buf* out, Decl*
385387 }
386388 gen.genTypeIfNeeded(qt, true);
387389
388- gen.emitTypePre(out, qt);
390+ VarDecl* vd = (VarDecl*)d;
391+ Expr* bitfield = vd.getBitfield();
392+
393+ gen.emitTypePre(out, qt, bitfield != nil);
389394 out.space();
390395 if (d.getNameIdx()) out.add(d.getName());
391396 gen.emitTypePost(out, qt);
392397
393- VarDecl* vd = (VarDecl*)d;
394- Expr* bitfield = vd.getBitfield();
395398 if (bitfield) {
396399 out.add(" : ");
397400 // C does not allow using constants here, so generate CTV Value
@@ -861,7 +864,7 @@ fn void Generator.gen_func_proto(Generator* gen, FunctionDecl* fd, string_buffer
861864 }
862865
863866 if (d == gen.mainFunc) {
864- out.add("int32_t main");
867+ out.add("int main");
865868 } else {
866869 // 2 options:
867870 // - external .c2i files
@@ -1435,12 +1438,11 @@ const char[] C_types =
14351438 #define true 1
14361439 #define false 0
14371440 #endif
1438- typedef signed char int8_t;
1439- typedef unsigned char uint8_t;
1440- typedef signed short int16_t;
1441- typedef unsigned short uint16_t;
1442- typedef signed int int32_t;
1443- typedef unsigned int uint32_t;
1441+ typedef signed char i8;
1442+ typedef unsigned char u8;
1443+ typedef signed short i16;
1444+ typedef unsigned short u16;
1445+ typedef unsigned int u32;
14441446 ```;
14451447const char[] C_defines =
14461448 ```c
@@ -1493,24 +1495,24 @@ fn void Generator.emit_external_header(Generator* gen, bool enable_asserts, cons
14931495 if (ast.getWordSize() == 4) {
14941496 // ILP32 (32-bit int, long and pointers)
14951497 out.add(```c
1496- typedef signed long long int64_t ;
1497- typedef unsigned long long uint64_t ;
1498+ typedef signed long long i64 ;
1499+ typedef unsigned long long u64 ;
14981500 typedef signed long ssize_t;
14991501 typedef unsigned long size_t;
15001502 ```);
15011503 } else {
15021504 // LP64 (64-bit long and pointers)
15031505 out.add(```c
1504- typedef signed long int64_t ;
1505- typedef unsigned long uint64_t ;
1506+ typedef signed long i64 ;
1507+ typedef unsigned long u64 ;
15061508 typedef signed long ssize_t;
15071509 typedef unsigned long size_t;
15081510 ```);
15091511#if 0
15101512 // TODO support LLP64 (64-bit long long and pointers, but 32-bit long)
15111513 out.add(```c
1512- typedef signed long long int64_t ;
1513- typedef unsigned long long uint64_t ;
1514+ typedef signed long long i64 ;
1515+ typedef unsigned long long u64 ;
15141516 typedef signed long long ssize_t;
15151517 typedef unsigned long long size_t;
15161518 ```);
0 commit comments