Changes in src/Tests/Attributes.c [b1d6dd5:68cd1ce]
- File:
-
- 1 edited
-
src/Tests/Attributes.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Tests/Attributes.c
rb1d6dd5 r68cd1ce 1 // I Compile-time resolution 2 // ========================= 3 // 4 // 1. an isolated name, where the argument is implicitly determined by the result context 5 // 6 // @max 7 // 8 // 2. a direct application to a manifest type 9 // 10 // @max( int ) 11 // 12 // 3. constraining a type variable; the application is implicitly performed at the call site as in (2) 13 // 14 // forall( type T | { T @max( T ); } ) T x( T t ); 15 // 16 // 17 // II Run-time resolution 18 // ====================== 19 // 20 // 1. an indirect reference, where the argument is implicitly determined by the result context 21 // 22 // attr_var = &@max; 23 // x = (*attr_var); 24 // 25 // 2. an indirect application to a manifest type 26 // 27 // (*attr_var)( int ) 28 // 29 // 3. a direct application to a type variable 30 // 31 // @max( T ) 32 // 33 // Under what circumstances can this be done at compile/link time? 34 // 35 // 36 // III Declaration forms 37 // ===================== 38 // 39 // 1. monomorphic with implicit argument 40 // 41 // int @max; 42 // 43 // 2. monomorphic with explicit argument 44 // 45 // int @max( int ); 46 // 47 // 3. polymorphic 48 // 49 // forall( type T | constraint( T ) ) int @attr( T ); 50 1 51 int @max = 3; 2 52 3 53 int main() { 4 54 int x; 5 type @type(type t); // compiler intrinsic55 type @type(type t); // compiler intrinsic 6 56 type @widest(type t); 7 @type(x) *y; // gcc: typeof(x) *y;8 const @widest(double) *w; // gcc: const typeof(x) *w;9 * @type(3 + 4) z; // cfa declaration syntax57 @type(x) *y; // gcc: typeof(x) *y; 58 const @widest(double) *w; // gcc: const typeof(x) *w; 59 * @type(3 + 4) z; // cfa declaration syntax 10 60 y = @max; 11 61 z = @max(x) + @size(int);
Note:
See TracChangeset
for help on using the changeset viewer.