Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Tests/Attributes.c

    r68cd1ce rb1d6dd5  
    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 
    511int @max = 3;
    522
    533int main() {
    544    int x;
    55     type @type(type t);                                                                 // compiler intrinsic
     5    type @type(type t);         // compiler intrinsic
    566    type @widest(type t);
    57     @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
     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 syntax
    6010    y = @max;           
    6111    z = @max(x) + @size(int);
Note: See TracChangeset for help on using the changeset viewer.