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"
14 void be_emit_init_env(be_emit_env_t *env, FILE *F)
16 memset(env, 0, sizeof(env[0]));
19 obstack_init(&env->obst);
23 void be_emit_destroy_env(be_emit_env_t *env)
25 obstack_free(&env->obst, NULL);
28 void be_emit_ident(be_emit_env_t *env, ident *id)
30 size_t len = get_id_strlen(id);
31 const char *str = get_id_str(id);
33 be_emit_string_len(env, str, len);
36 void be_emit_irvprintf(be_emit_env_t *env, const char *fmt, va_list args)
40 ir_vsnprintf(buf, sizeof(buf), fmt, args);
41 be_emit_string(env, buf);
44 void be_emit_irprintf(be_emit_env_t *env, const char *fmt, ...)
49 be_emit_irvprintf(env, fmt, ap);
53 void be_emit_write_line(be_emit_env_t *env)
55 char *finished_line = obstack_finish(&env->obst);
57 fwrite(finished_line, env->linelength, 1, env->F);
59 obstack_free(&env->obst, finished_line);
62 void be_emit_pad_comment(be_emit_env_t *env)
64 while(env->linelength <= 30) {
65 be_emit_char(env, ' ');
67 be_emit_cstring(env, " ");
70 void be_emit_finish_line_gas(be_emit_env_t *env, const ir_node *node)
73 const char *sourcefile;
77 be_emit_char(env, '\n');
78 be_emit_write_line(env);
82 be_emit_pad_comment(env);
83 be_emit_cstring(env, "/* ");
84 be_emit_irprintf(env, "%+F ", node);
86 dbg = get_irn_dbg_info(node);
87 sourcefile = be_retrieve_dbg_info(dbg, &lineno);
88 if(sourcefile != NULL) {
89 be_emit_string(env, sourcefile);
90 be_emit_irprintf(env, ":%u", lineno);
92 be_emit_cstring(env, " */\n");
93 be_emit_write_line(env);