1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-08 16:55:38 +02:00

Endless loop in content-assist, bug 280934

This commit is contained in:
Markus Schorn 2009-06-23 12:20:04 +00:00
parent 896b8661e0
commit 5bbbd7720b
2 changed files with 13 additions and 6 deletions

View file

@ -162,4 +162,10 @@ public class BasicCompletionTest extends CompletionTestBase {
checkCompletion(code, false, expected); checkCompletion(code, false, expected);
} }
// template <t
public void testBug280934() throws Exception {
String code = getAboveComment();
String[] expected= {};
checkCompletion(code, true, expected);
}
} }

View file

@ -1471,12 +1471,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
List<ICPPASTTemplateParameter> returnValue = new ArrayList<ICPPASTTemplateParameter>(DEFAULT_PARM_LIST_SIZE); List<ICPPASTTemplateParameter> returnValue = new ArrayList<ICPPASTTemplateParameter>(DEFAULT_PARM_LIST_SIZE);
for (;;) { for (;;) {
if (LT(1) == IToken.tGT) final int lt1= LT(1);
if (lt1 == IToken.tGT || lt1 == IToken.tEOC)
return returnValue; return returnValue;
if (LT(1) == IToken.t_class || LT(1) == IToken.t_typename) { if (lt1 == IToken.t_class || lt1 == IToken.t_typename) {
IToken startingToken = LA(1); IToken startingToken = LA(1);
int lastOffset = 0; int lastOffset = 0;
int type = (LT(1) == IToken.t_class ? ICPPASTSimpleTypeTemplateParameter.st_class int type = (lt1 == IToken.t_class ? ICPPASTSimpleTypeTemplateParameter.st_class
: ICPPASTSimpleTypeTemplateParameter.st_typename); : ICPPASTSimpleTypeTemplateParameter.st_typename);
lastOffset = consume().getEndOffset(); lastOffset = consume().getEndOffset();
IASTName identifierName = null; IASTName identifierName = null;
@ -1500,7 +1501,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
((ASTNode) parm).setOffsetAndLength(startingToken.getOffset(), lastOffset - startingToken.getOffset()); ((ASTNode) parm).setOffsetAndLength(startingToken.getOffset(), lastOffset - startingToken.getOffset());
returnValue.add(parm); returnValue.add(parm);
} else if (LT(1) == IToken.t_template) { } else if (lt1 == IToken.t_template) {
IToken firstToken = consume(); IToken firstToken = consume();
consume(IToken.tLT); consume(IToken.tLT);
@ -1530,7 +1531,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
} }
returnValue.add(parm); returnValue.add(parm);
} else if (LT(1) == IToken.tCOMMA) { } else if (lt1 == IToken.tCOMMA) {
consume(); consume();
continue; continue;
} else { } else {