//------------------------------------------------------------------------------
// 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);
}
Esempio n. 2
0
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 );
}