diff --git a/IDEHelper/Compiler/BfContext.cpp b/IDEHelper/Compiler/BfContext.cpp index 1ba7550d..f4ba7e96 100644 --- a/IDEHelper/Compiler/BfContext.cpp +++ b/IDEHelper/Compiler/BfContext.cpp @@ -1174,8 +1174,11 @@ void BfContext::RebuildType(BfType* type, bool deleteOnDemandTypes, bool rebuild if (typeInst->mTypeDef->mEmitParent != NULL) { - auto emitTypeDef = typeInst->mTypeDef; - typeInst->mTypeDef = emitTypeDef->mEmitParent; + auto emitTypeDef = typeInst->mTypeDef; + typeInst->mTypeDef = emitTypeDef->mEmitParent; + if (typeInst->mTypeDef->mIsPartial) + typeInst->mTypeDef = mSystem->GetCombinedPartial(typeInst->mTypeDef); + BfLogSysM("Type %p queueing delete of typeDef %p, resetting typeDef to %p\n", typeInst, emitTypeDef, typeInst->mTypeDef); if (emitTypeDef->mDefState != BfTypeDef::DefState_Deleted) { diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 271edc49..7207c7c8 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -2352,11 +2352,6 @@ void BfModule::UpdateCEEmit(CeEmitContext* ceEmitContext, BfTypeInstance* typeIn defBuilder.mCurTypeDef = typeInstance->mTypeDef; defBuilder.mCurDeclaringTypeDef = typeInstance->mTypeDef; - if (typeInstance->mTypeDef->mIsCombinedPartial) - { - // Always define generated methods on the primary type declaration - defBuilder.mCurDeclaringTypeDef = typeInstance->mTypeDef->mPartials[0]->GetLatest(); - } defBuilder.mPassInstance = mCompiler->mPassInstance; defBuilder.mIsComptime = true; defBuilder.DoVisitChild(typeDeclaration->mDefineNode); @@ -9676,7 +9671,16 @@ BfTypeDef* BfModule::GetActiveTypeDef(BfTypeInstance* typeInstanceOverride, bool if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL) && (useMixinDecl)) useTypeDef = mCurMethodState->mMixinState->mMixinMethodInstance->mMethodDef->mDeclaringType->GetDefinition(); else if ((mCurMethodInstance != NULL) && (mCurMethodInstance->mMethodDef->mDeclaringType != NULL)) - useTypeDef = mCurMethodInstance->mMethodDef->mDeclaringType->GetDefinition(); + { + + auto declTypeDef = mCurMethodInstance->mMethodDef->mDeclaringType; + useTypeDef = declTypeDef->GetDefinition(); + if ((declTypeDef->IsEmitted()) && (useTypeDef->mIsCombinedPartial)) + { + // Always consider methods to belong to the primary type declaration + useTypeDef = useTypeDef->mPartials[0]; + } + } else if (mContext->mCurTypeState != NULL) { if ((mContext->mCurTypeState->mCurFieldDef != NULL) && (mContext->mCurTypeState->mCurFieldDef->mDeclaringType != NULL)) diff --git a/IDEHelper/Tests/src/Append.bf b/IDEHelper/Tests/src/Append.bf index 34870f76..ddeff8bc 100644 --- a/IDEHelper/Tests/src/Append.bf +++ b/IDEHelper/Tests/src/Append.bf @@ -79,7 +79,7 @@ namespace Tests class ClassF { public int mA = 123; - public append String mB = .(mA); + public append String mB = .(1024); public int mC = 234; } diff --git a/IDEHelper/Tests/src/Operators.bf b/IDEHelper/Tests/src/Operators.bf index 20ce3867..dc0627d6 100644 --- a/IDEHelper/Tests/src/Operators.bf +++ b/IDEHelper/Tests/src/Operators.bf @@ -2,6 +2,18 @@ using System; +namespace System +{ + extension RefCounted + { + public static RefCounted Attach(RefCounted val) + { + val.AddRef(); + return val; + } + } +} + namespace System { public extension Event