From 98c27fad59c5b0354b8d6962d6633774026bebb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Mon, 16 Oct 2023 11:19:29 -0400
Subject: [PATCH] StaticModel: add missing fields in copy constructor and
 assigment operators

This should have been in commit 0169240f76532df6d507b01647e8576d1094e95d.
---
 src/StaticModel.cc | 21 ++++++++++++++++++++-
 src/StaticModel.hh |  5 +++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index bfaf0bda..83bdb1ee 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -36,9 +36,23 @@ StaticModel::StaticModel(SymbolTable &symbol_table_arg,
 {
 }
 
+void
+StaticModel::copyHelper(const StaticModel &m)
+{
+  auto f = [this](const ExprNode *e) { return e->clone(*this); };
+
+  for (const auto &it : m.ramsey_multipliers_derivatives_temporary_terms)
+    ramsey_multipliers_derivatives_temporary_terms.insert(f(it));
+  for (const auto &it : m.ramsey_multipliers_derivatives_temporary_terms_idxs)
+    ramsey_multipliers_derivatives_temporary_terms_idxs.emplace(f(it.first), it.second);
+}
+
 StaticModel::StaticModel(const StaticModel &m) :
-  ModelTree{m}
+  ModelTree{m},
+  ramsey_multipliers_derivatives{m.ramsey_multipliers_derivatives},
+  ramsey_multipliers_derivatives_sparse_colptr{m.ramsey_multipliers_derivatives_sparse_colptr}
 {
+  copyHelper(m);
 }
 
 StaticModel &
@@ -46,6 +60,11 @@ StaticModel::operator=(const StaticModel &m)
 {
   ModelTree::operator=(m);
 
+  ramsey_multipliers_derivatives = m.ramsey_multipliers_derivatives;
+  ramsey_multipliers_derivatives_sparse_colptr = m.ramsey_multipliers_derivatives_sparse_colptr;
+
+  copyHelper(m);
+
   return *this;
 }
 
diff --git a/src/StaticModel.hh b/src/StaticModel.hh
index f940c50b..67e24815 100644
--- a/src/StaticModel.hh
+++ b/src/StaticModel.hh
@@ -117,6 +117,11 @@ private:
   template<ExprNodeOutputType output_type>
   void writeRamseyMultipliersDerivativesHelper(ostream &output) const;
 
+  //! Internal helper for the copy constructor and assignment operator
+  /*! Copies all the structures that contain ExprNode*, by the converting the
+      pointers into their equivalent in the new tree */
+  void copyHelper(const StaticModel &m);
+
 protected:
   string
   modelClassName() const override
-- 
GitLab