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:
parent
81af04a1ce
commit
14ac27c977
119 changed files with 1339 additions and 1388 deletions
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue