mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 20:12:21 +02:00
Fixes for literal overflow detection
This commit is contained in:
parent
6a95cbb3b8
commit
a3b761ab26
6 changed files with 68 additions and 39 deletions
|
@ -2282,6 +2282,41 @@ bool BfSystem::DoesLiteralFit(BfTypeCode typeCode, int64 value)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool BfSystem::DoesLiteralFit(BfTypeCode typeCode, uint64 value)
|
||||
{
|
||||
if (typeCode == BfTypeCode_IntPtr)
|
||||
typeCode = (mPtrSize == 4) ? BfTypeCode_Int32 : BfTypeCode_Int64;
|
||||
if (typeCode == BfTypeCode_UIntPtr)
|
||||
typeCode = (mPtrSize == 4) ? BfTypeCode_UInt32 : BfTypeCode_UInt64;
|
||||
|
||||
if (value >= 0x8000000000000000)
|
||||
return typeCode == BfTypeCode_UInt64;
|
||||
|
||||
switch (typeCode)
|
||||
{
|
||||
case BfTypeCode_Int8:
|
||||
return (value < 0x80);
|
||||
case BfTypeCode_Int16:
|
||||
return (value < 0x8000);
|
||||
case BfTypeCode_Int32:
|
||||
return (value < 0x80000000LL);
|
||||
case BfTypeCode_Int64:
|
||||
return true;
|
||||
|
||||
case BfTypeCode_UInt8:
|
||||
return (value < 0x100);
|
||||
case BfTypeCode_UInt16:
|
||||
return (value < 0x10000);
|
||||
case BfTypeCode_UInt32:
|
||||
return (value < 0x100000000LL);
|
||||
case BfTypeCode_UInt64:
|
||||
return true;
|
||||
default: break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
BfParser* BfSystem::CreateParser(BfProject* bfProject)
|
||||
{
|
||||
AutoCrit crit(mDataLock);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue