diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java index 355d630a01a..b843fe70c52 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java @@ -2294,4 +2294,21 @@ public class Scanner2Test extends BaseScanner2Test validateDefinition("TEST", "'y'"); //$NON-NLS-1$ //$NON-NLS-2$ validateDefinition("TRUE", "1"); //$NON-NLS-1$ //$NON-NLS-2$ } + + public void testBug102568A() throws Exception { + initializeScanner("///*\r\nint x;\r\n"); + validateToken( IToken.t_int ); + validateIdentifier( "x" ); //$NON-NLS-1$ + validateToken( IToken.tSEMI ); + validateEOF(); + } + + public void testBug102568B() throws Exception { + initializeScanner("// bla some thing /* ... \r\nint x;\r\n"); + validateToken( IToken.t_int ); + validateIdentifier( "x" ); //$NON-NLS-1$ + validateToken( IToken.tSEMI ); + validateEOF(); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java index 66e71be130d..a9f16572db0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java @@ -3512,7 +3512,7 @@ abstract class BaseScanner implements IScanner { if (pos + 1 < limit) { if (buffer[pos + 1] == '/') { // C++ comment, skip rest of line - skipToNewLine(); + skipToNewLine(true); // leave the new line there --bufferPos[bufferStackPos]; return false; @@ -3856,6 +3856,10 @@ abstract class BaseScanner implements IScanner { } protected void skipToNewLine() { + skipToNewLine(false); + } + + protected void skipToNewLine(boolean insideComment) { char[] buffer = bufferStack[bufferStackPos]; int limit = bufferLimit[bufferStackPos]; int pos = ++bufferPos[bufferStackPos]; @@ -3868,6 +3872,9 @@ abstract class BaseScanner implements IScanner { while (++bufferPos[bufferStackPos] < limit) { switch (buffer[bufferPos[bufferStackPos]]) { case '/': + if (insideComment) + break; + pos = bufferPos[bufferStackPos]; if (pos + 1 < limit && buffer[pos + 1] == '*') { ++bufferPos[bufferStackPos];