public virtual object VisitDestructorDeclaration(DestructorNode destructorDeclaration, object data) { stackMap.Push(destructorDeclaration); destructorDeclaration.Attributes.AcceptVisitor(this, data); destructorDeclaration.StatementBlock.AcceptVisitor(this, data); stackMap.Pop(); return(null); }
private void ParseDestructor() { Advance(); // over tilde DestructorNode node = new DestructorNode(curtok); if (curAttributes.Count > 0) { node.Attributes = curAttributes; curAttributes = new NodeCollection<AttributeNode>(); } uint mask = ~(uint)Modifier.DestructorMods; if (((uint)curmods & mask) != (uint)Modifier.Empty) ReportError("destructor declaration contains illegal modifiers"); ClassNode cl = typeStack.Peek(); cl.Destructors.Add(node); node.Modifiers = curmods; curmods = Modifier.Empty; if ((node.Modifiers & Modifier.Unsafe) != Modifier.Empty) { //unsafe modifier -> unsafe type. isUnsafe++; node.IsUnsafeDeclared = true; } //the destructor is declared in an unsafe type ? node.IsUnsafe = isUnsafe > 0; CheckStaticClass(cl, node.Modifiers, true); if (curtok.ID == TokenID.Ident) { node.Names.Add(ParseQualifiedIdentifier(false, false, true)); } else { ReportError("Destructor requires identifier as name."); } // no args in dtor AssertAndAdvance(TokenID.LParen); AssertAndAdvance(TokenID.RParen); ParseBlock(node.StatementBlock); if ((node.Modifiers & Modifier.Unsafe) != Modifier.Empty) { //unsafe modifier -> unsafe type. isUnsafe--; } }
public virtual object VisitDestructorDeclaration(DestructorNode destructorDeclaration, object data) { stackMap.Push(destructorDeclaration); destructorDeclaration.Attributes.AcceptVisitor(this, data); destructorDeclaration.StatementBlock.AcceptVisitor(this, data); stackMap.Pop(); return null; }