コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Parser.cs プロジェクト: mintberry/stackrecaller
		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--;
            }
		}
コード例 #3
0
        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;

        }