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:
parent
0959893e29
commit
0fb0966c65
3 changed files with 20 additions and 16 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue