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

Removed 'internal' protection - it's all about [Friend] now

This commit is contained in:
Brian Fiete 2020-03-09 06:34:16 -07:00
parent 81af04a1ce
commit 14ac27c977
119 changed files with 1339 additions and 1388 deletions

View file

@ -10,7 +10,7 @@ namespace System.Reflection
public static Result<void> GetCustomAttribute(void* inAttrData, Type attributeType, Object targetAttr)
{
TypeId findTypeId = attributeType.mTypeId;
TypeId findTypeId = attributeType.[Friend]mTypeId;
void* data = inAttrData;
data++;
@ -32,11 +32,11 @@ namespace System.Reflection
var methodIdx = Decode!<uint16>(data);
Type attrType = Type.GetType(typeId);
Type attrType = Type.[Friend]GetType(typeId);
TypeInstance attrTypeInst = attrType as TypeInstance;
MethodInfo methodInfo = .(attrTypeInst, attrTypeInst.mMethodDataPtr + methodIdx);
MethodInfo methodInfo = .(attrTypeInst, attrTypeInst.[Friend]mMethodDataPtr + methodIdx);
Object[] args = scope Object[methodInfo.mMethodData.mParamCount];
Object[] args = scope Object[methodInfo.[Friend]mMethodData.mParamCount];
int argIdx = 0;
while (data < endPtr)

View file

@ -4,8 +4,8 @@ namespace System.Reflection
{
static (Type type, void* ptr) GetTypeAndPointer(Object obj)
{
var objType = obj.RawGetType();
void* dataPtr = (uint8*)Internal.UnsafeCastToPtr(obj) + objType.mMemberDataOffset;
var objType = obj.[Friend]RawGetType();
void* dataPtr = (uint8*)Internal.UnsafeCastToPtr(obj) + objType.[Friend]mMemberDataOffset;
if (objType.IsBoxed)
objType = objType.UnderlyingType;
if (objType.IsTypedPrimitive)
@ -16,7 +16,7 @@ namespace System.Reflection
public static Result<int64> ToInt64(Object obj)
{
var (objType, dataPtr) = GetTypeAndPointer(obj);
switch (objType.mTypeCode)
switch (objType.[Friend]mTypeCode)
{
case .Int8: return (.)*(int8*)dataPtr;
case .Int16: return (.)*(int16*)dataPtr;
@ -34,7 +34,7 @@ namespace System.Reflection
public static bool IntCanFit(int64 val, Type type)
{
switch (type.mTypeCode)
switch (type.[Friend]mTypeCode)
{
case .Int8: return (val >= -0x80) && (val <= 0x7F);
case .Int16: return (val >= -0x8000) && (val <= 0x7FFF);
@ -68,7 +68,7 @@ namespace System.Reflection
if (objType.IsInteger)
{
int64 intVal = ToInt64(obj);
switch (type.mTypeCode)
switch (type.[Friend]mTypeCode)
{
case .Float:
float val = (.)intVal;
@ -86,8 +86,8 @@ namespace System.Reflection
}
else if (objType.IsFloatingPoint)
{
if ((type.mTypeCode == .Double) &&
(objType.mTypeCode == .Float))
if ((type.[Friend]mTypeCode == .Double) &&
(objType.[Friend]mTypeCode == .Float))
{
double val = (.)*(float*)dataPtr;
return Variant.Create(type, &val);

View file

@ -11,8 +11,8 @@ namespace System.Reflection
InvalidValueType
}
internal TypeInstance mTypeInstance;
internal TypeInstance.FieldData* mFieldData;
TypeInstance mTypeInstance;
TypeInstance.FieldData* mFieldData;
public this(TypeInstance typeInstance, TypeInstance.FieldData* fieldData)
{
@ -32,7 +32,7 @@ namespace System.Reflection
{
get
{
return Type.GetType(mFieldData.mFieldTypeId);
return Type.[Friend]GetType(mFieldData.mFieldTypeId);
}
}
@ -49,13 +49,13 @@ namespace System.Reflection
int32 dataOffsetAdjust = 0;
if (mTypeInstance.IsStruct)
{
Type boxedType = obj.RawGetType();
Type boxedType = obj.[Friend]RawGetType();
bool typeMatched = false;
if (boxedType.IsBoxed)
{
if (mTypeInstance == boxedType.UnderlyingType)
{
dataOffsetAdjust = boxedType.mMemberDataOffset;
dataOffsetAdjust = boxedType.[Friend]mMemberDataOffset;
typeMatched = true;
}
}
@ -63,11 +63,11 @@ namespace System.Reflection
return .Err(.InvalidTargetType); // "Invalid target type");
}
Type fieldType = Type.GetType(mFieldData.mFieldTypeId);
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
void* fieldDataAddr = ((uint8*)(void*)obj) + mFieldData.mDataOffset + dataOffsetAdjust;
Type rawValueType = value.RawGetType();
void* valueDataAddr = ((uint8*)(void*)value) + rawValueType.mMemberDataOffset;
Type rawValueType = value.[Friend]RawGetType();
void* valueDataAddr = ((uint8*)(void*)value) + rawValueType.[Friend]mMemberDataOffset;
Type valueType = value.GetType();
@ -76,7 +76,7 @@ namespace System.Reflection
if (valueType == fieldType)
{
Internal.MemCpy(fieldDataAddr, valueDataAddr, fieldType.mSize);
Internal.MemCpy(fieldDataAddr, valueDataAddr, fieldType.[Friend]mSize);
}
else
{
@ -107,13 +107,13 @@ namespace System.Reflection
int32 dataOffsetAdjust = 0;
if (mTypeInstance.IsStruct)
{
Type boxedType = obj.RawGetType();
Type boxedType = obj.[Friend]RawGetType();
bool typeMatched = false;
if (boxedType.IsBoxed)
{
if (mTypeInstance == boxedType.UnderlyingType)
{
dataOffsetAdjust = boxedType.mMemberDataOffset;
dataOffsetAdjust = boxedType.[Friend]mMemberDataOffset;
typeMatched = true;
}
}
@ -121,7 +121,7 @@ namespace System.Reflection
return .Err;//("Invalid target type");
}
Type fieldType = Type.GetType(mFieldData.mFieldTypeId);
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
void* dataAddr = ((uint8*)(void*)obj) + mFieldData.mDataOffset + dataOffsetAdjust;
@ -143,7 +143,7 @@ namespace System.Reflection
if (mFieldData.mCustomAttributesIdx == -1)
return .Err;
void* data = mTypeInstance.mCustomAttrDataPtr[mFieldData.mCustomAttributesIdx];
void* data = mTypeInstance.[Friend]mCustomAttrDataPtr[mFieldData.mCustomAttributesIdx];
T attrInst = ?;
switch (AttributeInfo.GetCustomAttribute(data, typeof(T), &attrInst))
@ -156,12 +156,12 @@ namespace System.Reflection
void* GetDataPtrAndType(Object value, out Type type)
{
type = value.RawGetType();
type = value.[Friend]RawGetType();
/*if (type.IsStruct)
return &value;*/
if (type.IsBoxed)
return ((uint8*)(void*)value) + type.mMemberDataOffset;
return ((uint8*)(void*)value) + type.[Friend]mMemberDataOffset;
return ((uint8*)(void*)value);
}
@ -176,15 +176,15 @@ namespace System.Reflection
targetDataAddr = (uint8*)targetDataAddr + mFieldData.mDataOffset;
Type fieldType = Type.GetType(mFieldData.mFieldTypeId);
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
if (tMember.mTypeCode == TypeCode.Object)
if (tMember.[Friend]mTypeCode == TypeCode.Object)
{
if (!tTarget.IsSubtypeOf(mTypeInstance))
Runtime.FatalError();
value = *(TMember*)targetDataAddr;
}
else if (fieldType.mTypeCode == tMember.mTypeCode)
else if (fieldType.[Friend]mTypeCode == tMember.[Friend]mTypeCode)
{
Internal.MemCpy(&value, targetDataAddr, tMember.Size);
}
@ -208,16 +208,16 @@ namespace System.Reflection
targetDataAddr = (uint8*)targetDataAddr + mFieldData.mDataOffset;
Type fieldType = Type.GetType(mFieldData.mFieldTypeId);
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
TypeCode typeCode = fieldType.mTypeCode;
TypeCode typeCode = fieldType.[Friend]mTypeCode;
if (typeCode == TypeCode.Enum)
typeCode = fieldType.UnderlyingType.mTypeCode;
typeCode = fieldType.UnderlyingType.[Friend]mTypeCode;
if (typeCode == TypeCode.Object)
{
value.mStructType = 0;
value.mData = *(int*)targetDataAddr;
value.[Friend]mStructType = 0;
value.[Friend]mData = *(int*)targetDataAddr;
}
else
{
@ -244,21 +244,21 @@ namespace System.Reflection
#unwarn
void* targetDataAddr = (void*)(int)mFieldData.mConstValue;
Type fieldType = Type.GetType(mFieldData.mFieldTypeId);
value.mStructType = (int)(void*)fieldType;
Type fieldType = Type.[Friend]GetType(mFieldData.mFieldTypeId);
value.[Friend]mStructType = (int)(void*)fieldType;
TypeCode typeCode = fieldType.mTypeCode;
TypeCode typeCode = fieldType.[Friend]mTypeCode;
if (typeCode == TypeCode.Enum)
typeCode = fieldType.UnderlyingType.mTypeCode;
typeCode = fieldType.UnderlyingType.[Friend]mTypeCode;
if (typeCode == TypeCode.Int32)
{
*(int32*)&value.mData = *(int32*)targetDataAddr;
*(int32*)&value.[Friend]mData = *(int32*)targetDataAddr;
}
else if (typeCode == TypeCode.Object)
{
value.mStructType = 0;
value.mData = (int)targetDataAddr;
value.[Friend]mStructType = 0;
value.[Friend]mData = (int)targetDataAddr;
}
else
{
@ -268,13 +268,13 @@ namespace System.Reflection
return value;
}
internal struct Enumerator : IEnumerator<FieldInfo>
public struct Enumerator : IEnumerator<FieldInfo>
{
BindingFlags mBindingFlags;
TypeInstance mTypeInstance;
int32 mIdx;
internal this(TypeInstance typeInst, BindingFlags bindingFlags)
public this(TypeInstance typeInst, BindingFlags bindingFlags)
{
mTypeInstance = typeInst;
mBindingFlags = bindingFlags;
@ -298,9 +298,9 @@ namespace System.Reflection
for (;;)
{
mIdx++;
if (mIdx == mTypeInstance.mFieldDataCount)
if (mIdx == mTypeInstance.[Friend]mFieldDataCount)
return false;
var fieldData = &mTypeInstance.mFieldDataPtr[mIdx];
var fieldData = &mTypeInstance.[Friend]mFieldDataPtr[mIdx];
bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (fieldData.mFlags.HasFlag(FieldFlags.Static)));
matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!fieldData.mFlags.HasFlag(FieldFlags.Static)));
if (matches)
@ -313,7 +313,7 @@ namespace System.Reflection
{
get
{
var fieldData = &mTypeInstance.mFieldDataPtr[mIdx];
var fieldData = &mTypeInstance.[Friend]mFieldDataPtr[mIdx];
return FieldInfo(mTypeInstance, fieldData);
}
}

View file

@ -9,14 +9,14 @@ namespace System.Reflection
[CRepr, AlwaysInclude]
public struct MethodInfo
{
internal TypeInstance mTypeInstance;
internal TypeInstance.MethodData* mMethodData;
TypeInstance mTypeInstance;
TypeInstance.MethodData* mMethodData;
public StringView Name
{
get
{
return mMethodData.mName;
return mMethodData.[Friend]mName;
}
}
@ -24,7 +24,7 @@ namespace System.Reflection
{
get
{
return mMethodData.mParamCount;
return mMethodData.[Friend]mParamCount;
}
}
@ -49,7 +49,7 @@ namespace System.Reflection
public Type GetParamType(int paramIdx)
{
Debug.Assert((uint)paramIdx < (uint)mMethodData.mParamCount);
return Type.GetType(mMethodData.mParamData[paramIdx].mType);
return Type.[Friend]GetType(mMethodData.mParamData[paramIdx].mType);
}
public StringView GetParamName(int paramIdx)
@ -77,7 +77,7 @@ namespace System.Reflection
public Result<Variant, CallError> Invoke(Object target, params Object[] args)
{
var retType = Type.GetType(mMethodData.mReturnType);
var retType = Type.[Friend]GetType(mMethodData.mReturnType);
FFIABI abi = .Default;
#if BF_PLATFORM_WINDOWS && BF_32_BIT
@ -112,17 +112,17 @@ namespace System.Reflection
SplatArg(type.BaseType, ptr);
bool isEnum = type.IsEnum;
for (int fieldIdx < type.mFieldDataCount)
for (int fieldIdx < type.[Friend]mFieldDataCount)
{
let fieldData = ref type.mFieldDataPtr[fieldIdx];
let fieldType = Type.GetType(fieldData.mFieldTypeId);
let fieldData = ref type.[Friend]mFieldDataPtr[fieldIdx];
let fieldType = Type.[Friend]GetType(fieldData.mFieldTypeId);
if (fieldData.mFlags.HasFlag(.Static))
{
if (isEnum)
break; // Already got payload and discriminator
continue;
}
if (fieldType.mSize == 0)
if (fieldType.[Friend]mSize == 0)
continue;
if (fieldType.IsStruct)
@ -142,8 +142,8 @@ namespace System.Reflection
bool unbox = false;
bool unboxToPtr = false;
let argType = arg.RawGetType();
void* dataPtr = (uint8*)Internal.UnsafeCastToPtr(arg) + argType.mMemberDataOffset;
let argType = arg.[Friend]RawGetType();
void* dataPtr = (uint8*)Internal.UnsafeCastToPtr(arg) + argType.[Friend]mMemberDataOffset;
bool isValid = true;
if (paramType.IsValueType)
@ -201,20 +201,20 @@ namespace System.Reflection
}
else if (splat)
{
if (paramTypeInst.mFieldDataCount > 0)
if (paramTypeInst.[Friend]mFieldDataCount > 0)
{
SplatArg(paramTypeInst, dataPtr);
}
else
{
let splatData = (TypeInstance.FieldSplatData*)paramTypeInst.mFieldDataPtr;
let splatData = (TypeInstance.FieldSplatData*)paramTypeInst.[Friend]mFieldDataPtr;
for (int splatIdx < 3)
{
let splatTypeId = splatData.mSplatTypes[splatIdx];
if (splatTypeId == 0)
break;
let splatType = Type.GetType(splatTypeId);
let splatType = Type.[Friend]GetType(splatTypeId);
ffiParamList.Add(GetFFIType!:mixin(splatType));
ffiArgList.Add((uint8*)dataPtr + splatData.mSplatOffsets[splatIdx]);
}
@ -290,7 +290,7 @@ namespace System.Reflection
for (var arg in ref args)
{
let paramData = ref mMethodData.mParamData[@arg];
let argType = Type.GetType(paramData.mType);
let argType = Type.[Friend]GetType(paramData.mType);
AddArg!::(@arg, arg, &arg, argType, paramData.mParamFlags.HasFlag(.Splat));
}
@ -336,13 +336,13 @@ namespace System.Reflection
return retVal;
}
internal struct Enumerator : IEnumerator<MethodInfo>
public struct Enumerator : IEnumerator<MethodInfo>
{
BindingFlags mBindingFlags;
TypeInstance mTypeInstance;
int32 mIdx;
internal this(TypeInstance typeInst, BindingFlags bindingFlags)
public this(TypeInstance typeInst, BindingFlags bindingFlags)
{
mTypeInstance = typeInst;
mBindingFlags = bindingFlags;
@ -366,10 +366,10 @@ namespace System.Reflection
for (;;)
{
mIdx++;
if (mIdx == mTypeInstance.mMethodDataCount)
if (mIdx == mTypeInstance.[Friend]mMethodDataCount)
return false;
#unwarn
var methodData = &mTypeInstance.mMethodDataPtr[mIdx];
var methodData = &mTypeInstance.[Friend]mMethodDataPtr[mIdx];
/*bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (methodData.mFlags.HasFlag(FieldFlags.Static)));
matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!methodData.mFlags.HasFlag(FieldFlags.Static)));*/
bool matches = true;
@ -383,7 +383,7 @@ namespace System.Reflection
{
get
{
var methodData = &mTypeInstance.mMethodDataPtr[mIdx];
var methodData = &mTypeInstance.[Friend]mMethodDataPtr[mIdx];
return MethodInfo(mTypeInstance, methodData);
}
}

View file

@ -21,14 +21,14 @@ namespace System
MethodInfo matched = default;
for (let methodInfo in GetMethods(bindingFlags))
{
if (methodInfo.mMethodData.mName == methodName)
if (methodInfo.[Friend]mMethodData.[Friend]mName == methodName)
{
if (matched.mMethodData != null)
if (matched.[Friend]mMethodData != null)
return .Err(.MultipleResults);
}
}
if (matched.mMethodData == null)
if (matched.[Friend]mMethodData == null)
return .Err(.NoResults);
return .Ok(matched);
}
@ -44,7 +44,7 @@ namespace System.Reflection
for (int32 i = 0; i < mFieldDataCount; i++)
{
FieldData* fieldData = &mFieldDataPtr[i];
if (fieldData.mName == fieldName)
if (fieldData.[Friend]mName == fieldName)
return FieldInfo(this, fieldData);
}
return .Err;