mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Fixes from valgrind
This commit is contained in:
parent
0feaaded22
commit
676e7988fb
31 changed files with 243 additions and 147 deletions
|
@ -2854,16 +2854,16 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
CMD_PARAM(int, typeId);
|
||||
CMD_PARAM(BeMDNode*, type);
|
||||
auto& typeEntry = GetTypeEntry(typeId);
|
||||
typeEntry.mDIType = (BeDbgType*)type;
|
||||
typeEntry.mDIType = BeValueDynCast<BeDbgType>(type);
|
||||
if (typeEntry.mInstDIType == NULL)
|
||||
typeEntry.mInstDIType = (BeDbgType*)type;
|
||||
typeEntry.mInstDIType = BeValueDynCast<BeDbgType>(type);
|
||||
}
|
||||
break;
|
||||
case BfIRCmd_DbgSetInstType:
|
||||
{
|
||||
CMD_PARAM(int, typeId);
|
||||
CMD_PARAM(BeMDNode*, type);
|
||||
GetTypeEntry(typeId).mInstDIType = (BeDbgType*)type;
|
||||
GetTypeEntry(typeId).mInstDIType = BeValueDynCast<BeDbgType>(type);
|
||||
}
|
||||
break;
|
||||
case BfIRCmd_DbgGetType:
|
||||
|
@ -2955,7 +2955,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
dbgType->mName = name;
|
||||
dbgType->mSize = (int)(sizeInBits / 8);
|
||||
dbgType->mAlign = (int)(alignInBits / 8);
|
||||
dbgType->mDerivedFrom = (BeDbgType*)derivedFrom;
|
||||
dbgType->mDerivedFrom = BeValueDynCast<BeDbgType>(derivedFrom);
|
||||
dbgType->mDefFile = (BeDbgFile*)file;
|
||||
dbgType->mDefLine = lineNum - 1;
|
||||
dbgType->mIsFullyDefined = true;
|
||||
|
@ -2981,7 +2981,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
dbgType->mSize = (int)(sizeInBits / 8);
|
||||
dbgType->mAlign = (int)(alignInBits / 8);
|
||||
dbgType->mIsFullyDefined = true;
|
||||
dbgType->mElementType = (BeDbgType*)underlyingType;
|
||||
dbgType->mElementType = BeValueDynCast<BeDbgType>(underlyingType);
|
||||
for (auto member : members)
|
||||
{
|
||||
if (auto enumMember = BeValueDynCast<BeDbgEnumMember>(member))
|
||||
|
@ -3101,7 +3101,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
auto dbgArray = mBeModule->mDbgModule->mTypes.Alloc<BeDbgArrayType>();
|
||||
dbgArray->mSize = (int)(sizeInBits / 8);
|
||||
dbgArray->mAlign = (int)(alignInBits / 8);
|
||||
dbgArray->mElement = (BeDbgType*)elementType;
|
||||
dbgArray->mElement = BeValueDynCast<BeDbgType>(elementType);
|
||||
dbgArray->mNumElements = numElements;
|
||||
|
||||
SetResult(curId, dbgArray);
|
||||
|
@ -3212,9 +3212,11 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
CMD_PARAM(int64, sizeInBits);
|
||||
CMD_PARAM(int64, alignInBits);
|
||||
|
||||
auto dbgType = (BeDbgType*)mdType;
|
||||
dbgType->mSize = (int)(sizeInBits / 8);
|
||||
dbgType->mAlign = (int)(alignInBits / 8);
|
||||
if (auto dbgType = BeValueDynCast<BeDbgType>(mdType))
|
||||
{
|
||||
dbgType->mSize = (int)(sizeInBits / 8);
|
||||
dbgType->mAlign = (int)(alignInBits / 8);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BfIRCmd_DbgReplaceAllUses:
|
||||
|
@ -3244,7 +3246,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
}
|
||||
else if (auto dbgType = BeValueDynCast<BeDbgEnumType>(diNode))
|
||||
{
|
||||
dbgType->mElementType = (BeDbgType*)diBaseType;
|
||||
dbgType->mElementType = BeValueDynCast<BeDbgType>(diBaseType);
|
||||
dbgType->SetMembers(members);
|
||||
}
|
||||
else
|
||||
|
@ -3279,7 +3281,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
|
||||
auto dbgMember = mBeModule->mOwnedValues.Alloc<BeDbgStructMember>();
|
||||
dbgMember->mName = name;
|
||||
dbgMember->mType = (BeDbgType*)type;
|
||||
dbgMember->mType = BeValueDynCast<BeDbgType>(type);
|
||||
dbgMember->mOffset = (int)(offsetInBits / 8);
|
||||
dbgMember->mFlags = flags;
|
||||
|
||||
|
@ -3300,7 +3302,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
|
||||
auto dbgMember = mBeModule->mOwnedValues.Alloc<BeDbgStructMember>();
|
||||
dbgMember->mName = name;
|
||||
dbgMember->mType = (BeDbgType*)type;
|
||||
dbgMember->mType = BeValueDynCast<BeDbgType>(type);
|
||||
dbgMember->mOffset = -1;
|
||||
dbgMember->mStaticValue = val;
|
||||
dbgMember->mFlags = flags;
|
||||
|
@ -3317,7 +3319,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
CMD_PARAM(int, flags);
|
||||
|
||||
auto dbgInheritance = mBeModule->mAlloc.Alloc<BeDbgInheritance>();
|
||||
dbgInheritance->mBaseType = (BeDbgType*)baseType;
|
||||
dbgInheritance->mBaseType = BeValueDynCast<BeDbgType>(baseType);
|
||||
|
||||
SetResult(curId, dbgInheritance);
|
||||
}
|
||||
|
@ -3358,7 +3360,7 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
for (auto arg : genericArgs)
|
||||
{
|
||||
BF_ASSERT(arg != NULL);
|
||||
dbgFunc->mGenericArgs.Add((BeDbgType*)arg);
|
||||
dbgFunc->mGenericArgs.Add(BeValueDynCast<BeDbgType>(arg));
|
||||
}
|
||||
for (auto genericConstValue : genericConstValueArgs)
|
||||
dbgFunc->mGenericConstValueArgs.Add(genericConstValue);
|
||||
|
@ -3457,9 +3459,9 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
auto dbgFuncType = mBeModule->mOwnedValues.Alloc<BeDbgFunctionType>();
|
||||
if (!elements.empty())
|
||||
{
|
||||
dbgFuncType->mReturnType = (BeDbgType*)elements[0];
|
||||
dbgFuncType->mReturnType = BeValueDynCast<BeDbgType>(elements[0]);
|
||||
for (int i = 1; i < (int)elements.size(); i++)
|
||||
dbgFuncType->mParams.push_back((BeDbgType*)elements[i]);
|
||||
dbgFuncType->mParams.push_back(BeValueDynCast<BeDbgType>(elements[i]));
|
||||
}
|
||||
|
||||
SetResult(curId, dbgFuncType);
|
||||
|
|
|
@ -68,8 +68,9 @@ public:
|
|||
};
|
||||
|
||||
BfSizedArray()
|
||||
{
|
||||
{
|
||||
mSize = 0;
|
||||
mVals = NULL;
|
||||
}
|
||||
|
||||
BfSizedArray(const llvm::SmallVectorImpl<T>& refVec)
|
||||
|
|
|
@ -104,6 +104,13 @@ struct BfVariant
|
|||
return mSingle;
|
||||
return (double)mInt64;
|
||||
}
|
||||
|
||||
BfVariant()
|
||||
{
|
||||
mTypeCode = BfTypeCode_None;
|
||||
mWarnType = 0;
|
||||
mUInt64 = 0;
|
||||
}
|
||||
};
|
||||
|
||||
enum BfToken : uint8
|
||||
|
|
|
@ -370,8 +370,7 @@ BfCompiler::BfCompiler(BfSystem* bfSystem, bool isResolveOnly)
|
|||
mHadCancel = false;
|
||||
mCompileState = CompileState_None;
|
||||
|
||||
//mMaxInterfaceSlots = 4;
|
||||
mContext = new BfContext(this);
|
||||
//mMaxInterfaceSlots = 4;
|
||||
mHotData = NULL;
|
||||
mHotState = NULL;
|
||||
mHotResolveData = NULL;
|
||||
|
@ -479,8 +478,7 @@ BfCompiler::BfCompiler(BfSystem* bfSystem, bool isResolveOnly)
|
|||
|
||||
mLastAutocompleteModule = NULL;
|
||||
|
||||
//if (isResolveOnly)
|
||||
//mCeMachine = NULL;
|
||||
mContext = new BfContext(this);
|
||||
mCeMachine = new CeMachine(this);
|
||||
mCurCEExecuteId = -1;
|
||||
}
|
||||
|
|
|
@ -34,8 +34,7 @@ USING_NS_BF;
|
|||
using namespace llvm;
|
||||
|
||||
BfContext::BfContext(BfCompiler* compiler) :
|
||||
mTypeDefTypeRefPool(true),
|
||||
mNamedTypeRefPool(true)
|
||||
mTypeDefTypeRefPool(true, true)
|
||||
{
|
||||
mCompiler = compiler;
|
||||
mSystem = compiler->mSystem;
|
||||
|
|
|
@ -424,8 +424,6 @@ public:
|
|||
BfAllocPool<BfArrayType> mArrayTypeInstancePool;
|
||||
BfAllocPool<BfGenericParamType> mGenericParamTypePool;
|
||||
BfAllocPool<BfDirectTypeDefReference> mTypeDefTypeRefPool;
|
||||
BfAllocPool<BfDirectStrTypeReference> mNamedTypeRefPool;
|
||||
BfAllocPool<BfGenericInstanceTypeRef> mGenericTypeRefPool;
|
||||
BfAllocPool<BfConcreteInterfaceType> mConcreteInterfaceTypePool;
|
||||
BfAllocPool<BfConstExprValueType> mConstExprValueTypePool;
|
||||
BfAllocPool<BfDelegateType> mDelegateTypePool;
|
||||
|
|
|
@ -2864,7 +2864,7 @@ void BfIRCodeGen::HandleNextCmd()
|
|||
bool isFakeIntrinsic = (int)intrinsics[intrinId].mID == -2;
|
||||
if (isFakeIntrinsic)
|
||||
{
|
||||
auto intrinsicData = mAlloc.Alloc<BfIRIntrinsicData>();
|
||||
auto intrinsicData = mIntrinsicData.Alloc();
|
||||
intrinsicData->mName = intrinName;
|
||||
intrinsicData->mIntrinsic = (BfIRIntrinsic)intrinId;
|
||||
intrinsicData->mReturnType = returnType;
|
||||
|
@ -2884,7 +2884,7 @@ void BfIRCodeGen::HandleNextCmd()
|
|||
|
||||
if (platName.IsEmpty())
|
||||
{
|
||||
auto intrinsicData = mAlloc.Alloc<BfIRIntrinsicData>();
|
||||
auto intrinsicData = mIntrinsicData.Alloc();
|
||||
intrinsicData->mName = platIntrinName;
|
||||
intrinsicData->mIntrinsic = BfIRIntrinsic__PLATFORM;
|
||||
intrinsicData->mReturnType = returnType;
|
||||
|
|
|
@ -121,6 +121,7 @@ public:
|
|||
Dictionary<llvm::Type*, llvm::Type*> mAlignedTypeToNormalType;
|
||||
Dictionary<llvm::Type*, int> mTypeToTypeIdMap;
|
||||
HashSet<llvm::BasicBlock*> mLockedBlocks;
|
||||
OwnedArray<BfIRIntrinsicData> mIntrinsicData;
|
||||
|
||||
public:
|
||||
void InitTarget();
|
||||
|
|
|
@ -966,14 +966,14 @@ void BfModule::RemoveModuleData()
|
|||
}
|
||||
|
||||
void BfModule::Init(bool isFullRebuild)
|
||||
{
|
||||
{
|
||||
mContext->mFinishedModuleWorkList.Remove(this);
|
||||
|
||||
if ((mCompiler->mIsResolveOnly) && (this != mContext->mUnreifiedModule))
|
||||
BF_ASSERT(mIsReified);
|
||||
|
||||
if (!mIsScratchModule)
|
||||
{
|
||||
{
|
||||
mCompiler->mStats.mModulesStarted++;
|
||||
if (mIsReified)
|
||||
mCompiler->mStats.mReifiedModuleCount++;
|
||||
|
@ -981,7 +981,7 @@ void BfModule::Init(bool isFullRebuild)
|
|||
}
|
||||
|
||||
mIsHotModule = (mProject != NULL) && (mCompiler->mOptions.mHotProject != NULL) && (mCompiler->mOptions.mHotProject->ContainsReference(mProject));
|
||||
|
||||
|
||||
mFuncReferences.Clear();
|
||||
mClassVDataRefs.Clear();
|
||||
mClassVDataExtRefs.Clear();
|
||||
|
@ -990,22 +990,25 @@ void BfModule::Init(bool isFullRebuild)
|
|||
CleanupFileInstances();
|
||||
mStaticFieldRefs.Clear();
|
||||
//mInterfaceSlotRefs.Clear();
|
||||
|
||||
|
||||
// If we are just doing an extension then the ownede types aren't rebuilt.
|
||||
// If we set mRevision then QueueMethodSpecializations wouldn't actually queue up required specializations
|
||||
// and we'd end up with link errors if the original module uniquely referred to any generic methods
|
||||
if (isFullRebuild)
|
||||
mRevision = mCompiler->mRevision;
|
||||
mRevision = mCompiler->mRevision;
|
||||
|
||||
BF_ASSERT(mCurTypeInstance == NULL);
|
||||
|
||||
|
||||
mIsModuleMutable = true;
|
||||
BF_ASSERT((mBfIRBuilder == NULL) || (mCompiler->mIsResolveOnly));
|
||||
if (!mIsComptimeModule)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
EnsureIRBuilder(mCompiler->mLastAutocompleteModule == this);
|
||||
EnsureIRBuilder(mCompiler->mLastAutocompleteModule == this);
|
||||
#else
|
||||
EnsureIRBuilder(false);
|
||||
EnsureIRBuilder(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
mCurMethodState = NULL;
|
||||
mAwaitingInitFinish = true;
|
||||
|
@ -1151,7 +1154,7 @@ void BfModule::SetupIRBuilder(bool dbgVerifyCodeGen)
|
|||
if (mIsScratchModule)
|
||||
{
|
||||
mBfIRBuilder->mIgnoreWrites = true;
|
||||
BF_ASSERT(!dbgVerifyCodeGen);
|
||||
BF_ASSERT(!dbgVerifyCodeGen);
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
if (mCompiler->mIsResolveOnly)
|
||||
|
@ -6561,6 +6564,7 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
|
|||
{
|
||||
reflectKind = (BfReflectKind)(reflectKind | GetUserReflectKind(attr.mType));
|
||||
}
|
||||
delete customAttrs;
|
||||
}
|
||||
return reflectKind;
|
||||
};
|
||||
|
@ -12225,6 +12229,9 @@ void BfModule::ProcessTypeInstCustomAttributes(int& packing, bool& isUnion, bool
|
|||
// Checking to see if we're an attribute or not
|
||||
void BfModule::ProcessCustomAttributeData()
|
||||
{
|
||||
if (mCurTypeInstance->mAttributeData != NULL)
|
||||
return;
|
||||
|
||||
bool isAttribute = false;
|
||||
auto checkTypeInst = mCurTypeInstance->mBaseType;
|
||||
while (checkTypeInst != NULL)
|
||||
|
|
|
@ -4110,7 +4110,9 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
|||
}
|
||||
else
|
||||
{
|
||||
typeInstance->mCustomAttributes = GetCustomAttributes(typeDef->mTypeDeclaration->mAttributes, attrTarget);
|
||||
|
||||
typeInstance->mCustomAttributes = new BfCustomAttributes();
|
||||
GetCustomAttributes(typeInstance->mCustomAttributes, typeDef->mTypeDeclaration->mAttributes, attrTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4127,7 +4129,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
|||
prevSkipTypeProtectionChecks.Restore();
|
||||
typeInstance->mInstSize = std::max(0, typeInstance->mInstSize);
|
||||
typeInstance->mInstAlign = std::max(0, typeInstance->mInstAlign);
|
||||
|
||||
|
||||
ProcessCustomAttributeData();
|
||||
int packing = 0;
|
||||
bool isUnion = false;
|
||||
|
@ -8355,7 +8357,6 @@ BfType* BfModule::ResolveGenericType(BfType* unspecializedType, BfTypeVector* ty
|
|||
BfDelegateInfo* delegateInfo = delegateType->GetDelegateInfo();
|
||||
delegateInfo->mParams.Clear();
|
||||
|
||||
|
||||
BfTypeDef* typeDef = new BfTypeDef();
|
||||
|
||||
typeDef->mProject = baseDelegateType->mTypeDef->mProject;
|
||||
|
@ -9852,6 +9853,7 @@ void BfModule::GetDelegateTypeRefAttributes(BfDelegateTypeRef* delegateTypeRef,
|
|||
callingConvention = (BfCallingConvention)constant->mInt32;
|
||||
}
|
||||
}
|
||||
delete customAttributes;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3642,7 +3642,7 @@ void BfParser::HadSrcRealloc()
|
|||
memset(jumpTable, 0, jumpTableSize * sizeof(BfLineStartEntry));
|
||||
memcpy(jumpTable, mJumpTable, mJumpTableSize * sizeof(BfLineStartEntry));
|
||||
|
||||
delete mJumpTable;
|
||||
delete [] mJumpTable;
|
||||
|
||||
mJumpTable = jumpTable;
|
||||
mJumpTableSize = jumpTableSize;
|
||||
|
|
|
@ -1574,9 +1574,13 @@ BfMethodInstanceGroup::BfMethodInstanceGroup(BfMethodInstanceGroup&& prev) noexc
|
|||
mOwner = prev.mOwner;
|
||||
mDefault = prev.mDefault;
|
||||
mMethodSpecializationMap = prev.mMethodSpecializationMap;
|
||||
mDefaultCustomAttributes = prev.mDefaultCustomAttributes;
|
||||
mMethodIdx = prev.mMethodIdx;
|
||||
mRefCount = prev.mRefCount;
|
||||
mOnDemandKind = prev.mOnDemandKind;
|
||||
mExplicitlyReflected = prev.mExplicitlyReflected;
|
||||
mHasEmittedReference = prev.mHasEmittedReference;
|
||||
|
||||
if (mDefault != NULL)
|
||||
mDefault->mMethodInstanceGroup = this;
|
||||
if (mMethodSpecializationMap != NULL)
|
||||
|
@ -1584,9 +1588,8 @@ BfMethodInstanceGroup::BfMethodInstanceGroup(BfMethodInstanceGroup&& prev) noexc
|
|||
for (auto& pair : *mMethodSpecializationMap)
|
||||
pair.mValue->mMethodInstanceGroup = this;
|
||||
}
|
||||
mDefaultCustomAttributes = prev.mDefaultCustomAttributes;
|
||||
|
||||
prev.mDefaultCustomAttributes = NULL;
|
||||
|
||||
prev.mRefCount = 0;
|
||||
prev.mDefault = NULL;
|
||||
prev.mMethodSpecializationMap = NULL;
|
||||
|
@ -2716,10 +2719,17 @@ void BfClosureType::Finish()
|
|||
BfDelegateType::~BfDelegateType()
|
||||
{
|
||||
mMethodInstanceGroups.Clear();
|
||||
delete mTypeDef;
|
||||
delete mTypeDef;
|
||||
mTypeDef = NULL;
|
||||
}
|
||||
|
||||
void BfDelegateType::Dispose()
|
||||
{
|
||||
delete mTypeDef;
|
||||
mTypeDef = NULL;
|
||||
BfTypeInstance::Dispose();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BfTupleType::BfTupleType()
|
||||
|
@ -2766,6 +2776,17 @@ void BfTupleType::Init(BfProject* bfProject, BfTypeInstance* valueTypeInstance)
|
|||
mCreatedTypeDef = true;
|
||||
}
|
||||
|
||||
void BfTupleType::Dispose()
|
||||
{
|
||||
if (mCreatedTypeDef)
|
||||
{
|
||||
delete mTypeDef;
|
||||
mTypeDef = NULL;
|
||||
mCreatedTypeDef = false;
|
||||
}
|
||||
BfTypeInstance::Dispose();
|
||||
}
|
||||
|
||||
BfFieldDef* BfTupleType::AddField(const StringImpl& name)
|
||||
{
|
||||
return BfDefBuilder::AddField(mTypeDef, NULL, name);
|
||||
|
@ -2790,8 +2811,8 @@ void BfTupleType::Finish()
|
|||
|
||||
BfBoxedType::~BfBoxedType()
|
||||
{
|
||||
if ((mTypeDef != NULL) && (mTypeDef->mEmitParent != NULL))
|
||||
mTypeDef = NULL;
|
||||
//if ((mTypeDef != NULL) && (mTypeDef->mEmitParent != NULL))
|
||||
mTypeDef = NULL;
|
||||
}
|
||||
|
||||
BfType* BfBoxedType::GetModifiedElementType()
|
||||
|
@ -2940,7 +2961,7 @@ BfVariant BfResolvedTypeSet::EvaluateToVariant(LookupContext* ctx, BfExpression*
|
|||
outType = NULL;
|
||||
|
||||
BfConstResolver constResolver(ctx->mModule);
|
||||
BfVariant variant = { BfTypeCode_None };
|
||||
BfVariant variant;
|
||||
constResolver.mAllowGenericConstValue = true;
|
||||
constResolver.mBfEvalExprFlags = BfEvalExprFlags_NoCast;
|
||||
constResolver.mExpectingType = ctx->mModule->GetPrimitiveType(BfTypeCode_Int64);
|
||||
|
|
|
@ -2007,7 +2007,7 @@ public:
|
|||
|
||||
~BfTypeInstance();
|
||||
|
||||
void Dispose();
|
||||
virtual void Dispose();
|
||||
void ReleaseData();
|
||||
|
||||
virtual bool IsInstanceOf(BfTypeDef* typeDef) override { if (typeDef == NULL) return false; return typeDef->GetDefinition() == mTypeDef->GetDefinition(); }
|
||||
|
@ -2245,6 +2245,7 @@ public:
|
|||
}
|
||||
~BfDelegateType();
|
||||
|
||||
virtual void Dispose() override;
|
||||
virtual bool IsOnDemand() override { return true; }
|
||||
|
||||
virtual bool IsDelegate() override { return mTypeDef->mIsDelegate; }
|
||||
|
@ -2277,6 +2278,7 @@ public:
|
|||
~BfTupleType();
|
||||
|
||||
void Init(BfProject* bfProject, BfTypeInstance* valueTypeInstance);
|
||||
virtual void Dispose() override;
|
||||
BfFieldDef* AddField(const StringImpl& name);
|
||||
void Finish();
|
||||
|
||||
|
|
|
@ -41,12 +41,7 @@ BfSource::~BfSource()
|
|||
delete mSourceData;
|
||||
|
||||
if (mSrcAllocSize >= 0)
|
||||
delete mSrc;
|
||||
|
||||
for (auto typeDef : mTypeDefs)
|
||||
{
|
||||
NOP;
|
||||
}
|
||||
delete [] mSrc;
|
||||
}
|
||||
|
||||
bool BfSource::WantsStats()
|
||||
|
@ -84,7 +79,7 @@ int BfSource::AllocChars(int charCount)
|
|||
if (mSrc != NULL)
|
||||
{
|
||||
memcpy(newSrc, mSrc, mSrcLength);
|
||||
delete mSrc;
|
||||
delete [] mSrc;
|
||||
}
|
||||
mSrc = newSrc;
|
||||
mSrcAllocSize = newAllocSize;
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
{
|
||||
BF_ASSERT(mExteriorNodes.mSize >= 0);
|
||||
BF_ASSERT(mExteriorNodes.mSize < 0x00FFFFFF);
|
||||
delete mSrc;
|
||||
delete [] mSrc;
|
||||
}
|
||||
|
||||
virtual BfParserData* ToParserData()
|
||||
|
|
|
@ -2108,7 +2108,7 @@ void BfSystem::ProcessAtomGraveyard()
|
|||
{
|
||||
deletedAtoms.Add(atom);
|
||||
auto itr = mAtomMap.Remove(atom->mString);
|
||||
delete atom->mString.mPtr;
|
||||
free((void*)atom->mString.mPtr);
|
||||
delete atom;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -146,11 +146,13 @@ public:
|
|||
Array<T*> mVals;
|
||||
T* mNext;
|
||||
bool mOwnsAll;
|
||||
bool mZeroAlloc;
|
||||
|
||||
public:
|
||||
BfAllocPool(bool ownsAll = false)
|
||||
BfAllocPool(bool ownsAll = false, bool zeroAlloc = false)
|
||||
{
|
||||
mOwnsAll = ownsAll;
|
||||
mZeroAlloc = zeroAlloc;
|
||||
mNext = NULL;
|
||||
}
|
||||
|
||||
|
@ -160,8 +162,13 @@ public:
|
|||
delete mNext;
|
||||
for (auto val : mVals)
|
||||
{
|
||||
val->~T();
|
||||
free(val);
|
||||
if (mZeroAlloc)
|
||||
{
|
||||
val->~T();
|
||||
free(val);
|
||||
}
|
||||
else
|
||||
delete val;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -176,10 +183,15 @@ public:
|
|||
mVals.pop_back();
|
||||
return val;
|
||||
}
|
||||
//val = new T();
|
||||
void* addr = malloc(sizeof(T));
|
||||
memset(addr, 0, sizeof(T));
|
||||
val = new(addr) T();
|
||||
|
||||
if (mZeroAlloc)
|
||||
{
|
||||
void* addr = malloc(sizeof(T));
|
||||
memset(addr, 0, sizeof(T));
|
||||
val = new(addr) T();
|
||||
}
|
||||
else
|
||||
val = new T();
|
||||
if (mOwnsAll)
|
||||
mVals.push_back(val);
|
||||
return val;
|
||||
|
|
|
@ -5087,6 +5087,7 @@ BfTypedValue CeContext::Call(CeCallSource callSource, BfModule* module, BfMethod
|
|||
retAddr = stackPtr - memStart;
|
||||
}
|
||||
|
||||
delete mCeMachine->mAppendAllocInfo;
|
||||
mCeMachine->mAppendAllocInfo = NULL;
|
||||
|
||||
BfType* returnType = NULL;
|
||||
|
@ -6705,7 +6706,7 @@ bool CeContext::Execute(CeFunction* startFunction, uint8* startStackPtr, uint8*
|
|||
CE_CHECKADDR(outStdInAddr, ptrSize);
|
||||
if (outStdOutAddr != 0)
|
||||
CE_CHECKADDR(outStdOutAddr, ptrSize);
|
||||
if (outStdErrAddr != NULL)
|
||||
if (outStdErrAddr != 0)
|
||||
CE_CHECKADDR(outStdErrAddr, ptrSize);
|
||||
|
||||
BfpFile* outStdIn = NULL;
|
||||
|
@ -8526,6 +8527,8 @@ CeMachine::~CeMachine()
|
|||
|
||||
void CeMachine::Init()
|
||||
{
|
||||
BF_ASSERT(mCeModule == NULL);
|
||||
|
||||
mCeModule = new BfModule(mCompiler->mContext, "__constEval");
|
||||
mCeModule->mIsSpecialModule = true;
|
||||
//mCeModule->mIsScratchModule = true;
|
||||
|
@ -8537,6 +8540,7 @@ void CeMachine::Init()
|
|||
mCeModule->mIsReified = false;
|
||||
mCeModule->Init();
|
||||
|
||||
BF_ASSERT(mCeModule->mBfIRBuilder == NULL);
|
||||
mCeModule->mBfIRBuilder = new BfIRBuilder(mCeModule);
|
||||
mCeModule->mBfIRBuilder->mDbgVerifyCodeGen = true;
|
||||
mCeModule->FinishInit();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue