Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java41
1 files changed, 35 insertions, 6 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java
index 2aa757da8c0..77afc9966ff 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java
@@ -362,9 +362,18 @@ public class Scanner2 implements IScanner, IScannerData {
* @see org.eclipse.cdt.core.parser.IScanner#nextToken()
*/
public IToken nextToken() throws ScannerException, EndOfFileException {
+ boolean exception = false;
if (nextToken == null && !finished ) {
- nextToken = fetchToken();
- if (nextToken == null)
+ try
+ {
+ nextToken = fetchToken();
+ }
+ catch( Exception e )
+ {
+ exception = true;
+ errorHandle();
+ }
+ if (nextToken == null && !exception)
{
finished = true;
}
@@ -385,10 +394,22 @@ public class Scanner2 implements IScanner, IScannerData {
lastToken.setNext(nextToken);
IToken oldToken = lastToken;
lastToken = nextToken;
- nextToken = fetchToken();
- if (nextToken == null)
- finished = true;
+ try
+ {
+ nextToken = fetchToken();
+ }
+ catch( Exception e )
+ {
+ nextToken = null;
+ exception = true;
+ errorHandle();
+ }
+
+ if (nextToken == null ){
+ if(!exception)
+ finished = true;
+ }
else if (nextToken.getType() == IToken.tPOUNDPOUND) {
// time for a pasting
IToken token2 = fetchToken();
@@ -421,6 +442,13 @@ public class Scanner2 implements IScanner, IScannerData {
/**
*
*/
+ protected void errorHandle() {
+ ++bufferPos[bufferStackPos];
+ }
+
+ /**
+ *
+ */
private void throwOLRE() throws OffsetLimitReachedException {
if( lastToken != null && lastToken.getEndOffset() != offsetBoundary )
throw new OffsetLimitReachedException( (IToken)null );
@@ -2195,7 +2223,8 @@ public class Scanner2 implements IScanner, IScannerData {
int limit = bufferLimit[bufferStackPos];
skipOverWhiteSpace();
- while( buffer[bufferPos[bufferStackPos]] == '\\' &&
+ while( bufferPos[bufferStackPos] < limit &&
+ buffer[bufferPos[bufferStackPos]] == '\\' &&
bufferPos[bufferStackPos] + 1 < buffer.length &&
buffer[bufferPos[bufferStackPos]+1] == '\n' )
{

Back to the top