Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMarkus Schorn2008-02-15 12:43:17 +0000
committerMarkus Schorn2008-02-15 12:43:17 +0000
commit08cce46ebc721fc6b1d462652e68cb7610150aa7 (patch)
tree63f640147a7faf93b0168ca4c1a0e2ee6f843f59 /core
parent2b53efe51744f9dd2837f6fe6cf383e83280ce0f (diff)
downloadorg.eclipse.cdt-08cce46ebc721fc6b1d462652e68cb7610150aa7.tar.gz
org.eclipse.cdt-08cce46ebc721fc6b1d462652e68cb7610150aa7.tar.xz
org.eclipse.cdt-08cce46ebc721fc6b1d462652e68cb7610150aa7.zip
Ambiguity between template arguments and relational expression, bug 104706.
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java16
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java13
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java130
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java35
5 files changed, 122 insertions, 83 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java
index bb607fee29f..98f418c2663 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -9,10 +9,6 @@
* IBM Corporation - initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
-
-/*
- * Created on Nov 22, 2004
- */
package org.eclipse.cdt.core.parser.tests.ast2;
import java.io.IOException;
@@ -266,7 +262,8 @@ public class AST2BaseTest extends BaseTestCase {
shouldVisitNames = true;
}
public List nameList = new ArrayList();
- public int visit( IASTName name ){
+ @Override
+ public int visit( IASTName name ){
nameList.add( name );
return PROCESS_CONTINUE;
}
@@ -295,7 +292,8 @@ public class AST2BaseTest extends BaseTestCase {
shouldVisitNames = true;
}
public List<IASTName> nameList = new ArrayList<IASTName>();
- public int visit(IASTName name) {
+ @Override
+ public int visit(IASTName name) {
nameList.add(name);
return PROCESS_CONTINUE;
}
@@ -361,6 +359,7 @@ public class AST2BaseTest extends BaseTestCase {
public int numProblemBindings=0;
public int numNullBindings=0;
public List nameList = new ArrayList();
+ @Override
public int visit( IASTName name ){
nameList.add( name );
IBinding binding = name.resolveBinding();
@@ -385,6 +384,7 @@ public class AST2BaseTest extends BaseTestCase {
public int numProblemBindings=0;
public int numNullBindings=0;
public List nameList = new ArrayList();
+ @Override
public int visit( IASTName name ){
nameList.add( name );
IBinding binding = name.resolveBinding();
@@ -453,7 +453,7 @@ public class AST2BaseTest extends BaseTestCase {
}
}
names= (IASTName[]) lnames.toArray(new IASTName[lnames.size()]);
- assertEquals("<>1 name found for \""+section+"\"", 1, names.length);
+ assertEquals("found " + names.length + " names for \""+section.substring(0, len)+"\"", 1, names.length);
IBinding binding = names[0].resolveBinding();
assertNotNull("No binding for "+names[0].getRawSignature(), binding);
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index 62f4f28cdcc..014c90e1b92 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -5708,4 +5708,17 @@ public class AST2CPPTests extends AST2BaseTest {
bh.assertNonProblem("foo3", 4);
}
+ // int foo2() {
+ // int relayIndex = -1;
+ // int numRelays = 0;
+ // if( relayIndex < 0 || relayIndex > numRelays )
+ // return 0;
+ // }
+ public void testTemplateIDAmbiguity_Bug104706() throws Exception {
+ BindingAssertionHelper bh= new BindingAssertionHelper(getContents(1)[0].toString(), true);
+
+ bh.assertNonProblem("relayIndex <", 10);
+ bh.assertNonProblem("relayIndex >", 10);
+ bh.assertNonProblem("numRelays )", 9);
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java
index 4204d6a44f9..7e6e29676ab 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java
@@ -1,18 +1,21 @@
/*******************************************************************************
- * Copyright (c) 2002, 2007 IBM Corporation and others.
+ * Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Rational Software - Initial API and implementation
+ * IBM Rational Software - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.core.parser;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+
/**
* @author jcamelon
@@ -27,13 +30,13 @@ public interface ITokenDuple {
*/
public abstract IToken getLastToken();
- public List [] getTemplateIdArgLists();
+ public List<IASTNode>[] getTemplateIdArgLists();
public ITokenDuple getLastSegment();
public ITokenDuple getLeadingSegments();
public int getSegmentCount();
- public abstract Iterator iterator();
+ public abstract Iterator<IToken> iterator();
public abstract String toString();
public char [] toCharArray();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
index 1f8a05574c4..9d96d36b5da 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
@@ -276,13 +276,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
return last;
}
- protected List templateArgumentList() throws EndOfFileException,
+ protected List<IASTNode> templateArgumentList() throws EndOfFileException,
BacktrackException {
IToken start = LA(1);
int startingOffset = start.getOffset();
int endOffset = 0;
start = null;
- List list = new ArrayList();
+ List<IASTNode> list = new ArrayList<IASTNode>();
boolean completedArg = false;
boolean failed = false;
@@ -363,10 +363,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
case IToken.tCOMPLETION:
case IToken.tEOC:
last = consume();
- IToken templateLast = consumeTemplateArguments(last, argumentList);
- if (last != templateLast) {
- last = templateLast;
- hasTemplateId = true;
+ if (!fNoTemplateArguments) {
+ IToken templateLast = consumeTemplateArguments(last, argumentList);
+ if (last != templateLast) {
+ last = templateLast;
+ hasTemplateId = true;
+ }
}
break;
@@ -378,10 +380,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
}
while (LT(1) == IToken.tCOLONCOLON) {
+ boolean checkTemplateArgs= !fNoTemplateArguments;
last = consume();
- if (LT(1) == IToken.t_template)
+ if (LT(1) == IToken.t_template) {
+ checkTemplateArgs= true;
consume();
+ }
if (LT(1) == IToken.tBITCOMPLEMENT)
consume();
@@ -396,7 +401,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
case IToken.tCOMPLETION:
case IToken.tEOC:
last = consume();
- last = consumeTemplateArguments(last, argumentList);
+ if (checkTemplateArgs) {
+ last = consumeTemplateArguments(last, argumentList);
+ }
if (last.getType() == IToken.tGT || last.getType() == IToken.tEOC)
hasTemplateId = true;
}
@@ -425,16 +432,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
IToken secondMark = mark();
consume();
try {
- List list = templateArgumentList();
+ List<IASTNode> list = templateArgumentList();
argumentList.addSegment(list);
switch (LT(1)) {
case IToken.tGT:
case IToken.tEOC:
- last = consume();
- if( LT(1) == IToken.tINTEGER || LT(1) == IToken.tFLOATINGPT ) {
+ if( LT(2) == IToken.tINTEGER || LT(2) == IToken.tFLOATINGPT) {
backup( secondMark );
return last;
}
+ last = consume();
break;
default:
throw backtrack;
@@ -530,7 +537,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
* @throws BacktrackException
* request a backtrack
*/
- protected void consumePointerOperators(List collection)
+ protected void consumePointerOperators(List<IASTPointerOperator> collection)
throws EndOfFileException, BacktrackException {
for (;;) {
@@ -1862,6 +1869,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
private final IIndex index;
+ private boolean fNoTemplateArguments;
+
private static final int DEFAULT_PARM_LIST_SIZE = 4;
private static final int DEFAULT_POINTEROPS_LIST_SIZE = 4;
@@ -2139,7 +2148,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
}
try {
- List parms = templateParameterList();
+ List<ICPPASTTemplateParameter> parms = templateParameterList();
consume(IToken.tGT);
ICPPASTTemplateDeclaration templateDecl = createTemplateDeclaration();
try
@@ -2150,7 +2159,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
templateDecl.setExported(exported);
templateDecl.setDeclaration(d);
for (int i = 0; i < parms.size(); ++i) {
- ICPPASTTemplateParameter parm = (ICPPASTTemplateParameter) parms.get(i);
+ ICPPASTTemplateParameter parm = parms.get(i);
templateDecl.addTemplateParamter(parm);
}
}
@@ -2204,11 +2213,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
* @throws BacktrackException
* request for a backtrack
*/
- protected List templateParameterList() throws BacktrackException,
+ protected List<ICPPASTTemplateParameter> templateParameterList() throws BacktrackException,
EndOfFileException {
// if we have gotten this far then we have a true template-declaration
// iterate through the template parameter list
- List returnValue = new ArrayList(DEFAULT_PARM_LIST_SIZE);
+ List<ICPPASTTemplateParameter> returnValue = new ArrayList<ICPPASTTemplateParameter>(DEFAULT_PARM_LIST_SIZE);
for (;;) {
if (LT(1) == IToken.tGT)
@@ -2250,7 +2259,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
IToken firstToken = consume();
consume(IToken.tLT);
- List subResult = templateParameterList();
+ List<ICPPASTTemplateParameter> subResult = templateParameterList();
consume(IToken.tGT);
int last = consume(IToken.t_class).getEndOffset();
IASTName identifierName = null;
@@ -2275,7 +2284,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
}
for (int i = 0; i < subResult.size(); ++i) {
- ICPPASTTemplateParameter p = (ICPPASTTemplateParameter) subResult.get(i);
+ ICPPASTTemplateParameter p = subResult.get(i);
parm.addTemplateParamter(p);
}
returnValue.add(parm);
@@ -2587,10 +2596,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
}
result.setTemplateName(templateIdName);
if (duple.getTemplateIdArgLists() != null) {
- List args = duple.getTemplateIdArgLists()[0];
+ List<IASTNode> args= duple.getTemplateIdArgLists()[0];
if (args != null)
for (int i = 0; i < args.size(); ++i) {
- IASTNode n = (IASTNode) args.get(i);
+ IASTNode n = args.get(i);
if (n instanceof IASTTypeId)
result.addTemplateArgument((IASTTypeId) n);
else if(n instanceof IASTExpression)
@@ -2712,7 +2721,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
boolean hasFunctionTryBlock = false;
boolean consumedSemi = false;
int semiOffset = 0;
- List constructorChain = Collections.EMPTY_LIST;
+ List<IASTNode> constructorChain = Collections.emptyList();
switch (LT(1)) {
case IToken.tSEMI:
@@ -2724,13 +2733,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
case IToken.t_try:
consume();
if (LT(1) == IToken.tCOLON) {
- constructorChain = new ArrayList(DEFAULT_CONSTRUCTOR_CHAIN_LIST_SIZE);
+ constructorChain = new ArrayList<IASTNode>(DEFAULT_CONSTRUCTOR_CHAIN_LIST_SIZE);
ctorInitializer(constructorChain);
}
hasFunctionTryBlock = true;
break;
case IToken.tCOLON:
- constructorChain = new ArrayList(DEFAULT_CONSTRUCTOR_CHAIN_LIST_SIZE);
+ constructorChain = new ArrayList<IASTNode>(DEFAULT_CONSTRUCTOR_CHAIN_LIST_SIZE);
ctorInitializer(constructorChain);
hasFunctionBody = true;
break;
@@ -2794,10 +2803,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
((ASTNode) funcDefinition).setLength(calculateEndOffset(s) - firstOffset);
if (hasFunctionTryBlock && declarator instanceof ICPPASTFunctionTryBlockDeclarator) {
- List handlers = new ArrayList(DEFAULT_CATCH_HANDLER_LIST_SIZE);
+ List<ICPPASTCatchHandler> handlers = new ArrayList<ICPPASTCatchHandler>(DEFAULT_CATCH_HANDLER_LIST_SIZE);
catchHandlerSequence(handlers);
for (int i = 0; i < handlers.size(); ++i) {
- ICPPASTCatchHandler handler = (ICPPASTCatchHandler) handlers.get(i);
+ ICPPASTCatchHandler handler = handlers.get(i);
((ICPPASTFunctionTryBlockDeclarator) declarator).addCatchHandler(handler);
((ASTNode) funcDefinition).setLength(calculateEndOffset(handler) - firstOffset);
}
@@ -2842,7 +2851,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
* @throws BacktrackException
* request a backtrack
*/
- protected void ctorInitializer(List collection) throws EndOfFileException,
+ protected void ctorInitializer(List<IASTNode> collection) throws EndOfFileException,
BacktrackException {
consume();
ctorLoop: for (;;) {
@@ -3545,10 +3554,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
la = null;
IASTDeclarator innerDecl = null;
IASTName declaratorName = null;
- List pointerOps = new ArrayList(DEFAULT_POINTEROPS_LIST_SIZE);
- List parameters = Collections.EMPTY_LIST;
- List arrayMods = Collections.EMPTY_LIST;
- List exceptionSpecIds = Collections.EMPTY_LIST;
+ List<IASTPointerOperator> pointerOps = new ArrayList<IASTPointerOperator>(DEFAULT_POINTEROPS_LIST_SIZE);
+ List<IASTNode> parameters = Collections.emptyList();
+ List<IASTNode> arrayMods = Collections.emptyList();
+ List<IASTNode> exceptionSpecIds = Collections.emptyList();
boolean encounteredVarArgs = false;
boolean tryEncountered = false;
IASTExpression bitField = null;
@@ -3563,7 +3572,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
__attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers);
if (!pointerOps.isEmpty())
- finalOffset = calculateEndOffset((IASTNode) pointerOps.get(pointerOps.size() - 1));
+ finalOffset = calculateEndOffset(pointerOps.get(pointerOps.size() - 1));
if (!forNewTypeId && LT(1) == IToken.tLPAREN) {
IToken mark = mark();
@@ -3655,7 +3664,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
IASTParameterDeclaration p = parameterDeclaration();
finalOffset = calculateEndOffset(p);
if (parameters == Collections.EMPTY_LIST)
- parameters = new ArrayList(DEFAULT_PARM_LIST_SIZE);
+ parameters = new ArrayList<IASTNode>(DEFAULT_PARM_LIST_SIZE);
parameters.add(p);
seenParameter = true;
}
@@ -3693,7 +3702,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
// check for throws clause here
if (LT(1) == IToken.t_throw) {
- exceptionSpecIds = new ArrayList(DEFAULT_SIZE_EXCEPTIONS_LIST);
+ exceptionSpecIds = new ArrayList<IASTNode>(DEFAULT_SIZE_EXCEPTIONS_LIST);
consume(); // throw
consume(IToken.tLPAREN); // (
boolean done = false;
@@ -3759,10 +3768,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
case IToken.tLBRACKET:
if (forNewTypeId)
break;
- arrayMods = new ArrayList(DEFAULT_POINTEROPS_LIST_SIZE);
+ arrayMods = new ArrayList<IASTNode>(DEFAULT_POINTEROPS_LIST_SIZE);
consumeArrayModifiers(arrayMods);
if (!arrayMods.isEmpty())
- finalOffset = calculateEndOffset((IASTNode) arrayMods.get(arrayMods.size() - 1));
+ finalOffset = calculateEndOffset(arrayMods.get(arrayMods.size() - 1));
continue;
case IToken.tCOLON:
consume();
@@ -3818,7 +3827,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
d = createDeclarator();
}
for (int i = 0; i < pointerOps.size(); ++i) {
- IASTPointerOperator po = (IASTPointerOperator) pointerOps.get(i);
+ IASTPointerOperator po = pointerOps.get(i);
d.addPointerOperator(po);
}
if (innerDecl != null) {
@@ -4179,7 +4188,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
return new CPPASTBaseSpecifier();
}
- protected void catchHandlerSequence(List collection)
+ protected void catchHandlerSequence(List<ICPPASTCatchHandler> collection)
throws EndOfFileException, BacktrackException {
if (LT(1) == IToken.tEOC)
return;
@@ -4349,7 +4358,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
return new CPPASTTranslationUnit();
}
- protected void consumeArrayModifiers(List collection)
+ protected void consumeArrayModifiers(List<IASTNode> collection)
throws EndOfFileException, BacktrackException {
while (LT(1) == IToken.tLBRACKET) {
int o = consume().getOffset(); // eat the '['
@@ -4608,14 +4617,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
protected IASTStatement parseTryStatement() throws EndOfFileException, BacktrackException {
int startO = consume().getOffset();
IASTStatement tryBlock = compoundStatement();
- List catchHandlers = new ArrayList(DEFAULT_CATCH_HANDLER_LIST_SIZE);
+ List<ICPPASTCatchHandler> catchHandlers = new ArrayList<ICPPASTCatchHandler>(DEFAULT_CATCH_HANDLER_LIST_SIZE);
catchHandlerSequence(catchHandlers);
ICPPASTTryBlockStatement tryStatement = createTryBlockStatement();
((ASTNode) tryStatement).setOffset(startO);
tryStatement.setTryBody(tryBlock);
for (int i = 0; i < catchHandlers.size(); ++i) {
- ICPPASTCatchHandler handler = (ICPPASTCatchHandler) catchHandlers.get(i);
+ ICPPASTCatchHandler handler = catchHandlers.get(i);
tryStatement.addCatchHandler(handler);
((ASTNode) tryStatement).setLength(calculateEndOffset(handler) - startO);
}
@@ -4654,7 +4663,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
protected IASTStatement parseWhileStatement() throws EndOfFileException, BacktrackException {
int startOffset = consume().getOffset();
consume(IToken.tLPAREN);
- IASTNode while_condition = cppStyleCondition(true);
+ IASTNode while_condition = cppStyleCondition(IToken.tRPAREN);
switch (LT(1)) {
case IToken.tRPAREN:
consume();
@@ -4689,20 +4698,31 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
* @param expectSemi TODO
* @return
*/
- protected IASTNode cppStyleCondition(boolean expectSemi) throws BacktrackException, EndOfFileException {
+ protected IASTNode cppStyleCondition(int expectToken) throws BacktrackException, EndOfFileException {
IToken mark = mark();
try {
IASTExpression e = expression();
- if( ! expectSemi )
- return e;
- switch (LT(1)) {
- case IToken.tRPAREN:
- case IToken.tEOC:
- return e;
- default:
- throwBacktrack(LA(1));
+ final int lt1= LT(1);
+ if (lt1 == expectToken || lt1 == IToken.tEOC) {
+ return e;
+ }
+ if (!fNoTemplateArguments) {
+ // bug 104706, ambiguity between template arguments and conditional expression,
+ // try without template args
+ backup(mark);
+ try {
+ fNoTemplateArguments= true;
+ e= expression();
+ final int lt11= LT(1);
+ if (lt11 == expectToken || lt11 == IToken.tEOC) {
+ return e;
+ }
+ }
+ finally {
+ fNoTemplateArguments= false;
+ }
}
- return e;
+ throwBacktrack(LA(1));
} catch (BacktrackException bt) {
backup(mark);
try {
@@ -4710,9 +4730,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
} catch (BacktrackException b) {
failParse();
throwBacktrack(b);
- return null;
}
}
+ return null;
}
private static class EmptyVisitor extends CPPASTVisitor {
@@ -4749,7 +4769,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
consume(IToken.tLPAREN);
IASTNode condition = null;
try {
- condition = cppStyleCondition(true);
+ condition = cppStyleCondition(IToken.tRPAREN);
// condition
if (LT(1) == IToken.tEOC) {
// Completing in the condition
@@ -4898,7 +4918,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
int startOffset;
startOffset = consume().getOffset();
consume(IToken.tLPAREN);
- IASTNode switch_condition = cppStyleCondition(true);
+ IASTNode switch_condition = cppStyleCondition(IToken.tRPAREN);
switch (LT(1)) {
case IToken.tRPAREN:
consume();
@@ -4945,7 +4965,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
case IToken.tEOC:
break;
default:
- for_condition = cppStyleCondition(false);
+ for_condition = cppStyleCondition(IToken.tSEMI);
}
switch (LT(1)) {
case IToken.tSEMI:
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
index 83e8ce99b6c..b1ad4250c2c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
@@ -1,12 +1,12 @@
/*******************************************************************************
- * Copyright (c) 2002, 2007 IBM Corporation and others.
+ * Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Rational Software - Initial API and implementation
+ * IBM Rational Software - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core.parser.token;
@@ -15,6 +15,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
@@ -56,7 +57,7 @@ public class BasicTokenDuple implements ITokenDuple {
return lastToken;
}
- public Iterator iterator()
+ public Iterator<IToken> iterator()
{
return new TokenIterator();
}
@@ -80,9 +81,9 @@ public class BasicTokenDuple implements ITokenDuple {
last = token;
}
- List [] args = getTemplateIdArgLists();
+ List<IASTNode> [] args = getTemplateIdArgLists();
if( args != null && args[ args.length - 1 ] != null ){
- List newArgs = new ArrayList( 1 );
+ List<List<IASTNode>> newArgs = new ArrayList<List<IASTNode>>( 1 );
newArgs.add( args[ args.length - 1 ] );
return TokenFactory.createTokenDuple( first, last, newArgs );
}
@@ -92,7 +93,7 @@ public class BasicTokenDuple implements ITokenDuple {
public ITokenDuple[] getSegments()
{
- List r = new ArrayList();
+ List<ITokenDuple> r = new ArrayList<ITokenDuple>();
IToken token = null;
IToken prev = null;
IToken last = getLastToken();
@@ -125,7 +126,7 @@ public class BasicTokenDuple implements ITokenDuple {
ITokenDuple d = TokenFactory.createTokenDuple( startOfSegment, last );
r.add( d );
}
- return (ITokenDuple[]) r.toArray( new ITokenDuple[ r.size() ]);
+ return r.toArray( new ITokenDuple[ r.size() ]);
}
@@ -162,8 +163,8 @@ public class BasicTokenDuple implements ITokenDuple {
}
if( getTemplateIdArgLists() != null ){
- List[] args = getTemplateIdArgLists();
- List newArgs = new ArrayList( args.length - 1 );
+ List<IASTNode>[] args = getTemplateIdArgLists();
+ List<List<IASTNode>> newArgs = new ArrayList<List<IASTNode>>( args.length - 1 );
boolean foundArgs = false;
for( int i = 0; i < args.length - 1; i++ ){
newArgs.add( args[i] );
@@ -187,7 +188,7 @@ public class BasicTokenDuple implements ITokenDuple {
private static final char[] EMPTY_STRING = "".toCharArray(); //$NON-NLS-1$
private char[] stringRepresentation = null;
- private class TokenIterator implements Iterator
+ private class TokenIterator implements Iterator<IToken>
{
private IToken iter = firstToken;
@@ -201,7 +202,7 @@ public class BasicTokenDuple implements ITokenDuple {
/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
- public Object next() {
+ public IToken next() {
if( ! hasNext() )
throw new NoSuchElementException();
IToken temp = iter;
@@ -285,6 +286,7 @@ public class BasicTokenDuple implements ITokenDuple {
}
+ @Override
public String toString()
{
if( stringRepresentation == null )
@@ -369,7 +371,7 @@ public class BasicTokenDuple implements ITokenDuple {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ITokenDuple#getTemplateIdArgLists()
*/
- public List[] getTemplateIdArgLists() {
+ public List<IASTNode>[] getTemplateIdArgLists() {
return null;
}
@@ -414,6 +416,7 @@ public class BasicTokenDuple implements ITokenDuple {
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
+ @Override
public boolean equals(Object other) {
if( !(other instanceof ITokenDuple ) ) return false;
if( ((ITokenDuple) other).getFirstToken().equals( getFirstToken() ) &&
@@ -425,7 +428,7 @@ public class BasicTokenDuple implements ITokenDuple {
public ITokenDuple getTemplateIdNameTokenDuple() {
ITokenDuple nameDuple = getLastSegment();
- List [] argLists = getTemplateIdArgLists();
+ List<IASTNode>[] argLists = getTemplateIdArgLists();
if( argLists == null || argLists[ argLists.length - 1 ] == null )
return nameDuple;
@@ -463,7 +466,7 @@ public class BasicTokenDuple implements ITokenDuple {
public char[] extractNameFromTemplateId(){
ITokenDuple nameDuple = getLastSegment();
- List [] argLists = getTemplateIdArgLists();
+ List<IASTNode>[] argLists = getTemplateIdArgLists();
if( argLists == null || argLists[ argLists.length - 1 ] == null )
return nameDuple.toCharArray();
@@ -545,7 +548,7 @@ public class BasicTokenDuple implements ITokenDuple {
*
*/
private String [] generateQualifiedName() {
- List qn = new ArrayList();
+ List<String> qn = new ArrayList<String>();
IToken i = firstToken;
while( i != lastToken )
{
@@ -577,7 +580,7 @@ public class BasicTokenDuple implements ITokenDuple {
qn.add( i.getImage() );
}
String [] qualifiedName = new String[ qn.size() ];
- return (String[]) qn.toArray( qualifiedName );
+ return qn.toArray( qualifiedName );
}
/**

Back to the top