From df634f2e750d712666d29f703f85707a4906acb2 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Fri, 7 Nov 2003 19:49:36 +0000 Subject: [PATCH] CORE Fixed Bug 39554 : _Pragma directive is not supported (ANSI C99) TESTS Moved testBug39554() from ASTFailedTests to QuickParseASTTests. --- core/org.eclipse.cdt.core.tests/ChangeLog | 3 +++ .../parser/failedTests/ASTFailedTests.java | 7 ++----- .../core/parser/tests/BranchTrackerTest.java | 1 - .../core/parser/tests/QuickParseASTTests.java | 6 ++++++ core/org.eclipse.cdt.core/parser/ChangeLog | 3 +++ .../cdt/internal/core/parser/Scanner.java | 21 ++++++++++++++++++- 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 15687d0bb7a..33b524a5e8b 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -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(). diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java index 879b6a2e25a..b946e90862b 100644 --- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java +++ b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java @@ -14,6 +14,7 @@ import java.io.StringWriter; 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 @@ public class ASTFailedTests extends BaseASTTest { 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 diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java index 4751d58a63d..e319868cb1d 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java @@ -4,7 +4,6 @@ import java.util.EmptyStackException; import junit.framework.TestCase; -import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.internal.core.parser.BranchTracker; /** diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java index f689839234e..5fdda2a3537 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java @@ -804,6 +804,12 @@ public class QuickParseASTTests extends BaseASTTest parse(code.toString()); } + + public void testBug39554() throws Exception + { + parse("_Pragma(\"foobar\")", true, true, ParserLanguage.C ); + } + public void testBug36702() throws Exception { Writer code = new StringWriter(); diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index 27c27d7b2dd..33b2a2a5ecb 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -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. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java index 5b6901bf482..878234ec768 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java @@ -56,6 +56,7 @@ import org.eclipse.cdt.core.parser.ast.IASTInclusion; public class Scanner implements IScanner { + protected final IParserLogService log; private final static String SCRATCH = ""; private Reader backupReader; @@ -409,6 +410,7 @@ public class Scanner implements IScanner { private static final String 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 @@ public class Scanner implements IScanner { } 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 @@ public class Scanner implements IScanner { 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 @@ public class Scanner implements IScanner { /** + * + */ + 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 */