From 9d0f656be2d264940f1e1a196807eb8c49e503ba Mon Sep 17 00:00:00 2001 From: hermansimensen Date: Mon, 24 Jul 2023 19:42:05 +0200 Subject: [PATCH 1/2] Prevent warning in emitted bitfield code --- BeefLibs/corlib/src/Bitfield.bf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BeefLibs/corlib/src/Bitfield.bf b/BeefLibs/corlib/src/Bitfield.bf index 4c5fe212..d65080e7 100644 --- a/BeefLibs/corlib/src/Bitfield.bf +++ b/BeefLibs/corlib/src/Bitfield.bf @@ -178,9 +178,9 @@ namespace System if (mBFieldType == typeof(bool)) str.AppendF($"(({fieldInfo.Name} & {mask}) >> {mBitPos}) != 0;\n"); else if (buType.IsSigned) - str.AppendF($"(.)((int)((({fieldInfo.Name} & 0x{mask:X}) >> {mBitPos}) ^ 0x{1 << (bitCount - 1):X}) - 0x{1 << (bitCount - 1):X});\n"); + str.AppendF($"(.)((int)((({fieldInfo.Name} & 0x{mask:X16}) >> {mBitPos}) ^ 0x{1 << (bitCount - 1):X}) - 0x{1 << (bitCount - 1):X});\n"); else - str.AppendF($"(.)(({fieldInfo.Name} & 0x{mask:X}) >> {mBitPos});\n"); + str.AppendF($"(.)(({fieldInfo.Name} & 0x{mask:X16}) >> {mBitPos});\n"); } if (mBFieldType.IsInteger) @@ -222,9 +222,9 @@ namespace System } if (mBFieldType == typeof(bool)) - str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{mask:X}) | (value ? 0x{mask:X} : 0);\n"); + str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{mask:X16}) | (value ? 0x{mask:X16} : 0);\n"); else - str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{mask:X}) | ((({uTypeStr})value << {mBitPos}) & ({uTypeStr})0x{mask:X});\n"); + str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{mask:X16}) | ((({uTypeStr})value << {mBitPos}) & ({uTypeStr})0x{mask:X16});\n"); str.Append("\t}\n"); } From 2b48e549031dc2191320ea2030173fecd05abcb0 Mon Sep 17 00:00:00 2001 From: hermansimensen Date: Mon, 24 Jul 2023 22:00:04 +0200 Subject: [PATCH 2/2] Update leading zeros based on bitSize #1877 --- BeefLibs/corlib/src/Bitfield.bf | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/BeefLibs/corlib/src/Bitfield.bf b/BeefLibs/corlib/src/Bitfield.bf index d65080e7..6f920e59 100644 --- a/BeefLibs/corlib/src/Bitfield.bf +++ b/BeefLibs/corlib/src/Bitfield.bf @@ -160,6 +160,9 @@ namespace System String bTypeStr = TypeStr(.. scope .(), mBFieldType); int mask = ((1 << mBitPos) << bitCount) - (1 << mBitPos); + String maskStr = scope .(); + mask.ToString(maskStr, scope String()..AppendF("X{}", bitSize/4), null); + if ((!hasRange) && (mBFieldType.IsSigned)) { minVal = -(1<<(bitCount-1)); @@ -178,9 +181,9 @@ namespace System if (mBFieldType == typeof(bool)) str.AppendF($"(({fieldInfo.Name} & {mask}) >> {mBitPos}) != 0;\n"); else if (buType.IsSigned) - str.AppendF($"(.)((int)((({fieldInfo.Name} & 0x{mask:X16}) >> {mBitPos}) ^ 0x{1 << (bitCount - 1):X}) - 0x{1 << (bitCount - 1):X});\n"); + str.AppendF($"(.)((int)((({fieldInfo.Name} & 0x{maskStr}) >> {mBitPos}) ^ 0x{1 << (bitCount - 1):X}) - 0x{1 << (bitCount - 1):X});\n"); else - str.AppendF($"(.)(({fieldInfo.Name} & 0x{mask:X16}) >> {mBitPos});\n"); + str.AppendF($"(.)(({fieldInfo.Name} & 0x{maskStr}) >> {mBitPos});\n"); } if (mBFieldType.IsInteger) @@ -222,9 +225,9 @@ namespace System } if (mBFieldType == typeof(bool)) - str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{mask:X16}) | (value ? 0x{mask:X16} : 0);\n"); + str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{maskStr}) | (value ? 0x{maskStr} : 0);\n"); else - str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{mask:X16}) | ((({uTypeStr})value << {mBitPos}) & ({uTypeStr})0x{mask:X16});\n"); + str.AppendF($"\t\t{fieldInfo.Name} = ({fieldInfo.Name} & ({uTypeStr})~0x{maskStr}) | ((({uTypeStr})value << {mBitPos}) & ({uTypeStr})0x{maskStr});\n"); str.Append("\t}\n"); }