1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 235244, scope problem with C99

This commit is contained in:
Mike Kucera 2008-06-02 23:45:01 +00:00
parent 0959893e29
commit 0fb0966c65
3 changed files with 20 additions and 16 deletions

View file

@ -122,6 +122,12 @@ public abstract class BuildASTParserAction {
protected abstract boolean isCompletionToken(IToken token);
/**
* Returns true if the token is an identifier.
*/
protected abstract boolean isIdentifierToken(IToken token);
/**
* Get the parser that will recognize expressions.
*/
@ -474,19 +480,6 @@ public abstract class BuildASTParserAction {
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
IASTDeclaration decl = (IASTDeclaration) astStack.pop();
// handle special case during content assist
List<IToken> tokens = parser.getRuleTokens();
if(tokens.size() == 2 && isCompletionToken(tokens.get(0))) {
IASTName name = createName(tokens.get(0));
IASTIdExpression idExpression = nodeFactory.newIdExpression(name);
setOffsetAndLength(idExpression, offset(name), length(name));
IASTExpressionStatement statement = nodeFactory.newExpressionStatement(idExpression);
setOffsetAndLength(statement, offset(name), length(name));
astStack.push(statement);
return;
}
IASTDeclarationStatement declarationStatement = nodeFactory.newDeclarationStatement(decl);
setOffsetAndLength(declarationStatement);
@ -505,9 +498,14 @@ public abstract class BuildASTParserAction {
}
}
List<IToken> tokens = parser.getRuleTokens();
IASTNode result;
if(expressionStatement == null)
result = declarationStatement;
else if(tokens.size() == 2 && (isCompletionToken(tokens.get(0)) || isIdentifierToken(tokens.get(0)))) // identifier followed by semicolon
result = expressionStatement;
else if(isImplicitInt(decl))
result = expressionStatement;
else {
@ -555,7 +553,6 @@ public abstract class BuildASTParserAction {
IASTDeclSpecifier declSpec = ((IASTSimpleDeclaration)declaration).getDeclSpecifier();
if(declSpec instanceof IASTSimpleDeclSpecifier &&
((IASTSimpleDeclSpecifier)declSpec).getType() == IASTSimpleDeclSpecifier.t_unspecified) {
return true;
}
}

View file

@ -104,6 +104,11 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
return baseKind(token) == TK_Completion;
}
@Override
protected boolean isIdentifierToken(IToken token) {
return baseKind(token) == TK_identifier;
}
@Override
protected IParser getExpressionParser() {
return new C99ExpressionParser(parser.getOrderedTerminalSymbols());

View file

@ -42,7 +42,6 @@ import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTPointer;
import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTProblemExpression;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTStatement;
@ -101,7 +100,6 @@ import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParsersym;
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPSizeofExpressionParser;
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPTemplateTypeParameterParser;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousTemplateArgument;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName;
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
@ -142,6 +140,10 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
return baseKind(token) == TK_Completion;
}
@Override
protected boolean isIdentifierToken(IToken token) {
return baseKind(token) == TK_identifier;
}
@Override