Fix x64 int / pointer warnings.
diff --git a/libacc/acc.cpp b/libacc/acc.cpp
index cefe01d..04d45d5 100644
--- a/libacc/acc.cpp
+++ b/libacc/acc.cpp
@@ -34,6 +34,7 @@
#include <ctype.h>
#include <dlfcn.h>
#include <stdarg.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -44,14 +45,15 @@
#if defined(__arm__)
#define DEFAULT_ARM_CODEGEN
+#define PROVIDE_ARM_CODEGEN
#elif defined(__i386__)
#define DEFAULT_X86_CODEGEN
+#define PROVIDE_X86_CODEGEN
#elif defined(__x86_64__)
#define DEFAULT_X64_CODEGEN
+#define PROVIDE_X64_CODEGEN
#endif
-#define PROVIDE_X86_CODEGEN
-#define PROVIDE_ARM_CODEGEN
#ifdef PROVIDE_ARM_CODEGEN
#include "disassem.h"
@@ -88,7 +90,7 @@
}
int o4(int n) {
- int result = (int) ind;
+ intptr_t result = (intptr_t) ind;
* (int*) ind = n;
ind += 4;
return result;
@@ -105,12 +107,12 @@
return (void*) pProgramBase;
}
- int getSize() {
+ intptr_t getSize() {
return ind - pProgramBase;
}
- int getPC() {
- return (int) ind;
+ intptr_t getPC() {
+ return (intptr_t) ind;
}
};
@@ -201,15 +203,15 @@
pCodeBuf->ob(n);
}
- int o4(int data) {
+ intptr_t o4(int data) {
return pCodeBuf->o4(data);
}
- int getBase() {
- return (int) pCodeBuf->getBase();
+ intptr_t getBase() {
+ return (intptr_t) pCodeBuf->getBase();
}
- int getPC() {
+ intptr_t getPC() {
return pCodeBuf->getPC();
}
private:
@@ -875,7 +877,7 @@
dstk: define stack
dptr, dch: macro state
*/
- int tok, tokc, tokl, ch, vars, rsym, loc, glo, sym_stk, dstk,
+ intptr_t tok, tokc, tokl, ch, vars, rsym, loc, glo, sym_stk, dstk,
dptr, dch, last_id;
void* pSymbolBase;
void* pGlobalBase;
@@ -1011,7 +1013,7 @@
} else {
*(char *) dstk = TAG_TOK; /* no need to mark end of string (we
suppose data is initialized to zero by calloc) */
- tok = (int) (strstr((char*) sym_stk, (char*) (last_id - 1))
+ tok = (intptr_t) (strstr((char*) sym_stk, (char*) (last_id - 1))
- sym_stk);
*(char *) dstk = 0; /* mark real end of ident for dlsym() */
tok = tok * 8 + TOK_IDENT;
@@ -1113,7 +1115,7 @@
exit(1);
}
- void skip(int c) {
+ void skip(intptr_t c) {
if (tok != c) {
error("'%c' expected", c);
}
@@ -1121,8 +1123,8 @@
}
/* l is one if '=' parsing wanted (quick hack) */
- void unary(int l) {
- int n, t, a, c;
+ void unary(intptr_t l) {
+ intptr_t n, t, a, c;
t = 0;
n = 1; /* type of expression 0 = forward, 1 = value, other =
lvalue */
@@ -1187,7 +1189,7 @@
n = *(int *) t;
/* forward reference: try dlsym */
if (!n) {
- n = (int) dlsym(RTLD_DEFAULT, (char*) last_id);
+ n = (intptr_t) dlsym(RTLD_DEFAULT, (char*) last_id);
}
if ((tok == '=') & l) {
/* assignment */
@@ -1236,8 +1238,8 @@
}
}
- void sum(int l) {
- int t, n, a;
+ void sum(intptr_t l) {
+ intptr_t t, n, a;
t = 0;
if (l-- == 1)
unary(1);
@@ -1284,8 +1286,8 @@
return pGen->gtst(0, 0);
}
- void block(int l) {
- int a, n, t;
+ void block(intptr_t l) {
+ intptr_t a, n, t;
if (tok == TOK_IF) {
next();
@@ -1327,7 +1329,7 @@
}
}
skip(')');
- block((int) &a);
+ block((intptr_t) &a);
pGen->gjmp(n - codeBuf.getPC() - pGen->jumpOffset()); /* jmp */
pGen->gsym(a);
} else if (tok == '{') {
@@ -1353,8 +1355,8 @@
}
/* 'l' is true if local declarations */
- void decl(int l) {
- int a;
+ void decl(bool l) {
+ intptr_t a;
while ((tok == TOK_INT) | ((tok != -1) & (!l))) {
if (tok == TOK_INT) {
@@ -1445,20 +1447,18 @@
pGen = 0;
if (architecture != NULL) {
- if (strcmp(architecture, "arm") == 0) {
#ifdef PROVIDE_ARM_CODEGEN
+ if (! pGen && strcmp(architecture, "arm") == 0) {
pGen = new ARMCodeGenerator();
-#else
- fprintf(stderr, "Unsupported architecture %s", architecture);
+ }
#endif
- } else if (strcmp(architecture, "x86") == 0) {
#ifdef PROVIDE_X86_CODEGEN
+ if (! pGen && strcmp(architecture, "x86") == 0) {
pGen = new X86CodeGenerator();
-#else
- fprintf(stderr, "Unsupported architecture %s", architecture);
+ }
#endif
- } else {
- fprintf(stderr, "Unknown architecture %s", architecture);
+ if (!pGen ) {
+ fprintf(stderr, "Unknown architecture %s\n", architecture);
}
}
@@ -1495,16 +1495,19 @@
clear();
codeBuf.init(ALLOC_SIZE);
setArchitecture(args.architecture);
+ if (!pGen) {
+ return -1;
+ }
pGen->init(&codeBuf);
file = in;
- sym_stk = (int) calloc(1, ALLOC_SIZE);
- dstk = (int) strcpy((char*) sym_stk,
+ sym_stk = (intptr_t) calloc(1, ALLOC_SIZE);
+ dstk = (intptr_t) strcpy((char*) sym_stk,
" int if else while break return for define main ")
+ TOK_STR_SIZE;
pGlobalBase = calloc(1, ALLOC_SIZE);
- glo = (int) pGlobalBase;
+ glo = (intptr_t) pGlobalBase;
pVarsBase = calloc(1, ALLOC_SIZE);
- vars = (int) pVarsBase;
+ vars = (intptr_t) pVarsBase;
inp();
next();
decl(0);
@@ -1544,8 +1547,11 @@
2, 2 /* ~ ! */
};
+#ifdef PROVIDE_ARM_CODEGEN
FILE* Compiler::ARMCodeGenerator::disasmOut;
+#endif
+#ifdef PROVIDE_X86_CODEGEN
const int Compiler::X86CodeGenerator::operatorHelper[] = {
0x1, // ++
0xff, // --
@@ -1570,6 +1576,7 @@
0xd0f7, // ~
0x4 // !
};
+#endif
} // namespace acc