Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Applied Patch - Parser fixes

Some minor fixes to get constructors/destructors parsing as well as some minor clean up and robustness.

 

Doug Schaefer
Senior Staff Software Engineer

Rational Software - IBM Software Group
Ottawa (Kanata), Ontario, Canada

 

Index: parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java,v
retrieving revision 1.3
diff -u -r1.3 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	6 Mar 2003 19:29:36 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	6 Mar 2003 19:42:20 -0000
@@ -120,7 +120,6 @@
 		elem.setPos(offset, macroName.length());
 
 		((TranslationUnit)translationUnit.getElement()).addChild(elem);
-		
 	}
 
 	private int startPos;
@@ -150,7 +149,6 @@
 		((TranslationUnit)translationUnit.getElement()).addChild(elem);
 		elem.setIdPos(offset, includeFile.length());
 		elem.setPos(offset, includeFile.length());
-
 	}
 
 	/**
Index: parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java,v
retrieving revision 1.4
diff -u -r1.4 SimpleDeclarationWrapper.java
--- parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java	6 Mar 2003 19:29:36 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java	6 Mar 2003 19:42:20 -0000
@@ -78,6 +78,10 @@
 			List clause =currentDeclarator.getParameterDeclarationClause(); 
 			if( clause == null )
 			{
+				// TODO - this was to get rid of the NULL pointer we've been seeing
+				if (currentDeclarator.getName() == null)
+					return;
+
 				//	this is an attribute or a varaible
 				if( parentElement instanceof IStructure )
 				{
@@ -85,9 +89,6 @@
 				}
 				else if( parentElement instanceof ITranslationUnit )
 				{
-					// TODO - this was to get rid of the NULL pointer we've been seeing
-					if (currentDeclarator.getName() == null)
-						return;
 					declaration = new Variable( parentElement, currentDeclarator.getName().toString() );
 				}
 			}
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.4
diff -u -r1.4 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	6 Mar 2003 19:29:36 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	6 Mar 2003 19:42:21 -0000
@@ -78,10 +78,10 @@
 	public void translationUnit() throws Exception {
 		Object translationUnit = callback.translationUnitBegin();
 		Token lastBacktrack = null;
-		Token lastToken = null; 
+		Token lastToken = null;
 		while (LT(1) != Token.tEOF) {
 			try {
-				lastToken = currToken; 
+				lastToken = currToken;
 				declaration( translationUnit );
 				if( currToken == lastToken )
 					skipToNextSemi();
@@ -295,6 +295,8 @@
 				case Token.t_friend:
 				case Token.t_const:
 				case Token.t_volatile:
+					callback.simpleDeclSpecifier(decl, consume());
+					break;
 				case Token.t_char:
 				case Token.t_wchar_t:
 				case Token.t_bool:
@@ -317,7 +319,8 @@
 					consume();
 					// handle nested later:
 				case Token.tIDENTIFIER:
-					if( ! encounteredRawType )
+					// TODO - Kludgy way to handle constructors/destructors
+					if (!encounteredRawType && LT(2) != Token.tCOLONCOLON && LT(2) != Token.tLPAREN)
 					{
 						// handle nested later:
 						if( ! encounteredTypename )
@@ -367,9 +370,11 @@
 			last = consume();
 
 		// TODO - whacky way to deal with destructors, please revisit
+		if (LT(1) == Token.tCOMPL)
+			consume();
+				
 		switch (LT(1)) {
 			case Token.tIDENTIFIER:
-			case Token.tCOMPL:
 				last = consume();
 				break;
 			default:
@@ -379,9 +384,11 @@
 		while (LT(1) == Token.tCOLONCOLON) {
 			last = consume();
 			
+			if (LT(1) == Token.tCOMPL)
+				consume();
+				
 			switch (LT(1)) {
 				case Token.tIDENTIFIER:
-				case Token.tCOMPL:
 					last = consume();
 			}
 		}
@@ -430,6 +437,16 @@
 				// doNothing
 			}
 			
+			// assignmentExpression || { initializerList , } || { }
+			try
+			{
+				assignmentExpression();  
+			}
+			catch( Backtrack b )
+			{
+				// doNothing
+			}
+			
 			if (LT(1) == Token.tLBRACE) {
 				// for now, just consume to matching brace
 				consume();
@@ -448,6 +465,9 @@
 					}
 				}
 			}
+			else
+			{
+			}
 		}
 		
 		callback.declaratorEnd( declarator );
@@ -550,7 +570,7 @@
 		
 		Token mark = mark();
 		if (t == Token.tIDENTIFIER || t == Token.tCOLONCOLON)
-		name();
+			name();
 
 		if (t == Token.tSTAR) {
 			consume();
@@ -610,6 +630,8 @@
 			
 			memberDeclarationLoop:
 			while (LT(1) != Token.tRBRACE) {
+				Token lastToken = currToken;
+			
 				switch (LT(1)) {
 					case Token.t_public:
 						consume();
@@ -629,6 +651,8 @@
 					default:
 						declaration(classSpec);
 				}
+				if (lastToken == currToken)
+					skipToNextSemi();
 			}
 			// consume the }
 			consume();

Back to the top