1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-09 21:50:45 +01:00

Hadrons: new exceptions which can save a integer

This commit is contained in:
Antonin Portelli 2018-07-26 16:47:25 +01:00
parent a8a15dd9d0
commit 80de748737
2 changed files with 48 additions and 13 deletions

View File

@ -34,30 +34,38 @@ See the full license in the file "LICENSE" in the top level distribution directo
#define ERR_SUFF " (" + loc + ")" #define ERR_SUFF " (" + loc + ")"
#endif #endif
#define CONST_EXC(name, init) \ #define CTOR_EXC(name, init) \
name::name(std::string msg, std::string loc)\ name::name(std::string msg, std::string loc)\
:init\ :init\
{} {}
#define CTOR_EXC_REF(name, init) \
name::name(std::string msg, std::string loc, const unsigned int address)\
:init\
{}
using namespace Grid; using namespace Grid;
using namespace Hadrons; using namespace Hadrons;
using namespace Exceptions; using namespace Exceptions;
// logic errors // logic errors
CONST_EXC(Logic, logic_error(msg + ERR_SUFF)) CTOR_EXC(Logic, logic_error(msg + ERR_SUFF))
CONST_EXC(Definition, Logic("definition error: " + msg, loc)) CTOR_EXC(Definition, Logic("definition error: " + msg, loc))
CONST_EXC(Implementation, Logic("implementation error: " + msg, loc)) CTOR_EXC(Implementation, Logic("implementation error: " + msg, loc))
CONST_EXC(Range, Logic("range error: " + msg, loc)) CTOR_EXC(Range, Logic("range error: " + msg, loc))
CONST_EXC(Size, Logic("size error: " + msg, loc)) CTOR_EXC(Size, Logic("size error: " + msg, loc))
// runtime errors // runtime errors
CONST_EXC(Runtime, runtime_error(msg + ERR_SUFF)) CTOR_EXC(Runtime, runtime_error(msg + ERR_SUFF))
CONST_EXC(Argument, Runtime("argument error: " + msg, loc)) CTOR_EXC(Argument, Runtime("argument error: " + msg, loc))
CONST_EXC(Io, Runtime("IO error: " + msg, loc)) CTOR_EXC(Io, Runtime("IO error: " + msg, loc))
CONST_EXC(Memory, Runtime("memory error: " + msg, loc)) CTOR_EXC(Memory, Runtime("memory error: " + msg, loc))
CONST_EXC(Parsing, Runtime("parsing error: " + msg, loc)) CTOR_EXC(Parsing, Runtime("parsing error: " + msg, loc))
CONST_EXC(Program, Runtime("program error: " + msg, loc)) CTOR_EXC(Program, Runtime("program error: " + msg, loc))
CONST_EXC(System, Runtime("system error: " + msg, loc)) CTOR_EXC(System, Runtime("system error: " + msg, loc))
// virtual machine errors
CTOR_EXC_REF(ObjectDefinition, RuntimeRef("object definition error: " + msg, loc, address));
// abort functions // abort functions
void Grid::Hadrons::Exceptions::abort(const std::exception& e) void Grid::Hadrons::Exceptions::abort(const std::exception& e)

View File

@ -39,6 +39,9 @@ See the full license in the file "LICENSE" in the top level distribution directo
#define HADRONS_ERROR(exc, msg)\ #define HADRONS_ERROR(exc, msg)\
throw(Exceptions::exc(msg, HADRONS_SRC_LOC)); throw(Exceptions::exc(msg, HADRONS_SRC_LOC));
#define HADRONS_ERROR_REF(exc, msg, address)\
throw(Exceptions::exc(msg, HADRONS_SRC_LOC, address));
#define DECL_EXC(name, base) \ #define DECL_EXC(name, base) \
class name: public base\ class name: public base\
{\ {\
@ -46,6 +49,13 @@ public:\
name(std::string msg, std::string loc);\ name(std::string msg, std::string loc);\
} }
#define DECL_EXC_REF(name, base) \
class name: public base\
{\
public:\
name(std::string msg, std::string loc, const unsigned int address);\
}
BEGIN_HADRONS_NAMESPACE BEGIN_HADRONS_NAMESPACE
namespace Exceptions namespace Exceptions
@ -66,6 +76,23 @@ namespace Exceptions
DECL_EXC(Program, Runtime); DECL_EXC(Program, Runtime);
DECL_EXC(System, Runtime); DECL_EXC(System, Runtime);
// virtual machine errors
class RuntimeRef: public Runtime
{
public:
RuntimeRef(std::string msg, std::string loc, const unsigned int address)
: Runtime(msg, loc), address_(address)
{}
unsigned int getAddress(void) const
{
return address_;
}
private:
unsigned int address_;
};
DECL_EXC_REF(ObjectDefinition, RuntimeRef);
// abort functions // abort functions
void abort(const std::exception& e); void abort(const std::exception& e);
} }