1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 18:56:02 +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();
StringBuffer parBuffer = new StringBuffer(); //$NON-NLS-1$
for (int i = 0; i < params.length(); i++) {
char c = params.charAt(i);
switch (c) {
case '(' :
nParen++;
break;
case ')' :
nParen--;
break;
case ',' :
if (nParen == 0) {
parameters.add(parBuffer.toString());
parBuffer = new StringBuffer(); //$NON-NLS-1$
continue;
}
break;
default :
break;
}
parBuffer.append( c );
}
parameters.add(parBuffer.toString());
try { Vector parameterValues = new Vector();
while (true) { for (int i = 0; i < parameters.size(); i++) {
int c = tokenizer.getCharacter(); Scanner tokenizer = new Scanner(
if ((c != ' ') && (c != '\t') && (c != '\r') && (c != '\n')) { new StringReader((String)parameters.elementAt(i)),
space = false; TEXT,
} scannerData.getPublicDefinitions(),
if (c != NOCHAR) tokenizer.ungetChar(c); EMPTY_LIST,
NULL_REQUESTOR,
scannerData.getParserMode(),
scannerData.getLanguage(),
NULL_LOG_SERVICE,
scannerExtension );
tokenizer.setThrowExceptionOnBadCharacterRead(false);
IToken t = null;
StringBuffer buffer = new StringBuffer();
boolean space = false;
t = (SimpleToken)(forStringizing ? tokenizer.nextTokenForStringizing() : tokenizer.nextToken(false)); try {
if (t.getType() == IToken.tLPAREN) { while (true) {
nParen++; int c = tokenizer.getCharacter();
} else if (t.getType() == IToken.tRPAREN) { if ((c != ' ') && (c != '\t') && (c != '\r') && (c != '\n')) {
nParen--; space = false;
} else if (t.getType() == IToken.tCOMMA && nParen == 0) { }
parameterValues.add(buffer.toString()); if (c != NOCHAR) tokenizer.ungetChar(c);
buffer = new StringBuffer(); t = (forStringizing ? tokenizer.nextTokenForStringizing() : tokenizer.nextToken(false));
space = false;
continue;
}
if (space) if (space)
buffer.append( ' ' ); 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());
}
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;
} }