Home | History | Annotate | Download | only in libyasm

Lines Matching defs:linemap

33 #include "linemap.h"
81 yasm_linemap_set(yasm_linemap *linemap, const char *filename,
91 virtual_line = linemap->current;
95 for (i = linemap->map_size; i > 0; i--) {
96 if (linemap->map_vector[i-1].line < virtual_line) {
97 if (i < linemap->map_size) {
98 mapping = &linemap->map_vector[i];
99 linemap->map_size = i + 1;
107 if (linemap->map_size >= linemap->map_allocated) {
109 linemap->map_vector = yasm_xrealloc(linemap->map_vector,
110 2*linemap->map_allocated*sizeof(line_mapping));
111 linemap->map_allocated *= 2;
113 mapping = &linemap->map_vector[linemap->map_size];
114 linemap->map_size++;
120 if (linemap->map_size >= 2)
122 linemap->map_vector[linemap->map_size-2].filename;
130 mapping->filename = HAMT_insert(linemap->filenames, copy, copy,
141 yasm_linemap_poke(yasm_linemap *linemap, const char *filename,
147 linemap->current++;
148 yasm_linemap_set(linemap, filename, 0, file_line, 0);
150 mapping = &linemap->map_vector[linemap->map_size-1];
152 line = linemap->current;
154 linemap->current++;
155 yasm_linemap_set(linemap, mapping->filename, 0,
157 mapping->line_inc*(linemap->current-2-mapping->line),
167 yasm_linemap *linemap = yasm_xmalloc(sizeof(yasm_linemap));
169 linemap->filenames = HAMT_create(0, yasm_internal_error_);
171 linemap->current = 1;
174 linemap->map_vector = yasm_xmalloc(8*sizeof(line_mapping));
175 linemap->map_size = 0;
176 linemap->map_allocated = 8;
179 linemap->source_info_size = 2;
180 linemap->source_info = yasm_xmalloc(linemap->source_info_size *
182 for (i=0; i<linemap->source_info_size; i++) {
183 linemap->source_info[i].bc = NULL;
184 linemap->source_info[i].source = NULL;
187 return linemap;
191 yasm_linemap_destroy(yasm_linemap *linemap)
194 for (i=0; i<linemap->source_info_size; i++) {
195 if (linemap->source_info[i].source)
196 yasm_xfree(linemap->source_info[i].source);
198 yasm_xfree(linemap->source_info);
200 yasm_xfree(linemap->map_vector);
202 if (linemap->filenames)
203 HAMT_destroy(linemap->filenames, filename_delete_one);
205 yasm_xfree(linemap);
209 yasm_linemap_get_current(yasm_linemap *linemap)
211 return linemap->current;
215 yasm_linemap_add_source(yasm_linemap *linemap, yasm_bytecode *bc,
220 while (linemap->current > linemap->source_info_size) {
222 linemap->source_info = yasm_xrealloc(linemap->source_info,
223 2*linemap->source_info_size*sizeof(line_source_info));
224 for (i=linemap->source_info_size; i<linemap->source_info_size*2; i++) {
225 linemap->source_info[i].bc = NULL;
226 linemap->source_info[i].source = NULL;
228 linemap->source_info_size *= 2;
232 if (linemap->source_info[linemap->current-1].source)
233 yasm_xfree(linemap->source_info[linemap->current-1].source);
235 linemap->source_info[linemap->current-1].bc = bc;
236 linemap->source_info[linemap->current-1].source = yasm__xstrdup(source);
240 yasm_linemap_goto_next(yasm_linemap *linemap)
242 return ++(linemap->current);
246 yasm_linemap_lookup(yasm_linemap *linemap, unsigned long line,
252 assert(line <= linemap->current);
258 while (step*2<=linemap->map_size)
261 if (vindex+step < linemap->map_size
262 && linemap->map_vector[vindex+step].line <= line)
266 mapping = &linemap->map_vector[vindex];
273 yasm_linemap_traverse_filenames(yasm_linemap *linemap, /*@null@*/ void *d,
276 return HAMT_traverse(linemap->filenames, d, (int (*) (void *, void *))func);
280 yasm_linemap_get_source(yasm_linemap *linemap, unsigned long line,
283 if (line > linemap->source_info_size) {
289 *bcp = linemap->source_info[line-1].bc;
290 *sourcep = linemap->source_info[line-1].source;