- dprintf(fd, ", %s %s...$%s",
- vararg->type->name,
- vararg->var->reference ? "&" : "",
- vararg->var->name);
- }
- }
- dprintf(fd, ") : %s%s {\n",
- impl->func->return_reference ? "&":"",
- impl->func->return_type->name);
- if (impl->stmts) {
- for (j = 0; j < impl->stmts->let.count; ++j) {
- let_stmt *let = impl->stmts->let.list[j];
-
- dprintf(fd, "\tlet %s", let->var->name);
- if (let->val) {
- dprintf(fd, " = %s", let->val->flags.one.is_reference ? "&" : "");
- switch (let->val->kind) {
- case PSI_LET_NULL:
- dprintf(fd, "NULL");
- break;
- case PSI_LET_TMP:
- dump_decl_var(fd, let->val->data.var);
- break;
- case PSI_LET_CALLOC:
- dprintf(fd, "calloc(");
- dump_num_exp(fd, let->val->data.alloc->nmemb);
- dprintf(fd, ", ");
- dump_num_exp(fd, let->val->data.alloc->size);
- dprintf(fd, ")");
- break;
- case PSI_LET_FUNC:
- dprintf(fd, "%s($%s)", let->val->data.func->name,
- let->val->data.func->var->name);
- break;
-
- EMPTY_SWITCH_DEFAULT_CASE();
- }
- dprintf(fd, ";\n");
- }
- }
- for (j = 0; j < impl->stmts->ret.count; ++j) {
- return_stmt *ret = impl->stmts->ret.list[j];
-
- dprintf(fd, "\treturn ");
- dump_impl_set_value(fd, ret->set, 1);
- }
- for (j = 0; j < impl->stmts->set.count; ++j) {
- set_stmt *set = impl->stmts->set.list[j];