From 84e36a84f99dbd72519ff6c394fa28c8cc8c8607 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Mon, 12 Mar 2007 15:57:12 +0000 Subject: [PATCH] Fix for 176842, indexer hangs on code with missing closing bracket --- .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 8 ++++++-- .../cdt/internal/core/parser/scanner2/LocationMap.java | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 90a74213efa..1a9ba2b9ca2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -1839,9 +1839,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { templateIdScopes.push(IToken.tLPAREN); } IASTExpression lhs = expression(); - int finalOffset = Integer.MAX_VALUE; - if (LT(1) == IToken.tRPAREN) + int finalOffset= 0; + if (LT(1) == IToken.tRPAREN) { finalOffset = consume().getEndOffset(); + } else { + // missing parenthesis, assume it's there and keep going. + finalOffset = LA(1).getOffset(); + } if (templateIdScopes.size() > 0) { templateIdScopes.pop(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java index f54bcfcf942..be91d224f1a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java @@ -1892,6 +1892,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { _WeightedContext[] result = new _WeightedContext[2]; _Context cc = null; int currentCount = 0; + length= Math.min(tu.context_ends, length); for (int i = offset; i < offset + length; ++i) { _Context r = tu.findContextContainingOffset(i); if (cc == null) {