//------------------------------------------------------------------------------ // symtab_delete_entry function // // Destroys a symbol table entry. // void symtab_delete_entry (slcc_symtab_entry* entry) { /* Do not free memory for built-in types */ if (entry->token.type != TT_BUILT_IN && entry->token.type != TT_PREPROCESSOR_BUILT_IN) { free (entry->key); if (entry->value != 0) free (entry->value); } entry->key = 0; entry->value = 0; def_delete (entry->definition); }
static int undef_directive( struct fileinfo_s *pfi ) { const char *pname; int deflen; if ( pfi->ifdefd_out > 0 ) { kill_eol( pfi ); return 0; } while ( pfi->sp[0] && pfi->srcleft > 0 && ! isspace( pfi->sp[0] ) ) { pfi->sp++; pfi->srcleft--; } if ( pfi->srcleft > 0 && isspace( pfi->sp[0] ) ) { pfi->sp++; pfi->srcleft--; } pname = pfi->sp; deflen = getdeflen( pfi->sp, pfi->srcleft ); if ( deflen < 1 || (pfi->sp[deflen] != '\n' && ! isspace( pfi->sp[deflen])) ) { fprintf( stderr, "bad `undef directive.\n" ); return -1; } pfi->sp += deflen; pfi->srcleft -= deflen; kill_eol( pfi ); return def_delete( pfi->deftab, pname, deflen ); }