2 * Author: Matthias Braun
4 * Copyright: (c) Universitaet Karlsruhe
5 * License: This file is protected by GPL - GNU GENERAL PUBLIC LICENSE.
11 #include "beemitter.h"
15 void be_emit_init_env(be_emit_env_t *env, FILE *F)
17 memset(env, 0, sizeof(env[0]));
20 obstack_init(&env->obst);
24 void be_emit_destroy_env(be_emit_env_t *env)
26 obstack_free(&env->obst, NULL);
29 void be_emit_ident(be_emit_env_t *env, ident *id)
31 size_t len = get_id_strlen(id);
32 const char *str = get_id_str(id);
34 be_emit_string_len(env, str, len);
37 void be_emit_irvprintf(be_emit_env_t *env, const char *fmt, va_list args)
41 ir_vsnprintf(buf, sizeof(buf), fmt, args);
42 be_emit_string(env, buf);
45 void be_emit_irprintf(be_emit_env_t *env, const char *fmt, ...)
50 be_emit_irvprintf(env, fmt, ap);
54 void be_emit_write_line(be_emit_env_t *env)
56 char *finished_line = obstack_finish(&env->obst);
58 fwrite(finished_line, env->linelength, 1, env->F);
60 obstack_free(&env->obst, finished_line);
63 void be_emit_pad_comment(be_emit_env_t *env)
65 while(env->linelength <= 30) {
66 be_emit_char(env, ' ');
68 be_emit_cstring(env, " ");
71 void be_emit_finish_line_gas(be_emit_env_t *env, const ir_node *node)
74 const char *sourcefile;
78 be_emit_char(env, '\n');
79 be_emit_write_line(env);
83 be_emit_pad_comment(env);
84 be_emit_cstring(env, "/* ");
85 be_emit_irprintf(env, "%+F ", node);
87 dbg = get_irn_dbg_info(node);
88 sourcefile = be_retrieve_dbg_info(dbg, &lineno);
89 if(sourcefile != NULL) {
90 be_emit_string(env, sourcefile);
91 be_emit_irprintf(env, ":%u", lineno);
93 be_emit_cstring(env, " */\n");
94 be_emit_write_line(env);