Clan  0.8.1
Data Structures | Typedefs | Functions
symbol.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  clan_symbol
 

Typedefs

typedef struct clan_symbol clan_symbol_t
 
typedef struct clan_symbolclan_symbol_p
 

Functions

void clan_symbol_print_structure (FILE *, clan_symbol_p, int)
 
void clan_symbol_print (FILE *, clan_symbol_p)
 
clan_symbol_p clan_symbol_malloc ()
 
void clan_symbol_free (clan_symbol_p)
 
clan_symbol_p clan_symbol_lookup (clan_symbol_p, char *)
 
clan_symbol_p clan_symbol_lookup_by_key (clan_symbol_p, int)
 
void clan_symbol_push_at_end (clan_symbol_p *, clan_symbol_p)
 
clan_symbol_p clan_symbol_add (clan_symbol_p *, char *, int)
 
int clan_symbol_get_rank (clan_symbol_p, char *)
 
int clan_symbol_get_type (clan_symbol_p, char *)
 
struct osl_strings * clan_symbol_array_to_strings (clan_symbol_p *, int, int *, int *)
 
int clan_symbol_nb_of_type (clan_symbol_p, int)
 
struct osl_generic * clan_symbol_to_strings (clan_symbol_p, int)
 
clan_symbol_p clan_symbol_clone_one (clan_symbol_p)
 
struct osl_generic * clan_symbol_to_arrays (clan_symbol_p)
 
int clan_symbol_new_iterator (clan_symbol_p *, clan_symbol_p *, char *, int)
 
int clan_symbol_update_type (clan_symbol_p, struct osl_relation_list *, int)
 

Typedef Documentation

◆ clan_symbol_p

typedef struct clan_symbol* clan_symbol_p

Definition at line 63 of file symbol.h.

◆ clan_symbol_t

typedef struct clan_symbol clan_symbol_t

Definition at line 62 of file symbol.h.

Function Documentation

◆ clan_symbol_add()

clan_symbol_p clan_symbol_add ( clan_symbol_p table,
char *  identifier,
int  type 
)

clan_symbol_add function: This function adds a new clan_symbol_t in the symbol table whose address is provided as a parameter. If the symbol table is empty (NULL), the new node will become its first element. A new node is added only if an existing node with the same identifier does not already exist. It returns the pointer to the symbol table node corresponding to the identifier.

Parameters
[in,out]tableThe address of the symbol table.
[in]identifierThe identifier of the symbol we want to add.
[in]typeThe new symbol type.

Definition at line 323 of file symbol.c.

References clan_symbol_generate_new_key(), clan_symbol_lookup(), clan_symbol_malloc(), clan_symbol_push_at_end(), clan_symbol::identifier, clan_symbol::key, and clan_symbol::type.

Referenced by clan_symbol_new_iterator().

◆ clan_symbol_array_to_strings()

struct osl_strings* clan_symbol_array_to_strings ( clan_symbol_p sarray,
int  size,
int *  depths,
int *  labels 
)

clan_symbol_array_to_strings function: this functions builds (and returns a pointer to) an osl_strings_t structure containing the symbol strings contained in an array of symbols of length nb. The symbol string order is the same as the one in the symbol array.

Parameters
[in]sarrayThe symbol array.
[in]sizeThe size of the symbol array.
[in]depthsThe depth of each xfor loop.
[in]labelsThe labels (i.e., the symbol version) of each xfor loop.
Returns
An osl_strings_t containing all the symbol strings.

Definition at line 417 of file symbol.c.

References clan_symbol::identifier, and clan_symbol::next.

◆ clan_symbol_clone_one()

clan_symbol_p clan_symbol_clone_one ( clan_symbol_p  symbol)

clan_symbol_clone_one function: this function clones one symbol, i.e., it returns the clone of the symbol provided as an argument only, with a next field set to NULL.

Parameters
symbolThe symbol to clone.
Returns
The clone of the symbol (and this symbol only).

Definition at line 513 of file symbol.c.

References clan_symbol_malloc(), clan_symbol::identifier, clan_symbol::rank, and clan_symbol::type.

