From 725b91e5d6710c25b8e5bd071fbff132f4c571dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Tue, 31 Jul 2018 10:49:23 +0200
Subject: [PATCH] Several fixes to computing tasks statements

- store objects whose persistence is not guaranteed (e.g. strings) as values
  instead of references (to avoid possible segfaults)
- on the contrary, always store the SymbolTable as a reference, since its
  persistence is guaranteed, and we don't want to copy it
- use pass-by-value in constructors whenever possible
- remove useless const keyword when passing by value
---
 src/ComputingTasks.cc | 138 +++++++++++++++++++++---------------------
 src/ComputingTasks.hh | 114 +++++++++++++++++-----------------
 2 files changed, 126 insertions(+), 126 deletions(-)

diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc
index c13a5056..01b848a3 100644
--- a/src/ComputingTasks.cc
+++ b/src/ComputingTasks.cc
@@ -257,18 +257,18 @@ PriorPosteriorFunctionStatement::writeJsonOutput(ostream &output) const
   output << "}";
 }
 
-PacModelStatement::PacModelStatement(const string &name_arg,
-                                     const string &var_name_arg,
-                                     const string &discount_arg,
-                                     const string &growth_arg,
+PacModelStatement::PacModelStatement(string name_arg,
+                                     string var_name_arg,
+                                     string discount_arg,
+                                     string growth_arg,
                                      map<string, int> undiff_arg,
                                      const SymbolTable &symbol_table_arg) :
-  name(name_arg),
-  var_name(var_name_arg),
-  discount(discount_arg),
-  growth(growth_arg),
-  undiff(move(undiff_arg)),
-  symbol_table(symbol_table_arg)
+  name{move(name_arg)},
+  var_name{move(var_name_arg)},
+  discount{move(discount_arg)},
+  growth{move(growth_arg)},
+  undiff{move(undiff_arg)},
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -382,11 +382,11 @@ PacModelStatement::getPacModelInfoForPacExpectation(tuple<string, string, string
 
 VarModelStatement::VarModelStatement(SymbolList symbol_list_arg,
                                      OptionsList options_list_arg,
-                                     const string &name_arg,
+                                     string name_arg,
                                      const SymbolTable &symbol_table_arg) :
   symbol_list(move(symbol_list_arg)),
   options_list(move(options_list_arg)),
-  name(name_arg),
+  name{move(name_arg)},
   symbol_table(symbol_table_arg)
 {
 }
@@ -575,16 +575,16 @@ VarEstimationStatement::writeOutput(ostream &output, const string &basename, boo
   output << "oo_ = var_estimation(M_, options_, oo_);" << endl;
 }
 
-VarRestrictionsStatement::VarRestrictionsStatement(const string &var_model_name_arg,
-                                                   const map<string, vector<string>> &var_map_arg,
+VarRestrictionsStatement::VarRestrictionsStatement(string var_model_name_arg,
+                                                   map<string, vector<string>> var_map_arg,
                                                    map<int, map<int, SymbolList>> exclusion_restrictions_arg,
                                                    equation_restrictions_t equation_restrictions_arg,
                                                    crossequation_restrictions_t crossequation_restrictions_arg,
                                                    map<pair<int, int>, double> covariance_number_restriction_arg,
                                                    map<pair<int, int>, pair<int, int>> covariance_pair_restriction_arg,
                                                    const SymbolTable &symbol_table_arg) :
-  var_model_name(var_model_name_arg),
-  var_map(var_map_arg),
+  var_model_name{move(var_model_name_arg)},
+  var_map{move(var_map_arg)},
   exclusion_restrictions(move(exclusion_restrictions_arg)),
   equation_restrictions(move(equation_restrictions_arg)),
   crossequation_restrictions(move(crossequation_restrictions_arg)),
@@ -3523,12 +3523,12 @@ EstimationDataStatement::writeJsonOutput(ostream &output) const
 
 SubsamplesStatement::SubsamplesStatement(string name1_arg,
                                          string name2_arg,
-                                         const subsample_declaration_map_t subsample_declaration_map_arg,
-                                         SymbolTable symbol_table_arg) :
+                                         subsample_declaration_map_t subsample_declaration_map_arg,
+                                         const SymbolTable &symbol_table_arg) :
   name1(move(name1_arg)),
   name2(move(name2_arg)),
   subsample_declaration_map(subsample_declaration_map_arg),
-  symbol_table(move(symbol_table_arg))
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -3622,12 +3622,12 @@ SubsamplesEqualStatement::SubsamplesEqualStatement(string to_name1_arg,
                                                    string to_name2_arg,
                                                    string from_name1_arg,
                                                    string from_name2_arg,
-                                                   SymbolTable symbol_table_arg) :
+                                                   const SymbolTable &symbol_table_arg) :
   to_name1(move(to_name1_arg)),
   to_name2(move(to_name2_arg)),
   from_name1(move(from_name1_arg)),
   from_name2(move(from_name2_arg)),
-  symbol_table(move(symbol_table_arg))
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -3693,10 +3693,10 @@ SubsamplesEqualStatement::writeJsonOutput(ostream &output) const
   output << "}";
 }
 
-JointPriorStatement::JointPriorStatement(const vector<string> joint_parameters_arg,
-                                         const PriorDistributions &prior_shape_arg,
+JointPriorStatement::JointPriorStatement(vector<string> joint_parameters_arg,
+                                         PriorDistributions prior_shape_arg,
                                          OptionsList options_list_arg) :
-  joint_parameters(joint_parameters_arg),
+  joint_parameters{move(joint_parameters_arg)},
   prior_shape(prior_shape_arg),
   options_list(move(options_list_arg))
 {
@@ -3857,8 +3857,8 @@ BasicPriorStatement::~BasicPriorStatement()
 
 BasicPriorStatement::BasicPriorStatement(string name_arg,
                                          string subsample_name_arg,
-                                         const PriorDistributions &prior_shape_arg,
-                                         const expr_t &variance_arg,
+                                         PriorDistributions prior_shape_arg,
+                                         expr_t variance_arg,
                                          OptionsList options_list_arg) :
   name(move(name_arg)),
   subsample_name(move(subsample_name_arg)),
@@ -4098,12 +4098,12 @@ BasicPriorStatement::writeJsonShape(ostream &output) const
     }
 }
 
-PriorStatement::PriorStatement(const string &name_arg,
-                               const string &subsample_name_arg,
-                               const PriorDistributions &prior_shape_arg,
-                               const expr_t &variance_arg,
-                               const OptionsList &options_list_arg) :
-  BasicPriorStatement(name_arg, subsample_name_arg, prior_shape_arg, variance_arg, options_list_arg)
+PriorStatement::PriorStatement(string name_arg,
+                               string subsample_name_arg,
+                               PriorDistributions prior_shape_arg,
+                               expr_t variance_arg,
+                               OptionsList options_list_arg) :
+  BasicPriorStatement{move(name_arg), move(subsample_name_arg), prior_shape_arg, variance_arg, move(options_list_arg)}
 {
 }
 
@@ -4141,14 +4141,14 @@ PriorStatement::writeCOutput(ostream &output, const string &basename)
          << "     index, shape, mean, mode, stdev, variance, domain));" << endl;
 }
 
-StdPriorStatement::StdPriorStatement(const string &name_arg,
-                                     const string &subsample_name_arg,
-                                     const PriorDistributions &prior_shape_arg,
-                                     const expr_t &variance_arg,
-                                     const OptionsList &options_list_arg,
-                                     SymbolTable symbol_table_arg) :
-  BasicPriorStatement(name_arg, subsample_name_arg, prior_shape_arg, variance_arg, options_list_arg),
-  symbol_table(move(symbol_table_arg))
+StdPriorStatement::StdPriorStatement(string name_arg,
+                                     string subsample_name_arg,
+                                     PriorDistributions prior_shape_arg,
+                                     expr_t variance_arg,
+                                     OptionsList options_list_arg,
+                                     const SymbolTable &symbol_table_arg) :
+  BasicPriorStatement{move(name_arg), move(subsample_name_arg), prior_shape_arg, variance_arg, move(options_list_arg)},
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -4198,15 +4198,15 @@ StdPriorStatement::writeCOutput(ostream &output, const string &basename)
   output << endl << "     index, shape, mean, mode, stdev, variance, domain));" << endl;
 }
 
-CorrPriorStatement::CorrPriorStatement(const string &name_arg1, string name_arg2,
-                                       const string &subsample_name_arg,
-                                       const PriorDistributions &prior_shape_arg,
-                                       const expr_t &variance_arg,
-                                       const OptionsList &options_list_arg,
-                                       SymbolTable symbol_table_arg) :
-  BasicPriorStatement(name_arg1, subsample_name_arg, prior_shape_arg, variance_arg, options_list_arg),
+CorrPriorStatement::CorrPriorStatement(string name_arg1, string name_arg2,
+                                       string subsample_name_arg,
+                                       PriorDistributions prior_shape_arg,
+                                       expr_t variance_arg,
+                                       OptionsList options_list_arg,
+                                       const SymbolTable &symbol_table_arg) :
+  BasicPriorStatement{move(name_arg1), move(subsample_name_arg), prior_shape_arg, variance_arg, move(options_list_arg)},
   name1(move(name_arg2)),
-  symbol_table(move(symbol_table_arg))
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -4287,7 +4287,7 @@ PriorEqualStatement::PriorEqualStatement(string to_declaration_type_arg,
                                          string from_name1_arg,
                                          string from_name2_arg,
                                          string from_subsample_name_arg,
-                                         SymbolTable symbol_table_arg) :
+                                         const SymbolTable &symbol_table_arg) :
   to_declaration_type(move(to_declaration_type_arg)),
   to_name1(move(to_name1_arg)),
   to_name2(move(to_name2_arg)),
@@ -4296,7 +4296,7 @@ PriorEqualStatement::PriorEqualStatement(string to_declaration_type_arg,
   from_name1(move(from_name1_arg)),
   from_name2(move(from_name2_arg)),
   from_subsample_name(move(from_subsample_name_arg)),
-  symbol_table(move(symbol_table_arg))
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -4485,10 +4485,10 @@ BasicOptionsStatement::writeJsonOptionsOutput(ostream &output) const
     }
 }
 
-OptionsStatement::OptionsStatement(const string &name_arg,
-                                   const string &subsample_name_arg,
-                                   const OptionsList &options_list_arg) :
-  BasicOptionsStatement(name_arg, subsample_name_arg, options_list_arg)
+OptionsStatement::OptionsStatement(string name_arg,
+                                   string subsample_name_arg,
+                                   OptionsList options_list_arg) :
+  BasicOptionsStatement{move(name_arg), move(subsample_name_arg), move(options_list_arg)}
 {
 }
 
@@ -4519,12 +4519,12 @@ OptionsStatement::writeCOutput(ostream &output, const string &basename)
   output << "msdsgeinfo->addOption(new ModFileOption(index, init));" << endl;
 }
 
-StdOptionsStatement::StdOptionsStatement(const string &name_arg,
-                                         const string &subsample_name_arg,
-                                         const OptionsList &options_list_arg,
-                                         SymbolTable symbol_table_arg) :
-  BasicOptionsStatement(name_arg, subsample_name_arg, options_list_arg),
-  symbol_table(move(symbol_table_arg))
+StdOptionsStatement::StdOptionsStatement(string name_arg,
+                                         string subsample_name_arg,
+                                         OptionsList options_list_arg,
+                                         const SymbolTable &symbol_table_arg) :
+  BasicOptionsStatement{move(name_arg), move(subsample_name_arg), move(options_list_arg)},
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -4569,13 +4569,13 @@ StdOptionsStatement::writeCOutput(ostream &output, const string &basename)
   output << "index, init));" << endl;
 }
 
-CorrOptionsStatement::CorrOptionsStatement(const string &name_arg1, string name_arg2,
-                                           const string &subsample_name_arg,
-                                           const OptionsList &options_list_arg,
-                                           SymbolTable symbol_table_arg) :
-  BasicOptionsStatement(name_arg1, subsample_name_arg, options_list_arg),
-  name1(move(name_arg2)),
-  symbol_table(move(symbol_table_arg))
+CorrOptionsStatement::CorrOptionsStatement(string name_arg1, string name_arg2,
+                                           string subsample_name_arg,
+                                           OptionsList options_list_arg,
+                                           const SymbolTable &symbol_table_arg) :
+  BasicOptionsStatement{move(name_arg1), move(subsample_name_arg), move(options_list_arg)},
+  name1{move(name_arg2)},
+  symbol_table{symbol_table_arg}
 {
 }
 
@@ -4650,7 +4650,7 @@ OptionsEqualStatement::OptionsEqualStatement(string to_declaration_type_arg,
                                              string from_name1_arg,
                                              string from_name2_arg,
                                              string from_subsample_name_arg,
-                                             SymbolTable symbol_table_arg) :
+                                             const SymbolTable &symbol_table_arg) :
   to_declaration_type(move(to_declaration_type_arg)),
   to_name1(move(to_name1_arg)),
   to_name2(move(to_name2_arg)),
