From 7b4de8010534e9bcb10b9c81791c24646617880e Mon Sep 17 00:00:00 2001 From: John Camelon Date: Wed, 30 Jul 2003 13:04:53 +0000 Subject: [PATCH] Patch for Victor Mozgin. Fixed PR 39532 : Parser fails on fully-qualified class names. --- core/org.eclipse.cdt.core.tests/ChangeLog | 3 +++ .../parser/failedTests/ASTFailedTests.java | 4 ---- .../core/parser/tests/QuickParseASTTests.java | 6 +++++ core/org.eclipse.cdt.core/parser/ChangeLog | 3 +++ .../cdt/internal/core/parser/Parser.java | 24 +++++++------------ 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 05ee3d9979e..59d9c446c8e 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,6 @@ +2003-07-30 Victor Mozgin + Moved testBug39532() from ASTFailedTests.java to QuickParseASTTests.java. + 2003-07-29 John Camelon Updated QuickParseASTTests for pointer to function updates. Updated CompleteParseASTTests for typedef work. 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 d7c1765c67a..5c883c8ff26 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 @@ -90,10 +90,6 @@ public class ASTFailedTests extends BaseASTTest { assertCodeFailsParse("class AString { operator char const *() const; };"); } - public void testBug39532() throws Exception - { - assertCodeFailsParse("class N1::N2::B : public A {};"); - } public void testBug39535() throws Exception { assertCodeFailsParse("namespace bar = foo;"); 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 39a8d48cc4e..1b7649b61ae 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 @@ -1751,4 +1751,10 @@ public class QuickParseASTTests extends BaseASTTest assertEquals( typedef.getName(), "life"); } + + public void testBug39532() throws Exception + { + parse("class N1::N2::B : public A {};"); + assertTrue( quickParseCallback.getCompilationUnit().getDeclarations().hasNext() ); + } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index 5c900c84520..6f9fdc54a74 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,6 @@ +2003-07-30 Victor Mozgin + Fixed PR 39532 : Parser fails on fully-qualified class names. + 2003-07-29 John Camelon Updated AST to better represent pointers to functions/methods. Implemented typedef declaration/x-ref infrastructure. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 31f4856ddd9..6c0c72654a4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -1563,21 +1563,15 @@ public class Parser implements IParser */ protected ITokenDuple className() throws Backtrack { - if (LT(1) == IToken.tIDENTIFIER) - { - if (LT(2) == IToken.tLT) - { - return new TokenDuple(LA(1), templateId()); - } - else - { - IToken t = identifier(); - return new TokenDuple(t, t); - } + ITokenDuple duple = name(); + IToken last = duple.getLastToken(); + if (LT(1) == IToken.tLT) { + last = consumeTemplateParameters(duple.getLastToken()); } - else - throw backtrack; + + return new TokenDuple(duple.getFirstToken(), last); } + /** * Parse a template-id, according to the ANSI C++ spec. * @@ -1590,8 +1584,8 @@ public class Parser implements IParser */ protected IToken templateId() throws Backtrack { - IToken first = consume(IToken.tIDENTIFIER); - IToken last = consumeTemplateParameters(first); + ITokenDuple duple = name(); + IToken last = consumeTemplateParameters(duple.getLastToken()); return last; } /**