mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Further Scanner2 work regarding macro expansions.
This commit is contained in:
parent
b08d93dfd7
commit
c24ed6aa2a
1 changed files with 82 additions and 58 deletions
|
@ -44,6 +44,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerData;
|
||||||
import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility;
|
import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility;
|
||||||
import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility.InclusionDirective;
|
import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility.InclusionDirective;
|
||||||
import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility.InclusionParseException;
|
import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility.InclusionParseException;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.token.ImagedExpansionToken;
|
||||||
import org.eclipse.cdt.internal.core.parser.token.ImagedToken;
|
import org.eclipse.cdt.internal.core.parser.token.ImagedToken;
|
||||||
import org.eclipse.cdt.internal.core.parser.token.SimpleToken;
|
import org.eclipse.cdt.internal.core.parser.token.SimpleToken;
|
||||||
|
|
||||||
|
@ -323,7 +324,7 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
int tokenType = IToken.tSTRING;
|
int tokenType = IToken.tSTRING;
|
||||||
if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING )
|
if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING )
|
||||||
tokenType = IToken.tLSTRING;
|
tokenType = IToken.tLSTRING;
|
||||||
lastToken = new ImagedToken(tokenType, CharArrayUtils.concat( lastToken.getCharImage(), nextToken.getCharImage() ), nextToken.getEndOffset(), getCurrentFilename() );
|
lastToken = newToken(tokenType, CharArrayUtils.concat( lastToken.getCharImage(), nextToken.getCharImage() ) );
|
||||||
if (oldToken != null)
|
if (oldToken != null)
|
||||||
oldToken.setNext(lastToken);
|
oldToken.setNext(lastToken);
|
||||||
nextToken = fetchToken();
|
nextToken = fetchToken();
|
||||||
|
@ -473,20 +474,20 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
if (pos + 2 < limit) {
|
if (pos + 2 < limit) {
|
||||||
if (buffer[pos + 2] == '.') {
|
if (buffer[pos + 2] == '.') {
|
||||||
bufferPos[bufferStackPos] += 2;
|
bufferPos[bufferStackPos] += 2;
|
||||||
return new SimpleToken(IToken.tELLIPSIS, bufferPos[bufferStackPos] + 1 , getCurrentFilename() );
|
return newToken(IToken.tELLIPSIS );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case '*':
|
case '*':
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tDOTSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tDOTSTAR );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tDOT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tDOT);
|
||||||
|
|
||||||
case '#':
|
case '#':
|
||||||
if (pos + 1 < limit && buffer[pos + 1] == '#') {
|
if (pos + 1 < limit && buffer[pos + 1] == '#') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tPOUNDPOUND, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tPOUNDPOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should really check to make sure this is the first
|
// Should really check to make sure this is the first
|
||||||
|
@ -495,49 +496,49 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case '{':
|
case '{':
|
||||||
return new SimpleToken(IToken.tLBRACE, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tLBRACE );
|
||||||
|
|
||||||
case '}':
|
case '}':
|
||||||
return new SimpleToken(IToken.tRBRACE, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tRBRACE );
|
||||||
|
|
||||||
case '[':
|
case '[':
|
||||||
return new SimpleToken(IToken.tLBRACKET, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tLBRACKET );
|
||||||
|
|
||||||
case ']':
|
case ']':
|
||||||
return new SimpleToken(IToken.tRBRACKET, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tRBRACKET );
|
||||||
|
|
||||||
case '(':
|
case '(':
|
||||||
return new SimpleToken(IToken.tLPAREN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tLPAREN );
|
||||||
|
|
||||||
case ')':
|
case ')':
|
||||||
return new SimpleToken(IToken.tRPAREN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tRPAREN );
|
||||||
|
|
||||||
case ';':
|
case ';':
|
||||||
return new SimpleToken(IToken.tSEMI, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSEMI );
|
||||||
|
|
||||||
case ':':
|
case ':':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == ':') {
|
if (buffer[pos + 1] == ':') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tCOLONCOLON, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tCOLONCOLON );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tCOLON, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tCOLON );
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
return new SimpleToken(IToken.tQUESTION, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tQUESTION );
|
||||||
|
|
||||||
case '+':
|
case '+':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '+') {
|
if (buffer[pos + 1] == '+') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tINCR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tINCR);
|
||||||
} else if (buffer[pos + 1] == '=') {
|
} else if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tPLUSASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tPLUSASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tPLUS, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tPLUS );
|
||||||
|
|
||||||
case '-':
|
case '-':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
|
@ -545,140 +546,140 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
if (pos + 2 < limit) {
|
if (pos + 2 < limit) {
|
||||||
if (buffer[pos + 2] == '*') {
|
if (buffer[pos + 2] == '*') {
|
||||||
bufferPos[bufferStackPos] += 2;
|
bufferPos[bufferStackPos] += 2;
|
||||||
return new SimpleToken(IToken.tARROWSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tARROWSTAR );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tARROW, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tARROW);
|
||||||
} else if (buffer[pos + 1] == '-') {
|
} else if (buffer[pos + 1] == '-') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tDECR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tDECR );
|
||||||
} else if (buffer[pos + 1] == '=') {
|
} else if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tMINUSASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tMINUSASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tMINUS, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tMINUS );
|
||||||
|
|
||||||
case '*':
|
case '*':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tSTARASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSTARASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSTAR);
|
||||||
|
|
||||||
case '/':
|
case '/':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tDIVASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tDIVASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tDIV, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tDIV );
|
||||||
|
|
||||||
case '%':
|
case '%':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tMODASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tMODASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tMOD, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tMOD );
|
||||||
|
|
||||||
case '^':
|
case '^':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tXORASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tXORASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tXOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tXOR );
|
||||||
|
|
||||||
case '&':
|
case '&':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '&') {
|
if (buffer[pos + 1] == '&') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tAND, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tAND );
|
||||||
} else if (buffer[pos + 1] == '=') {
|
} else if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tAMPERASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tAMPERASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tAMPER, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tAMPER );
|
||||||
|
|
||||||
case '|':
|
case '|':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '|') {
|
if (buffer[pos + 1] == '|') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tOR );
|
||||||
} else if (buffer[pos + 1] == '=') {
|
} else if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tBITORASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tBITORASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tBITOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tBITOR );
|
||||||
|
|
||||||
case '~':
|
case '~':
|
||||||
return new SimpleToken(IToken.tCOMPL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tCOMPL );
|
||||||
|
|
||||||
case '!':
|
case '!':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tNOTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tNOTEQUAL );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tNOT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tNOT );
|
||||||
|
|
||||||
case '=':
|
case '=':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tEQUAL );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tASSIGN );
|
||||||
|
|
||||||
case '<':
|
case '<':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tLTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tLTEQUAL );
|
||||||
} else if (buffer[pos + 1] == '<') {
|
} else if (buffer[pos + 1] == '<') {
|
||||||
if (pos + 2 < limit) {
|
if (pos + 2 < limit) {
|
||||||
if (buffer[pos + 2] == '=') {
|
if (buffer[pos + 2] == '=') {
|
||||||
bufferPos[bufferStackPos] += 2;
|
bufferPos[bufferStackPos] += 2;
|
||||||
return new SimpleToken(IToken.tSHIFTLASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSHIFTLASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tSHIFTL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSHIFTL );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tLT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tLT );
|
||||||
|
|
||||||
case '>':
|
case '>':
|
||||||
if (pos + 1 < limit) {
|
if (pos + 1 < limit) {
|
||||||
if (buffer[pos + 1] == '=') {
|
if (buffer[pos + 1] == '=') {
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tGTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tGTEQUAL );
|
||||||
} else if (buffer[pos + 1] == '>') {
|
} else if (buffer[pos + 1] == '>') {
|
||||||
if (pos + 2 < limit) {
|
if (pos + 2 < limit) {
|
||||||
if (buffer[pos + 2] == '=') {
|
if (buffer[pos + 2] == '=') {
|
||||||
bufferPos[bufferStackPos] += 2;
|
bufferPos[bufferStackPos] += 2;
|
||||||
return new SimpleToken(IToken.tSHIFTRASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSHIFTRASSIGN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++bufferPos[bufferStackPos];
|
++bufferPos[bufferStackPos];
|
||||||
return new SimpleToken(IToken.tSHIFTR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tSHIFTR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new SimpleToken(IToken.tGT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tGT );
|
||||||
|
|
||||||
case ',':
|
case ',':
|
||||||
return new SimpleToken(IToken.tCOMMA, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tCOMMA );
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// skip over anything we don't handle
|
// skip over anything we don't handle
|
||||||
|
@ -689,6 +690,29 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private IToken newToken( int signal ) {
|
||||||
|
return new SimpleToken(signal, bufferPos[bufferStackPos] + 1 , getCurrentFilename() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private IToken newToken( int signal, char [] buffer )
|
||||||
|
{
|
||||||
|
if( bufferData[bufferStackPos] instanceof ObjectStyleMacro ||
|
||||||
|
bufferData[bufferStackPos] instanceof FunctionStyleMacro )
|
||||||
|
{
|
||||||
|
int mostRelevant;
|
||||||
|
for( mostRelevant = bufferStackPos; mostRelevant >= 0; --mostRelevant )
|
||||||
|
if( bufferData[mostRelevant] instanceof InclusionData || bufferData[mostRelevant] instanceof CodeReader )
|
||||||
|
break;
|
||||||
|
if( bufferData[bufferStackPos] instanceof ObjectStyleMacro )
|
||||||
|
return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((ObjectStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename() );
|
||||||
|
return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((FunctionStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename() );
|
||||||
|
}
|
||||||
|
return new ImagedToken(signal, buffer, bufferPos[bufferStackPos] + 1 , getCurrentFilename() );
|
||||||
|
}
|
||||||
|
|
||||||
private IToken scanIdentifier() {
|
private IToken scanIdentifier() {
|
||||||
char[] buffer = bufferStack[bufferStackPos];
|
char[] buffer = bufferStack[bufferStackPos];
|
||||||
int start = bufferPos[bufferStackPos];
|
int start = bufferPos[bufferStackPos];
|
||||||
|
@ -748,8 +772,8 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
int tokenType = keywords.get(buffer, start, len);
|
int tokenType = keywords.get(buffer, start, len);
|
||||||
char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) );
|
char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) );
|
||||||
if (tokenType == keywords.undefined)
|
if (tokenType == keywords.undefined)
|
||||||
return new ImagedToken(IToken.tIDENTIFIER, result, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
return newToken(IToken.tIDENTIFIER, result );
|
||||||
return new SimpleToken(tokenType, start + len, getCurrentFilename() );
|
return newToken(tokenType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IToken scanString() {
|
private IToken scanString() {
|
||||||
|
@ -783,7 +807,7 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
// We should really throw an exception if we didn't get the terminating
|
// We should really throw an exception if we didn't get the terminating
|
||||||
// quote before the end of buffer
|
// quote before the end of buffer
|
||||||
|
|
||||||
return new ImagedToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen), stringStart + stringLen+ 1, getCurrentFilename() );
|
return newToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen));
|
||||||
}
|
}
|
||||||
|
|
||||||
private IToken scanCharLiteral(boolean b) {
|
private IToken scanCharLiteral(boolean b) {
|
||||||
|
@ -800,7 +824,7 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start >= limit) {
|
if (start >= limit) {
|
||||||
return new ImagedToken(tokenType, emptyCharArray, start, getCurrentFilename() );
|
return newToken(tokenType, emptyCharArray );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -823,7 +847,7 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
? CharArrayUtils.extract(buffer, start, length)
|
? CharArrayUtils.extract(buffer, start, length)
|
||||||
: emptyCharArray;
|
: emptyCharArray;
|
||||||
|
|
||||||
return new ImagedToken(tokenType, image, start + length+ 1 , getCurrentFilename() );
|
return newToken(tokenType, image );
|
||||||
}
|
}
|
||||||
|
|
||||||
private IToken scanNumber() {
|
private IToken scanNumber() {
|
||||||
|
@ -999,9 +1023,9 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
|
|
||||||
--bufferPos[bufferStackPos];
|
--bufferPos[bufferStackPos];
|
||||||
|
|
||||||
return new ImagedToken(isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER,
|
return newToken( isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER,
|
||||||
CharArrayUtils.extract(buffer, start,
|
CharArrayUtils.extract(buffer, start,
|
||||||
bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
|
bufferPos[bufferStackPos] - start + 1) );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handlePPDirective(int pos) throws ScannerException {
|
private void handlePPDirective(int pos) throws ScannerException {
|
||||||
|
|
Loading…
Add table
Reference in a new issue