macroprocessor: stop with error when division by zero is encountered. closes #1278
parent
cc88b7ebdf
commit
e31f0a8d0f
|
@ -9699,8 +9699,11 @@ String literals have to be enclosed between @strong{double} quotes
|
||||||
elements are separated by commas (like @code{[1,2,3]} or @code{["US",
|
elements are separated by commas (like @code{[1,2,3]} or @code{["US",
|
||||||
"EA"]}).
|
"EA"]}).
|
||||||
|
|
||||||
Note that there is no boolean type: @emph{false} is
|
Note that there is no boolean type: @emph{false} is represented by integer zero
|
||||||
represented by integer zero and @emph{true} is any non-null integer.
|
and @emph{true} is any non-null integer. Further note that, as the
|
||||||
|
macro-processor cannot handle non-integer real numbers, integer division
|
||||||
|
results in the quotient with the fractional part truncated (hence,
|
||||||
|
@math{5/3=3/3=1}).
|
||||||
|
|
||||||
The following operators can be used on integers:
|
The following operators can be used on integers:
|
||||||
@itemize
|
@itemize
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2008-2014 Dynare Team
|
* Copyright (C) 2008-2016 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -150,7 +150,12 @@ expr : INTEGER
|
||||||
| expr TIMES expr
|
| expr TIMES expr
|
||||||
{ TYPERR_CATCH($$ = *$1 * *$3, @$); }
|
{ TYPERR_CATCH($$ = *$1 * *$3, @$); }
|
||||||
| expr DIVIDE expr
|
| expr DIVIDE expr
|
||||||
{ TYPERR_CATCH($$ = *$1 / *$3, @$); }
|
{
|
||||||
|
if (dynamic_cast<const IntMV *>($3) != NULL
|
||||||
|
&& ((IntMV *)$3)->get_int_value() == 0)
|
||||||
|
driver.error(@$, "Division by zero");
|
||||||
|
TYPERR_CATCH($$ = *$1 / *$3, @$);
|
||||||
|
}
|
||||||
| expr LESS expr
|
| expr LESS expr
|
||||||
{ TYPERR_CATCH($$ = *$1 < *$3, @$); }
|
{ TYPERR_CATCH($$ = *$1 < *$3, @$); }
|
||||||
| expr GREATER expr
|
| expr GREATER expr
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2008-2013 Dynare Team
|
* Copyright (C) 2008-2016 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -158,6 +158,7 @@ public:
|
||||||
If mv2 < mv1, returns an empty range (for consistency with MATLAB).
|
If mv2 < mv1, returns an empty range (for consistency with MATLAB).
|
||||||
*/
|
*/
|
||||||
static const MacroValue *new_range(MacroDriver &driver, const MacroValue *mv1, const MacroValue *mv2) throw (TypeError);
|
static const MacroValue *new_range(MacroDriver &driver, const MacroValue *mv1, const MacroValue *mv2) throw (TypeError);
|
||||||
|
inline int get_int_value() const { return value; };
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Represents a string value in macro language
|
//! Represents a string value in macro language
|
||||||
|
|
Loading…
Reference in New Issue