Changes in src/prelude/builtins.c [88e79ad:36982fc]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/prelude/builtins.c
r88e79ad r36982fc 16 16 // exception implementation 17 17 18 typedef unsigned long long __cfaabi_ exception_type_t;18 typedef unsigned long long __cfaabi_abi_exception_type_t; 19 19 20 20 #include "../libcfa/virtual.h" … … 80 80 } // ?\? 81 81 82 static inline forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); double ?/?( double, T ); } ) 83 double ?\?( T x, signed long int y ) { 84 if ( y >= 0 ) return (double)(x \ (unsigned long int)y); 85 else return 1.0 / x \ (unsigned long int)(-y); 86 } // ?\? 82 // FIXME (x \ (unsigned long int)y) relies on X ?\?(T, unsigned long) a function that is neither 83 // defined, nor passed as an assertion parameter. Without user-defined conversions, cannot specify 84 // X as a type that casts to double, yet it doesn't make sense to write functions with that type 85 // signature where X is double. 86 87 // static inline forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); double ?/?( double, T ); } ) 88 // double ?\?( T x, signed long int y ) { 89 // if ( y >= 0 ) return (double)(x \ (unsigned long int)y); 90 // else return 1.0 / x \ (unsigned long int)(-y); 91 // } // ?\? 87 92 88 93 static inline long int ?\=?( long int & x, unsigned long int y ) { x = x \ y; return x; } … … 91 96 static inline unsigned int ?\=?( unsigned int & x, unsigned long int y ) { x = x \ y; return x; } 92 97 93 // type that wraps a pointer and a destructor-like function - used in generating implicit destructor calls for struct members in user-defined functions94 forall(dtype T)95 struct __Destructor {96 T * object;97 void (*dtor)(T *);98 };99 100 // defined destructor in the case that non-generated code wants to use __Destructor101 forall(dtype T)102 static inline void ^?{}(__Destructor(T) & x) {103 x.dtor(x.object);104 }105 106 // easy interface into __Destructor's destructor for easy codegen purposes107 extern "C" {108 forall(dtype T)109 static inline void __destroy_Destructor(__Destructor(T) * dtor) {110 ^(*dtor){};111 }112 }113 114 98 // Local Variables: // 115 99 // mode: c //
Note:
See TracChangeset
for help on using the changeset viewer.