verbose switches for the qcvm; makes -printfuns find the instruction-count of a function and print that too

This commit is contained in:
Wolfgang Bumiller 2012-12-26 10:23:45 +01:00
parent aee7bf0de0
commit 47f7611ec9

47
exec.c
View file

@ -832,7 +832,9 @@ static void usage()
" -disasm-func func disassemble and exit\n" " -disasm-func func disassemble and exit\n"
" -printdefs list the defs section\n" " -printdefs list the defs section\n"
" -printfields list the field section\n" " -printfields list the field section\n"
" -printfuns list functions information\n"); " -printfuns list functions information\n"
" -v be verbose\n"
" -vv be even more verbose\n");
printf("parameters:\n"); printf("parameters:\n");
printf(" -vector <V> pass a vector parameter to main()\n" printf(" -vector <V> pass a vector parameter to main()\n"
" -float <f> pass a float parameter to main()\n" " -float <f> pass a float parameter to main()\n"
@ -891,6 +893,7 @@ int main(int argc, char **argv)
bool noexec = false; bool noexec = false;
const char *progsfile = NULL; const char *progsfile = NULL;
const char **dis_list = NULL; const char **dis_list = NULL;
int opts_v = 0;
arg0 = argv[0]; arg0 = argv[0];
@ -907,8 +910,23 @@ int main(int argc, char **argv)
usage(); usage();
exit(0); exit(0);
} }
else if (!strcmp(argv[1], "-v") || else if (!strcmp(argv[1], "-v")) {
!strcmp(argv[1], "-version") || ++opts_v;
}
else if (!strncmp(argv[1], "-vv", 3)) {
const char *av = argv[1]+1;
for (; *av; ++av) {
if (*av == 'v')
++opts_v;
else {
usage();
exit(1);
}
}
--argc;
++argv;
}
else if (!strcmp(argv[1], "-version") ||
!strcmp(argv[1], "--version")) !strcmp(argv[1], "--version"))
{ {
version(); version();
@ -1105,10 +1123,33 @@ int main(int argc, char **argv)
for (a = 0; a < prog->functions[i].nargs; ++a) { for (a = 0; a < prog->functions[i].nargs; ++a) {
printf(" %i", prog->functions[i].argsize[a]); printf(" %i", prog->functions[i].argsize[a]);
} }
if (opts_v > 1) {
int32_t start = prog->functions[i].entry;
if (start < 0)
printf(") builtin %i\n", (int)-start);
else {
size_t funsize = 0;
prog_section_statement *st = prog->code + start;
for (;st->opcode != INSTR_DONE; ++st)
++funsize;
printf(") - %lu instructions", (unsigned long)funsize);
if (opts_v > 2) {
printf(" - locals: %i + %i\n",
prog->functions[i].firstlocal,
prog->functions[i].locals);
}
else
printf("\n");
}
}
else if (opts_v) {
printf(") locals: %i + %i\n", printf(") locals: %i + %i\n",
prog->functions[i].firstlocal, prog->functions[i].firstlocal,
prog->functions[i].locals); prog->functions[i].locals);
} }
else
printf(")\n");
}
} }
if (!noexec) { if (!noexec) {
for (i = 1; i < vec_size(prog->functions); ++i) { for (i = 1; i < vec_size(prog->functions); ++i) {