| Server IP : 217.160.0.135 / Your IP : 216.73.217.117 Web Server : Apache System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64 User : sws1074145052 ( 1074145052) PHP Version : 8.3.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /lib/python3/dist-packages/pythran/pythonic/include/types/ |
Upload File : |
#ifndef PYTHONIC_INCLUDE_TYPES_EXCEPTIONS_HPP
#define PYTHONIC_INCLUDE_TYPES_EXCEPTIONS_HPP
#include "pythonic/include/types/str.hpp"
#include "pythonic/include/types/dynamic_tuple.hpp"
#include "pythonic/include/types/attr.hpp"
#include "pythonic/include/builtins/str.hpp"
#include <stdexcept>
PYTHONIC_NS_BEGIN
namespace types
{
class BaseException : public std::exception
{
public:
BaseException(const BaseException &e) = default;
template <typename... Types>
BaseException(Types const &... types);
virtual ~BaseException() noexcept = default;
dynamic_tuple<str> args;
};
// Use this to create a python exception class
#define CLASS_EXCEPTION_DECL(name, parent) \
class name : public parent \
{ \
public: \
name() = default; \
name(const name &e) = default; \
template <class... Types> \
name(Types const &... types) \
: parent(types...) \
{ \
} \
virtual ~name() noexcept = default; \
};
CLASS_EXCEPTION_DECL(SystemExit, BaseException);
CLASS_EXCEPTION_DECL(KeyboardInterrupt, BaseException);
CLASS_EXCEPTION_DECL(GeneratorExit, BaseException);
CLASS_EXCEPTION_DECL(Exception, BaseException);
CLASS_EXCEPTION_DECL(StopIteration, Exception);
CLASS_EXCEPTION_DECL(StandardError, Exception);
CLASS_EXCEPTION_DECL(Warning, Exception);
CLASS_EXCEPTION_DECL(BytesWarning, Warning);
CLASS_EXCEPTION_DECL(UnicodeWarning, Warning);
CLASS_EXCEPTION_DECL(ImportWarning, Warning);
CLASS_EXCEPTION_DECL(FutureWarning, Warning);
CLASS_EXCEPTION_DECL(UserWarning, Warning);
CLASS_EXCEPTION_DECL(SyntaxWarning, Warning);
CLASS_EXCEPTION_DECL(RuntimeWarning, Warning);
CLASS_EXCEPTION_DECL(PendingDeprecationWarning, Warning);
CLASS_EXCEPTION_DECL(DeprecationWarning, Warning);
CLASS_EXCEPTION_DECL(BufferError, StandardError);
CLASS_EXCEPTION_DECL(FileNotFoundError, StandardError);
CLASS_EXCEPTION_DECL(ArithmeticError, StandardError);
CLASS_EXCEPTION_DECL(AssertionError, StandardError);
CLASS_EXCEPTION_DECL(AttributeError, StandardError);
CLASS_EXCEPTION_DECL(EnvironmentError, StandardError);
CLASS_EXCEPTION_DECL(EOFError, StandardError);
CLASS_EXCEPTION_DECL(ImportError, StandardError);
CLASS_EXCEPTION_DECL(LookupError, StandardError);
CLASS_EXCEPTION_DECL(MemoryError, StandardError);
CLASS_EXCEPTION_DECL(NameError, StandardError);
CLASS_EXCEPTION_DECL(ReferenceError, StandardError);
CLASS_EXCEPTION_DECL(RuntimeError, StandardError);
CLASS_EXCEPTION_DECL(SyntaxError, StandardError);
CLASS_EXCEPTION_DECL(SystemError, StandardError);
CLASS_EXCEPTION_DECL(TypeError, StandardError);
CLASS_EXCEPTION_DECL(ValueError, StandardError);
CLASS_EXCEPTION_DECL(FloatingPointError, ArithmeticError);
CLASS_EXCEPTION_DECL(OverflowError, ArithmeticError);
CLASS_EXCEPTION_DECL(ZeroDivisionError, ArithmeticError);
CLASS_EXCEPTION_DECL(IOError, EnvironmentError);
CLASS_EXCEPTION_DECL(OSError, EnvironmentError);
CLASS_EXCEPTION_DECL(WindowsError, OSError);
CLASS_EXCEPTION_DECL(VMSError, OSError);
CLASS_EXCEPTION_DECL(IndexError, LookupError);
CLASS_EXCEPTION_DECL(KeyError, LookupError);
CLASS_EXCEPTION_DECL(UnboundLocalError, NameError);
CLASS_EXCEPTION_DECL(NotImplementedError, RuntimeError);
CLASS_EXCEPTION_DECL(IndentationError, SyntaxError);
CLASS_EXCEPTION_DECL(TabError, IndentationError);
CLASS_EXCEPTION_DECL(UnicodeError, ValueError);
}
PYTHONIC_NS_END
#include "pythonic/include/utils/functor.hpp"
#define PYTHONIC_EXCEPTION_DECL(name) \
template <typename... Types> \
types::name name(Types const &... args); \
\
DEFINE_FUNCTOR(pythonic::builtins, name);
/* pythran attribute system { */
#define DECLARE_EXCEPTION_GETATTR(name) \
PYTHONIC_NS_BEGIN \
namespace builtins \
{ \
types::none<types::dynamic_tuple<types::str>> \
getattr(types::attr::ARGS, types::name const &f); \
} \
PYTHONIC_NS_END
#define DECLARE_EXCEPTION_GETATTR_FULL(name) \
PYTHONIC_NS_BEGIN \
namespace builtins \
{ \
types::none<types::dynamic_tuple<types::str>> \
getattr(types::attr::ARGS, types::name const &e); \
types::none<types::str> getattr(types::attr::ERRNO, types::name const &e); \
types::none<types::str> getattr(types::attr::STRERROR, \
types::name const &e); \
types::none<types::str> getattr(types::attr::FILENAME, \
types::name const &e); \
} \
PYTHONIC_NS_END
DECLARE_EXCEPTION_GETATTR(BaseException);
DECLARE_EXCEPTION_GETATTR(SystemExit);
DECLARE_EXCEPTION_GETATTR(KeyboardInterrupt);
DECLARE_EXCEPTION_GETATTR(GeneratorExit);
DECLARE_EXCEPTION_GETATTR(Exception);
DECLARE_EXCEPTION_GETATTR(StopIteration);
DECLARE_EXCEPTION_GETATTR(StandardError);
DECLARE_EXCEPTION_GETATTR(Warning);
DECLARE_EXCEPTION_GETATTR(BytesWarning);
DECLARE_EXCEPTION_GETATTR(UnicodeWarning);
DECLARE_EXCEPTION_GETATTR(ImportWarning);
DECLARE_EXCEPTION_GETATTR(FutureWarning);
DECLARE_EXCEPTION_GETATTR(UserWarning);
DECLARE_EXCEPTION_GETATTR(SyntaxWarning);
DECLARE_EXCEPTION_GETATTR(RuntimeWarning);
DECLARE_EXCEPTION_GETATTR(PendingDeprecationWarning);
DECLARE_EXCEPTION_GETATTR(DeprecationWarning);
DECLARE_EXCEPTION_GETATTR(BufferError);
DECLARE_EXCEPTION_GETATTR(FileNotFoundError);
DECLARE_EXCEPTION_GETATTR(ArithmeticError);
DECLARE_EXCEPTION_GETATTR(AssertionError);
DECLARE_EXCEPTION_GETATTR(AttributeError);
DECLARE_EXCEPTION_GETATTR(EOFError);
DECLARE_EXCEPTION_GETATTR(ImportError);
DECLARE_EXCEPTION_GETATTR(LookupError);
DECLARE_EXCEPTION_GETATTR(MemoryError);
DECLARE_EXCEPTION_GETATTR(NameError);
DECLARE_EXCEPTION_GETATTR(ReferenceError);
DECLARE_EXCEPTION_GETATTR(RuntimeError);
DECLARE_EXCEPTION_GETATTR(SyntaxError);
DECLARE_EXCEPTION_GETATTR(SystemError);
DECLARE_EXCEPTION_GETATTR(TypeError);
DECLARE_EXCEPTION_GETATTR(ValueError);
DECLARE_EXCEPTION_GETATTR(FloatingPointError);
DECLARE_EXCEPTION_GETATTR(OverflowError);
DECLARE_EXCEPTION_GETATTR(ZeroDivisionError);
DECLARE_EXCEPTION_GETATTR(IndexError);
DECLARE_EXCEPTION_GETATTR(KeyError);
DECLARE_EXCEPTION_GETATTR(UnboundLocalError);
DECLARE_EXCEPTION_GETATTR(NotImplementedError);
DECLARE_EXCEPTION_GETATTR(IndentationError);
DECLARE_EXCEPTION_GETATTR(TabError);
DECLARE_EXCEPTION_GETATTR(UnicodeError);
DECLARE_EXCEPTION_GETATTR_FULL(IOError);
DECLARE_EXCEPTION_GETATTR_FULL(EnvironmentError);
DECLARE_EXCEPTION_GETATTR_FULL(OSError);
PYTHONIC_NS_BEGIN
namespace types
{
std::ostream &operator<<(std::ostream &o, BaseException const &e);
/* @brief Convert EnvironmentError to a string.
*
* The number of arguments used when creating the EnvironmentError impact
* the resulting "type" || formatting of the chain. We aim to mimic python
* behavior of course:
* - only one arg, then assume it can be converted to string,
* - two args, then the first one is the errno, the next one a string,
* - three args, like two args, adding "filename" as third one (after ':')
* - four || more args, the "tuple" used to construct the exception
*
*/
std::ostream &operator<<(std::ostream &o, EnvironmentError const &e);
}
PYTHONIC_NS_END
/* } */
#endif