Skip to content

Commit

Permalink
Add ability to report more detailed error when import of namespace fa…
Browse files Browse the repository at this point in the history
…iled via special error namespace
  • Loading branch information
jreidinger committed Dec 21, 2016
1 parent 1e4e21d commit 1658ddb
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 1 deletion.
32 changes: 32 additions & 0 deletions liby2/src/Y2Namespace.cc
Expand Up @@ -323,3 +323,35 @@ Y2Namespace::initialize ()
}
}

Y2ErrorNamespace::Y2ErrorNamespace(const std::string & summary, const std::string & details) :
summary_(summary), details_(details)
{}

Y2ErrorNamespace::~Y2ErrorNamespace()
{}

const std::string & Y2ErrorNamespace::summary() const
{
return summary_;
}

const std::string & Y2ErrorNamespace::details() const
{
return details_;
}

YCPValue Y2ErrorNamespace::evaluate (bool cse)
{
return YCPVoid();
}

bool isErrorNamespace(const Y2Namespace * inst)
{
return inst->name() == ERROR_NAMESPACE_NAME;
}

Y2ErrorNamespace * toErrorNamespace(Y2Namespace * inst)
{
return dynamic_cast<Y2ErrorNamespace*>(inst);
}

54 changes: 53 additions & 1 deletion liby2/src/include/y2/Y2Namespace.h
Expand Up @@ -25,6 +25,7 @@
using std::string;

#include "ycp/YCPValue.h"
#include "ycp/YCPVoid.h"
#include "ycp/Type.h"

#include "SymbolEntry.h"
Expand Down Expand Up @@ -132,11 +133,62 @@ class Y2Namespace {

// pop all local variables from stack, uses SymbolEntry::pop()
void popFromStack ();

// ensure that the namespace is initialized
virtual void initialize ();

};

#define ERROR_NAMESPACE_NAME "_ErrorNamespace"
class Y2ErrorNamespace : public Y2Namespace
{
public:

/**
* constructs new namespace in case when error happen
*
* @param summary short summary what error happen
* @param details can be longer details for error like e.g. backtrace
*/
Y2ErrorNamespace(const std::string & summary, const std::string & details);

~Y2ErrorNamespace();

/**
* shot summary what error happen
*/
const std::string & summary() const;

/**
* longer details for error
*/
const std::string & details() const;

const string name () const { return ERROR_NAMESPACE_NAME; }

const string filename () const { return "virtual_error_place"; }

/**
* creating funcition call for error namespace always fail
*/
virtual Y2Function* createFunctionCall (const string name, constFunctionTypePtr type)
{
return NULL;
}

/**
* Does nothing for error namespace
*/
YCPValue evaluate (bool cse = false);

private:

string summary_;

string details_;
};

inline bool isErrorNamespace(const Y2Namespace * inst);
inline Y2ErrorNamespace * toErrorNamespace(Y2Namespace * inst);

#endif // Y2Namespace_h

0 comments on commit 1658ddb

Please sign in to comment.