Referenced by clan_symbol_new_iterator().

◆ clan_symbol_free()

void clan_symbol_free ( clan_symbol_p  symbol)

clan_symbol_free function: This function frees the allocated memory for a clan_symbol_t structure.

Parameters
[in,out]symbolThe pointer to the symbol we want to free.

Definition at line 214 of file symbol.c.

References clan_symbol::identifier, and clan_symbol::next.

◆ clan_symbol_get_rank()

int clan_symbol_get_rank ( clan_symbol_p  symbol,
char *  identifier 
)

clan_symbol_get_rank function: This function returns the rank of the symbol with identifier "identifier" in the symbol table whose first element is "symbol". If the symbol with the specified identifier is not found, it returns -1.

Parameters
[in]symbolThe first node of the list of symbols.
[in]identifierThe identifier we want to know the key.
Returns
The rank corresponding to the identifier or CLAN_UNDEFINED.

Definition at line 374 of file symbol.c.

References clan_symbol::identifier, clan_symbol::next, and clan_symbol::rank.

Referenced by clan_vector_term().

◆ clan_symbol_get_type()

int clan_symbol_get_type ( clan_symbol_p  symbol,
char *  identifier 
)

clan_symbol_get_type function: This function returns the type of the symbol with identifier "identifier" in the symbol table whose first element is "symbol". If the symbol with the specified identifier is not found, it returns -1.

Parameters
[in]symbolThe first node of the list of symbols.
[in]identifierThe identifier we want to know the type.
Returns
The type of the symbol corresponding to the identifier.

Definition at line 394 of file symbol.c.

References clan_symbol::identifier, clan_symbol::next, and clan_symbol::type.

Referenced by clan_vector_term().

◆ clan_symbol_lookup()

clan_symbol_p clan_symbol_lookup ( clan_symbol_p  symbol,
char *  identifier 
)

clan_symbol_lookup function: This function searches the symbol table for a symbol with the identifier provided as parameter. It returns the pointer to the symbol if it already exists inside the table, NULL otherwise.

Parameters
[in]symbolThe first node of the list of symbols.
[in]identifierThe identifier we are looking for.
Returns
The symbol corresponding to identifier, NULL if it doesn't exist.

Definition at line 240 of file symbol.c.

References clan_symbol::identifier, and clan_symbol::next.

Referenced by clan_symbol_add().

◆ clan_symbol_lookup_by_key()

clan_symbol_p clan_symbol_lookup_by_key ( clan_symbol_p  symbol,
int  key 
)

clan_symbol_lookup_by_key function: This function searches the symbol table for a symbol with the key provided as parameter. It returns the pointer to the symbol if it already exists inside the table, NULL otherwise.

Parameters
[in]symbolThe first node of the list of symbols.
[in]keyThe key of the searched symbol.
Returns
The symbol corresponding to the key, or NULL if it doesn't exist.

Definition at line 260 of file symbol.c.

References clan_symbol::key, and clan_symbol::next.

Referenced by clan_symbol_update_type().

◆ clan_symbol_malloc()

clan_symbol_p clan_symbol_malloc ( )

clan_symbol_malloc function: This function allocates the memory space for a clan_symbol_t structure and sets its fields with default values. Then it returns a pointer to the allocated space.

Returns
A newly allocated symbol set with default values.

Definition at line 195 of file symbol.c.

References clan_symbol::identifier, clan_symbol::key, clan_symbol::next, clan_symbol::rank, and clan_symbol::type.

Referenced by clan_symbol_add(), and clan_symbol_clone_one().

◆ clan_symbol_nb_of_type()

int clan_symbol_nb_of_type ( clan_symbol_p  symbol,
int  type 
)

clan_symbol_nb_of_type function: this function returns the number of symbols of a given type in the symbol table.

Parameters
[in]symbolThe top of the symbol table.
[in]typeThe type of the elements.
Returns
The number of symbols of the provoded type in the symbol table.

Definition at line 458 of file symbol.c.

References clan_symbol::next, and clan_symbol::type.

Referenced by clan_symbol_to_strings().

