mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
This commit is contained in:
parent
c2b76e8109
commit
5706a3abe2
2 changed files with 10 additions and 2 deletions
|
@ -1578,4 +1578,10 @@ public class ScannerTestCase extends BaseScannerTest
|
||||||
initializeScanner( "\"\\?\\?<\""); //$NON-NLS-1$
|
initializeScanner( "\"\\?\\?<\""); //$NON-NLS-1$
|
||||||
validateString("\\?\\?<" ); //$NON-NLS-1$
|
validateString("\\?\\?<" ); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug62384() throws Exception
|
||||||
|
{
|
||||||
|
initializeScanner( "18446744073709551615LL"); //$NON-NLS-1$
|
||||||
|
validateInteger( "18446744073709551615"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,11 +20,13 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerData;
|
||||||
public class TokenFactory {
|
public class TokenFactory {
|
||||||
|
|
||||||
static final String MAX_LONG_STRING = Long.toString( Long.MAX_VALUE );
|
static final String MAX_LONG_STRING = Long.toString( Long.MAX_VALUE );
|
||||||
|
static final int MAX_LONG_STRING_LENGTH = MAX_LONG_STRING.length();
|
||||||
static final String MAX_HEX_LONG_STRING = "0x" + Long.toString( Long.MAX_VALUE, 16 ); //$NON-NLS-1$
|
static final String MAX_HEX_LONG_STRING = "0x" + Long.toString( Long.MAX_VALUE, 16 ); //$NON-NLS-1$
|
||||||
|
static final int MAX_HEX_LONG_STRING_LENGTH = MAX_HEX_LONG_STRING.length();
|
||||||
|
|
||||||
public static IToken createIntegerToken( String value, IScannerData scannerData )
|
public static IToken createIntegerToken( String value, IScannerData scannerData )
|
||||||
{
|
{
|
||||||
if( value.compareTo( MAX_LONG_STRING ) > 0 )
|
if( value.length() > MAX_LONG_STRING_LENGTH || value.compareTo( MAX_LONG_STRING ) > 0 )
|
||||||
return createUniquelyImagedToken( IToken.tINTEGER, value, scannerData );
|
return createUniquelyImagedToken( IToken.tINTEGER, value, scannerData );
|
||||||
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
|
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
|
||||||
return new IntegerExpansionToken( IToken.tINTEGER, Long.parseLong(value ), scannerData.getContextStack() );
|
return new IntegerExpansionToken( IToken.tINTEGER, Long.parseLong(value ), scannerData.getContextStack() );
|
||||||
|
@ -34,7 +36,7 @@ public class TokenFactory {
|
||||||
|
|
||||||
public static IToken createHexadecimalIntegerToken( String value, IScannerData scannerData )
|
public static IToken createHexadecimalIntegerToken( String value, IScannerData scannerData )
|
||||||
{
|
{
|
||||||
if( value.compareTo( MAX_HEX_LONG_STRING ) > 0 )
|
if( value.length() > MAX_HEX_LONG_STRING_LENGTH || value.compareTo( MAX_HEX_LONG_STRING ) > 0 )
|
||||||
return createUniquelyImagedToken( IToken.tHEXINT, value, scannerData );
|
return createUniquelyImagedToken( IToken.tHEXINT, value, scannerData );
|
||||||
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
|
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
|
||||||
return new HexIntegerExpansionToken( IToken.tHEXINT, value, scannerData.getContextStack() );
|
return new HexIntegerExpansionToken( IToken.tHEXINT, value, scannerData.getContextStack() );
|
||||||
|
|
Loading…
Add table
Reference in a new issue