Beispiel #1
0
/* 式のリストを , で区切りながら表示 */
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;
}