Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Scanner bug fixes on 1_1

Title: Applied [ HEAD & 1_1 ] Parser bugfixes
Core
    Fixed bug36771 - Outline view shows include with no name
    Fixed bug36714 - Parser fails on initial assignment using floating-suffix
    Revisted bug36816 - Incomplete #include stops outline view
 
Tests
    Moved ACEFailedTest::testBug36771 to DOMTests
    Moved DOMFailedTest::testBug36714 to DOMTests
    Updated ScannerTestCase::testBug36816
 
-Andrew
 
 
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.37.2.5
diff -u -r1.37.2.5 ChangeLog
--- ChangeLog	25 Apr 2003 16:13:43 -0000	1.37.2.5
+++ ChangeLog	25 Apr 2003 17:17:11 -0000
@@ -1,3 +1,8 @@
+2003-04-25 Andrew Niefer
+	Moved ACEFailedTest::testBug36771 to DOMTests
+	Moved DOMFailedTest::testBug36714 to DOMTests
+	Updated ScannerTestCase::testBug36816
+	
 2003-04-25 John Camelon
 	Added DOMTests::testBug36852(). 
 	Added DOMTests::testBug36764().
Index: failures/org/eclipse/cdt/core/parser/failedTests/ACEFailedTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/failures/org/eclipse/cdt/core/parser/failedTests/ACEFailedTest.java,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 ACEFailedTest.java
--- failures/org/eclipse/cdt/core/parser/failedTests/ACEFailedTest.java	24 Apr 2003 21:00:50 -0000	1.1.2.1
+++ failures/org/eclipse/cdt/core/parser/failedTests/ACEFailedTest.java	25 Apr 2003 17:17:11 -0000
@@ -31,12 +31,6 @@
 		super(arg);
 	}
 	
-	public void testBug36771() throws Exception {
-		Writer code = new StringWriter();
-		code.write("#include /**/ \"foo.h\"\n");
-		failTest( code.toString());
-	}
-	
 	public void testBug36769() throws Exception {
 		Writer code = new StringWriter();
 		code.write("template <class A, B> cls<A, C>::operator op &() const {}\n");
Index: failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java,v
retrieving revision 1.3.2.3
diff -u -r1.3.2.3 DOMFailedTest.java
--- failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java	25 Apr 2003 16:13:43 -0000	1.3.2.3
+++ failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java	25 Apr 2003 17:17:11 -0000
@@ -50,15 +50,6 @@
 		code.write("{};\n");
 		failTest(code.toString());
 	}
-
-	
-	public void testBug36714() throws Exception {
-		Writer code = new StringWriter();
-		code.write("unsigned long a = 0UL;\n");
-		code.write("unsigned long a2 = 0L; \n");
-
-		failTest(code.toString());
-	}
 	
 	public void testBug36730(){
 		failTest("FUNCTION_MACRO( 1, a );\n	int i;");
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.25.2.3
diff -u -r1.25.2.3 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	25 Apr 2003 16:13:43 -0000	1.25.2.3
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	25 Apr 2003 17:17:12 -0000
@@ -1691,7 +1691,26 @@
 		TranslationUnit tu = parse( code.toString() );
 		
 	}
-
-
+	
+	public void testBug36771() throws Exception {
+		Writer code = new StringWriter();
+		code.write("#include /**/ \"foo.h\"\n");
+	
+		TranslationUnit tu = parse( code.toString(), true, true );
+	
+		List includes = tu.getInclusions();
+	
+		assertEquals( includes.size(), 1 );
+		Inclusion include = (Inclusion)includes.get(0);
+		assertTrue( include.getName().equals("foo.h") );
+	}
+	
+	public void testBug36714() throws Exception {
+		Writer code = new StringWriter();
+		code.write("unsigned long a = 0UL;\n");
+		code.write("unsigned long a2 = 0L; \n");
+	
+		TranslationUnit tu = parse( code.toString() );
+	}
 }
 
Index: parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java,v
retrieving revision 1.16.2.2
diff -u -r1.16.2.2 ScannerTestCase.java
--- parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java	24 Apr 2003 21:00:50 -0000	1.16.2.2
+++ parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java	25 Apr 2003 17:17:12 -0000
@@ -1264,16 +1264,37 @@
 	public void testBug36816() throws Exception
 	{
 		initializeScanner( "#include \"foo.h" );
-		validateEOF();
-		
+		try{
+			validateEOF();
+		} catch ( ScannerException e ){
+			assertTrue( e.getMessage().equals( "Ill-formed #include: reached end of line before \"" ));
+		}
+	
 		initializeScanner( "#include <foo.h" );
-		validateEOF();
-		
+		try{
+			validateEOF();
+		} catch ( ScannerException e ){
+			assertTrue( e.getMessage().equals( "Ill-formed #include: reached end of line before >" ));
+		}		
 		initializeScanner( "#define FOO(A" );
-		validateEOF();
+		try{
+			validateEOF();
+		} catch( ScannerException e ){
+			assertTrue( e.getMessage().equals( "Unexpected newline in macro formal parameter list."));
+		}
+		initializeScanner( "#define FOO(A \\ B" );
+		try{
+			validateEOF();
+		} catch( ScannerException e ){
+			assertTrue( e.getMessage().equals( "Unexpected '\\' in macro formal parameter list."));
+		}
 		
-		initializeScanner( "#define FOO(A) 1\n FOO(foo" );
-		validateInteger("1");
+		initializeScanner( "#define FOO(A,\\\nB) 1\n FOO(foo" );
+		try{
+			validateInteger("1");
+		} catch( ScannerException e ){
+			assertTrue( e.getMessage().equals( "Improper use of macro FOO" ) );
+		}
 	}
 	
 	public void testBug36255() throws Exception
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.36.2.4
diff -u -r1.36.2.4 ChangeLog
--- parser/ChangeLog	25 Apr 2003 16:13:41 -0000	1.36.2.4
+++ parser/ChangeLog	25 Apr 2003 17:18:44 -0000
@@ -1,3 +1,8 @@
+2003-04-25 Andrew Niefer
+	Fixed bug36771	  - Outline view shows include with no name
+	Fixed bug36714	  - Parser fails on initial assignment using floating-suffix 
+	Revisted bug36816 - Incomplete #include stops outline view 
+
 2003-04-25 John Camelon
 	Fixed bug36852  - outline window doesn't show all functions 
 	Fixed bug36764  - Bit fields cause parse errors 
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.23.2.1
diff -u -r1.23.2.1 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java	24 Apr 2003 18:50:47 -0000	1.23.2.1
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java	25 Apr 2003 17:18:45 -0000
@@ -711,8 +711,24 @@
 						buff.append( (char)c );
 						c = getChar(); 
 					}
