- for (i = 0; i < C->impls->count; ++i) {
- impl *impl = C->impls->list[i];
-
- dprintf(fd, "function %s(", impl->func->name);
- if (impl->func->args) for (j = 0; j < impl->func->args->count; ++j) {
- impl_arg *iarg = impl->func->args->args[j];
-
- dprintf(fd, "%s%s %s$%s",
- j ? ", " : "",
- iarg->type->name,
- iarg->var->reference ? "&" : "",
- iarg->var->name);
- if (iarg->def) {
- dprintf(fd, " = %s", iarg->def->text);
- }
- }
- 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->is_reference ? "&" : "");
- if (let->val->func) {
- dprintf(fd, "%s(", let->val->func->name);
- if (let->val->func->alloc) {
- dump_num_exp(fd, let->val->func->alloc->nmemb);
- dprintf(fd, ", ");
- dump_num_exp(fd, let->val->func->alloc->size);
- } else {
- dprintf(fd, "$%s", let->val->var->name);
- }
- dprintf(fd, ");\n");
- } else {
- dprintf(fd, "NULL;\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];