diff options
author | Mike Kucera | 2008-06-02 23:45:01 +0000 |
---|---|---|
committer | Mike Kucera | 2008-06-02 23:45:01 +0000 |
commit | 0fb0966c65be16459bb44a827d07869812f0bf5e (patch) | |
tree | 0b3b4357402dacd34aa8c9f988faa4e5ee988883 /lrparser | |
parent | 0959893e2942dbfe932c9ea362f84a71268f1a26 (diff) | |
download | org.eclipse.cdt-0fb0966c65be16459bb44a827d07869812f0bf5e.tar.gz org.eclipse.cdt-0fb0966c65be16459bb44a827d07869812f0bf5e.tar.xz org.eclipse.cdt-0fb0966c65be16459bb44a827d07869812f0bf5e.zip |
Bug 235244, scope problem with C99
Diffstat (limited to 'lrparser')
3 files changed, 20 insertions, 16 deletions
diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java index fd6ffd9a280..945ff7ceb32 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java @@ -123,6 +123,12 @@ public abstract class BuildASTParserAction { /** + * Returns true if the token is an identifier. + */ + protected abstract boolean isIdentifierToken(IToken token); + + + /** * Get the parser that will recognize expressions. */ protected abstract IParser getExpressionParser(); @@ -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; } } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java index fb6ccc87552..6d5589cefaa 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java @@ -105,6 +105,11 @@ public class C99BuildASTParserAction extends BuildASTParserAction { } @Override + protected boolean isIdentifierToken(IToken token) { + return baseKind(token) == TK_identifier; + } + + @Override protected IParser getExpressionParser() { return new C99ExpressionParser(parser.getOrderedTerminalSymbols()); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java index 1e71bb37fe5..bd985d63041 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java @@ -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 |