From 6975d1ce40ca11335dbb591a6c19a7a23b1ce4ad Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 29 Aug 2020 07:08:02 -0700 Subject: [PATCH] Fixed warnings for hex literals --- IDEHelper/Compiler/BfExprEvaluator.cpp | 4 ++-- IDEHelper/Compiler/BfParser.cpp | 19 +++++++------------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 69aa63f9..cd6adf36 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -3059,10 +3059,10 @@ void BfExprEvaluator::Visit(BfLiteralExpression* literalExpr) switch (literalExpr->mValue.mWarnType) { case BfWarning_BF4201_Only7Hex: - mModule->Warn(BfWarning_BF4201_Only7Hex, "Only 7 hex digits specified. Add a leading zero to clarify intention.", literalExpr); + mModule->Warn(BfWarning_BF4201_Only7Hex, "Only 7 hex digits specified. Add a leading zero to clarify intention.", literalExpr); break; case BfWarning_BF4202_TooManyHexForInt: - mModule->Warn(BfWarning_BF4202_TooManyHexForInt, "Too many hex digits for an int, but too few for a long. Use 'L' suffix if a long was intended.", literalExpr); + mModule->Warn(BfWarning_BF4202_TooManyHexForInt, "Nine hex digits specified. If an 8-digit hex literal was not intended then add a leading zero to clarify.", literalExpr); break; } diff --git a/IDEHelper/Compiler/BfParser.cpp b/IDEHelper/Compiler/BfParser.cpp index 2075f736..b83c1b92 100644 --- a/IDEHelper/Compiler/BfParser.cpp +++ b/IDEHelper/Compiler/BfParser.cpp @@ -2440,6 +2440,12 @@ void BfParser::NextToken(int endIdx) mLiteral.mInt64 = val; mLiteral.mTypeCode = BfTypeCode_IntUnknown; + + if ((numberBase == 0x10) && (hexDigits == 7)) + mLiteral.mWarnType = BfWarning_BF4201_Only7Hex; + if ((numberBase == 0x10) && (hexDigits == 9)) + mLiteral.mWarnType = BfWarning_BF4202_TooManyHexForInt; + if (hadOverflow) { mPassInstance->FailAt("Value doesn't fit into int64", mSourceData, mTokenStart, mSrcIdx - mTokenStart); @@ -2448,18 +2454,7 @@ void BfParser::NextToken(int endIdx) else if ((val < -0x80000000LL) || (val > 0xFFFFFFFFLL)) { mLiteral.mTypeCode = BfTypeCode_Int64; - } - else - { - if ((numberBase == 0x10) && (hexDigits == 7)) - mLiteral.mWarnType = BfWarning_BF4201_Only7Hex; - //mPassInstance->WarnAt(0, "Only 7 hex digits specified. Add a leading zero to clarify intention.", this, mTokenStart, mSrcIdx - mTokenStart); - if ((numberBase == 0x10) && (hexDigits > 8)) - mLiteral.mWarnType = BfWarning_BF4202_TooManyHexForInt; - //mPassInstance->FailAt("Too many hex digits for an int, but too few for a long. Use 'L' suffix if a long was intended.", this, mTokenStart, mSrcIdx - mTokenStart); - /*if (val > 0x7FFFFFFF) - mLiteral.mTypeCode = BfTypeCode_UIntUnknown;*/ - } + } } mSyntaxToken = BfSyntaxToken_Literal;