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

Fixed ToString issue with missing interface impl in type with extension

This commit is contained in:
Brian Fiete 2021-01-20 14:47:29 -08:00
parent dcfcc03a55
commit 7787efda7e
3 changed files with 31 additions and 1 deletions

View file

@ -65,5 +65,25 @@ namespace IDETest
{
Method5<E, F>(); //FAIL Generic argument 'A', declared to be 'E' for 'IDETest.Generics.Method5<E, F>()', must implement 'System.Collections.IEnumerable<F>'
}
interface IFaceB<T>
{
void MethodA0();
}
extension IFaceB<T>
{
void MethodA1();
}
class ClassB<T> : IFaceB<T> //FAIL 'IDETest.Generics.ClassB<T>' does not implement interface member 'IDETest.Generics.IFaceB<T>.MethodA0()'
{
}
extension ClassB<T>
{
}
}
}

View file

@ -146,6 +146,7 @@ public:
BfTypeReference* mCurAttributeTypeRef;
BfFieldDef* mCurFieldDef;
BfTypeDef* mCurTypeDef;
BfTypeDef* mForceActiveTypeDef;
ResolveKind mResolveKind;
BfAstNode* mCurVarInitializer;
int mArrayInitializerSize;
@ -162,6 +163,7 @@ public:
mCurFieldDef = NULL;
mCurAttributeTypeRef = NULL;
mCurTypeDef = NULL;
mForceActiveTypeDef = NULL;
mCurVarInitializer = NULL;
mArrayInitializerSize = -1;
mResolveKind = ResolveKind_None;
@ -178,6 +180,7 @@ public:
mCurFieldDef = NULL;
mCurAttributeTypeRef = NULL;
mCurTypeDef = NULL;
mForceActiveTypeDef = NULL;
mCurVarInitializer = NULL;
mArrayInitializerSize = -1;
mResolveKind = ResolveKind_None;

View file

@ -5543,6 +5543,11 @@ void BfModule::DoTypeInstanceMethodProcessing(BfTypeInstance* typeInstance)
String methodString;
///
{
BfTypeState typeState;
typeState.mPrevState = mContext->mCurTypeState;
typeState.mForceActiveTypeDef = declTypeDef;
SetAndRestoreValue<BfTypeState*> prevTypeState(mContext->mCurTypeState, &typeState);
SetAndRestoreValue<BfMethodInstance*> prevMethodInstance(mCurMethodInstance, ifaceMethodInst);
methodString = MethodToString(ifaceMethodInst);
}
@ -8113,6 +8118,8 @@ BfTypeDef* BfModule::GetActiveTypeDef(BfTypeInstance* typeInstanceOverride, bool
{
BfTypeDef* useTypeDef = NULL;
BfTypeInstance* typeInstance = (typeInstanceOverride != NULL) ? typeInstanceOverride : mCurTypeInstance;
if ((mContext->mCurTypeState != NULL) && (mContext->mCurTypeState->mForceActiveTypeDef != NULL))
return mContext->mCurTypeState->mForceActiveTypeDef;
if (typeInstance != NULL)
useTypeDef = typeInstance->mTypeDef;
if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL) && (useMixinDecl))