Skip to content
Snippets Groups Projects
Verified Commit 54c91f6c authored by Houtan Bastani's avatar Houtan Bastani
Browse files

simplify parsing of MATLAB command line arguments

closes #1696

includes preprocessor changes
- macro processor: simplify handling of `@#define`

(cherry picked from commit d527096e)

# Conflicts:
#	preprocessor
parent 3847df21
Branches
Tags
1 merge request!1815WIP Cherry-picks for 4.6
Pipeline #3017 passed
......@@ -338,9 +338,20 @@ by the ``dynare`` command.
.. option:: -DMACRO_VARIABLE=MACRO_EXPRESSION
Defines a macro-variable from the command line (the same
effect as using the Macro directive ``@#define`` in a model
file, see :ref:`macro-proc-lang`).
Defines a macro-variable from the command line (the same effect as
using the Macro directive ``@#define`` in a model file, see
:ref:`macro-proc-lang`). Note that when passing a MACRO_EXPRESSION that
contains a space, you must surround the entire ``-D`` flag with single
quotes, as in the following example. Also note that an expression
passed on the command line can reference variables defined before it.
*Example*
Call dynare with command line defines
.. code-block:: matlab
>> dynare <<modfile.mod>> -DA=true '-DB="A string with space"' -DC=[1,2,3] '-DD=[ i in C when i > 1 ]'
.. option:: -I<<path>>
......
......@@ -213,7 +213,18 @@ end
command = ['"' dynareroot 'preprocessor' arch_ext filesep 'dynare_m" ' fname] ;
command = [ command ' mexext=' mexext ' "matlabroot=' matlabroot '"'];
if ~isempty(varargin)
dynare_varargin = strjoin(varargin);
if ispc
varargincopy = varargin;
for i = 1:length(varargincopy)
if varargincopy{i}(end) == '\'
varargincopy{i} = [varargincopy{i} '\'];
end
end
varargincopy = strrep(varargincopy, '"', '\"');
dynare_varargin = ['"' strjoin(varargincopy, '" "') '"'];
else
dynare_varargin = ['''' strjoin(varargin, ''' ''') ''''];
end
command = [command ' ' dynare_varargin];
end
......
Subproject commit e137b2df62b33731e1cc0cbad052e43eaa5a8836
Subproject commit e13e5a3244f70789fcbf743aefaabbf9b4fee523
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment