- tmpname = opr_name(&ops[i], 0);
- ret = proto_parse(fhdr, tmpname, pp);
- if (ret)
- ferr(po, "proto_parse failed for '%s'\n", tmpname);
+ tmpname = opr_name(po, 0);
+ if (po->operand[0].type != OPT_LABEL)
+ {
+ ret = scan_for_esp_adjust(i + 1, opcnt, &j);
+ if (ret < 0)
+ ferr(po, "non-__cdecl indirect call unhandled yet\n");
+ j /= 4;
+ if (j > ARRAY_SIZE(pp->arg))
+ ferr(po, "esp adjust too large?\n");
+ pp->ret_type = "int";
+ pp->argc = pp->argc_stack = j;
+ for (arg = 0; arg < pp->argc; arg++)
+ pp->arg[arg].type = "int";
+ }
+ else {
+ ret = proto_parse(fhdr, tmpname, pp);
+ if (ret)
+ ferr(po, "proto_parse failed for call '%s'\n", tmpname);
+ }
+
+ ret = scan_for_esp_adjust(i + 1, opcnt, &j);
+ if (ret >= 0) {
+ if (pp->argc_stack != j / 4)
+ ferr(po, "stack tracking failed: %x %x\n",
+ pp->argc_stack, j);
+ ops[ret].flags |= OPF_RMD;
+ }