2
0
Эх сурвалжийг харах

Fixed null value in SetValue

Brian Fiete 5 жил өмнө
parent
commit
e7afee6770

+ 13 - 16
BeefLibs/corlib/src/Reflection/FieldInfo.bf

@@ -66,6 +66,19 @@ namespace System.Reflection
 	        Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
 	        void* fieldDataAddr = ((uint8*)Internal.UnsafeCastToPtr(obj)) + mFieldData.mDataOffset + dataOffsetAdjust;
 
+			if (value == null)
+			{
+				if ((fieldType.IsValueType) && (!fieldType.IsPointer))
+				{
+					return .Err(.InvalidValueType);
+				}
+				else
+				{
+					*((int*)fieldDataAddr) = 0;
+					return .Ok;
+				}
+			}
+
 			Type rawValueType = value.[Friend]RawGetType();
 			void* valueDataAddr = ((uint8*)Internal.UnsafeCastToPtr(value)) + rawValueType.[Friend]mMemberDataOffset;
 			
@@ -86,22 +99,6 @@ namespace System.Reflection
 				return .Err(.InvalidValueType);
 			}
 
-	        /*switch (fieldType.mTypeCode)
-	        {
-            case .Boolean:
-				if (!value is bool)
-				return .Err(.InvalidValueType);
-				*(bool*)(uint8*)dataAddr = (.)value;
-				break;        
-	        case .Int32:
-	            if (!value is int32)
-	                return .Err(.InvalidValueType);
-	            *(int32*)(uint8*)dataAddr = (.)value;
-	            break;
-	        default:
-	            return .Err(.InvalidValueType);
-	        }*/
-	                  
 	        return .Ok;
 	    }