4 #include "symbol_table.h"
7 symbol_new(char const * name
)
9 Symbol
* symbol
= (Symbol
*) malloc (sizeof(Symbol
));
10 symbol
->type
= NONE_TYPE
;
11 value_set(&symbol
->value
, symbol
->type
, NULL
);
15 symbol
->name
= strdup(name
);
22 /* Insere um simbolo na tabela indicada.
23 * Caso o simbolo ja exista, a memoria do
24 * simbolo do parametro sera liberada.
25 * Returns: O simbolo passado como parametro,
26 * caso este ainda nao esteja na tabela,
27 * ou um ponteiro para o simbolo encontrado.
30 symbol_insert(Symbol
*symtab
, Symbol
*symbol
)
37 sym
= symbol_lookup(symtab
->next
, symbol
->name
);
45 //printf("symbol %x (next %x)\nsym %x\n", symbol, symbol->next, sym);
47 symbol
->next
= symtab
->next
;
48 symtab
->next
= symbol
;
50 symbol_table_dump(symtab
);
51 //printf("symbol %x (next %x)\nsym %x\n", symbol, symbol->next, sym);
56 symbol_lookup(Symbol
*symtab
, char const *name
)
60 for (temp
= symtab
; temp
!= NULL
; temp
= temp
->next
) {
61 if (!strcmp (temp
->name
, name
))
69 symbol_table_destroy(Symbol
*symtab
)
76 while (first
!= NULL
) {
79 if (to_kill
->name
!= NULL
)
86 symbol_print(Symbol
*symbol
)
93 printf("Symbol: %x\n", symbol
);
94 printf("name: %s\n", symbol
->name
);
95 printf("type: %d\n", symbol
->type
);
97 value_print(&symbol
->value
, symbol
->type
);
98 printf("\nnext: %x\n\n", symbol
->next
);
102 symbol_table_dump(Symbol
*symtab
)
104 Symbol
*temp
= symtab
;
106 for (temp
= symtab
->next
; temp
!= NULL
; temp
= temp
->next
)