diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index a09e127f6a7..683ab7f81a0 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,7 @@ +2003-09-30 Hoda Amer + -Solution to [Bug 43053] require reference cleanup for expressions + Added purgeReferences() at the end of ASTExpression::acceptElement() + 2003-09-30 Andrew Niefer PST changes for bug 43503 - parser needs to know the different between ambiguous functions and no functions when no parameter information is provided diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java index 72d43e4804d..3359d1c1532 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java @@ -141,5 +141,6 @@ public interface IASTExpression extends ISourceElementCallbackDelegate public int evaluateExpression() throws ExpressionEvaluationException; public void reconcileReferences() throws ASTNotImplementedException; + public void purgeReferences() throws ASTNotImplementedException; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java index 1c04eaf0ce1..ca1cdb277f7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java @@ -155,6 +155,15 @@ public class ASTExpression implements IASTExpression if( newDescriptor != null ) newDescriptor.acceptElement(requestor); + + try + { + purgeReferences(); + } + catch (ASTNotImplementedException e) + { + // will not get thrown + } } /* (non-Javadoc) @@ -226,5 +235,28 @@ public class ASTExpression implements IASTExpression } } } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#purgeReferences() + */ + public void purgeReferences() throws ASTNotImplementedException + { + if( lhs != null ) + lhs.purgeReferences(); + if( rhs != null ) + rhs.purgeReferences(); + if( thirdExpression != null ) + thirdExpression.purgeReferences(); + + purgeSubExpression((ASTExpression)lhs); + purgeSubExpression((ASTExpression)rhs); + purgeSubExpression((ASTExpression)thirdExpression); + } + protected void purgeSubExpression(ASTExpression subExpression) + { + if( subExpression != null && subExpression.getReferences() != null ) + { + subExpression.getReferences().clear(); + } + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java index b4e491be5f1..d6b155b5c02 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java @@ -195,7 +195,13 @@ public class ASTExpression implements IASTExpression { { throw new ASTNotImplementedException(); } - + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#purgeReferences() + */ + public void purgeReferences() throws ASTNotImplementedException + { + throw new ASTNotImplementedException(); + } }