/* 変数宣言のリストを表示. 各宣言の後ろに ; をつけて */ void pr_var_decl_list_semicolon(FILE * fp, var_decl_list_t ds) { int n = var_decl_list_sz(ds); int i; for (i = 0; i < n; i++) { var_decl_t d = var_decl_list_get(ds, i); pr_var_decl(fp, d); fprintf(fp, ";\n"); } }
/* 変数宣言のリストを表示. 各宣言の後ろに , をつけて */ void pr_var_decl_list_comma(FILE * fp, var_decl_list_t ds) { int n = var_decl_list_sz(ds); int i; for (i = 0; i < n; i++) { if (i > 0) fprintf(fp, ", "); var_decl_t d = var_decl_list_get(ds, i); pr_var_decl(fp, d); } }
/*引数の割り当て場所を環境に登録*/ void set_env_params(var_decl_list_t params, env_list_t envs){ char * a = (char *)malloc(sizeof(char) * 10); strcpy(a, "ebp"); int sz = var_decl_list_sz(params); int i; int num = 4; syntree_info_t info = (syntree_info_t)safe_malloc(sizeof(struct syntree_info)); info->kind = place_mem; info->a = a; for (i = 0; i < sz; i++) { num = num + 4; info->num = num; var_decl_t d = var_decl_list_get(params, i); env_t env; env->f = d->v; env->info = info; add_env_params(envs, env); } }