From f831d75de2c525a9b8d6f683d1621ea9fab71ddd Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 22 Jun 2021 10:42:04 -0700 Subject: [PATCH] Added field dtor support for auto-properties --- IDEHelper/Compiler/BfDefBuilder.cpp | 7 +++++++ IDEHelper/Compiler/BfReducer.cpp | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/IDEHelper/Compiler/BfDefBuilder.cpp b/IDEHelper/Compiler/BfDefBuilder.cpp index 2e14cac0..80e17e20 100644 --- a/IDEHelper/Compiler/BfDefBuilder.cpp +++ b/IDEHelper/Compiler/BfDefBuilder.cpp @@ -963,6 +963,13 @@ void BfDefBuilder::Visit(BfPropertyDeclaration* propertyDeclaration) mCurTypeDef->mSignatureHash = HashString(fieldDef->mName, mCurTypeDef->mSignatureHash); } + else + { + if (mCurTypeDef->mTypeCode == BfTypeCode_Interface) + Fail("Interface properties cannot have field destructors", propertyDeclaration->mFieldDtor); + else if (propertyDeclaration->mFieldDtor != NULL) + Fail("Properties with method bodies cannot have field destructors", propertyDeclaration->mFieldDtor); + } for (auto methodDeclaration : propertyDeclaration->mMethods) { diff --git a/IDEHelper/Compiler/BfReducer.cpp b/IDEHelper/Compiler/BfReducer.cpp index 3d04ba4c..6bfd2fdc 100644 --- a/IDEHelper/Compiler/BfReducer.cpp +++ b/IDEHelper/Compiler/BfReducer.cpp @@ -6875,6 +6875,15 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, int depth, BfAstNode* defe { MEMBER_SET(propertyDeclaration, mDefinitionBlock, block); ReadPropertyBlock(propertyDeclaration, block); + + if (auto tokenNode = BfNodeDynCast(mVisitorPos.GetNext())) + { + if (tokenNode->mToken == BfToken_Tilde) + { + auto fieldDtor = CreateFieldDtorDeclaration(tokenNode); + MEMBER_SET(propertyDeclaration, mFieldDtor, fieldDtor); + } + } } else if (isExprBodyProp) {