void ClassMemberDecl( #line 1076 "Frames/cs.ATG" ModifierList m, List<AttributeSection> attributes) { #line 1077 "Frames/cs.ATG" Statement stmt = null; if (StartOf(21)) { StructMemberDecl( #line 1079 "Frames/cs.ATG" m, attributes); } else if (la.kind == 27) { #line 1080 "Frames/cs.ATG" m.Check(Modifiers.Destructors); Location startPos = la.Location; lexer.NextToken(); Identifier(); #line 1081 "Frames/cs.ATG" DestructorDeclaration d = new DestructorDeclaration(t.val, m.Modifier, attributes); d.Modifier = m.Modifier; d.StartLocation = m.GetDeclarationLocation(startPos); Expect(20); Expect(21); #line 1085 "Frames/cs.ATG" d.EndLocation = t.EndLocation; if (la.kind == 16) { Block( #line 1085 "Frames/cs.ATG" out stmt); } else if (la.kind == 11) { lexer.NextToken(); } else SynErr(160); #line 1086 "Frames/cs.ATG" d.Body = (BlockStatement)stmt; compilationUnit.AddChild(d); } else SynErr(161); }
public virtual object VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) { Debug.Assert((destructorDeclaration != null)); Debug.Assert((destructorDeclaration.Attributes != null)); Debug.Assert((destructorDeclaration.Body != null)); foreach (AttributeSection o in destructorDeclaration.Attributes) { Debug.Assert(o != null); o.AcceptVisitor(this, data); } return destructorDeclaration.Body.AcceptVisitor(this, data); }
public virtual object TrackedVisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) { return base.VisitDestructorDeclaration(destructorDeclaration, data); }
public sealed override object VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) { this.BeginVisit(destructorDeclaration); object result = this.TrackedVisitDestructorDeclaration(destructorDeclaration, data); this.EndVisit(destructorDeclaration); return result; }
public override object VisitMethodDeclaration(MethodDeclaration methodDeclaration, object data) { if (!IsClassType(ClassType.Interface) && (methodDeclaration.Modifier & Modifiers.Visibility) == 0) methodDeclaration.Modifier |= Modifiers.Public; if ("Finalize".Equals(methodDeclaration.Name, StringComparison.InvariantCultureIgnoreCase) && methodDeclaration.Parameters.Count == 0 && methodDeclaration.Modifier == (Modifiers.Protected | Modifiers.Override) && methodDeclaration.Body.Children.Count == 1) { TryCatchStatement tcs = methodDeclaration.Body.Children[0] as TryCatchStatement; if (tcs != null && tcs.StatementBlock is BlockStatement && tcs.CatchClauses.Count == 0 && tcs.FinallyBlock is BlockStatement && tcs.FinallyBlock.Children.Count == 1) { ExpressionStatement se = tcs.FinallyBlock.Children[0] as ExpressionStatement; if (se != null) { InvocationExpression ie = se.Expression as InvocationExpression; if (ie != null && ie.Arguments.Count == 0 && ie.TargetObject is MemberReferenceExpression && (ie.TargetObject as MemberReferenceExpression).TargetObject is BaseReferenceExpression && "Finalize".Equals((ie.TargetObject as MemberReferenceExpression).MemberName, StringComparison.InvariantCultureIgnoreCase)) { DestructorDeclaration des = new DestructorDeclaration("Destructor", Modifiers.None, methodDeclaration.Attributes); ReplaceCurrentNode(des); des.Body = (BlockStatement)tcs.StatementBlock; return base.VisitDestructorDeclaration(des, data); } } } } if ((methodDeclaration.Modifier & (Modifiers.Static | Modifiers.Extern)) == Modifiers.Static && methodDeclaration.Body.Children.Count == 0) { foreach (AttributeSection sec in methodDeclaration.Attributes) { foreach (Attribute att in sec.Attributes) { if ("DllImport".Equals(att.Name, StringComparison.InvariantCultureIgnoreCase)) { methodDeclaration.Modifier |= Modifiers.Extern; methodDeclaration.Body = null; } } } } if (methodDeclaration.TypeReference.Type != "System.Void" && methodDeclaration.Body.Children.Count > 0) { if (IsAssignmentTo(methodDeclaration.Body.Children[methodDeclaration.Body.Children.Count - 1], methodDeclaration.Name)) { Expression returnValue = GetAssignmentFromStatement(methodDeclaration.Body.Children[methodDeclaration.Body.Children.Count - 1]).Right; methodDeclaration.Body.Children.RemoveAt(methodDeclaration.Body.Children.Count - 1); methodDeclaration.Body.Return(returnValue); } else { ReturnStatementForFunctionAssignment visitor = new ReturnStatementForFunctionAssignment(methodDeclaration.Name); methodDeclaration.Body.AcceptVisitor(visitor, null); if (visitor.replacementCount > 0) { Expression init; init = ExpressionBuilder.CreateDefaultValueForType(methodDeclaration.TypeReference); methodDeclaration.Body.Children.Insert(0, new LocalVariableDeclaration(new VariableDeclaration(FunctionReturnValueName, init, methodDeclaration.TypeReference))); methodDeclaration.Body.Children[0].Parent = methodDeclaration.Body; methodDeclaration.Body.Return(new IdentifierExpression(FunctionReturnValueName)); } } } return base.VisitMethodDeclaration(methodDeclaration, data); }
public virtual object VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) { Debug.Assert((destructorDeclaration != null)); Debug.Assert((destructorDeclaration.Attributes != null)); Debug.Assert((destructorDeclaration.Body != null)); for (int i = 0; i < destructorDeclaration.Attributes.Count; i++) { AttributeSection o = destructorDeclaration.Attributes[i]; Debug.Assert(o != null); nodeStack.Push(o); o.AcceptVisitor(this, data); o = (AttributeSection)nodeStack.Pop(); if (o == null) destructorDeclaration.Attributes.RemoveAt(i--); else destructorDeclaration.Attributes[i] = o; } nodeStack.Push(destructorDeclaration.Body); destructorDeclaration.Body.AcceptVisitor(this, data); destructorDeclaration.Body = ((BlockStatement)(nodeStack.Pop())); return null; }
public virtual object VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) { throw new global::System.NotImplementedException("DestructorDeclaration"); }