1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Added IncludeAllMethods

This commit is contained in:
Brian Fiete 2020-05-01 09:09:35 -07:00
parent fbe2407ffb
commit 93facda6b2
2 changed files with 24 additions and 8 deletions

View file

@ -3643,6 +3643,8 @@ void BfModule::DoTypeInstanceMethodProcessing(BfTypeInstance* typeInstance)
implRequired = true;
declRequired = true;
}
if (typeInstance->mIncludeAllMethods)
implRequired = true;
if (typeInstance->IsInterface())
declRequired = true;
@ -8319,7 +8321,9 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
{
if ((genericParamInst->mGenericParamFlags & (BfGenericParamFlag_Class | BfGenericParamFlag_StructPtr)) ||
((genericParamInst->mTypeConstraint != NULL) &&
((genericParamInst->mTypeConstraint->IsPointer()) || (genericParamInst->mTypeConstraint->IsObjectOrInterface()))))
((genericParamInst->mTypeConstraint->IsPointer()) ||
(genericParamInst->mTypeConstraint->IsInstanceOf(mCompiler->mFunctionTypeDef)) ||
(genericParamInst->mTypeConstraint->IsObjectOrInterface()))))
{
return GetDefaultValue(toType);
}
@ -8371,6 +8375,7 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
auto genericParamInst = GetGenericParamInstance((BfGenericParamType*)toType);
if (genericParamInst->mGenericParamFlags & BfGenericParamFlag_Var)
return GetDefaultValue(toType);
if (typedVal.mType->IsNull())
{
bool allowCast = (genericParamInst->mGenericParamFlags & BfGenericParamFlag_Class) || (genericParamInst->mGenericParamFlags & BfGenericParamFlag_StructPtr);
@ -8385,9 +8390,18 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
auto castedVal = CastToValue(srcNode, typedVal, genericParamInst->mTypeConstraint, (BfCastFlags)(castFlags | BfCastFlags_SilentFail));
if (castedVal)
return castedVal;
//TODO: WHy did we do 'GetDefaultValue'? This messes up setting up method param defaults, which is important for inferring const generic params
//return GetDefaultValue(toType);
}
if (explicitCast)
{
if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_StructPtr) ||
((genericParamInst->mTypeConstraint != NULL) && genericParamInst->mTypeConstraint->IsInstanceOf(mCompiler->mFunctionTypeDef)))
{
auto voidPtrType = CreatePointerType(GetPrimitiveType(BfTypeCode_None));
auto castedVal = CastToValue(srcNode, typedVal, voidPtrType, (BfCastFlags)(castFlags | BfCastFlags_SilentFail));
if (castedVal)
return castedVal;
}
}
}