1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Added constraints for operators, 'external' constraints for methods

This commit is contained in:
Brian Fiete 2019-11-17 09:28:39 -08:00
parent 00a92dd0a7
commit 8945a906f7
24 changed files with 1561 additions and 509 deletions

View file

@ -1512,22 +1512,37 @@ bool BfAutoComplete::CheckMemberReference(BfAstNode* target, BfAstNode* dotToken
}
// Statics, inner types
//bool isStatic = (targetValue.mValue == NULL) && (!targetValue.mType->IsValuelessType());
auto checkType = targetValue.mType;
if (checkType->IsGenericParam())
{
auto genericParamType = (BfGenericParamType*)checkType;
auto genericParamInst = mModule->GetGenericParamInstance(genericParamType);
auto genericParamInstance = mModule->GetGenericParamInstance(genericParamType);
for (auto interfaceConstraint : genericParamInst->mInterfaceConstraints)
AddTypeMembers(interfaceConstraint, false, true, filter, interfaceConstraint, true, false);
auto _HandleGenericParamInstance = [&](BfGenericParamInstance* genericParamInstance)
{
for (auto interfaceConstraint : genericParamInstance->mInterfaceConstraints)
AddTypeMembers(interfaceConstraint, false, true, filter, interfaceConstraint, true, false);
if (genericParamInst->mTypeConstraint != NULL)
checkType = genericParamInst->mTypeConstraint;
else
checkType = mModule->mContext->mBfObjectType;
if (genericParamInstance->mTypeConstraint != NULL)
checkType = genericParamInstance->mTypeConstraint;
else
checkType = mModule->mContext->mBfObjectType;
};
_HandleGenericParamInstance(genericParamInstance);
// Check method generic constraints
if ((mModule->mCurMethodInstance != NULL) && (mModule->mCurMethodInstance->mIsUnspecialized) && (mModule->mCurMethodInstance->mMethodInfoEx != NULL))
{
for (int genericParamIdx = (int)mModule->mCurMethodInstance->mMethodInfoEx->mMethodGenericArguments.size();
genericParamIdx < mModule->mCurMethodInstance->mMethodInfoEx->mGenericParams.size(); genericParamIdx++)
{
auto genericParam = mModule->mCurMethodInstance->mMethodInfoEx->mGenericParams[genericParamIdx];
if (genericParam->mExternType == genericParamType)
_HandleGenericParamInstance(genericParam);
}
}
}
if (checkType->IsPointer())