[llvm-commits] CVS: llvm/tools/lli/Interpreter/ExternalFunctions.cpp
Chris Lattner
lattner at cs.uiuc.edu
Sun Jan 12 19:00:01 PST 2003
Changes in directory llvm/tools/lli/Interpreter:
ExternalFunctions.cpp updated: 1.41 -> 1.42
---
Log message:
* Wrap at 80 columns
* Fix a ton of warnings
* Implement puts
---
Diffs of the changes:
Index: llvm/tools/lli/Interpreter/ExternalFunctions.cpp
diff -u llvm/tools/lli/Interpreter/ExternalFunctions.cpp:1.41 llvm/tools/lli/Interpreter/ExternalFunctions.cpp:1.42
--- llvm/tools/lli/Interpreter/ExternalFunctions.cpp:1.41 Mon Dec 23 17:59:41 2002
+++ llvm/tools/lli/Interpreter/ExternalFunctions.cpp Sun Jan 12 18:59:47 2003
@@ -118,9 +118,10 @@
extern "C" { // Don't add C++ manglings to llvm mangling :)
// Implement void printstr([ubyte {x N}] *)
-GenericValue lle_VP_printstr(FunctionType *M, const vector<GenericValue> &ArgVal){
+GenericValue lle_VP_printstr(FunctionType *M,
+ const vector<GenericValue> &ArgVal){
assert(ArgVal.size() == 1 && "printstr only takes one argument!");
- cout << (char*)ArgVal[0].PointerVal;
+ cout << (char*)GVTOP(ArgVal[0]);
return GenericValue();
}
@@ -133,7 +134,8 @@
}
// Implement 'void printVal(X)' for every type...
-GenericValue lle_X_printVal(FunctionType *M, const vector<GenericValue> &ArgVal) {
+GenericValue lle_X_printVal(FunctionType *M,
+ const vector<GenericValue> &ArgVal) {
assert(ArgVal.size() == 1 && "generic print only takes one argument!");
// Specialize print([ubyte {x N} ] *) and print(sbyte *)
@@ -150,7 +152,8 @@
// Implement 'void printString(X)'
// Argument must be [ubyte {x N} ] * or sbyte *
-GenericValue lle_X_printString(FunctionType *M, const vector<GenericValue> &ArgVal) {
+GenericValue lle_X_printString(FunctionType *M,
+ const vector<GenericValue> &ArgVal) {
assert(ArgVal.size() == 1 && "generic print only takes one argument!");
return lle_VP_printstr(M, ArgVal);
}
@@ -219,15 +222,13 @@
// void *malloc(uint)
GenericValue lle_X_malloc(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 1 && "Malloc expects one argument!");
- GenericValue GV;
- GV.PointerVal = (PointerTy)malloc(Args[0].UIntVal);
- return GV;
+ return PTOGV(malloc(Args[0].UIntVal));
}
// void free(void *)
GenericValue lle_X_free(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 1);
- free((void*)Args[0].PointerVal);
+ free(GVTOP(Args[0]));
return GenericValue();
}
@@ -235,7 +236,7 @@
GenericValue lle_X_atoi(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 1);
GenericValue GV;
- GV.IntVal = atoi((char*)Args[0].PointerVal);
+ GV.IntVal = atoi((char*)GVTOP(Args[0]));
return GV;
}
@@ -317,11 +318,19 @@
return GenericValue();
}
+// int puts(const char*)
+GenericValue lle_X_puts(FunctionType *M, const vector<GenericValue> &Args) {
+ assert(Args.size() == 1);
+ GenericValue GV;
+ GV.IntVal = puts((char*)GVTOP(Args[0]));
+ return GV;
+}
+
// int sprintf(sbyte *, sbyte *, ...) - a very rough implementation to make
// output useful.
GenericValue lle_X_sprintf(FunctionType *M, const vector<GenericValue> &Args) {
- char *OutputBuffer = (char *)Args[0].PointerVal;
- const char *FmtStr = (const char *)Args[1].PointerVal;
+ char *OutputBuffer = (char *)GVTOP(Args[0]);
+ const char *FmtStr = (const char *)GVTOP(Args[1]);
unsigned ArgNo = 2;
// printf should return # chars printed. This is completely incorrect, but
@@ -376,9 +385,9 @@
case 'e': case 'E': case 'g': case 'G': case 'f':
sprintf(Buffer, FmtBuf, Args[ArgNo++].DoubleVal); break;
case 'p':
- sprintf(Buffer, FmtBuf, (void*)Args[ArgNo++].PointerVal); break;
+ sprintf(Buffer, FmtBuf, (void*)GVTOP(Args[ArgNo++])); break;
case 's':
- sprintf(Buffer, FmtBuf, (char*)Args[ArgNo++].PointerVal); break;
+ sprintf(Buffer, FmtBuf, (char*)GVTOP(Args[ArgNo++])); break;
default: cout << "<unknown printf code '" << *FmtStr << "'!>";
ArgNo++; break;
}
@@ -394,10 +403,9 @@
GenericValue lle_X_printf(FunctionType *M, const vector<GenericValue> &Args) {
char Buffer[10000];
vector<GenericValue> NewArgs;
- GenericValue GV; GV.PointerVal = (PointerTy)Buffer;
- NewArgs.push_back(GV);
+ NewArgs.push_back(PTOGV(Buffer));
NewArgs.insert(NewArgs.end(), Args.begin(), Args.end());
- GV = lle_X_sprintf(M, NewArgs);
+ GenericValue GV = lle_X_sprintf(M, NewArgs);
cout << Buffer;
return GV;
}
@@ -408,7 +416,7 @@
const char *Args[10];
for (unsigned i = 0; i < args.size(); ++i)
- Args[i] = (const char*)args[i].PointerVal;
+ Args[i] = (const char*)GVTOP(args[i]);
GenericValue GV;
GV.IntVal = sscanf(Args[0], Args[1], Args[2], Args[3], Args[4],
@@ -434,7 +442,7 @@
// have pointers that are relative to the __iob array. If this is the case,
// change the FILE into the REAL stdio stream.
//
-static FILE *getFILE(PointerTy Ptr) {
+static FILE *getFILE(void *Ptr) {
static Module *LastMod = 0;
static PointerTy IOBBase = 0;
static unsigned FILESize;
@@ -477,7 +485,7 @@
// Check to see if this is a reference to __iob...
if (IOBBase) {
- unsigned FDNum = (Ptr-IOBBase)/FILESize;
+ unsigned FDNum = ((unsigned long)Ptr-IOBBase)/FILESize;
if (FDNum == 0)
return stdin;
else if (FDNum == 1)
@@ -493,19 +501,15 @@
// FILE *fopen(const char *filename, const char *mode);
GenericValue lle_X_fopen(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 2);
- GenericValue GV;
-
- GV.PointerVal = (PointerTy)fopen((const char *)Args[0].PointerVal,
- (const char *)Args[1].PointerVal);
- return GV;
+ return PTOGV(fopen((const char *)GVTOP(Args[0]),
+ (const char *)GVTOP(Args[1])));
}
// int fclose(FILE *F);
GenericValue lle_X_fclose(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 1);
GenericValue GV;
-
- GV.IntVal = fclose(getFILE(Args[0].PointerVal));
+ GV.IntVal = fclose(getFILE(GVTOP(Args[0])));
return GV;
}
@@ -514,7 +518,7 @@
assert(Args.size() == 1);
GenericValue GV;
- GV.IntVal = feof(getFILE(Args[0].PointerVal));
+ GV.IntVal = feof(getFILE(GVTOP(Args[0])));
return GV;
}
@@ -523,8 +527,8 @@
assert(Args.size() == 4);
GenericValue GV;
- GV.UIntVal = fread((void*)Args[0].PointerVal, Args[1].UIntVal,
- Args[2].UIntVal, getFILE(Args[3].PointerVal));
+ GV.UIntVal = fread((void*)GVTOP(Args[0]), Args[1].UIntVal,
+ Args[2].UIntVal, getFILE(GVTOP(Args[3])));
return GV;
}
@@ -533,36 +537,30 @@
assert(Args.size() == 4);
GenericValue GV;
- GV.UIntVal = fwrite((void*)Args[0].PointerVal, Args[1].UIntVal,
- Args[2].UIntVal, getFILE(Args[3].PointerVal));
+ GV.UIntVal = fwrite((void*)GVTOP(Args[0]), Args[1].UIntVal,
+ Args[2].UIntVal, getFILE(GVTOP(Args[3])));
return GV;
}
// char *fgets(char *s, int n, FILE *stream);
GenericValue lle_X_fgets(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 3);
- GenericValue GV;
-
- GV.PointerVal = (PointerTy)fgets((char*)Args[0].PointerVal, Args[1].IntVal,
- getFILE(Args[2].PointerVal));
- return GV;
+ return GVTOP(fgets((char*)GVTOP(Args[0]), Args[1].IntVal,
+ getFILE(GVTOP(Args[2]))));
}
// FILE *freopen(const char *path, const char *mode, FILE *stream);
GenericValue lle_X_freopen(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 3);
- GenericValue GV;
- GV.PointerVal = (PointerTy)freopen((char*)Args[0].PointerVal,
- (char*)Args[1].PointerVal,
- getFILE(Args[2].PointerVal));
- return GV;
+ return PTOGV(freopen((char*)GVTOP(Args[0]), (char*)GVTOP(Args[1]),
+ getFILE(GVTOP(Args[2]))));
}
// int fflush(FILE *stream);
GenericValue lle_X_fflush(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 1);
GenericValue GV;
- GV.IntVal = fflush(getFILE(Args[0].PointerVal));
+ GV.IntVal = fflush(getFILE(GVTOP(Args[0])));
return GV;
}
@@ -570,7 +568,7 @@
GenericValue lle_X_getc(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 1);
GenericValue GV;
- GV.IntVal = getc(getFILE(Args[0].PointerVal));
+ GV.IntVal = getc(getFILE(GVTOP(Args[0])));
return GV;
}
@@ -578,7 +576,7 @@
GenericValue lle_X_fputc(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 2);
GenericValue GV;
- GV.IntVal = fputc(Args[0].IntVal, getFILE(Args[1].PointerVal));
+ GV.IntVal = fputc(Args[0].IntVal, getFILE(GVTOP(Args[1])));
return GV;
}
@@ -586,7 +584,7 @@
GenericValue lle_X_ungetc(FunctionType *M, const vector<GenericValue> &Args) {
assert(Args.size() == 2);
GenericValue GV;
- GV.IntVal = ungetc(Args[0].IntVal, getFILE(Args[1].PointerVal));
+ GV.IntVal = ungetc(Args[0].IntVal, getFILE(GVTOP(Args[1])));
return GV;
}
@@ -596,12 +594,11 @@
assert(Args.size() > 2);
char Buffer[10000];
vector<GenericValue> NewArgs;
- GenericValue GV; GV.PointerVal = (PointerTy)Buffer;
- NewArgs.push_back(GV);
+ NewArgs.push_back(PTOGV(Buffer));
NewArgs.insert(NewArgs.end(), Args.begin()+1, Args.end());
- GV = lle_X_sprintf(M, NewArgs);
+ GenericValue GV = lle_X_sprintf(M, NewArgs);
- fputs(Buffer, getFILE(Args[0].PointerVal));
+ fputs(Buffer, getFILE(GVTOP(Args[0])));
return GV;
}
@@ -643,6 +640,7 @@
FuncNames["lle_X_srand48"] = lle_X_srand48;
FuncNames["lle_X_lrand48"] = lle_X_lrand48;
FuncNames["lle_X_sqrt"] = lle_X_sqrt;
+ FuncNames["lle_X_puts"] = lle_X_puts;
FuncNames["lle_X_printf"] = lle_X_printf;
FuncNames["lle_X_sprintf"] = lle_X_sprintf;
FuncNames["lle_X_sscanf"] = lle_X_sscanf;
More information about the llvm-commits
mailing list