From 05fa0e698c911f83ce126aeeb02ee2a33f1b315a Mon Sep 17 00:00:00 2001 From: John Camelon Date: Thu, 22 Jul 2004 19:02:45 +0000 Subject: [PATCH] Start of line number support for Scanner2. --- .../cdt/internal/core/parser/scanner2/Scanner2.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 682a68a1b79..08d19e3dba7 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 @@ -93,6 +93,7 @@ public class Scanner2 implements IScanner, IScannerData { private Object[] bufferData = new Object[bufferInitialSize]; private int[] bufferPos = new int[bufferInitialSize]; private int[] bufferLimit = new int[bufferInitialSize]; + private int[] bufferLineNums = new int[bufferInitialSize]; // Utility private static String[] emptyStringArray = new String[0]; @@ -173,10 +174,16 @@ public class Scanner2 implements IScanner, IScannerData { int[] oldBufferLimit = bufferLimit; bufferLimit = new int[size]; System.arraycopy(oldBufferLimit, 0, bufferLimit, 0, oldBufferLimit.length); + + int [] oldBufferLineNums = bufferLineNums; + bufferLineNums = new int[size]; + System.arraycopy( oldBufferLineNums, 0, bufferLineNums, 0, oldBufferLineNums.length); + } bufferStack[bufferStackPos] = buffer; bufferPos[bufferStackPos] = -1; + bufferLineNums[ bufferStackPos ] = 0; bufferLimit[bufferStackPos] = buffer.length; } @@ -192,6 +199,7 @@ public class Scanner2 implements IScanner, IScannerData { if( bufferData[bufferStackPos] instanceof InclusionData ) requestor.enterInclusion( ((InclusionData)bufferData[bufferStackPos]).inclusion ); bufferData[bufferStackPos] = null; + bufferLineNums[bufferStackPos] = 0; --bufferStackPos; } @@ -358,6 +366,10 @@ public class Scanner2 implements IScanner, IScannerData { int pos = bufferPos[bufferStackPos]; switch (buffer[pos]) { + case '\n': + ++bufferLineNums[bufferStackPos]; + continue; + case 'L': if (pos + 1 < limit && buffer[pos + 1] == '"') return scanString();