1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-18 08:06:04 +02:00

Disallow object-to-void* casting. Lowering fixes. Variant fixes.

This commit is contained in:
Brian Fiete 2020-06-23 07:32:53 -07:00
parent bca0440b16
commit 16be83ceda
12 changed files with 174 additions and 82 deletions

View file

@ -64,10 +64,10 @@ namespace System.Reflection
}
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
void* fieldDataAddr = ((uint8*)(void*)obj) + mFieldData.mDataOffset + dataOffsetAdjust;
void* fieldDataAddr = ((uint8*)Internal.UnsafeCastToPtr(obj)) + mFieldData.mDataOffset + dataOffsetAdjust;
Type rawValueType = value.[Friend]RawGetType();
void* valueDataAddr = ((uint8*)(void*)value) + rawValueType.[Friend]mMemberDataOffset;
void* valueDataAddr = ((uint8*)Internal.UnsafeCastToPtr(value)) + rawValueType.[Friend]mMemberDataOffset;
Type valueType = value.GetType();
@ -126,7 +126,7 @@ namespace System.Reflection
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
void* dataAddr = ((uint8*)(void*)obj) + mFieldData.mDataOffset + dataOffsetAdjust;
void* dataAddr = ((uint8*)Internal.UnsafeCastToPtr(obj)) + mFieldData.mDataOffset + dataOffsetAdjust;
if (value.VariantType != fieldType)
return .Err;//("Invalid type");
@ -154,7 +154,7 @@ namespace System.Reflection
if (type.IsBoxed)
return ((uint8*)(void*)value) + type.[Friend]mMemberDataOffset;
return ((uint8*)(void*)value);
return ((uint8*)Internal.UnsafeCastToPtr(value));
}
public Result<void> GetValue<TMember>(Object target, out TMember value)
@ -237,7 +237,7 @@ namespace System.Reflection
void* targetDataAddr = (void*)(int)mFieldData.mConstValue;
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
value.[Friend]mStructType = (int)(void*)fieldType;
value.[Friend]mStructType = (int)Internal.UnsafeCastToPtr(fieldType);
TypeCode typeCode = fieldType.[Friend]mTypeCode;
if (typeCode == TypeCode.Enum)

View file

@ -238,7 +238,7 @@ namespace System.Reflection
if (args.Length != mMethodData.mParamCount)
return .Err(.ParamCountMismatch);
var (retVal, variantData) = Variant.Alloc(retType);
var variantData = Variant.Alloc(retType, var retVal);
void* retData = variantData;
// Struct return? Manually add it as an arg after 'this'. Revisit this - this is architecture-dependent.
@ -500,7 +500,7 @@ namespace System.Reflection
if (args.Count != mMethodData.mParamCount)
return .Err(.ParamCountMismatch);
var (retVal, variantData) = Variant.Alloc(retType);
var variantData = Variant.Alloc(retType, var retVal);
void* retData = variantData;
// Struct return? Manually add it as an arg after 'this'. Revisit this - this is architecture-dependent.