From b1157be81cef49a3ce5d885cff5418b2483b0399 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Thu, 13 May 2004 19:40:39 +0000 Subject: [PATCH] Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=61968 --- .../cdt/core/parser/tests/ScannerTestCase.java | 16 ++++++++++++++++ .../core/parser/token/IntegerExpansionToken.java | 4 ++-- .../internal/core/parser/token/IntegerToken.java | 4 ++-- .../internal/core/parser/token/TokenFactory.java | 12 +++++++----- 4 files changed, 27 insertions(+), 9 deletions(-) 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 1f75833583f..7cee5e7a6a7 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 @@ -1562,4 +1562,20 @@ public class ScannerTestCase extends BaseScannerTest validateEOF(); assertFalse( callback.problems.isEmpty() ); } + + public void testBug61968() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "unsigned int ui = 2172748163; //ok \n" ); //$NON-NLS-1$ + writer.write( "int big = 999999999999999;//ok \n" ); //$NON-NLS-1$ + writer.write( "void main() { \n" ); //$NON-NLS-1$ + writer.write( "caller(4); //ok\n" ); //$NON-NLS-1$ + writer.write( "caller(2172748163);//causes java.lang.NumberFormatException \n" ); //$NON-NLS-1$ + writer.write( "caller(999999999999999); //also causes NumberFormatException \n" ); //$NON-NLS-1$ + writer.write( "}\n" ); //$NON-NLS-1$ + Callback callback = new Callback(ParserMode.QUICK_PARSE); + initializeScanner( writer.toString(), ParserMode.QUICK_PARSE, callback ); + fullyTokenize(); + assertTrue( callback.problems.isEmpty() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerExpansionToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerExpansionToken.java index a6e56793ac0..9db40545be7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerExpansionToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerExpansionToken.java @@ -25,9 +25,9 @@ public class IntegerExpansionToken extends SimpleExpansionToken implements INume * @param value * @param stack */ - public IntegerExpansionToken(int tokenType, int value, ContextStack stack) { + public IntegerExpansionToken(int tokenType, long l, ContextStack stack) { super( tokenType, stack ); - this.value = value; + this.value = l; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerToken.java index 6b1163e52e1..d39b5cf22b5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/IntegerToken.java @@ -25,9 +25,9 @@ public class IntegerToken extends SimpleToken implements INumericToken { * @param value * @param stack */ - public IntegerToken(int tokenType, int value, ContextStack stack) { + public IntegerToken(int tokenType, long l, ContextStack stack) { super( tokenType, stack ); - this.value = value; + this.value = l; } /* (non-Javadoc) 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 87e9dc4e9c8..0ecc69eeb47 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 @@ -19,21 +19,23 @@ 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 String MAX_HEX_LONG_STRING = "0x" + Long.toString( Long.MAX_VALUE, 16 ); //$NON-NLS-1$ + public static IToken createIntegerToken( String value, IScannerData scannerData ) { - if( value.length() > 15 ) + if( 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, Integer.parseInt(value ), scannerData.getContextStack() ); + return new IntegerExpansionToken( IToken.tINTEGER, Long.parseLong(value ), scannerData.getContextStack() ); - return new IntegerToken( IToken.tINTEGER, Integer.parseInt( value ), scannerData.getContextStack() ); + return new IntegerToken( IToken.tINTEGER, Long.parseLong( value ), scannerData.getContextStack() ); } public static IToken createHexadecimalIntegerToken( String value, IScannerData scannerData ) { - if( value.length() > 15 ) + if( 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() );