diff options
author | Mike Kucera | 2008-05-28 19:50:25 +0000 |
---|---|---|
committer | Mike Kucera | 2008-05-28 19:50:25 +0000 |
commit | 8037d270d822429df01aa6b6d4d98dedbe7bd76b (patch) | |
tree | 6c37e298818bf9472ada68a3f1a807952c1d8925 /lrparser | |
parent | 3e8493f50536a5b4fb97460e990b65e50ae842fc (diff) | |
download | org.eclipse.cdt-8037d270d822429df01aa6b6d4d98dedbe7bd76b.tar.gz org.eclipse.cdt-8037d270d822429df01aa6b6d4d98dedbe7bd76b.tar.xz org.eclipse.cdt-8037d270d822429df01aa6b6d4d98dedbe7bd76b.zip |
bug 234463, fix for testForStatement1
Diffstat (limited to 'lrparser')
2 files changed, 28 insertions, 0 deletions
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 cd79d57abf8..fb6ccc87552 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 @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.dom.ast.IASTFieldReference; import org.eclipse.cdt.core.dom.ast.IASTForStatement; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; +import org.eclipse.cdt.core.dom.ast.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializerList; @@ -667,6 +668,20 @@ public class C99BuildASTParserAction extends BuildASTParserAction { else // its null initializer = nodeFactory.newNullStatement(); + + // bug 234463, fix for content assist to work in this case + int TK_EOC = TK_EndOfCompletion; // TODO: change this in the grammar file + List<IToken> tokens = parser.getRuleTokens(); + if(matchTokens(tokens, tokenMap, + TK_for, TK_LeftParen, TK_Completion, TK_EOC, TK_EOC, TK_EOC, TK_EOC)) { + IASTName name = createName(tokens.get(2)); + IASTIdExpression idExpression = nodeFactory.newIdExpression(name); + setOffsetAndLength(idExpression, offset(name), length(name)); + initializer = nodeFactory.newExpressionStatement(idExpression); + setOffsetAndLength(initializer, offset(name), length(name)); + } + + if(node != null) setOffsetAndLength(initializer, offset(node), length(node)); 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 51f2f5a91c3..1e71bb37fe5 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 @@ -637,6 +637,19 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { Object condition = astStack.pop(); // can be an expression or a declaration IASTStatement initializer = (IASTStatement) astStack.pop(); + // bug 234463, fix for content assist to work in this case + int TK_EOC = TK_EndOfCompletion; // TODO: change this in the grammar file + List<IToken> tokens = parser.getRuleTokens(); + if(matchTokens(tokens, tokenMap, + TK_for, TK_LeftParen, TK_Completion, TK_EOC, TK_EOC, TK_EOC, TK_EOC)) { + IASTName name = createName(tokens.get(2)); + IASTIdExpression idExpression = nodeFactory.newIdExpression(name); + setOffsetAndLength(idExpression, offset(name), length(name)); + initializer = nodeFactory.newExpressionStatement(idExpression); + setOffsetAndLength(initializer, offset(name), length(name)); + } + + IASTForStatement forStat; if(condition instanceof IASTExpression) forStat = nodeFactory.newForStatement(initializer, (IASTExpression)condition, expr, body); |