@@ -4659,7 +4659,7 @@ OptionsEqualStatement::OptionsEqualStatement(string to_declaration_type_arg,
   from_name1(move(from_name1_arg)),
   from_name2(move(from_name2_arg)),
   from_subsample_name(move(from_subsample_name_arg)),
-  symbol_table(move(symbol_table_arg))
+  symbol_table{symbol_table_arg}
 {
 }
 
diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh
index 2e696da6..f6615f1d 100644
--- a/src/ComputingTasks.hh
+++ b/src/ComputingTasks.hh
@@ -122,18 +122,18 @@ public:
 class PacModelStatement : public Statement
 {
 private:
-  const string &name;
-  const string &var_name;
-  const string &discount;
-  const string &growth;
+  const string name;
+  const string var_name;
+  const string discount;
+  const string growth;
   const map<string, int> undiff;
   const SymbolTable &symbol_table;
   vector<int> lhs;
 public:
-  PacModelStatement(const string &name_arg,
-                    const string &var_name_arg,
-                    const string &discount_arg,
-                    const string &growth_arg,
+  PacModelStatement(string name_arg,
+                    string var_name_arg,
+                    string discount_arg,
+                    string growth_arg,
                     map<string, int> undiff_arg,
                     const SymbolTable &symbol_table_arg);
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
@@ -148,7 +148,7 @@ class VarModelStatement : public Statement
 private:
   const SymbolList symbol_list;
   const OptionsList options_list;
-  const string &name;
+  const string name;
   const SymbolTable &symbol_table;
   vector<int> eqnumber, lhs, orig_diff_var;
   vector<set<pair<int, int>>> rhs_by_eq; // rhs by equation
@@ -157,7 +157,7 @@ private:
 public:
   VarModelStatement(SymbolList symbol_list_arg,
                     OptionsList options_list_arg,
-                    const string &name_arg,
+                    string name_arg,
                     const SymbolTable &symbol_table_arg);
   void getVarModelInfo(string &var_model_name,
                        map<string, pair<SymbolList, int>> &var_model_info,
@@ -177,8 +177,8 @@ class VarRestrictionsStatement : public Statement
 {
 private:
   using var_restriction_eq_crosseq_t = pair<pair<int, pair<int, int>>, expr_t>;
-  const string &var_model_name;
-  const map<string, vector<string>> &var_map;
+  const string var_model_name;
+  const map<string, vector<string>> var_map;
   const map<int, map<int, SymbolList>> exclusion_restrictions;
   using equation_restrictions_t = map<int, pair<pair<var_restriction_eq_crosseq_t, var_restriction_eq_crosseq_t>, double>>;
   const equation_restrictions_t equation_restrictions;
@@ -189,8 +189,8 @@ private:
   const SymbolTable &symbol_table;
   int findIdxInVector(const vector<string> &vecvars, const string &var) const;
 public:
-  VarRestrictionsStatement(const string &var_model_name_arg,
-                           const map<string, vector<string>> &var_map_arg,
+  VarRestrictionsStatement(string var_model_name_arg,
+                           map<string, vector<string>> var_map_arg,
                            map<int, map<int, SymbolList>> exclusion_restrictions_arg,
                            equation_restrictions_t equation_restrictions_arg,
                            crossequation_restrictions_t crossequation_restrictions_arg,
@@ -912,12 +912,12 @@ private:
   const string name1;
   const string name2;
   const subsample_declaration_map_t subsample_declaration_map;
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
   SubsamplesStatement(string name1_arg,
                       string name2_arg,
-                      const subsample_declaration_map_t subsample_declaration_map_arg,
-                      SymbolTable symbol_table_arg);
+                      subsample_declaration_map_t subsample_declaration_map_arg,
+                      const SymbolTable &symbol_table_arg);
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeJsonOutput(ostream &output) const override;
@@ -930,13 +930,13 @@ private:
   const string to_name2;
   const string from_name1;
   const string from_name2;
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
   SubsamplesEqualStatement(string to_name1_arg,
                            string to_name2_arg,
                            string from_name1_arg,
                            string from_name2_arg,
-                           SymbolTable symbol_table_arg);
+                           const SymbolTable &symbol_table_arg);
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeJsonOutput(ostream &output) const override;
 };
@@ -948,8 +948,8 @@ private:
   const PriorDistributions prior_shape;
   const OptionsList options_list;
 public:
-  JointPriorStatement(const vector<string> joint_parameters_arg,
-                      const PriorDistributions &prior_shape_arg,
+  JointPriorStatement(vector<string> joint_parameters_arg,
+                      PriorDistributions prior_shape_arg,
                       OptionsList options_list_arg);
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
@@ -970,8 +970,8 @@ protected:
   const OptionsList options_list;
   BasicPriorStatement(string name_arg,
                       string subsample_name_arg,
-                      const PriorDistributions &prior_shape_arg,
-                      const expr_t &variance_arg,
+                      PriorDistributions prior_shape_arg,
+                      expr_t variance_arg,
                       OptionsList options_list_arg);
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void get_base_name(const SymbolType symb_type, string &lhs_field) const;
@@ -994,11 +994,11 @@ protected:
 class PriorStatement : public BasicPriorStatement
 {
 public:
-  PriorStatement(const string &name_arg,
-                 const string &subsample_name_arg,
-                 const PriorDistributions &prior_shape_arg,
-                 const expr_t &variance_arg,
-                 const OptionsList &options_list_arg);
+  PriorStatement(string name_arg,
+                 string subsample_name_arg,
+                 PriorDistributions prior_shape_arg,
+                 expr_t variance_arg,
+                 OptionsList options_list_arg);
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeCOutput(ostream &output, const string &basename) override;
   void writeJsonOutput(ostream &output) const override;
@@ -1007,14 +1007,14 @@ public:
 class StdPriorStatement : public BasicPriorStatement
 {
 private:
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
-  StdPriorStatement(const string &name_arg,
-                    const string &subsample_name_arg,
-                    const PriorDistributions &prior_shape_arg,
-                    const expr_t &variance_arg,
-                    const OptionsList &options_list_arg,
-                    SymbolTable symbol_table_arg);
+  StdPriorStatement(string name_arg,
+                    string subsample_name_arg,
+                    PriorDistributions prior_shape_arg,
+                    expr_t variance_arg,
+                    OptionsList options_list_arg,
+                    const SymbolTable &symbol_table_arg);
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeCOutput(ostream &output, const string &basename) override;
   void writeJsonOutput(ostream &output) const override;
@@ -1024,15 +1024,15 @@ class CorrPriorStatement : public BasicPriorStatement
 {
 private:
   const string name1;
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
-  CorrPriorStatement(const string &name_arg1,
+  CorrPriorStatement(string name_arg1,
                      string name_arg2,
-                     const string &subsample_name_arg,
-                     const PriorDistributions &prior_shape_arg,
-                     const expr_t &variance_arg,
-                     const OptionsList &options_list_arg,
-                     SymbolTable symbol_table_arg);
+                     string subsample_name_arg,
+                     PriorDistributions prior_shape_arg,
+                     expr_t variance_arg,
+                     OptionsList options_list_arg,
+                     const SymbolTable &symbol_table_arg);
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeCOutput(ostream &output, const string &basename) override;
@@ -1050,7 +1050,7 @@ private:
   const string from_name1;
   const string from_name2;
   const string from_subsample_name;
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
   PriorEqualStatement(string to_declaration_type_arg,
                       string to_name1_arg,
@@ -1060,7 +1060,7 @@ public:
                       string from_name1_arg,
                       string from_name2_arg,
                       string from_subsample_name_arg,
-                      SymbolTable symbol_table_arg);
+                      const SymbolTable &symbol_table_arg);
   void get_base_name(const SymbolType symb_type, string &lhs_field) const;
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
@@ -1094,7 +1094,7 @@ protected:
 class OptionsStatement : public BasicOptionsStatement
 {
 public:
-  OptionsStatement(const string &name_arg, const string &subsample_name_arg, const OptionsList &options_list_arg);
+  OptionsStatement(string name_arg, string subsample_name_arg, OptionsList options_list_arg);
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeCOutput(ostream &output, const string &basename) override;
   void writeJsonOutput(ostream &output) const override;
@@ -1103,12 +1103,12 @@ public:
 class StdOptionsStatement : public BasicOptionsStatement
 {
 private:
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
-  StdOptionsStatement(const string &name_arg,
-                      const string &subsample_name_arg,
-                      const OptionsList &options_list_arg,
-                      SymbolTable symbol_table_arg);
+  StdOptionsStatement(string name_arg,
+                      string subsample_name_arg,
+                      OptionsList options_list_arg,
+                      const SymbolTable &symbol_table_arg);
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeCOutput(ostream &output, const string &basename) override;
   void writeJsonOutput(ostream &output) const override;
@@ -1118,12 +1118,12 @@ class CorrOptionsStatement : public BasicOptionsStatement
 {
 private:
   const string name1;
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
-  CorrOptionsStatement(const string &name_arg1, string name_arg2,
-                       const string &subsample_name_arg,
-                       const OptionsList &options_list_arg,
-                       SymbolTable symbol_table_arg);
+  CorrOptionsStatement(string name_arg1, string name_arg2,
+                       string subsample_name_arg,
+                       OptionsList options_list_arg,
+                       const SymbolTable &symbol_table_arg);
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
   void writeCOutput(ostream &output, const string &basename) override;
@@ -1141,7 +1141,7 @@ private:
   const string from_name1;
   const string from_name2;
   const string from_subsample_name;
-  const SymbolTable symbol_table;
+  const SymbolTable &symbol_table;
 public:
   OptionsEqualStatement(string to_declaration_type_arg,
                         string to_name1_arg,
@@ -1151,7 +1151,7 @@ public:
                         string from_name1_arg,
                         string from_name2_arg,
                         string from_subsample_name_arg,
-                        SymbolTable symbol_table_arg);
+                        const SymbolTable &symbol_table_arg);
   void get_base_name(const SymbolType symb_type, string &lhs_field) const;
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
-- 
GitLab