diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index f4dd0a0b..7b53e9f9 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -9215,7 +9215,9 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp } } - if ((!target.mType->IsGenericParam()) && (!target.IsSplat()) && (!IsVar(target.mType))) + if ((!target.mType->IsGenericParam()) && + ((!target.IsSplat()) || (target.mType->IsWrappableType())) && + (!IsVar(target.mType))) target = MakeCallableTarget(targetSrc, target); } diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 46cf79c1..be2501ee 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -18124,6 +18124,8 @@ void BfModule::EmitCtorBody(bool& skipBody) { auto thisVal = GetThis(); auto fieldPtr = mBfIRBuilder->CreateInBoundsGEP(thisVal.mValue, 0, fieldInstance.mDataIdx); + if (mCurTypeInstance->IsUnion()) + fieldPtr = mBfIRBuilder->CreateBitCast(fieldPtr, mBfIRBuilder->GetPointerTo(mBfIRBuilder->MapType(fieldInstance.mResolvedType))); mBfIRBuilder->CreateAlignedStore(localVal.mValue, fieldPtr, localVar->mResolvedType->mAlign); } MarkFieldInitialized(&fieldInstance);