From 591d1d3a21906b2635aae873e197e679e2ce7462 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Mon, 17 May 2004 23:26:39 +0000 Subject: [PATCH] Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=62390 --- .../core/parser/tests/ScannerTestCase.java | 32 +++++++++++++++++++ .../core/parser/scanner/ContextStack.java | 10 ++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java index 2ae7f6f4a93..e4d6f444932 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java @@ -1584,4 +1584,36 @@ public class ScannerTestCase extends BaseScannerTest initializeScanner( "18446744073709551615LL"); //$NON-NLS-1$ validateInteger( "18446744073709551615"); //$NON-NLS-1$ } + + public void testBug62390() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "#define f(x) x\n"); //$NON-NLS-1$ + writer.write( "#if f(\n"); //$NON-NLS-1$ + writer.write( "5) == 5\n"); //$NON-NLS-1$ + writer.write( "true1\n"); //$NON-NLS-1$ + writer.write( "#endif\n"); //$NON-NLS-1$ + writer.write( "#if A\n"); //$NON-NLS-1$ + writer.write( "#elif f(\n"); //$NON-NLS-1$ + writer.write( "5) == 5\n"); //$NON-NLS-1$ + writer.write( "true2\n"); //$NON-NLS-1$ + writer.write( "#endif\n"); //$NON-NLS-1$ + writer.write( "#undef f\n"); //$NON-NLS-1$ + writer.write( "#define f(x) \"A0I70_001.h\"\n"); //$NON-NLS-1$ + writer.write( "#include f(\n"); //$NON-NLS-1$ + writer.write( "5\n"); //$NON-NLS-1$ + writer.write( ")\n"); //$NON-NLS-1$ + writer.write( "#undef f\n"); //$NON-NLS-1$ + writer.write( "#define f(x) 1467\n"); //$NON-NLS-1$ + writer.write( "#line f(\n"); //$NON-NLS-1$ + writer.write( "5\n"); //$NON-NLS-1$ + writer.write( ")\n"); //$NON-NLS-1$ + writer.write( "#pragma f(\n"); //$NON-NLS-1$ + writer.write( "5\n"); //$NON-NLS-1$ + writer.write( ")\n"); //$NON-NLS-1$ + writer.write( "}\n"); //$NON-NLS-1$ + Callback callback = new Callback( ParserMode.QUICK_PARSE ); + initializeScanner( writer.toString(), ParserMode.QUICK_PARSE, callback ); + fullyTokenize(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java index 3b77288041d..f61e0446c74 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java @@ -204,7 +204,9 @@ public class ContextStack { public ScannerContextInclusion getMostRelevantFileContext() { - return (ScannerContextInclusion)cs[lastFileContext]; + if( cs[lastFileContext] != null && cs[lastFileContext] instanceof ScannerContextInclusion ) + return (ScannerContextInclusion)cs[lastFileContext]; + return null; } public int getMostRelevantFileContextIndex() @@ -213,7 +215,11 @@ public class ContextStack { } public int getCurrentLineNumber() { - return getMostRelevantFileContext().getLine(); + + ScannerContextInclusion mostRelevantFileContext = getMostRelevantFileContext(); + if( mostRelevantFileContext != null ) + return mostRelevantFileContext.getLine(); + return -1; } }