Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Kucera2008-06-02 23:45:01 +0000
committerMike Kucera2008-06-02 23:45:01 +0000
commit0fb0966c65be16459bb44a827d07869812f0bf5e (patch)
tree0b3b4357402dacd34aa8c9f988faa4e5ee988883 /lrparser
parent0959893e2942dbfe932c9ea362f84a71268f1a26 (diff)
downloadorg.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')
-rw-r--r--lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java25
-rw-r--r--lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java5
-rw-r--r--lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java6
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

Back to the top