1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Fixed ToString of tuples with sized array members

This commit is contained in:
Brian Fiete 2024-02-14 05:26:03 -05:00
parent 34b0dd44a7
commit ca1ac7fb4c
3 changed files with 20 additions and 3 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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();