From 4bfa087cecaa5892454ed6b77db279a16af02227 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 17 Aug 2024 13:01:00 -0400 Subject: [PATCH] StringView sanity check --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 38 +++++++++++++----------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 3d80d918..84452f49 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -14161,29 +14161,33 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp if ((isNull) || (mContext->mStringObjectIdMap.TryGetValue(stringId, &entry))) { auto svTypeInst = toType->ToTypeInstance(); - + PopulateType(svTypeInst); PopulateType(svTypeInst->mBaseType); mBfIRBuilder->PopulateType(svTypeInst); - SizedArray spanFieldVals; - spanFieldVals.Add(mBfIRBuilder->CreateConstAggZero(mBfIRBuilder->MapType(svTypeInst->mBaseType->mBaseType))); - - if (isNull) + // Sanity check + if (svTypeInst->mMergedFieldDataCount == 2) { - spanFieldVals.Add(mBfIRBuilder->CreateConstNull(mBfIRBuilder->MapType(CreatePointerType(GetPrimitiveType(BfTypeCode_Char8))))); - spanFieldVals.Add(mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, 0)); - } - else - { - auto stringCharPtr = GetStringCharPtr(stringId); - spanFieldVals.Add(stringCharPtr); - spanFieldVals.Add(mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, entry->mString.mLength)); - } + SizedArray spanFieldVals; + spanFieldVals.Add(mBfIRBuilder->CreateConstAggZero(mBfIRBuilder->MapType(svTypeInst->mBaseType->mBaseType))); - SizedArray svFieldVals; - svFieldVals.Add(mBfIRBuilder->CreateConstAgg(mBfIRBuilder->MapType(svTypeInst->mBaseType), spanFieldVals)); - return mBfIRBuilder->CreateConstAgg(mBfIRBuilder->MapType(svTypeInst), svFieldVals); + if (isNull) + { + spanFieldVals.Add(mBfIRBuilder->CreateConstNull(mBfIRBuilder->MapType(CreatePointerType(GetPrimitiveType(BfTypeCode_Char8))))); + spanFieldVals.Add(mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, 0)); + } + else + { + auto stringCharPtr = GetStringCharPtr(stringId); + spanFieldVals.Add(stringCharPtr); + spanFieldVals.Add(mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, entry->mString.mLength)); + } + + SizedArray svFieldVals; + svFieldVals.Add(mBfIRBuilder->CreateConstAgg(mBfIRBuilder->MapType(svTypeInst->mBaseType), spanFieldVals)); + return mBfIRBuilder->CreateConstAgg(mBfIRBuilder->MapType(svTypeInst), svFieldVals); + } } } }