Beispiel #1
0
void mio_close(MFP* mfp)
{
   assert(mfp_is_valid(mfp));

   switch(mfp->type)
   {
   case MFP_STRG :
      break;
   case MFP_FILE :
      fclose(mfp->fp.file);
      break;
   case MFP_PIPE :
      pclose(mfp->fp.file);
      break;
#ifndef WITHOUT_ZLIB
   case MFP_ZLIB :
      gzclose(mfp->fp.zlib);
      break;
#endif /* ! WITHOUT_ZLIB */
   default :
      abort();
   }
   SID_del(mfp);
      
   free(mfp);
}
Beispiel #2
0
void symbol_exit(void)
{
   Symbol* q;
   Symbol* p;
   int     i;
   
   for(p = anchor; p != NULL; p = q)
   {
      assert(symbol_is_valid(p));

      SID_del(p);

      q = p->next;
      
      for(i = 0; i < p->used; i++)
         entry_free(p->entry[i]);

      free(p->entry);
      set_free(p->set);
      hash_free(p->hash);

      if (p->deflt != NULL)
         entry_free(p->deflt);

      free(p);
   }
   anchor = NULL;
}
Beispiel #3
0
void rpar_free(RPar* rpar)
{
   assert(rpar_is_valid(rpar));

   SID_del(rpar);

   free(rpar);
}
Beispiel #4
0
void stmt_free(Stmt* stmt)
{
   assert(stmt_is_valid(stmt));

   SID_del(stmt);
   
   if (stmt->node != NULL)
      code_free(stmt->node);

   free((void*)stmt->filename);
   free((void*)stmt->text);
   free(stmt);
}
Beispiel #5
0
void rdef_free(RDef* rdef)
{
   assert(rdef_is_valid(rdef));

   rdef->refc--;
   
   if (rdef->refc == 0)
   {
      SID_del(rdef);

      free(rdef);
   }
}
Beispiel #6
0
void define_exit(void)
{
   Define* q;
   Define* p;
   
   for(p = anchor.next; p != NULL; p = q)
   {
      assert(define_is_valid(p));

      SID_del(p);

      tuple_free(p->param);
      
      q = p->next;
      
      free(p);
   }
   anchor.next = NULL;
}
Beispiel #7
0
void list_free(List* list)
{   
   ListElem* p;
   ListElem* q;
   
   assert(list_is_valid(list));

   list->refc--;

   if (list->refc == 0)
   {
      SID_del(list);

      for(p = list->anchor.next; p != &list->anchor; p = q)
      {
         q = p->next;
         
         switch(list->type)
         {
         case LIST_ELEM :
            elem_free(p->data.elem);
            break;
         case LIST_TUPLE :
            tuple_free(p->data.tuple);
            break;
         case LIST_ENTRY :
            entry_free(p->data.entry);
            break;
         case LIST_IDXELEM :
            break;
         case LIST_LIST :
            list_free(p->data.list);
            break;
         default :
            abort();
         }
         blk_free(p, sizeof(*p));
      }
      free(list);
   }
}
Beispiel #8
0
void mio_exit()
{
   StrgFile* p;
   StrgFile* q;
   
   for(p = strg_file_root; p != NULL; p = q)
   {
      q = p->next;

      assert(strgfile_is_valid(p));

      free((void*)p->name);
      
      if (p->use_copy)
         free((void*)p->content);
      
      SID_del(p);
      
      free(p);
   }
   strg_file_root = NULL;
}
Beispiel #9
0
void hash_free(Hash* hash)
{
   HElem*       he;
   HElem*       hq;
   unsigned int i;
      
   assert(hash_is_valid(hash));

   if (verbose >= VERB_CHATTER)
      hash_statist(stderr, hash);
   
   SID_del(hash);

   for(i = 0; i < hash->size; i++)
   {
      for(he = hash->bucket[i]; he != NULL; he = hq)
      {
         hq = he->next;
         blk_free(he, sizeof(*he));
      }
   }
   free(hash->bucket);
   free(hash);
}