00001
00034 #ifndef YASM_SYMREC_H
00035 #define YASM_SYMREC_H
00036
00037 #ifndef YASM_LIB_DECL
00038 #define YASM_LIB_DECL
00039 #endif
00040
00045 typedef enum yasm_sym_status {
00046 YASM_SYM_NOSTATUS = 0,
00047 YASM_SYM_USED = 1 << 0,
00048 YASM_SYM_DEFINED = 1 << 1,
00049 YASM_SYM_VALUED = 1 << 2,
00050 YASM_SYM_NOTINTABLE = 1 << 3
00051 } yasm_sym_status;
00052
00056 typedef enum yasm_sym_vis {
00057 YASM_SYM_LOCAL = 0,
00058 YASM_SYM_GLOBAL = 1 << 0,
00059 YASM_SYM_COMMON = 1 << 1,
00060 YASM_SYM_EXTERN = 1 << 2,
00061 YASM_SYM_DLOCAL = 1 << 3
00062 } yasm_sym_vis;
00063
00065 YASM_LIB_DECL
00066 yasm_symtab *yasm_symtab_create(void);
00067
00073 YASM_LIB_DECL
00074 void yasm_symtab_destroy( yasm_symtab *symtab);
00075
00081 YASM_LIB_DECL
00082 void yasm_symtab_set_case_sensitive(yasm_symtab *symtab, int sensitive);
00083
00091 YASM_LIB_DECL
00092 yasm_symrec *yasm_symtab_abs_sym(yasm_symtab *symtab);
00093
00101 YASM_LIB_DECL
00102 yasm_symrec *yasm_symtab_use
00103 (yasm_symtab *symtab, const char *name, unsigned long line);
00104
00113 YASM_LIB_DECL
00114 yasm_symrec *yasm_symtab_get
00115 (yasm_symtab *symtab, const char *name);
00116
00124 YASM_LIB_DECL
00125 yasm_symrec *yasm_symtab_define_equ
00126 (yasm_symtab *symtab, const char *name, yasm_expr *e,
00127 unsigned long line);
00128
00138 YASM_LIB_DECL
00139 yasm_symrec *yasm_symtab_define_label
00140 (yasm_symtab *symtab, const char *name,
00141 yasm_bytecode *precbc, int in_table, unsigned long line);
00142
00153 YASM_LIB_DECL
00154 yasm_symrec *yasm_symtab_define_curpos
00155 (yasm_symtab *symtab, const char *name,
00156 yasm_bytecode *precbc, unsigned long line);
00157
00166 YASM_LIB_DECL
00167 yasm_symrec *yasm_symtab_define_special
00168 (yasm_symtab *symtab, const char *name, yasm_sym_vis vis);
00169
00178 YASM_LIB_DECL
00179 yasm_symrec *yasm_symtab_declare
00180 (yasm_symtab *symtab, const char *name, yasm_sym_vis vis,
00181 unsigned long line);
00182
00189 YASM_LIB_DECL
00190 void yasm_symrec_declare(yasm_symrec *symrec, yasm_sym_vis vis,
00191 unsigned long line);
00192
00198 typedef int (*yasm_symtab_traverse_callback)
00199 (yasm_symrec *sym, void *d);
00200
00208 YASM_LIB_DECL
00209 int yasm_symtab_traverse
00210 (yasm_symtab *symtab, void *d,
00211 yasm_symtab_traverse_callback func);
00212
00214 typedef struct yasm_symtab_iter yasm_symtab_iter;
00215
00220 YASM_LIB_DECL
00221 const yasm_symtab_iter *yasm_symtab_first(const yasm_symtab *symtab);
00222
00227 YASM_LIB_DECL
00228 const yasm_symtab_iter *yasm_symtab_next
00229 (const yasm_symtab_iter *prev);
00230
00235 YASM_LIB_DECL
00236 yasm_symrec *yasm_symtab_iter_value(const yasm_symtab_iter *cur);
00237
00245 YASM_LIB_DECL
00246 void yasm_symtab_parser_finalize(yasm_symtab *symtab, int undef_extern,
00247 yasm_errwarns *errwarns);
00248
00254 YASM_LIB_DECL
00255 void yasm_symtab_print(yasm_symtab *symtab, FILE *f, int indent_level);
00256
00261 YASM_LIB_DECL
00262 const char *yasm_symrec_get_name(const yasm_symrec *sym);
00263
00269 YASM_LIB_DECL
00270 char *yasm_symrec_get_global_name(const yasm_symrec *sym,
00271 const yasm_object *object);
00272
00277 YASM_LIB_DECL
00278 yasm_sym_vis yasm_symrec_get_visibility(const yasm_symrec *sym);
00279
00284 YASM_LIB_DECL
00285 yasm_sym_status yasm_symrec_get_status(const yasm_symrec *sym);
00286
00291 YASM_LIB_DECL
00292 unsigned long yasm_symrec_get_def_line(const yasm_symrec *sym);
00293
00298 YASM_LIB_DECL
00299 unsigned long yasm_symrec_get_decl_line(const yasm_symrec *sym);
00300
00305 YASM_LIB_DECL
00306 unsigned long yasm_symrec_get_use_line(const yasm_symrec *sym);
00307
00312 YASM_LIB_DECL
00313 const yasm_expr *yasm_symrec_get_equ
00314 (const yasm_symrec *sym);
00315
00317 typedef yasm_bytecode *yasm_symrec_get_label_bytecodep;
00318
00325 YASM_LIB_DECL
00326 int yasm_symrec_get_label(const yasm_symrec *sym,
00327 yasm_symrec_get_label_bytecodep *precbc);
00328
00333 void yasm_symrec_set_size(yasm_symrec *sym, int size);
00334
00339 int yasm_symrec_get_size(const yasm_symrec *sym);
00340
00345 void yasm_symrec_set_segment(yasm_symrec *sym, const char *segment);
00346
00351 const char *yasm_symrec_get_segment(const yasm_symrec *sym);
00352
00358 YASM_LIB_DECL
00359 int yasm_symrec_is_abs(const yasm_symrec *sym);
00360
00365 YASM_LIB_DECL
00366 int yasm_symrec_is_special(const yasm_symrec *sym);
00367
00372 YASM_LIB_DECL
00373 int yasm_symrec_is_curpos(const yasm_symrec *sym);
00374
00379 YASM_LIB_DECL
00380 void yasm_symrec_set_objext_valparams
00381 (yasm_symrec *sym, yasm_valparamhead *objext_valparams);
00382
00388 YASM_LIB_DECL
00389 yasm_valparamhead *yasm_symrec_get_objext_valparams
00390 (yasm_symrec *sym);
00391
00396 YASM_LIB_DECL
00397 void yasm_symrec_set_common_size
00398 (yasm_symrec *sym, yasm_expr *common_size);
00399
00405 YASM_LIB_DECL
00406 yasm_expr **yasm_symrec_get_common_size
00407 (yasm_symrec *sym);
00408
00414 YASM_LIB_DECL
00415 void *yasm_symrec_get_data
00416 (yasm_symrec *sym, const yasm_assoc_data_callback *callback);
00417
00424 YASM_LIB_DECL
00425 void yasm_symrec_add_data(yasm_symrec *sym,
00426 const yasm_assoc_data_callback *callback,
00427 void *data);
00428
00434 YASM_LIB_DECL
00435 void yasm_symrec_print(const yasm_symrec *sym, FILE *f, int indent_level);
00436
00437 #endif