-					
-					
+				} else {
+					if( floatingPoint ){
+						//floating-suffix
+						if( c == 'l' || c == 'L' || c == 'f' || c == 'F' ){
+							c = getChar();
+						}
+					} else {
+						//integer suffix
+						if( c == 'u' || c == 'U' ){
+							c = getChar();
+							if( c == 'l' || c == 'L')
+								c = getChar();
+						} else if( c == 'l' || c == 'L' ){
+							c = getChar();
+							if( c == 'u' || c == 'U' )
+								c = getChar();
+						}
+					}
 				}
 
 				ungetChar( c );
@@ -1557,33 +1573,49 @@
 		skipOverWhitespace();
 		int c = getChar();
 		int offset;
-
-		StringBuffer fileName = new StringBuffer();
-		boolean useIncludePath = true;
-		if (c == '<') {
+		
+		if( c == '/' ){
 			c = getChar();
-			while (c != '>') {
-				if( c == NOCHAR ){
-					//don't attempt an include if we hit the end of file before closing the brackets
-					return;
-				}
-				fileName.append((char) c);
+			if( c == '*' ){
+				skipOverMultilineComment();
+				skipOverWhitespace();
 				c = getChar();
+			} else {
+				if( throwExceptionOnBadPreprocessorSyntax )
+					throw new ScannerException( "Encountered ill-formed #include" );
+				else return;
 			}
 		}
-		else if (c == '"') {
-			c = getChar();
-			while (c != '"') {
-				if( c == NOCHAR ){
-					//don't attempt an include if we hit the end of file before closing the quotes
-					return;
-				}
-				fileName.append((char) c);
+
+		StringBuffer fileName = new StringBuffer();
+		boolean useIncludePath = true;
+		int endChar = -1;
+		if( c == '<' ){
+			endChar = '>'; 		 
+		} else if ( c == '"' ){
+			endChar = '"';
+			useIncludePath = false;
+		} else {
+			if( throwExceptionOnBadPreprocessorSyntax )
+				throw new ScannerException( "Encountered ill-formed #include");
+			else return; 
+		}
+		
+		c = getChar();
+
+		while ((c != '\n') && (c != endChar) && (c != NOCHAR)){
+			if( c == '\r' ){
 				c = getChar();
+				continue;
 			}
-			useIncludePath = false; 
-			// TO DO: Make sure the directory of the current file is in the
-			// inclusion paths.
+			fileName.append((char) c);
+			c = getChar();
+		}
+			
+		if( c != endChar ){ 
+			if( throwExceptionOnBadPreprocessorSyntax )
+				throw new ScannerException( "Ill-formed #include: reached end of line before " + (char)endChar );
+			else return;
 		}
 		
 		String f = fileName.toString();
@@ -1625,13 +1657,34 @@
 		int c = getChar();
 		if (c == '(') {
 			StringBuffer buffer = new StringBuffer();
-			c = getChar();
+			c = getChar(true);
 			while (c != ')') {
-				if( c == NOCHAR ){
-					return;	//don't attempt #define if we don't hit the closing bracket
+				if( c == '\\' ){
+					c = getChar();
+					if( c == '\r' )
+						c = getChar();	
+					
+					if( c == '\n' ){
+						c = getChar();
+						continue;
+					} else {
+						ungetChar( c );
+						if( throwExceptionOnBadPreprocessorSyntax )
+							throw new ScannerException( "Unexpected '\\' in macro formal parameter list." );
+						else return;
+					}
+				} else if( c == '\r' || c == '\n' ){
+					if( throwExceptionOnBadPreprocessorSyntax )
+						throw new ScannerException( "Unexpected newline in macro formal parameter list." );
+					else return;
+				} else if( c == NOCHAR ){
+					if( throwExceptionOnBadPreprocessorSyntax )
+						throw new ScannerException( "Unexpected EOF in macro formal parameter list." );
+					else return;
 				}
+				
 				buffer.append((char) c);
-				c = getChar();
+				c = getChar(true);
 			}
 
 			String parameters = buffer.toString();

Back to the top