{
case enumType:
{
- NamedLink member, next;
- if(type.enumName)
- delete type.enumName;
+ NamedLink64 member, next;
+ delete type.enumName;
for(member = type.members.first; member; member = next)
{
next = member.next;
FreeList(spec.templateArgs, FreeTemplateArgument);
spec.templateArgs = null;
}
+ if(spec.nsSpec)
+ {
+ FreeSpecifier(spec.nsSpec);
+ spec.nsSpec = null;
+ }
break;
case extendedSpecifier:
if(spec.extDecl)
if(stmt._watch.object)
FreeExpression(stmt._watch.object);
if(stmt._watch.watches)
- FreeList(stmt._watch.watches, (stmt.type == watchStmt) ? FreePropertyWatch : FreeIdentifier);
+ FreeList(stmt._watch.watches, (stmt.type == watchStmt) ? (void *)FreePropertyWatch : (void *)FreeIdentifier);
break;
}
}
switch(initializer.type)
{
case listInitializer:
- {
FreeList(initializer.list, FreeInitializer);
break;
- }
case expInitializer:
if(initializer.exp)
FreeExpression(initializer.exp);
- if(initializer.id)
- FreeIdentifier(initializer.id);
break;
}
+ if(initializer.id)
+ FreeIdentifier(initializer.id);
delete initializer;
}
void FreeExternal(External external)
{
+ TopoEdge e;
+ while((e = external.incoming.first))
+ {
+ e.from.outgoing.Remove((IteratorPointer)e);
+ external.incoming.Remove((IteratorPointer)e);
+ delete e;
+ }
+ while((e = external.outgoing.first))
+ {
+ e.to.incoming.Remove((IteratorPointer)e);
+ external.outgoing.Remove((IteratorPointer)e);
+ if(!e.breakable)
+ e.to.nonBreakableIncoming--;
+ delete e;
+ }
switch(external.type)
{
case functionExternal: