| 
    libyasm
    
   | 
 
YASM symbol table interface. More...
Go to the source code of this file.
Typedefs | |
| typedef enum yasm_sym_status | yasm_sym_status | 
| Symbol status.  More... | |
| typedef enum yasm_sym_vis | yasm_sym_vis | 
| Symbol record visibility.  More... | |
| typedef int(* | yasm_symtab_traverse_callback )(yasm_symrec *sym, void *d) | 
| Callback function for yasm_symrec_traverse().  More... | |
| typedef struct yasm_symtab_iter | yasm_symtab_iter | 
| Symbol table iterator (opaque type).  More... | |
| typedef yasm_bytecode * | yasm_symrec_get_label_bytecodep | 
| Dependent pointer to a bytecode.  More... | |
Enumerations | |
| enum | yasm_sym_status {  YASM_SYM_NOSTATUS = 0, YASM_SYM_USED = 1 << 0, YASM_SYM_DEFINED = 1 << 1, YASM_SYM_VALUED = 1 << 2, YASM_SYM_NOTINTABLE = 1 << 3 }  | 
| Symbol status.  More... | |
| enum | yasm_sym_vis {  YASM_SYM_LOCAL = 0, YASM_SYM_GLOBAL = 1 << 0, YASM_SYM_COMMON = 1 << 1, YASM_SYM_EXTERN = 1 << 2, YASM_SYM_DLOCAL = 1 << 3 }  | 
| Symbol record visibility.  More... | |
Functions | |
| YASM_LIB_DECL yasm_symtab * | yasm_symtab_create (void) | 
| Create a new symbol table.  More... | |
| YASM_LIB_DECL void | yasm_symtab_destroy (yasm_symtab *symtab) | 
| Destroy a symbol table and all internal symbols.  More... | |
| YASM_LIB_DECL void | yasm_symtab_set_case_sensitive (yasm_symtab *symtab, int sensitive) | 
| Set the symbol table to be case sensitive or not.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_abs_sym (yasm_symtab *symtab) | 
| Get a reference to the symbol table's "absolute" symbol.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_use (yasm_symtab *symtab, const char *name, unsigned long line) | 
| Get a reference to (use) a symbol.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_get (yasm_symtab *symtab, const char *name) | 
| Get a reference to a symbol, without "using" it.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_equ (yasm_symtab *symtab, const char *name, yasm_expr *e, unsigned long line) | 
| Define a symbol as an EQU value.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_label (yasm_symtab *symtab, const char *name, yasm_bytecode *precbc, int in_table, unsigned long line) | 
| Define a symbol as a label.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_curpos (yasm_symtab *symtab, const char *name, yasm_bytecode *precbc, unsigned long line) | 
| Define a symbol as a label representing the current assembly position.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_define_special (yasm_symtab *symtab, const char *name, yasm_sym_vis vis) | 
| Define a special symbol that will appear in the symbol table and have a defined name, but have no other data associated with it within the standard symrec.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_declare (yasm_symtab *symtab, const char *name, yasm_sym_vis vis, unsigned long line) | 
| Declare external visibility of a symbol.  More... | |
| YASM_LIB_DECL void | yasm_symrec_declare (yasm_symrec *symrec, yasm_sym_vis vis, unsigned long line) | 
| Declare external visibility of a symbol.  More... | |
| YASM_LIB_DECL int | yasm_symtab_traverse (yasm_symtab *symtab, void *d, yasm_symtab_traverse_callback func) | 
| Traverse all symbols in the symbol table.  More... | |
| YASM_LIB_DECL const  yasm_symtab_iter *  | yasm_symtab_first (const yasm_symtab *symtab) | 
| Get an iterator pointing to the first symbol in the symbol table.  More... | |
| YASM_LIB_DECL const  yasm_symtab_iter *  | yasm_symtab_next (const yasm_symtab_iter *prev) | 
| Move a symbol table iterator to the next symbol in the symbol table.  More... | |
| YASM_LIB_DECL yasm_symrec * | yasm_symtab_iter_value (const yasm_symtab_iter *cur) | 
| Get the symbol corresponding to the current symbol table iterator value.  More... | |
| YASM_LIB_DECL void | yasm_symtab_parser_finalize (yasm_symtab *symtab, int undef_extern, yasm_errwarns *errwarns) | 
| Finalize symbol table after parsing stage.  More... | |
| YASM_LIB_DECL void | yasm_symtab_print (yasm_symtab *symtab, FILE *f, int indent_level) | 
| Print the symbol table.  More... | |
| YASM_LIB_DECL const char * | yasm_symrec_get_name (const yasm_symrec *sym) | 
| Get the name of a symbol.  More... | |
| YASM_LIB_DECL char * | yasm_symrec_get_global_name (const yasm_symrec *sym, const yasm_object *object) | 
| Get the externally-visible (global) name of a symbol.  More... | |
| YASM_LIB_DECL yasm_sym_vis | yasm_symrec_get_visibility (const yasm_symrec *sym) | 
| Get the visibility of a symbol.  More... | |
| YASM_LIB_DECL yasm_sym_status | yasm_symrec_get_status (const yasm_symrec *sym) | 
| Get the status of a symbol.  More... | |
| YASM_LIB_DECL unsigned long | yasm_symrec_get_def_line (const yasm_symrec *sym) | 
| Get the virtual line of where a symbol was first defined.  More... | |
| YASM_LIB_DECL unsigned long | yasm_symrec_get_decl_line (const yasm_symrec *sym) | 
| Get the virtual line of where a symbol was first declared.  More... | |
| YASM_LIB_DECL unsigned long | yasm_symrec_get_use_line (const yasm_symrec *sym) | 
| Get the virtual line of where a symbol was first used.  More... | |
| YASM_LIB_DECL const yasm_expr * | yasm_symrec_get_equ (const yasm_symrec *sym) | 
| Get EQU value of a symbol.  More... | |
| YASM_LIB_DECL int | yasm_symrec_get_label (const yasm_symrec *sym, yasm_symrec_get_label_bytecodep *precbc) | 
| Get the label location of a symbol.  More... | |
| YASM_LIB_DECL void | yasm_symrec_set_size (yasm_symrec *sym, int size) | 
| Set the size of a symbol.  More... | |
| YASM_LIB_DECL int | yasm_symrec_get_size (const yasm_symrec *sym) | 
| Get the size of a symbol.  More... | |
| YASM_LIB_DECL void | yasm_symrec_set_segment (yasm_symrec *sym, const char *segment) | 
| Set the segment of a symbol.  More... | |
| YASM_LIB_DECL const char * | yasm_symrec_get_segment (const yasm_symrec *sym) | 
| Get the segment of a symbol.  More... | |
| YASM_LIB_DECL int | yasm_symrec_is_abs (const yasm_symrec *sym) | 
| Determine if symbol is the "absolute" symbol created by yasm_symtab_abs_sym().  More... | |
| YASM_LIB_DECL int | yasm_symrec_is_special (const yasm_symrec *sym) | 
| Determine if symbol is a special symbol.  More... | |
| YASM_LIB_DECL int | yasm_symrec_is_curpos (const yasm_symrec *sym) | 
| Determine if symbol is a label representing the current assembly position.  More... | |
| YASM_LIB_DECL void | yasm_symrec_set_objext_valparams (yasm_symrec *sym, yasm_valparamhead *objext_valparams) | 
| Set object-extended valparams.  More... | |
| YASM_LIB_DECL yasm_valparamhead * | yasm_symrec_get_objext_valparams (yasm_symrec *sym) | 
| Get object-extended valparams, if any, associated with symbol's declaration.  More... | |
| YASM_LIB_DECL void | yasm_symrec_set_common_size (yasm_symrec *sym, yasm_expr *common_size) | 
| Set common size of symbol.  More... | |
| YASM_LIB_DECL yasm_expr ** | yasm_symrec_get_common_size (yasm_symrec *sym) | 
| Get common size of symbol, if symbol is declared COMMON and a size was set for it.  More... | |
| YASM_LIB_DECL void * | yasm_symrec_get_data (yasm_symrec *sym, const yasm_assoc_data_callback *callback) | 
| Get associated data for a symbol and data callback.  More... | |
| YASM_LIB_DECL void | yasm_symrec_add_data (yasm_symrec *sym, const yasm_assoc_data_callback *callback, void *data) | 
| Add associated data to a symbol.  More... | |
| YASM_LIB_DECL void | yasm_symrec_print (const yasm_symrec *sym, FILE *f, int indent_level) | 
| Print a symbol.  More... | |
YASM symbol table interface.
Definition in file symrec.h.
| typedef enum yasm_sym_status yasm_sym_status | 
Symbol status.
YASM_SYM_DEFINED is set by yasm_symtab_define_label(), yasm_symtab_define_equ(), or yasm_symtab_declare()/yasm_symrec_declare() with a visibility of YASM_SYM_EXTERN or YASM_SYM_COMMON.
| typedef enum yasm_sym_vis yasm_sym_vis | 
Symbol record visibility.
| typedef struct yasm_symtab_iter yasm_symtab_iter | 
| typedef int(* yasm_symtab_traverse_callback)(yasm_symrec *sym,void *d) | 
| enum yasm_sym_status | 
Symbol status.
YASM_SYM_DEFINED is set by yasm_symtab_define_label(), yasm_symtab_define_equ(), or yasm_symtab_declare()/yasm_symrec_declare() with a visibility of YASM_SYM_EXTERN or YASM_SYM_COMMON.
| enum yasm_sym_vis | 
Symbol record visibility.
| YASM_LIB_DECL void yasm_symrec_add_data | ( | yasm_symrec * | sym, | 
| const yasm_assoc_data_callback * | callback, | ||
| void * | data | ||
| ) | 
Add associated data to a symbol.
| sym | symbol | 
| callback | callback | 
| data | data to associate | 
| YASM_LIB_DECL void yasm_symrec_declare | ( | yasm_symrec * | symrec, | 
| yasm_sym_vis | vis, | ||
| unsigned long | line | ||
| ) | 
Declare external visibility of a symbol.
| symrec | symbol | 
| vis | visibility | 
| line | virtual line of visibility-setting | 
| YASM_LIB_DECL yasm_expr** yasm_symrec_get_common_size | ( | yasm_symrec * | sym | ) | 
Get common size of symbol, if symbol is declared COMMON and a size was set for it.
| sym | symbol | 
| YASM_LIB_DECL void* yasm_symrec_get_data | ( | yasm_symrec * | sym, | 
| const yasm_assoc_data_callback * | callback | ||
| ) | 
Get associated data for a symbol and data callback.
| sym | symbol | 
| callback | callback used when adding data | 
| YASM_LIB_DECL unsigned long yasm_symrec_get_decl_line | ( | const yasm_symrec * | sym | ) | 
Get the virtual line of where a symbol was first declared.
| sym | symbol | 
| YASM_LIB_DECL unsigned long yasm_symrec_get_def_line | ( | const yasm_symrec * | sym | ) | 
Get the virtual line of where a symbol was first defined.
| sym | symbol | 
| YASM_LIB_DECL const yasm_expr* yasm_symrec_get_equ | ( | const yasm_symrec * | sym | ) | 
Get EQU value of a symbol.
| sym | symbol | 
| YASM_LIB_DECL char* yasm_symrec_get_global_name | ( | const yasm_symrec * | sym, | 
| const yasm_object * | object | ||
| ) | 
Get the externally-visible (global) name of a symbol.
| sym | symbol | 
| object | object | 
| YASM_LIB_DECL int yasm_symrec_get_label | ( | const yasm_symrec * | sym, | 
| yasm_symrec_get_label_bytecodep * | precbc | ||
| ) | 
Get the label location of a symbol.
| sym | symbol | 
| precbc | bytecode preceding label (output) | 
| YASM_LIB_DECL const char* yasm_symrec_get_name | ( | const yasm_symrec * | sym | ) | 
Get the name of a symbol.
| sym | symbol | 
| YASM_LIB_DECL yasm_valparamhead* yasm_symrec_get_objext_valparams | ( | yasm_symrec * | sym | ) | 
Get object-extended valparams, if any, associated with symbol's declaration.
| sym | symbol | 
| YASM_LIB_DECL const char* yasm_symrec_get_segment | ( | const yasm_symrec * | sym | ) | 
Get the segment of a symbol.
| sym | symbol | 
| YASM_LIB_DECL int yasm_symrec_get_size | ( | const yasm_symrec * | sym | ) | 
Get the size of a symbol.
| sym | symbol | 
| YASM_LIB_DECL yasm_sym_status yasm_symrec_get_status | ( | const yasm_symrec * | sym | ) | 
Get the status of a symbol.
| sym | symbol | 
| YASM_LIB_DECL unsigned long yasm_symrec_get_use_line | ( | const yasm_symrec * | sym | ) | 
Get the virtual line of where a symbol was first used.
| sym | symbol | 
| YASM_LIB_DECL yasm_sym_vis yasm_symrec_get_visibility | ( | const yasm_symrec * | sym | ) | 
Get the visibility of a symbol.
| sym | symbol | 
| YASM_LIB_DECL int yasm_symrec_is_abs | ( | const yasm_symrec * | sym | ) | 
Determine if symbol is the "absolute" symbol created by yasm_symtab_abs_sym().
| sym | symbol | 
| YASM_LIB_DECL int yasm_symrec_is_curpos | ( | const yasm_symrec * | sym | ) | 
Determine if symbol is a label representing the current assembly position.
| sym | symbol | 
| YASM_LIB_DECL int yasm_symrec_is_special | ( | const yasm_symrec * | sym | ) | 
Determine if symbol is a special symbol.
| sym | symbol | 
| YASM_LIB_DECL void yasm_symrec_print | ( | const yasm_symrec * | sym, | 
| FILE * | f, | ||
| int | indent_level | ||
| ) | 
Print a symbol.
For debugging purposes.
| f | file | 
| indent_level | indentation level | 
| sym | symbol | 
| YASM_LIB_DECL void yasm_symrec_set_common_size | ( | yasm_symrec * | sym, | 
| yasm_expr * | common_size | ||
| ) | 
Set common size of symbol.
| sym | symbol | 
| common_size | common size expression | 
| YASM_LIB_DECL void yasm_symrec_set_objext_valparams | ( | yasm_symrec * | sym, | 
| yasm_valparamhead * | objext_valparams | ||
| ) | 
Set object-extended valparams.
| sym | symbol | 
| objext_valparams | object-extended valparams | 
| YASM_LIB_DECL void yasm_symrec_set_segment | ( | yasm_symrec * | sym, | 
| const char * | segment | ||
| ) | 
Set the segment of a symbol.
| sym | symbol | 
| segment | segment to be set | 
| YASM_LIB_DECL void yasm_symrec_set_size | ( | yasm_symrec * | sym, | 
| int | size | ||
| ) | 
Set the size of a symbol.
| sym | symbol | 
| size | size to be set | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_abs_sym | ( | yasm_symtab * | symtab | ) | 
Get a reference to the symbol table's "absolute" symbol.
This is essentially an EQU with no name and value 0, and is used for relocating absolute current-position-relative values.
| symtab | symbol table | 
| YASM_LIB_DECL yasm_symtab* yasm_symtab_create | ( | void | ) | 
Create a new symbol table.
| YASM_LIB_DECL yasm_symrec* yasm_symtab_declare | ( | yasm_symtab * | symtab, | 
| const char * | name, | ||
| yasm_sym_vis | vis, | ||
| unsigned long | line | ||
| ) | 
Declare external visibility of a symbol.
| symtab | symbol table | 
| name | symbol name | 
| vis | visibility | 
| line | virtual line of visibility-setting | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_define_curpos | ( | yasm_symtab * | symtab, | 
| const char * | name, | ||
| yasm_bytecode * | precbc, | ||
| unsigned long | line | ||
| ) | 
Define a symbol as a label representing the current assembly position.
This should be used for this purpose instead of yasm_symtab_define_label() as value_finalize_scan() looks for usage of this symbol type for special handling. The symbol created is not inserted into the symbol table.
| symtab | symbol table | 
| name | symbol (label) name | 
| precbc | bytecode preceding label | 
| line | virtual line of label | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_define_equ | ( | yasm_symtab * | symtab, | 
| const char * | name, | ||
| yasm_expr * | e, | ||
| unsigned long | line | ||
| ) | 
Define a symbol as an EQU value.
| symtab | symbol table | 
| name | symbol (EQU) name | 
| e | EQU value (expression) | 
| line | virtual line of EQU | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_define_label | ( | yasm_symtab * | symtab, | 
| const char * | name, | ||
| yasm_bytecode * | precbc, | ||
| int | in_table, | ||
| unsigned long | line | ||
| ) | 
Define a symbol as a label.
| symtab | symbol table | 
| name | symbol (label) name | 
| precbc | bytecode preceding label | 
| in_table | nonzero if the label should be inserted into the symbol table (some specially-generated ones should not be) | 
| line | virtual line of label | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_define_special | ( | yasm_symtab * | symtab, | 
| const char * | name, | ||
| yasm_sym_vis | vis | ||
| ) | 
Define a special symbol that will appear in the symbol table and have a defined name, but have no other data associated with it within the standard symrec.
| symtab | symbol table | 
| name | symbol name | 
| vis | symbol visibility | 
| YASM_LIB_DECL void yasm_symtab_destroy | ( | yasm_symtab * | symtab | ) | 
Destroy a symbol table and all internal symbols.
| symtab | symbol table | 
| YASM_LIB_DECL const yasm_symtab_iter* yasm_symtab_first | ( | const yasm_symtab * | symtab | ) | 
Get an iterator pointing to the first symbol in the symbol table.
| symtab | symbol table | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_get | ( | yasm_symtab * | symtab, | 
| const char * | name | ||
| ) | 
Get a reference to a symbol, without "using" it.
Should be used for cases when an internal assembler usage of a symbol shouldn't be treated like a normal user symbol usage.
| symtab | symbol table | 
| name | symbol name | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_iter_value | ( | const yasm_symtab_iter * | cur | ) | 
Get the symbol corresponding to the current symbol table iterator value.
| cur | iterator value | 
| YASM_LIB_DECL const yasm_symtab_iter* yasm_symtab_next | ( | const yasm_symtab_iter * | prev | ) | 
Move a symbol table iterator to the next symbol in the symbol table.
| prev | Previous iterator value | 
| YASM_LIB_DECL void yasm_symtab_parser_finalize | ( | yasm_symtab * | symtab, | 
| int | undef_extern, | ||
| yasm_errwarns * | errwarns | ||
| ) | 
Finalize symbol table after parsing stage.
Checks for symbols that are used but never defined or declared YASM_SYM_EXTERN or YASM_SYM_COMMON.
| symtab | symbol table | 
| undef_extern | if nonzero, all undef syms should be declared extern | 
| errwarns | error/warning set | 
| YASM_LIB_DECL void yasm_symtab_print | ( | yasm_symtab * | symtab, | 
| FILE * | f, | ||
| int | indent_level | ||
| ) | 
Print the symbol table.
For debugging purposes.
| symtab | symbol table | 
| f | file | 
| indent_level | indentation level | 
| YASM_LIB_DECL void yasm_symtab_set_case_sensitive | ( | yasm_symtab * | symtab, | 
| int | sensitive | ||
| ) | 
Set the symbol table to be case sensitive or not.
Should be called before adding any symbol.
| symtab | symbol table | 
| sensitive | whether the symbol table should be case sensitive. | 
| YASM_LIB_DECL int yasm_symtab_traverse | ( | yasm_symtab * | symtab, | 
| void * | d, | ||
| yasm_symtab_traverse_callback | func | ||
| ) | 
Traverse all symbols in the symbol table.
| symtab | symbol table | 
| d | data to pass to each call of callback function | 
| func | callback function called on each symbol | 
| YASM_LIB_DECL yasm_symrec* yasm_symtab_use | ( | yasm_symtab * | symtab, | 
| const char * | name, | ||
| unsigned long | line | ||
| ) | 
Get a reference to (use) a symbol.
The symbol does not necessarily need to be defined before it is used.
| symtab | symbol table | 
| name | symbol name | 
| line | virtual line where referenced | 
 1.8.3.1