notaz.gp2x.de
/
ia32rtools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
yet more stuff for storm
[ia32rtools.git]
/
tools
/
translate.c
diff --git
a/tools/translate.c
b/tools/translate.c
index
7493761
..
f5674ca
100644
(file)
--- a/
tools/translate.c
+++ b/
tools/translate.c
@@
-2857,6
+2857,11
@@
static void gen_func(FILE *fout, FILE *fhdr, const char *funcn, int opcnt)
ferr(ops, "nested fptr\n");
fprintf(fout, "%s", pp->arg[j].type.name);
}
ferr(ops, "nested fptr\n");
fprintf(fout, "%s", pp->arg[j].type.name);
}
+ if (pp->is_vararg) {
+ if (j > 0)
+ fprintf(fout, ", ");
+ fprintf(fout, "...");
+ }
fprintf(fout, ")");
}
else {
fprintf(fout, ")");
}
else {
@@
-3428,7
+3433,8
@@
tailcall:
}
}
}
}
- if (pp->is_fptr) {
+ // declare indirect funcs
+ if (pp->is_fptr && !(pp->name[0] != 0 && pp->is_arg)) {
if (pp->name[0] != 0) {
memmove(pp->name + 2, pp->name, strlen(pp->name) + 1);
memcpy(pp->name, "i_", 2);
if (pp->name[0] != 0) {
memmove(pp->name + 2, pp->name, strlen(pp->name) + 1);
memcpy(pp->name, "i_", 2);
@@
-4208,7
+4214,7
@@
tailcall:
pp = po->datap;
my_assert_not(pp, NULL);
pp = po->datap;
my_assert_not(pp, NULL);
- if (pp->is_fptr)
+ if (pp->is_fptr
&& !pp->is_arg
)
fprintf(fout, " %s = %s;\n", pp->name,
out_src_opr(buf1, sizeof(buf1), po, &po->operand[0],
"(void *)", 0));
fprintf(fout, " %s = %s;\n", pp->name,
out_src_opr(buf1, sizeof(buf1), po, &po->operand[0],
"(void *)", 0));