diff --git a/BeefLibs/corlib/src/SizedArray.bf b/BeefLibs/corlib/src/SizedArray.bf index 028f3792..41fe681d 100644 --- a/BeefLibs/corlib/src/SizedArray.bf +++ b/BeefLibs/corlib/src/SizedArray.bf @@ -64,7 +64,7 @@ namespace System return -1; } - public override void ToString(String strBuffer) mut + public override void ToString(String strBuffer) { if (typeof(T) == typeof(char8)) { @@ -74,6 +74,7 @@ namespace System if (mVal[len] == default) break; } +#unwarn strBuffer.Append((char8*)&mVal, len); return; } diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index b66d1bdf..5e7b9826 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -3081,6 +3081,12 @@ void BfMethodMatcher::TryDevirtualizeCall(BfTypedValue target, BfTypedValue* ori { auto structType = target.mType->ToTypeInstance(); + if (structType == NULL) + { + mModule->InternalError("Invalid type in TryDevirtualizeCall"); + return; + } + auto virtualMethodInstance = mModule->GetMethodInstance(mBestMethodTypeInstance, mBestMethodDef, BfTypeVector()); BF_ASSERT(virtualMethodInstance.mMethodInstance->mVirtualTableIdx != -1); diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index aee08a1d..c9aef991 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -18854,9 +18854,19 @@ void BfModule::EmitTupleToStringBody() BfTypedValue fieldValue = ExtractValue(thisValue, &fieldInstance, fieldInstance.mDataIdx); - if (fieldValue.mType->IsPrimitiveType()) + if (fieldValue.mType->IsWrappableType()) { - fieldValue.mType = GetPrimitiveStructType(((BfPrimitiveType*)fieldValue.mType)->mTypeDef->mTypeCode); + auto wrappedType = GetWrappedStructType(fieldValue.mType); + if ((wrappedType->IsTypedPrimitive()) || (wrappedType->IsValuelessType())) + { + fieldValue.mType = wrappedType; + } + else + { + fieldValue = MakeAddressable(fieldValue); + fieldValue.mType = wrappedType; + fieldValue.mValue = mBfIRBuilder->CreateBitCast(fieldValue.mValue, mBfIRBuilder->MapTypeInstPtr(fieldValue.mType->ToTypeInstance())); + } } auto typeInstance = fieldValue.mType->ToTypeInstance();