From dc169fffda13760e46c9c6eb1a9042b420a89007 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 12 Sep 2020 08:11:29 -0700 Subject: [PATCH] Parser fixes --- IDEHelper/Compiler/BfAst.h | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) 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; + } } };