mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56: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);
|
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.
|
* Get the parser that will recognize expressions.
|
||||||
*/
|
*/
|
||||||
|
@ -474,19 +480,6 @@ public abstract class BuildASTParserAction {
|
||||||
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
||||||
|
|
||||||
IASTDeclaration decl = (IASTDeclaration) astStack.pop();
|
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);
|
IASTDeclarationStatement declarationStatement = nodeFactory.newDeclarationStatement(decl);
|
||||||
setOffsetAndLength(declarationStatement);
|
setOffsetAndLength(declarationStatement);
|
||||||
|
|
||||||
|
@ -505,9 +498,14 @@ public abstract class BuildASTParserAction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<IToken> tokens = parser.getRuleTokens();
|
||||||
|
|
||||||
IASTNode result;
|
IASTNode result;
|
||||||
if(expressionStatement == null)
|
if(expressionStatement == null)
|
||||||
result = declarationStatement;
|
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))
|
else if(isImplicitInt(decl))
|
||||||
result = expressionStatement;
|
result = expressionStatement;
|
||||||
else {
|
else {
|
||||||
|
@ -555,7 +553,6 @@ public abstract class BuildASTParserAction {
|
||||||
IASTDeclSpecifier declSpec = ((IASTSimpleDeclaration)declaration).getDeclSpecifier();
|
IASTDeclSpecifier declSpec = ((IASTSimpleDeclaration)declaration).getDeclSpecifier();
|
||||||
if(declSpec instanceof IASTSimpleDeclSpecifier &&
|
if(declSpec instanceof IASTSimpleDeclSpecifier &&
|
||||||
((IASTSimpleDeclSpecifier)declSpec).getType() == IASTSimpleDeclSpecifier.t_unspecified) {
|
((IASTSimpleDeclSpecifier)declSpec).getType() == IASTSimpleDeclSpecifier.t_unspecified) {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,11 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
return baseKind(token) == TK_Completion;
|
return baseKind(token) == TK_Completion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isIdentifierToken(IToken token) {
|
||||||
|
return baseKind(token) == TK_identifier;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected IParser getExpressionParser() {
|
protected IParser getExpressionParser() {
|
||||||
return new C99ExpressionParser(parser.getOrderedTerminalSymbols());
|
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.IASTPointer;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
|
import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration;
|
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.IASTSimpleDeclSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTStatement;
|
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.CPPSizeofExpressionParser;
|
||||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPTemplateTypeParameterParser;
|
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.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.CPPASTQualifiedName;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
|
||||||
|
|
||||||
|
@ -142,6 +140,10 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
return baseKind(token) == TK_Completion;
|
return baseKind(token) == TK_Completion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isIdentifierToken(IToken token) {
|
||||||
|
return baseKind(token) == TK_identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Reference in a new issue