/* 式のリストを , で区切りながら表示 */ void pr_expr_list_comma(FILE * fp, expr_list_t es) { int n = expr_list_sz(es); int i; for (i = 0; i < n; i++) { if (i > 0) fprintf(fp, ", "); expr_t e = expr_list_get(es, i); pr_expr(fp, e); } }
//関数呼び出しのcogen lgはいらないかな? int cogen_expr_call(FILE *fp, expr_t e, env_t env){ int i; int sz = expr_list_sz(e->u.a.args); char str[16]; for(i=sz-1;i>=0;i--){ cogen_expr(fp, expr_list_get(e->u.a.args,i), env); pos_e(str, expr_list_get(e->u.a.args,i) , env); fprintf(fp,"\tpushl\t%s\n",str); } fprintf(fp,"\tmovl\t%%ecx, %d(%%ebp)\n",address_env(env)-4); fprintf(fp,"\tcall\t%s\n",e->u.a.f); fprintf(fp,"\taddl\t$%d, %%esp\n",sz*4); fprintf(fp,"\tmovl\t%d(%%ebp), %%ecx\n",address_env(env)-4); pos_e(str, e, env); fprintf(fp,"\tmovl\t%%eax, %s\n",str); return 0; }