Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] [FIXED]77281, 77921, 76763


[FIXED][77281]Unable to parse assignment statements
[FIXED][77921]Syntax Error on initializer with floats
[FIXED][76763]Problem for #error has extra characters

Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada


Index: parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java,v
retrieving revision 1.87
diff -u -r1.87 Scanner2.java
--- parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java	17 Nov 2004 19:39:17 -0000	1.87
+++ parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java	18 Nov 2004 20:10:11 -0000
@@ -1327,7 +1327,11 @@
 					
 					// must be float suffix
 					++bufferPos[bufferStackPos];
-					continue;
+
+					if (buffer[bufferPos[bufferStackPos]] == 'i')
+						continue; // handle GCC extension 5.10 Complex Numbers 
+
+					break; // fix for 77281 (used to be continue)
 
 				case 'p':
 				case 'P':
@@ -1531,7 +1535,8 @@
 							handleInvalidCompletion();
 						return;
 					case ppError:
-						start = bufferPos[bufferStackPos];
+						skipOverWhiteSpace();
+						start = bufferPos[bufferStackPos] + 1;
 						skipToNewLine();
 						len = bufferPos[bufferStackPos] - start;
 						handleProblem( IProblem.PREPROCESSOR_POUND_ERROR, start, CharArrayUtils.extract( buffer, start, len ));
@@ -2533,7 +2538,14 @@
 						break;
 					} 
 					return;
-					
+				case '\r':
+					if (escaped && bufferPos[bufferStackPos] < limit && buffer[bufferPos[bufferStackPos] + 1] == '\n') {
+						escaped = false;
+						break;
+					} else if (!escaped && bufferPos[bufferStackPos] < limit && buffer[bufferPos[bufferStackPos] + 1] == '\n') {
+						return;
+					}
+					break;
 			}
 			escaped = false;
 		}
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.135
diff -u -r1.135 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	18 Nov 2004 14:34:36 -0000	1.135
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	18 Nov 2004 20:10:25 -0000
@@ -2266,12 +2266,12 @@
         	Object ipo = probs.next();
         	assertTrue( ipo instanceof IProblem );
         	IProblem ip = (IProblem)ipo;
-        	assertTrue(ip.getArguments().indexOf("This was equal, but not for the eclipse") > 0); //$NON-NLS-1$
+        	assertTrue(ip.getArguments().indexOf("This was equal, but not for the eclipse") >= 0); //$NON-NLS-1$
         	assertTrue( probs.hasNext() );
         	ipo = probs.next();
         	assertTrue( ipo instanceof IProblem );
         	ip = (IProblem)ipo;
-        	assertTrue(ip.getArguments().indexOf("octal test") > 0); //$NON-NLS-1$
+        	assertTrue(ip.getArguments().indexOf("octal test") >= 0); //$NON-NLS-1$
     	}
 	}
     
@@ -2341,5 +2341,38 @@
     	writer.write("temp = (TYPE*)(pType + 1); /* Parser error is here */\n}\n"); //$NON-NLS-1$
     	parse(writer.toString());
     }
+    
+    public void testBug77281() throws Exception {
+    	Writer writer = new StringWriter();
+    	writer.write("void fun2(float a, float b) {}\n"); //$NON-NLS-1$
+		writer.write("int main() { fun2(0.24f, 0.25f); }\n"); //$NON-NLS-1$
+    	parse(writer.toString());
+    }
+    
+    public void testBug77921() throws Exception {
+    	Writer writer = new StringWriter();
+    	writer.write("void f()\n{\n"); //$NON-NLS-1$
+    	writer.write("static float v0[] = { -1.0f, -1.0f,  1.0f };\n}\n"); //$NON-NLS-1$
+    	parse(writer.toString());
+    }
+    
+    public void testBug76763() throws Exception 
+	{
+    	Writer writer = new StringWriter();
+    	writer.write("#error oops!"); //$NON-NLS-1$
+    	try {
+    		parse(writer.toString());
+    	} catch (ParserException pe) {
+    		// expected IProblem
+    	} finally {
+	    	Iterator i = callback.getProblems();
+	    	assertTrue( i.hasNext() );
+	    	Object ipo = i.next();
+	    	assertTrue( ipo instanceof IProblem );
+	    	IProblem ip = (IProblem)ipo;
+	    	assertTrue(new String(ip.getArguments()).equals("oops!")); //$NON-NLS-1$
+	    	assertFalse( i.hasNext() );
+    	}
+	}
 }
 

Back to the top