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:
parent
87b6836f3a
commit
43e38ae75c
2 changed files with 94 additions and 79 deletions
|
@ -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();
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue