From 070f6eb80fa46b865e33b99a6354038f6f210bee Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Wed, 7 Apr 2004 15:17:25 +0000 Subject: [PATCH] fix bug 44338 --- core/org.eclipse.cdt.core.tests/ChangeLog | 6 +++ .../tests/CompleteParseASTTemplateTest.java | 43 +++++++++++++++++++ .../parser/ChangeLog-parser | 3 ++ .../core/parser/pst/TemplateEngine.java | 4 +- .../core/parser/token/TokenDuple.java | 1 - 5 files changed, 55 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 88169c62dc8..273bec357de 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,9 @@ +2004-04-07 Andrew Niefer + fix bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=44338 + - added parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.testBug44338() + - added parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.testBug44338_2() + - added parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.testBug44338_3() + 2004-04-07 John Camelon Updated test cases that used IExpressionParser::expression(). Added CompletionParseTest::testCompletionInFunctionBodyFullyQualified(). diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java index dcef1152878..318b1f8af92 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java @@ -656,4 +656,47 @@ public class CompleteParseASTTemplateTest extends CompleteParseBaseTest { parse( writer.toString () ); } + + public void testBug44338() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "template < bool T > class A { "); + writer.write( " void foo( bool b = T ); "); + writer.write( "}; "); + writer.write( "typedef A< 1 < 2 > A_TRUE; "); + writer.write( "typedef A< ( 1 > 2 ) > A_FALSE; "); + + Iterator i = parse( writer.toString() ).getDeclarations(); + + IASTTemplateDeclaration template = (IASTTemplateDeclaration) i.next(); + IASTTypedefDeclaration a_true = (IASTTypedefDeclaration) i.next(); + IASTTypedefDeclaration a_false = (IASTTypedefDeclaration) i.next(); + } + + public void testBug44338_2() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "template < int i > class X {}; "); + writer.write( "template < class T > class Y {}; "); + writer.write( "Y< X < 1 > > y1; "); + writer.write( "Y< X < 6 >> 1 > > y2; "); + + Iterator i = parse( writer.toString() ).getDeclarations(); + + IASTTemplateDeclaration templateX = (IASTTemplateDeclaration) i.next(); + IASTTemplateDeclaration templateY = (IASTTemplateDeclaration) i.next(); + IASTVariable y1 = (IASTVariable) i.next(); + IASTVariable y2 = (IASTVariable) i.next(); + } + + public void testBug4338_3() throws Exception + { + try{ + //this is expected to fail the parse + parse( "template < int i > class X {}; X< 1 > 2 > x; " ); + assertTrue( false ); + } catch ( ParserException e ){ + assertTrue( e.getMessage().equals( "FAILURE" ) ); + } + } } diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 454abad5871..b9d38929175 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,6 @@ +2004-04-07 Andrew Niefer + fix bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=44338 + 2004-04-07 Andrew Niefer small changes to get through iostream under standard make with discovered symbols - check null pointer in GCCScannerExtension.handlePreprocessorDirective, the null is probably a symptom of whatever diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TemplateEngine.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TemplateEngine.java index 77c68369f39..910c874809f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TemplateEngine.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TemplateEngine.java @@ -175,7 +175,9 @@ public final class TemplateEngine { } else { Cost cost = null; try { - cost = ParserSymbolTable.checkStandardConversionSequence( arg, param.getTypeInfo()); + TypeInfo info = new TypeInfo( param.getTypeInfo() ); + info.setType( info.getTemplateParameterType() ); + cost = ParserSymbolTable.checkStandardConversionSequence( arg, info ); } catch (ParserSymbolTableException e) { } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenDuple.java index 9d0d8618516..f63fcbbbd31 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenDuple.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenDuple.java @@ -204,7 +204,6 @@ public class TokenDuple implements ITokenDuple { if( ! iter.hasNext() ) return token; - token = (IToken) iter.next(); LinkedList scopes = new LinkedList(); scopes.add( LT );