mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-15 23:04:09 +02:00
Enumerate through base types, respect .DeclaredOnly
This commit is contained in:
parent
076be19488
commit
38c5bd747e
2 changed files with 26 additions and 49 deletions
|
@ -20,53 +20,13 @@ namespace System.Reflection
|
||||||
mFieldData = fieldData;
|
mFieldData = fieldData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int32 MemberOffset
|
public TypeInstance DeclaringType => mTypeInstance;
|
||||||
{
|
public int32 MemberOffset => (int32)mFieldData.mData;
|
||||||
get
|
public Type FieldType => Type.[Friend]GetType(mFieldData.mFieldTypeId);
|
||||||
{
|
public bool IsConst => mFieldData.mFlags.HasFlag(.Const);
|
||||||
return (int32)mFieldData.mData;
|
public bool IsStatic => mFieldData.mFlags.HasFlag(.Static);
|
||||||
}
|
public bool IsInstanceField => !mFieldData.mFlags.HasFlag(.Static) && !mFieldData.mFlags.HasFlag(.Const);
|
||||||
}
|
public StringView Name => mFieldData.mName;
|
||||||
|
|
||||||
public Type FieldType
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Type.[Friend]GetType(mFieldData.mFieldTypeId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsConst
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return mFieldData.mFlags.HasFlag(.Const);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsStatic
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return mFieldData.mFlags.HasFlag(.Static);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsInstanceField
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return !mFieldData.mFlags.HasFlag(.Static) && !mFieldData.mFlags.HasFlag(.Const);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public StringView Name
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return mFieldData.mName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Result<void, Error> SetValue(Object obj, Object value)
|
public Result<void, Error> SetValue(Object obj, Object value)
|
||||||
{
|
{
|
||||||
|
@ -525,7 +485,15 @@ namespace System.Reflection
|
||||||
{
|
{
|
||||||
mIdx++;
|
mIdx++;
|
||||||
if (mIdx == mTypeInstance.[Friend]mFieldDataCount)
|
if (mIdx == mTypeInstance.[Friend]mFieldDataCount)
|
||||||
|
{
|
||||||
|
if (mBindingFlags.HasFlag(.DeclaredOnly))
|
||||||
return false;
|
return false;
|
||||||
|
if (mTypeInstance.[Friend]mBaseType == 0)
|
||||||
|
return false;
|
||||||
|
mTypeInstance = Type.[Friend]GetType(mTypeInstance.[Friend]mBaseType) as TypeInstance;
|
||||||
|
mIdx = -1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var fieldData = &mTypeInstance.[Friend]mFieldDataPtr[mIdx];
|
var fieldData = &mTypeInstance.[Friend]mFieldDataPtr[mIdx];
|
||||||
bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (fieldData.mFlags.HasFlag(FieldFlags.Static)));
|
bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (fieldData.mFlags.HasFlag(FieldFlags.Static)));
|
||||||
matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!fieldData.mFlags.HasFlag(FieldFlags.Static)));
|
matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!fieldData.mFlags.HasFlag(FieldFlags.Static)));
|
||||||
|
|
|
@ -18,6 +18,7 @@ namespace System.Reflection
|
||||||
mMethodData = methodData;
|
mMethodData = methodData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TypeInstance DeclaringType => mTypeInstance;
|
||||||
public bool IsInitialized => mMethodData != null;
|
public bool IsInitialized => mMethodData != null;
|
||||||
public StringView Name => mMethodData.[Friend]mName;
|
public StringView Name => mMethodData.[Friend]mName;
|
||||||
public int ParamCount => mMethodData.[Friend]mParamCount;
|
public int ParamCount => mMethodData.[Friend]mParamCount;
|
||||||
|
@ -788,7 +789,15 @@ namespace System.Reflection
|
||||||
{
|
{
|
||||||
mIdx++;
|
mIdx++;
|
||||||
if (mIdx == mTypeInstance.[Friend]mMethodDataCount)
|
if (mIdx == mTypeInstance.[Friend]mMethodDataCount)
|
||||||
|
{
|
||||||
|
if (mBindingFlags.HasFlag(.DeclaredOnly))
|
||||||
return false;
|
return false;
|
||||||
|
if (mTypeInstance.[Friend]mBaseType == 0)
|
||||||
|
return false;
|
||||||
|
mTypeInstance = Type.[Friend]GetType(mTypeInstance.[Friend]mBaseType) as TypeInstance;
|
||||||
|
mIdx = -1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var methodData = &mTypeInstance.[Friend]mMethodDataPtr[mIdx];
|
var methodData = &mTypeInstance.[Friend]mMethodDataPtr[mIdx];
|
||||||
bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (methodData.mFlags.HasFlag(.Static)));
|
bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (methodData.mFlags.HasFlag(.Static)));
|
||||||
matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!methodData.mFlags.HasFlag(.Static)));
|
matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!methodData.mFlags.HasFlag(.Static)));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue