keep track of all times an undeclared variable is encountered

issue#70
Houtan Bastani 2016-09-23 15:22:25 +02:00 committed by Stéphane Adjemian (Lupi)
parent a9de8dd0a0
commit ff3b2d0ae3
2 changed files with 8 additions and 0 deletions

View File

@ -359,10 +359,13 @@ ParsingDriver::add_model_variable(string *name)
try
{
symb_id = mod_file->symbol_table.getID(*name);
if (undeclared_model_vars.find(*name) != undeclared_model_vars.end())
model_error("Unknown symbol: " + *name);
}
catch (SymbolTable::UnknownSymbolNameException &e)
{
declare_exogenous(new string (*name));
undeclared_model_vars.insert(*name);
symb_id = mod_file->symbol_table.getID(*name);
}
delete name;
@ -2590,6 +2593,9 @@ ParsingDriver::add_model_var_or_external_function(string *function_name, bool in
}
else
{ // e.g. model_var(lag) => ADD MODEL VARIABLE WITH LEAD (NumConstNode)/LAG (UnaryOpNode)
if (undeclared_model_vars.find(*function_name) != undeclared_model_vars.end())
model_error("Unknown symbol: " + *function_name);
if (stack_external_function_args.top().size() != 1)
error(string("Symbol ") + *function_name + string(" is being treated as if it were a function (i.e., has received more than one argument)."));

View File

@ -184,6 +184,8 @@ private:
//! Temporary storage for current restriction number in svar_identification block
map<int,int> svar_Qi_restriction_nbr;
map<int,int> svar_Ri_restriction_nbr;
//! Stores undeclared model variables
set<string> undeclared_model_vars;
//! Temporary storage for restriction type
enum SvarRestrictionType
{