Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/prelude/builtins.c

    rbf71cfd rb867278  
    1010// Created On       : Fri Jul 21 16:21:03 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb  8 12:47:59 2018
    13 // Update Count     : 19
     12// Last Modified On : Sun Aug  5 21:40:38 2018
     13// Update Count     : 20
    1414//
     15
     16// type that wraps a pointer and a destructor-like function - used in generating implicit destructor calls for struct members in user-defined functions
     17// Note: needs to occur early, because it is used to generate destructor calls during code generation
     18forall(dtype T)
     19struct __Destructor {
     20        T * object;
     21        void (*dtor)(T *);
     22};
     23
     24// defined destructor in the case that non-generated code wants to use __Destructor
     25forall(dtype T)
     26static inline void ^?{}(__Destructor(T) & x) {
     27        if (x.object && x.dtor) {
     28                x.dtor(x.object);
     29        }
     30}
     31
     32// easy interface into __Destructor's destructor for easy codegen purposes
     33extern "C" {
     34        forall(dtype T)
     35        static inline void __destroy_Destructor(__Destructor(T) * dtor) {
     36                ^(*dtor){};
     37        }
     38}
    1539
    1640// exception implementation
     
    2246
    2347void exit( int status, const char fmt[], ... ) __attribute__ (( format(printf, 2, 3), __nothrow__, __leaf__, __noreturn__ ));
    24 void abort ( const char fmt[], ... ) __attribute__ (( format(printf, 1, 2), __nothrow__, __leaf__, __noreturn__ ));
     48void abort( const char fmt[], ... ) __attribute__ (( format(printf, 1, 2), __nothrow__, __leaf__, __noreturn__ ));
    2549
    2650// increment/decrement unification
Note: See TracChangeset for help on using the changeset viewer.