Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Applied [HEAD && 1_2] _Pragma support for ANSI C

CORE
        Fixed Bug 39554 : _Pragma directive is not supported (ANSI C99) 

TESTS
        Moved testBug39554() from ASTFailedTests to QuickParseASTTests. 

JohnC


Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.140
diff -u -r1.140 ChangeLog
--- ChangeLog	6 Nov 2003 04:57:38 -0000	1.140
+++ ChangeLog	7 Nov 2003 19:34:24 -0000
@@ -1,3 +1,6 @@
+2003-11-07 John Camelon
+	Moved testBug39554() from ASTFailedTests to QuickParseASTTests.  
+
 2003-11-05 John Camelon
 	Added CompleteParseASTTest::testBug44838().  
 	Added CompleteParseASTTest::testBug46165().  
Index: failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java,v
retrieving revision 1.19
diff -u -r1.19 ASTFailedTests.java
--- failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java	5 Nov 2003 18:15:21 -0000	1.19
+++ failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java	7 Nov 2003 19:34:24 -0000
@@ -14,6 +14,7 @@
 import java.io.Writer;
 import java.util.Iterator;
 
+import org.eclipse.cdt.core.parser.ParserLanguage;
 import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTFunction;
@@ -35,11 +36,7 @@
     {
         assertCodeFailsParse("FUNCTION_MACRO( 1, a )\n	int i;");
     }
-    
-    public void testBug39554() throws Exception
-    {
-        assertCodeFailsParse("_Pragma(\"foobar\")");
-    }
+
     
     //Here C99-specific section ends
     //Here GCC-specific section starts
Index: parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java,v
retrieving revision 1.2
diff -u -r1.2 BranchTrackerTest.java
--- parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java	5 Nov 2003 18:15:21 -0000	1.2
+++ parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java	7 Nov 2003 19:34:25 -0000
@@ -4,7 +4,6 @@
 
 import junit.framework.TestCase;
 
-import org.eclipse.cdt.core.parser.ScannerException;
 import org.eclipse.cdt.internal.core.parser.BranchTracker;
 
 /**
Index: parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java,v
retrieving revision 1.26
diff -u -r1.26 QuickParseASTTests.java
--- parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java	5 Nov 2003 23:35:21 -0000	1.26
+++ parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java	7 Nov 2003 19:34:27 -0000
@@ -804,6 +804,12 @@
 		parse(code.toString());
 	}
 	
+	
+	public void testBug39554() throws Exception
+	{
+		 parse("_Pragma(\"foobar\")", true, true, ParserLanguage.C );
+	}
+	
 	public void testBug36702() throws Exception
 	{
 		Writer code = new StringWriter(); 
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.160
diff -u -r1.160 ChangeLog
--- parser/ChangeLog	6 Nov 2003 19:41:33 -0000	1.160
+++ parser/ChangeLog	7 Nov 2003 19:33:46 -0000
@@ -1,3 +1,6 @@
+2003-11-07 John Camelon
+	Fixed Bug 39554 : _Pragma directive is not supported (ANSI C99) 
+
 2003-11-06 John Camelon
 	Removed one last remainder of core.model.Util in parser to unbreak 2.0 build.  
 
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.66
diff -u -r1.66 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java	6 Nov 2003 19:41:33 -0000	1.66
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java	7 Nov 2003 19:33:50 -0000
@@ -56,6 +56,7 @@
 
 public class Scanner implements IScanner {
    
+
 	protected final IParserLogService log;
 	private final static String SCRATCH = "<scratch>";
 	private Reader backupReader;
@@ -409,6 +410,7 @@
 	private static final String PASTING = "<pasting>";
 
 	private static final String DEFINED = "defined";
+	private static final String _PRAGMA = "_Pragma";
 	private static final String POUND_DEFINE = "#define ";
 
 	private ContextStack contextStack = null;
@@ -792,7 +794,7 @@
 		
 			} else if (
 				((c >= 'a') && (c <= 'z'))
-					|| ((c >= 'A') && (c <= 'Z')) | (c == '_')) {
+					|| ((c >= 'A') && (c <= 'Z')) || (c == '_')) {
                         
                 int baseOffset = lastContext.getOffset() - lastContext.undoStackSize() - 1;
 						
@@ -817,6 +819,13 @@
 				if (ident.equals(DEFINED)) 
 					return newToken(IToken.tINTEGER, handleDefinedMacro());
 				
+				if( ident.equals(_PRAGMA) && language == ParserLanguage.C )
+				{
+					handlePragmaOperator(); 
+					c = getChar(); 
+					continue;
+				}
+					
 				Object mapping = definitions.get(ident);
 
 				if (mapping != null) {
@@ -1580,6 +1589,16 @@
 
 
     /**
+	 * 
+	 */
+	protected void handlePragmaOperator() throws ScannerException
+	{
+		// until we know what to do with pragmas, do the equivalent as 
+		// to what we do for #pragma blah blah blah (ignore it)
+		getRestOfPreprocessorLine();
+	}
+
+	/**
      * @param c
      * @param wideLiteral
      */

Back to the top