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

Added ReflectAttribute.ReflectImplementer

This commit is contained in:
Brian Fiete 2020-09-26 08:26:42 -07:00
parent 52ccdfe46a
commit 0e10eba8f5
3 changed files with 37 additions and 3 deletions

View file

@ -13565,7 +13565,7 @@ BfReflectKind BfModule::GetUserReflectKind(BfTypeInstance* attrType)
}
BfReflectKind BfModule::GetReflectKind(BfReflectKind reflectKind, BfTypeInstance* typeInstance)
{
{
auto checkTypeInstance = typeInstance;
while (checkTypeInstance != NULL)
{
@ -13601,6 +13601,30 @@ BfReflectKind BfModule::GetReflectKind(BfReflectKind reflectKind, BfTypeInstance
}
}
for (auto ifaceEntry : typeInstance->mInterfaces)
{
if (ifaceEntry.mInterfaceType->mCustomAttributes != NULL)
{
auto iface = ifaceEntry.mInterfaceType;
auto customAttr = iface->mCustomAttributes->Get(mCompiler->mReflectAttributeTypeDef);
if (customAttr != NULL)
{
for (auto& prop : customAttr->mSetProperties)
{
auto propDef = prop.mPropertyRef.mTypeInstance->mTypeDef->mProperties[prop.mPropertyRef.mPropIdx];
if (propDef->mName == "ReflectImplementer")
{
if (prop.mParam.mValue.IsConst())
{
auto constant = iface->mConstHolder->GetConstant(prop.mParam.mValue);
reflectKind = (BfReflectKind)(reflectKind | (BfReflectKind)constant->mInt32);
}
}
}
}
}
}
checkTypeInstance = mContext->mUnreifiedModule->GetOuterType(checkTypeInstance);
}