diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 6d9ac2da..9d5fdbf0 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -16160,8 +16160,8 @@ void BfModule::EmitCtorBody(bool& skipBody) auto targetToken = BfNodeDynCast(ctorInvocation->mTarget); targetType = (targetToken->GetToken() == BfToken_This) ? mCurTypeInstance : mCurTypeInstance->mBaseType; } - else if ((mCurTypeInstance->mBaseType != NULL) && (!mCurTypeInstance->IsUnspecializedType())) - { + else if ((mCurTypeInstance->mBaseType != NULL) && (!mCurTypeInstance->IsUnspecializedType()) && (methodDef->mMethodType != BfMethodType_CtorNoBody)) + { auto baseType = mCurTypeInstance->mBaseType; if ((!mCurTypeInstance->IsTypedPrimitive()) && (baseType->mTypeDef != mCompiler->mValueTypeTypeDef) && diff --git a/IDEHelper/Tests/src/Extensions.bf b/IDEHelper/Tests/src/Extensions.bf index d0c5fa00..f4e343db 100644 --- a/IDEHelper/Tests/src/Extensions.bf +++ b/IDEHelper/Tests/src/Extensions.bf @@ -116,6 +116,36 @@ namespace Tests public override void MethodA() { } } + class ClassD + { + public int mD = MethodD0() ~ MethodD0(); + + public int MethodD0() + { + return mD + 1; + } + + public void MethodD1() + { + + } + } + + class ClassE : ClassD + { + public int mE = MethodE0(); + + public int MethodE0() + { + return mE + 1; + } + } + + extension ClassE + { + + } + class TClassA where T : IDisposable { public int32 mA = 10; @@ -192,6 +222,10 @@ namespace Tests ClassC cc = scope .(); cc.MethodB(); + + ClassE ce = scope .(); + Test.Assert(ce.mD == 1); + Test.Assert(ce.mE == 1); } [Test]