diff --git a/IDEHelper/Compiler/BfAst.h b/IDEHelper/Compiler/BfAst.h index acaca210..3e3da0fe 100644 --- a/IDEHelper/Compiler/BfAst.h +++ b/IDEHelper/Compiler/BfAst.h @@ -951,20 +951,48 @@ static void BfSizedArrayInitIndirect(BfSizedArray& sizedArray, const SizedArr template class BfDeferredAstSizedArray : public SizedArray { -public: +public: BfSizedArray* mSizedArray; BfAstAllocator* mAlloc; public: BfDeferredAstSizedArray(BfSizedArray& arr, BfAstAllocator* alloc) - { + { mSizedArray = &arr; - mAlloc = alloc; + mAlloc = alloc; } ~BfDeferredAstSizedArray() { + BfSizedArrayInitIndirect(*mSizedArray, *this, mAlloc); + } +}; + +template +class BfDeferredAstNodeSizedArray : public SizedArray +{ +public: + BfAstNode* mParentNode; + BfSizedArray* mSizedArray; + BfAstAllocator* mAlloc; + +public: + BfDeferredAstNodeSizedArray(BfAstNode* parentNode, BfSizedArray& arr, BfAstAllocator* alloc) + { + mParentNode = parentNode; + mSizedArray = &arr; + mAlloc = alloc; + } + + ~BfDeferredAstNodeSizedArray() + { BfSizedArrayInitIndirect(*mSizedArray, *this, mAlloc); + if (!mSizedArray->IsEmpty()) + { + int endPos = mSizedArray->back()->mSrcEnd; + if (endPos > mParentNode->mSrcEnd) + mParentNode->mSrcEnd = endPos; + } } };