1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Patch by Klaus Falser modified by JohnC - Fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=60764

This commit is contained in:
John Camelon 2004-05-04 13:03:39 +00:00
parent 87b6836f3a
commit 43e38ae75c
2 changed files with 94 additions and 79 deletions

View file

@ -1552,15 +1552,15 @@ public class ScannerTestCase extends BaseScannerTest
assertTrue( d.isCircular() ); assertTrue( d.isCircular() );
} }
// public void testBug60764() throws Exception public void testBug60764() throws Exception
// { {
// Writer writer = new StringWriter(); Writer writer = new StringWriter();
// writer.write( "#define P a,b\n"); //$NON-NLS-1$ writer.write( "#define P a,b\n"); //$NON-NLS-1$
// writer.write( "#define M(x) M1(x)\n"); //$NON-NLS-1$ writer.write( "#define M(x) M1(x)\n"); //$NON-NLS-1$
// writer.write( "#define M1(x,y) #x #y\n"); //$NON-NLS-1$ writer.write( "#define M1(x,y) #x #y\n"); //$NON-NLS-1$
// writer.write( "M(P)\n"); //$NON-NLS-1$ writer.write( "M(P)\n"); //$NON-NLS-1$
// initializeScanner( writer.toString() ); initializeScanner( writer.toString() );
// validateString( "ab"); //$NON-NLS-1$ validateString( "ab"); //$NON-NLS-1$
// validateEOF(); validateEOF();
// } }
} }

View file

@ -2850,75 +2850,90 @@ public class Scanner implements IScanner {
protected Vector getMacroParameters (String params, boolean forStringizing) throws ScannerException { protected Vector getMacroParameters (String params, boolean forStringizing) throws ScannerException {
Scanner tokenizer = new Scanner( // split params up into single arguments
new StringReader(params),
TEXT,
scannerData.getPublicDefinitions(),
scannerData.getIncludePathNames(),
NULL_REQUESTOR,
scannerData.getParserMode(),
scannerData.getLanguage(),
NULL_LOG_SERVICE,
scannerExtension );
tokenizer.setThrowExceptionOnBadCharacterRead(false);
Vector parameterValues = new Vector();
SimpleToken t = null;
StringBuffer buffer = new StringBuffer();
boolean space = false;
int nParen = 0; int nParen = 0;
Vector parameters = new Vector();
try { StringBuffer parBuffer = new StringBuffer(); //$NON-NLS-1$
while (true) { for (int i = 0; i < params.length(); i++) {
int c = tokenizer.getCharacter(); char c = params.charAt(i);
if ((c != ' ') && (c != '\t') && (c != '\r') && (c != '\n')) { switch (c) {
space = false; case '(' :
} nParen++;
if (c != NOCHAR) tokenizer.ungetChar(c); break;
case ')' :
t = (SimpleToken)(forStringizing ? tokenizer.nextTokenForStringizing() : tokenizer.nextToken(false)); nParen--;
if (t.getType() == IToken.tLPAREN) { break;
nParen++; case ',' :
} else if (t.getType() == IToken.tRPAREN) { if (nParen == 0) {
nParen--; parameters.add(parBuffer.toString());
} else if (t.getType() == IToken.tCOMMA && nParen == 0) { parBuffer = new StringBuffer(); //$NON-NLS-1$
parameterValues.add(buffer.toString()); continue;
buffer = new StringBuffer(); }
space = false; break;
continue; default :
} break;
}
if (space) parBuffer.append( c );
buffer.append( ' ' ); }
parameters.add(parBuffer.toString());
switch (t.getType()) {
case IToken.tSTRING : Vector parameterValues = new Vector();
buffer.append('\"'); for (int i = 0; i < parameters.size(); i++) {
buffer.append(t.getImage()); Scanner tokenizer = new Scanner(
buffer.append('\"'); new StringReader((String)parameters.elementAt(i)),
break; TEXT,
case IToken.tLSTRING : scannerData.getPublicDefinitions(),
buffer.append( "L\""); //$NON-NLS-1$ EMPTY_LIST,
buffer.append(t.getImage()); NULL_REQUESTOR,
buffer.append('\"'); scannerData.getParserMode(),
break; scannerData.getLanguage(),
case IToken.tCHAR : NULL_LOG_SERVICE,
buffer.append('\''); scannerExtension );
buffer.append(t.getImage()); tokenizer.setThrowExceptionOnBadCharacterRead(false);
buffer.append('\''); IToken t = null;
break; StringBuffer buffer = new StringBuffer();
default : boolean space = false;
buffer.append( t.getImage());
break; try {
} while (true) {
space = true; int c = tokenizer.getCharacter();
} if ((c != ' ') && (c != '\t') && (c != '\r') && (c != '\n')) {
} space = false;
catch (EndOfFileException e) { }
// Good if (c != NOCHAR) tokenizer.ungetChar(c);
parameterValues.add(buffer.toString()); t = (forStringizing ? tokenizer.nextTokenForStringizing() : tokenizer.nextToken(false));
}
if (space)
buffer.append( ' ' );
switch (t.getType()) {
case IToken.tSTRING :
buffer.append('\"');
buffer.append(t.getImage());
buffer.append('\"');
break;
case IToken.tLSTRING :
buffer.append( "L\""); //$NON-NLS-1$
buffer.append(t.getImage());
buffer.append('\"');
break;
case IToken.tCHAR :
buffer.append('\'');
buffer.append(t.getImage());
buffer.append('\'');
break;
default :
buffer.append( t.getImage());
break;
}
space = true;
}
}
catch (EndOfFileException e) {
// Good
parameterValues.add(buffer.toString());
}
}
return parameterValues; return parameterValues;
} }