/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "simgrid/Exception.hpp"
#include "simgrid/kernel/routing/NetPoint.hpp"
#include "simgrid/s4u/Engine.hpp"
#include "simgrid/sg_config.hpp"
/*
* Helping functions
*/
-void surf_parse_assert(bool cond, const std::string& msg)
+void surf_parse_assert(bool cond, std::string&& msg)
{
- if (not cond) {
- int lineno = surf_parse_lineno;
- cleanup();
- XBT_ERROR("Parse error at %s:%d: %s", surf_parsed_filename.c_str(), lineno, msg.c_str());
- surf_exit();
- xbt_die("Exiting now");
- }
+ if (not cond)
+ surf_parse_error(std::move(msg));
}
-void surf_parse_error(const std::string& msg)
+void surf_parse_error(std::string&& msg)
{
- int lineno = surf_parse_lineno;
- cleanup();
- XBT_ERROR("Parse error at %s:%d: %s", surf_parsed_filename.c_str(), lineno, msg.c_str());
- surf_exit();
- xbt_die("Exiting now");
+ throw simgrid::ParseError(surf_parse_lineno, surf_parsed_filename, std::move(msg));
}
void surf_parse_assert_netpoint(const std::string& hostname, const std::string& pre, const std::string& post)
break;
}
}
- surf_parse_error(msg);
+ surf_parse_error(std::move(msg));
}
double surf_parse_get_double(const std::string& s)
}
/* Call the lexer to parse the currently opened file */
-int surf_parse()
+void surf_parse()
{
- return surf_parse_lex();
+ bool err = surf_parse_lex();
+ surf_parse_assert(not err, "Flex returned an error code");
}