예제 #1
0
void TY_(FreeTags)( TidyDocImpl* doc )
{
    TidyTagImpl* tags = &doc->tags;

#if ELEMENT_HASH_LOOKUP
    emptyHash( doc, tags );
#endif
    TY_(FreeDeclaredTags)( doc, tagtype_null );
    FreeDict( doc, tags->xml_tags );

    /* get rid of dangling tag references */
    TidyClearMemory( tags, sizeof(TidyTagImpl) );
}
예제 #2
0
/* By default, zap all of them.  But allow
** an single type to be specified.
*/
void TY_(FreeDeclaredTags)( TidyDocImpl* doc, UserTagType tagType )
{
    TidyTagImpl* tags = &doc->tags;
    Dict *curr, *next = NULL, *prev = NULL;

    for ( curr=tags->declared_tag_list; curr; curr = next )
    {
        Bool deleteIt = yes;
        next = curr->next;
        switch ( tagType )
        {
        case tagtype_empty:
            deleteIt = ( curr->model & CM_EMPTY ) != 0;
            break;

        case tagtype_inline:
            deleteIt = ( curr->model & CM_INLINE ) != 0;
            break;

        case tagtype_block:
            deleteIt = ( (curr->model & CM_BLOCK) != 0 &&
                         curr->parser == TY_(ParseBlock) );
            break;

        case tagtype_pre:
            deleteIt = ( (curr->model & CM_BLOCK) != 0 &&
                         curr->parser == TY_(ParsePre) );
            break;

        case tagtype_null:
            break;
        }

        if ( deleteIt )
        {
#if ELEMENT_HASH_LOOKUP
          removeFromHash( doc, &doc->tags, curr->name );
#endif
          FreeDict( doc, curr );
          if ( prev )
            prev->next = next;
          else
            tags->declared_tag_list = next;
        }
        else
          prev = curr;
    }
}
예제 #3
0
파일: vm.c 프로젝트: nexusj/mint-lang
void DeleteObject(Object* obj)
{
	if(obj->type == OBJ_STRING)
		free(obj->string.raw);
	if(obj->type == OBJ_NATIVE)
	{
		if(obj->native.onFree)
			obj->native.onFree(obj->native.value);
	}
	if(obj->type == OBJ_ARRAY)
	{
		free(obj->array.members);
		obj->array.capacity = 0;
		obj->array.length = 0;
	}
	if(obj->type == OBJ_DICT)
		FreeDict(&obj->dict);
}
예제 #4
0
파일: dict.c 프로젝트: nexusj/mint-lang
void DictResize(Dict* dict, int newCapacity)
{	
	Dict newDict;
	InternalInitDict(&newDict, dict->capacity * 2);
	
	for(int i = 0; i < dict->capacity; ++i)
	{
		DictNode* node = dict->buckets[i];
		while(node)
		{
			DictPut(&newDict, node->key, node->value);
			node = node->next;
		}
	}
	
	Dict swap = *dict;
	*dict = newDict;
	newDict = swap;
	
	FreeDict(&newDict);
}