◆ clan_symbol_new_iterator()

int clan_symbol_new_iterator ( clan_symbol_p table,
clan_symbol_p array,
char *  id,
int  depth 
)

clan_symbol_new_iterator function: this function return 1 if it succeeds to register (or to update) an iterator in the symbol table and to add it to the iterator array. It returns 0 otherwise. The reason for failure can be that the symbol is already in use for something else than an iterator.

Parameters
[in,out]tableThe symbol table.
[in,out]arrayThe iterator array.
[in]idThe textual name of the iterator.
[in]depthThe current loop depth.
Returns
1 on success, 0 on failure.

Definition at line 581 of file symbol.c.

References clan_symbol_add(), clan_symbol_clone_one(), clan_symbol_push_at_end(), clan_symbol::rank, clan_symbol::type, and yyerror().

◆ clan_symbol_print()

void clan_symbol_print ( FILE *  file,
clan_symbol_p  symbol 
)

clan_symbol_print function: This function prints the content of a clan_symbol_t structure (*symbol) into a file (file, possibly stdout).

Parameters
[in]fileFile where informations are printed.
[in]symbolThe symbol whose information have to be printed.

Definition at line 178 of file symbol.c.

References clan_symbol_print_structure().

◆ clan_symbol_print_structure()

void clan_symbol_print_structure ( FILE *  file,
clan_symbol_p  symbol,
int  level 
)

clan_symbol_print_structure function: Displays a clan_symbol_t structure (*symbol) into a file (file, possibly stdout) in a way that trends to be understandable without falling in a deep depression or, for the lucky ones, getting a headache... It includes an indentation level (level) in order to work with others print_structure functions.

Parameters
[in]fileFile where informations are printed.
[in]symbolThe symbol whose information have to be printed.
[in]levelNumber of spaces before printing, for each line.

Definition at line 73 of file symbol.c.

References clan_symbol::identifier, clan_symbol::key, clan_symbol::next, clan_symbol::rank, and clan_symbol::type.

Referenced by clan_symbol_print().

◆ clan_symbol_push_at_end()

void clan_symbol_push_at_end ( clan_symbol_p table,
clan_symbol_p  symbol 
)

clan_symbol_push_at_end function this function adds a symbol at the end of the symbol table whose address is provided as a parameter. If the symbol table is empty (NULL), the new node will become its first element.

Parameters
[in,out]tableThe address of the symbol table.
[in]symbolThe symbol to add to the table.

Definition at line 298 of file symbol.c.

References clan_symbol::next.

Referenced by clan_symbol_add(), and clan_symbol_new_iterator().

◆ clan_symbol_to_arrays()

struct osl_generic* clan_symbol_to_arrays ( clan_symbol_p  symbol)

clan_symbol_to_arrays function: this function generates an arrays extension from the symbol table passed as an argument. It embeds it in an osl_generic_t structure before returning it.

Parameters
[in]symbolThe symbol table.
Returns
An arrays structure with all the arrays of the symbol table.

Definition at line 533 of file symbol.c.

References clan_symbol::identifier, clan_symbol::key, and clan_symbol::next.

◆ clan_symbol_to_strings()

struct osl_generic* clan_symbol_to_strings ( clan_symbol_p  symbol,
int  type 
)

clan_symbol_to_strings function: this function builds (and returns a pointer to) an osl_generic_t structure containing the symbol strings of a given type in the symbol table. The osl_generic_t is a shell for an osl_strings_t which actually stores the symbol strings. The symbol strings are sorted in the same order as they appear in the symbol table. If there is no corresponding symbol in the table, it returns NULL.

Parameters
[in]symbolThe top of the symbol table.
[in]typeThe type of the elements.
Returns
An osl_generic_t with the symbol strings of the given type.

Definition at line 483 of file symbol.c.

References clan_symbol_nb_of_type(), clan_symbol::identifier, clan_symbol::next, and clan_symbol::type.

◆ clan_symbol_update_type()

int clan_symbol_update_type ( clan_symbol_p  ,
struct osl_relation_list *  ,
int   
)