Verified Commit 2a9c4b23 authored by Houtan Bastani's avatar Houtan Bastani
Browse files

maintain order of macro variables defined on command line when writing them to the .mod file

Before this commit, a dynare call such as
```
dynare <<mod file>> -Db=“A” -Da=@{b}
```
would not expand the value of `b` in `a` whereas
```
dynare <<mod file>> -Da=“A” -Db=@{a}
```
would expand the value of `a` into `b` because the arguments were stored in a map which printed the `@#define` statements in the .mod file in alphabetic order.
parent 4d287a94
Pipeline #1115 passed with stage
in 1 minute and 30 seconds
......@@ -53,7 +53,7 @@ void main2(stringstream &in, const string &basename, bool debug, bool clear_all,
const boost::filesystem::path &dynareroot, bool onlymodel);
void main1(const string &filename, const string &basename, istream &modfile, bool debug, bool save_macro, string &save_macro_file,
bool no_line_macro, bool no_empty_line_macro, const map<string, string> &defines, const vector<string> &path, stringstream &macro_output);
bool no_line_macro, bool no_empty_line_macro, const vector<pair<string, string>> &defines, const vector<string> &path, stringstream &macro_output);
void
usage()
......@@ -151,7 +151,7 @@ main(int argc, char **argv)
bool minimal_workspace = false;
bool compute_xrefs = false;
bool transform_unary_ops = false;
map<string, string> defines;
vector<pair<string, string>> defines;
vector<string> path;
FileOutputType output_mode{FileOutputType::none};
JsonOutputPointType json{JsonOutputPointType::nojson};
......@@ -269,9 +269,9 @@ main(int argc, char **argv)
auto equal_index = s.find('=');
if (equal_index != string::npos)
defines[s.substr(2, equal_index-2)] = s.substr(equal_index+1);
defines.emplace_back(s.substr(2, equal_index-2), s.substr(equal_index+1));
else
defines[s.substr(2)] = "1";
defines.emplace_back(s.substr(2), "1");
}
else if (s.substr(0, 2) == "-I")
{
......
......@@ -28,7 +28,7 @@ bool compareNewline (int i, int j) {
void
main1(const string &filename, const string &basename, istream &modfile, bool debug, bool save_macro, string &save_macro_file,
bool no_line_macro, bool no_empty_line_macro, const map<string, string> &defines, const vector<string> &path, stringstream &macro_output)
bool no_line_macro, bool no_empty_line_macro, const vector<pair<string, string>> &defines, const vector<string> &path, stringstream &macro_output)
{
// Do macro processing
MacroDriver m;
......
/*
* Copyright (C) 2008-2018 Dynare Team
* Copyright (C) 2008-2019 Dynare Team
*
* This file is part of Dynare.
*
......@@ -28,7 +28,7 @@
void
MacroDriver::parse(const string &file_arg, const string &basename_arg, istream &modfile,
ostream &out, bool debug, bool no_line_macro_arg, map<string, string> defines,
ostream &out, bool debug, bool no_line_macro_arg, const vector<pair<string, string>> &defines,
vector<string> path)
{
file = file_arg;
......
/*
* Copyright (C) 2008-2018 Dynare Team
* Copyright (C) 2008-2019 Dynare Team
*
* This file is part of Dynare.
*
......@@ -227,7 +227,7 @@ public:
//! Starts parsing a file, returns output in out
/*! \param no_line_macro should we omit the @#line statements ? */
void parse(const string &file_arg, const string &basename_arg, istream &modfile, ostream &out, bool debug, bool no_line_macro_arg,
map<string, string> defines, vector<string> path);
const vector<pair<string, string>> &defines, vector<string> path);
//! Name of main file being parsed
string file;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment