Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Patch - Parser defects addressed for April Fools

CORE
 - fixed bug35906
 - updated scanner to not puke on certain control characters

TESTS
 - added testBug35906() to DOMTests.

JohnC

Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.15
diff -u -r1.15 ChangeLog
--- parser/ChangeLog	1 Apr 2003 18:52:37 -0000	1.15
+++ parser/ChangeLog	1 Apr 2003 22:13:45 -0000
@@ -1,3 +1,7 @@
+2003-04-01 John Camelon
+	Fixed bug35906
+	Udated Scanner to not puke on certain control characters.
+
 2003-03-31 John Camelon
 	Fixed unsigned short SimpleDeclarations not showing up in the outline view.  
 	Fixed default visibilities for structs in outline view.  
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.16
diff -u -r1.16 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	1 Apr 2003 19:50:53 -0000	1.16
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	1 Apr 2003 22:13:45 -0000
@@ -359,6 +359,7 @@
 		}
 		else
 		{
+			elem.setTypeName( wrapper.getClassKind().getImage() );
 			elem.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
 			elem.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());		
 		}
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.18
diff -u -r1.18 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	1 Apr 2003 18:52:18 -0000	1.18
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	1 Apr 2003 22:13:47 -0000
@@ -719,7 +719,7 @@
 						// this is an elaborated class specifier
 						Object elab = null; 
 						try{ elab = callback.elaboratedTypeSpecifierBegin( decl, consume() );} catch( Exception e ) {} 
-						className(); 
+						name(); 
 						try{ callback.elaboratedTypeSpecifierName( elab ); } catch( Exception e ) {}
 						try{ callback.elaboratedTypeSpecifierEnd( elab );} catch( Exception e ) {}
 						encounteredTypename = true;
@@ -830,6 +830,25 @@
 		switch (LT(1)) {
 			case Token.tIDENTIFIER:
 				last = consume();
+				if( LT(1) == Token.tLT )
+				{
+					consume( Token.tLT );
+				
+					// until we get all the names sorted out
+					int depth = 1; 
+
+					while (depth > 0) {
+						last = consume();
+						switch ( last.getType()) {
+							case Token.tGT:
+								--depth;
+								break;
+							case Token.tLT:
+								++depth;
+							break;
+						}
+					}
+				}
 				break;
 			default:
 				throw backtrack;
@@ -844,6 +863,26 @@
 			switch (LT(1)) {
 				case Token.tIDENTIFIER:
 					last = consume();
+					if( LT(1) == Token.tLT )
+					{
+						consume( Token.tLT );
+				
+						// until we get all the names sorted out
+						int depth = 1; 
+
+						while (depth > 0) {
+							last = consume();
+							switch ( last.getType()) {
+								case Token.tGT:
+									--depth;
+									break;
+								case Token.tLT:
+									++depth;
+								break;
+							}
+						}
+					}
+				
 			}
 		}
 
Index: parser/org/eclipse/cdt/internal/core/parser/Scanner.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java,v
retrieving revision 1.11
diff -u -r1.11 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java	1 Apr 2003 18:52:18 -0000	1.11
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java	1 Apr 2003 22:13:48 -0000
@@ -347,7 +347,7 @@
 	private boolean throwExceptionOnUnboundedString = true;
 	private boolean throwExceptionOnEOFWithinMultilineComment = true;
 	private boolean throwExceptionOnEOFWithoutBalancedEndifs = true;
-	private boolean throwExceptionOnBadCharacterRead = true; 
+	private boolean throwExceptionOnBadCharacterRead = false; 
 
 	private boolean quickScan = false;
 	public void setQuickScan(boolean qs) {
@@ -1194,7 +1194,11 @@
 						// Bad character
 						if( throwExceptionOnBadCharacterRead )
 							throw new ScannerException( "Invalid character '" + (char)c + "' read @ offset " + currentContext.getOffset() + " of file " + currentContext.getFilename() );
-						break;
+						else
+						{
+							c = getChar();
+							continue;
+						}
 				}
 
 				throw Parser.endOfFile;
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.16
diff -u -r1.16 ChangeLog
--- ChangeLog	1 Apr 2003 18:54:16 -0000	1.16
+++ ChangeLog	1 Apr 2003 22:14:25 -0000
@@ -1,3 +1,6 @@
+2003-04-01
+	Added testBug35906() to DOMTests.
+
 2003-03-31 John Camelon
 	Added testStruct() to DOMTests.  
 	Added test35892()to ScannerTest. 
Index: parser/org/eclipse/cdt/core/parser/tests/DOMTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java,v
retrieving revision 1.11
diff -u -r1.11 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	1 Apr 2003 18:54:08 -0000	1.11
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	1 Apr 2003 22:14:26 -0000
@@ -968,6 +968,26 @@
 		assertEquals( d.getPointerOperators().size(), 0 );
 		assertEquals( d.getName().toString(), "left" );
 	}
-	
+
+
+	public void testBug35906() throws Exception
+	{
+		StringWriter code = new StringWriter(); 
+		code.write( "void TTest::MTest() {}\n" ); 
+		code.write( "struct TTest::STest *TTest::FTest (int i) {}\n" ); 
+		TranslationUnit tu = parse( code.toString() );
+		assertEquals( tu.getDeclarations().size(), 2 );
+		SimpleDeclaration declaration = (SimpleDeclaration)tu.getDeclarations().get(0);
+		assertEquals( declaration.getDeclSpecifier().getType(), DeclSpecifier.t_void );
+		assertEquals( declaration.getDeclarators().size(), 1 );
+		Declarator d = (Declarator)declaration.getDeclarators().get(0);
+		assertEquals( d.getName().toString(), "TTest::MTest");
+		
+		declaration = (SimpleDeclaration)tu.getDeclarations().get(1);
+		ElaboratedTypeSpecifier spec = (ElaboratedTypeSpecifier)declaration.getTypeSpecifier();
+		assertEquals( spec.getClassKey(), ClassKey.t_struct );
+		assertEquals( spec.getName().toString(), "TTest::STest" );
+	}
+
 }
 

Back to the top