Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Solution to [Bug 43053] require reference cleanup for expressions


Core:
        -Solution to [Bug 43053] require reference cleanup for expressions
        Added purgeReferences() at the end of ASTExpression::acceptElement()

Hoda Amer
Staff Software Engineer
Rational Software - IBM Software Group


Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.144
diff -u -r1.144 ChangeLog
--- parser/ChangeLog	30 Sep 2003 18:03:15 -0000	1.144
+++ parser/ChangeLog	30 Sep 2003 18:34:00 -0000
@@ -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
Index: parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java,v
retrieving revision 1.9
diff -u -r1.9 IASTExpression.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java	23 Sep 2003 22:58:34 -0000	1.9
+++ parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java	30 Sep 2003 18:34:01 -0000
@@ -141,5 +141,6 @@
 	
 	public int evaluateExpression() throws ExpressionEvaluationException;
 	public void reconcileReferences() throws ASTNotImplementedException;
+	public void purgeReferences() throws ASTNotImplementedException;
 	
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java,v
retrieving revision 1.4
diff -u -r1.4 ASTExpression.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java	23 Sep 2003 22:58:34 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java	30 Sep 2003 18:34:01 -0000
@@ -155,6 +155,15 @@
 	
 		if( newDescriptor != null )
 			newDescriptor.acceptElement(requestor);
+			
+		try
+		{
+			purgeReferences();
+		}
+		catch (ASTNotImplementedException e)
+		{
+			// will not get thrown
+		}
     }
     
     /* (non-Javadoc)
@@ -226,5 +235,28 @@
         	}   		
         }
     }
+	/* (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();
+		}
+	}
 
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java,v
retrieving revision 1.4
diff -u -r1.4 ASTExpression.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java	23 Sep 2003 22:58:34 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExpression.java	30 Sep 2003 18:34:01 -0000
@@ -195,7 +195,13 @@
     {
     	throw new ASTNotImplementedException();
     }
-
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.parser.ast.IASTExpression#purgeReferences()
+	 */
+	public void purgeReferences() throws ASTNotImplementedException
+	{
+		throw new ASTNotImplementedException();
+	}
 
 
 }

Back to the top