From ef506f545b13ed8fcaa3a0b8a0ff65febf59e712 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Tue, 25 May 2004 22:20:43 +0000 Subject: [PATCH] fix bug 64010: if else if recursion looks like stack overflow --- .../parser/tests/CompleteParseASTTest.java | 19 +++++++++++++++++++ .../cdt/internal/core/parser/Parser.java | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index b4bf63b8764..d797eb8b8e8 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -1867,4 +1867,23 @@ public class CompleteParseASTTest extends CompleteParseBaseTest } + + public void testBug64010() throws Exception + { + Writer writer = new StringWriter(); + writer.write( " #define ONE else if (0) { } \n"); + writer.write( " #define TEN ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE \n "); + writer.write( " #define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN \n "); + writer.write( " #define THOU HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN \n"); + writer.write("void foo() "); + writer.write("{ "); + writer.write(" if (0) { } "); + writer.write(" /* 11,000 else if's. */ "); + writer.write(" THOU THOU THOU THOU THOU THOU THOU THOU THOU THOU THOU "); + writer.write("} "); + + Iterator d = parse( writer.toString() ).getDeclarations(); + + IASTFunction f = (IASTFunction) d.next(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 27fc3075525..c333497bf87 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -2855,7 +2855,11 @@ public abstract class Parser extends ExpressionParser implements IParser if (LT(1) == IToken.t_else) { consume( IToken.t_else ); - if( LT(1) != IToken.tLBRACE ) + if( LT(1) == IToken.t_if ){ + //an else if, return and get the rest of the else if as the next statement instead of recursing + cleanupLastToken(); + return; + } else if( LT(1) != IToken.tLBRACE ) singleStatementScope(scope); else statement( scope );