diff --git a/src/Amalgam/interpreter/InterpreterOpcodesBase.cpp b/src/Amalgam/interpreter/InterpreterOpcodesBase.cpp index 0e3e3b07..8c759568 100644 --- a/src/Amalgam/interpreter/InterpreterOpcodesBase.cpp +++ b/src/Amalgam/interpreter/InterpreterOpcodesBase.cpp @@ -1531,6 +1531,7 @@ EvaluableNodeReference Interpreter::InterpretNode_ENT_TARGET(EvaluableNode *en, if(result.IsImmediateValue()) { double value_number = result.GetValue().GetValueAsNumber(); + evaluableNodeManager->FreeNodeIfPossible(result); if(value_number >= 0) depth = static_cast(value_number); diff --git a/src/Amalgam/interpreter/InterpreterOpcodesListManipulation.cpp b/src/Amalgam/interpreter/InterpreterOpcodesListManipulation.cpp index 6a7e4d60..8da646b8 100644 --- a/src/Amalgam/interpreter/InterpreterOpcodesListManipulation.cpp +++ b/src/Amalgam/interpreter/InterpreterOpcodesListManipulation.cpp @@ -546,7 +546,7 @@ EvaluableNodeReference Interpreter::InterpretNode_ENT_SIZE(EvaluableNode *en, Ev else if(value.nodeType == ENIVT_CODE && value.nodeValue.code != nullptr) size = static_cast(value.nodeValue.code->GetNumChildNodes()); - evaluableNodeManager->FreeNodeTreeIfPossible(n); + evaluableNodeManager->FreeNodeIfPossible(n); return AllocReturn(size, immediate_result); } else if(n != nullptr) diff --git a/src/Amalgam/interpreter/InterpreterOpcodesLogic.cpp b/src/Amalgam/interpreter/InterpreterOpcodesLogic.cpp index 7a4ca86f..b9eb6c1c 100644 --- a/src/Amalgam/interpreter/InterpreterOpcodesLogic.cpp +++ b/src/Amalgam/interpreter/InterpreterOpcodesLogic.cpp @@ -43,7 +43,10 @@ EvaluableNodeReference Interpreter::InterpretNode_ENT_AND(EvaluableNode *en, Eva if(cur.IsImmediateValue()) { if(!cur.GetValue().GetValueAsBoolean()) + { + evaluableNodeManager->FreeNodeIfPossible(cur); return AllocReturn(false, immediate_result); + } } else { @@ -153,6 +156,7 @@ EvaluableNodeReference Interpreter::InterpretNode_ENT_NOT(EvaluableNode *en, Eva if(cur.IsImmediateValue()) { bool is_true = cur.GetValue().GetValueAsBoolean(); + evaluableNodeManager->FreeNodeIfPossible(cur); return AllocReturn(!is_true, immediate_result); } else