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>' 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; BfTypeReference* mCurAttributeTypeRef;
BfFieldDef* mCurFieldDef; BfFieldDef* mCurFieldDef;
BfTypeDef* mCurTypeDef; BfTypeDef* mCurTypeDef;
BfTypeDef* mForceActiveTypeDef;
ResolveKind mResolveKind; ResolveKind mResolveKind;
BfAstNode* mCurVarInitializer; BfAstNode* mCurVarInitializer;
int mArrayInitializerSize; int mArrayInitializerSize;
@ -162,6 +163,7 @@ public:
mCurFieldDef = NULL; mCurFieldDef = NULL;
mCurAttributeTypeRef = NULL; mCurAttributeTypeRef = NULL;
mCurTypeDef = NULL; mCurTypeDef = NULL;
mForceActiveTypeDef = NULL;
mCurVarInitializer = NULL; mCurVarInitializer = NULL;
mArrayInitializerSize = -1; mArrayInitializerSize = -1;
mResolveKind = ResolveKind_None; mResolveKind = ResolveKind_None;
@ -178,6 +180,7 @@ public:
mCurFieldDef = NULL; mCurFieldDef = NULL;
mCurAttributeTypeRef = NULL; mCurAttributeTypeRef = NULL;
mCurTypeDef = NULL; mCurTypeDef = NULL;
mForceActiveTypeDef = NULL;
mCurVarInitializer = NULL; mCurVarInitializer = NULL;
mArrayInitializerSize = -1; mArrayInitializerSize = -1;
mResolveKind = ResolveKind_None; mResolveKind = ResolveKind_None;

View file

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