Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/exception.hfa

    r8fc9a5f r1c01c58  
    9595// visible anywhere you use the instantiation of the exception is used.
    9696#define POLY_VTABLE_DECLARATION(exception_name, ...) \
    97         VTABLE_TYPE(exception_name)(__VA_ARGS__) const & get_exception_vtable(exception_name(__VA_ARGS__) *); \
     97        void mark_exception(exception_name(__VA_ARGS__) *); \
    9898        extern VTABLE_TYPE(exception_name)(__VA_ARGS__) VTABLE_NAME(exception_name)
    9999
     
    125125#define VTABLE_ASSERTION(exception_name, parameters) \
    126126        { VTABLE_TYPE(exception_name) parameters VTABLE_NAME(exception_name); }
    127 
    128 // IS_EXCEPTION(exception_name [, (...parameters)])
    129 // IS_RESUMPTION_EXCEPTION(exception_name [, (parameters...)])
    130 // IS_TERMINATION_EXCEPTION(exception_name [, (parameters...)])
    131 // Create an assertion that exception_name, possibly with the qualifing parameters, is the given
    132 // kind of exception with the standard vtable with the same parameters if applicable.
    133 #define IS_EXCEPTION(...) _IS_EXCEPTION(is_exception, __VA_ARGS__, , ~)
    134 #define IS_RESUMPTION_EXCEPTION(...) _IS_EXCEPTION(is_resumption_exception, __VA_ARGS__, , ~)
    135 #define IS_TERMINATION_EXCEPTION(...) _IS_EXCEPTION(is_termination_exception, __VA_ARGS__, , ~)
    136127
    137128// All internal helper macros begin with an underscore.
     
    169160
    170161#define _FORALL_CTOR0_DECLARATION(exception_name, assertions, parameters) \
    171         forall(_UNPACK assertions | \
    172                 is_exception(exception_name parameters, VTABLE_TYPE(exception_name) parameters)) \
     162        forall(_UNPACK assertions | VTABLE_ASSERTION(exception_name, parameters) ) \
    173163        void ?{}(exception_name parameters & this)
    174164
    175165#define _FORALL_CTOR0_INSTANCE(exception_name, assertions, parameters) \
    176166        _FORALL_CTOR0_DECLARATION(exception_name, assertions, parameters) { \
    177                 (this).virtual_table = &get_exception_vtable(&this); \
     167                VTABLE_INIT(this, exception_name); \
    178168        }
    179169
     
    195185#define _VTABLE_DECLARATION(exception_name, parent_name, ...) \
    196186        struct exception_name; \
     187        void mark_exception(exception_name *); \
    197188        VTABLE_TYPE(exception_name); \
    198         VTABLE_TYPE(exception_name) const & get_exception_vtable(exception_name *); \
    199189        extern VTABLE_TYPE(exception_name) VTABLE_NAME(exception_name); \
    200190        VTABLE_TYPE(exception_name) { \
     
    207197
    208198#define _VTABLE_INSTANCE(exception_name, parent_name, ...) \
    209         VTABLE_TYPE(exception_name) const & get_exception_vtable(exception_name *) { \
    210                 return VTABLE_NAME(exception_name); \
    211         } \
     199        void mark_exception(exception_name *) {} \
    212200        void _GLUE2(exception_name,_copy)(exception_name * this, exception_name * other) { \
    213201                *this = *other; \
     
    230218
    231219#define _POLY_VTABLE_INSTANCE(exception_name, parent_name, ...) \
    232         extern VTABLE_TYPE(exception_name)(__VA_ARGS__) VTABLE_NAME(exception_name); \
    233         VTABLE_TYPE(exception_name)(__VA_ARGS__) const & get_exception_vtable( \
    234                         exception_name(__VA_ARGS__) *) { \
    235                 return VTABLE_NAME(exception_name); \
    236         } \
     220        void mark_exception(exception_name(__VA_ARGS__) *) {} \
    237221        void _GLUE2(exception_name,_copy)( \
    238222                        exception_name(__VA_ARGS__) * this, exception_name(__VA_ARGS__) * other) { \
     
    243227                _GLUE2(exception_name,_copy), ^?{}, \
    244228                _CLOSE
    245 
    246 #define _IS_EXCEPTION(kind, exception_name, parameters, ...) \
    247         kind(exception_name parameters, VTABLE_TYPE(exception_name) parameters)
Note: See TracChangeset for help on using the changeset viewer.