diff --git a/BeefLibs/corlib/src/Reflection/FieldInfo.bf b/BeefLibs/corlib/src/Reflection/FieldInfo.bf index fbef25ad..6b4b67cc 100644 --- a/BeefLibs/corlib/src/Reflection/FieldInfo.bf +++ b/BeefLibs/corlib/src/Reflection/FieldInfo.bf @@ -20,53 +20,13 @@ namespace System.Reflection mFieldData = fieldData; } - public int32 MemberOffset - { - get - { - return (int32)mFieldData.mData; - } - } - - 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 TypeInstance DeclaringType => mTypeInstance; + public int32 MemberOffset => (int32)mFieldData.mData; + public Type FieldType => Type.[Friend]GetType(mFieldData.mFieldTypeId); + public bool IsConst => mFieldData.mFlags.HasFlag(.Const); + public bool IsStatic => mFieldData.mFlags.HasFlag(.Static); + public bool IsInstanceField => !mFieldData.mFlags.HasFlag(.Static) && !mFieldData.mFlags.HasFlag(.Const); + public StringView Name => mFieldData.mName; public Result SetValue(Object obj, Object value) { @@ -525,7 +485,15 @@ namespace System.Reflection { mIdx++; if (mIdx == mTypeInstance.[Friend]mFieldDataCount) - return false; + { + if (mBindingFlags.HasFlag(.DeclaredOnly)) + 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]; bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (fieldData.mFlags.HasFlag(FieldFlags.Static))); matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!fieldData.mFlags.HasFlag(FieldFlags.Static))); diff --git a/BeefLibs/corlib/src/Reflection/MethodInfo.bf b/BeefLibs/corlib/src/Reflection/MethodInfo.bf index 7adbe688..f5fbafbd 100644 --- a/BeefLibs/corlib/src/Reflection/MethodInfo.bf +++ b/BeefLibs/corlib/src/Reflection/MethodInfo.bf @@ -18,6 +18,7 @@ namespace System.Reflection mMethodData = methodData; } + public TypeInstance DeclaringType => mTypeInstance; public bool IsInitialized => mMethodData != null; public StringView Name => mMethodData.[Friend]mName; public int ParamCount => mMethodData.[Friend]mParamCount; @@ -788,7 +789,15 @@ namespace System.Reflection { mIdx++; if (mIdx == mTypeInstance.[Friend]mMethodDataCount) - return false; + { + if (mBindingFlags.HasFlag(.DeclaredOnly)) + 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]; bool matches = (mBindingFlags.HasFlag(BindingFlags.Static) && (methodData.mFlags.HasFlag(.Static))); matches |= (mBindingFlags.HasFlag(BindingFlags.Instance) && (!methodData.mFlags.HasFlag(.Static)));