diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java index 956872351f8..2ae7f6f4a93 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java @@ -1578,4 +1578,10 @@ public class ScannerTestCase extends BaseScannerTest initializeScanner( "\"\\?\\?<\""); //$NON-NLS-1$ validateString("\\?\\?<" ); //$NON-NLS-1$ } + + public void testBug62384() throws Exception + { + initializeScanner( "18446744073709551615LL"); //$NON-NLS-1$ + validateInteger( "18446744073709551615"); //$NON-NLS-1$ + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java index 0ecc69eeb47..438ed6515e6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java @@ -20,11 +20,13 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerData; public class TokenFactory { 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 int MAX_HEX_LONG_STRING_LENGTH = MAX_HEX_LONG_STRING.length(); 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 ); if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) 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 ) { - 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 ); if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) return new HexIntegerExpansionToken( IToken.tHEXINT, value, scannerData.getContextStack() );