source: src/Tests/Attributes.c @ 01b8088d

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsctordeferred_resndemanglerenumforall-pointer-decaygc_noraiijacob/cs343-translationjenkins-sandboxmemorynew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since 01b8088d was 68cd1ce, checked in by Peter A. Buhr <pabuhr@…>, 9 years ago

unify and fix storage class

  • Property mode set to 100644
File size: 1.8 KB
Line 
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
51int @max = 3;
52
53int main() {
54    int x;
55    type @type(type t);                                                                 // compiler intrinsic
56    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
60    y = @max;           
61    z = @max(x) + @size(int);
62    y = @min(3 + 4);
63    if ( @const(x) ) { }
64    if ( @volatile(y) ) { }
65    if ( @extern(y) ) { }
66    if ( @static(y) ) { }
67    @max;
68}
69
70int @foo(int) {
71    return 7;
72}
73
74int @voon;
75double @voon;
76
77int @bort(int);
78int @bort(double);
79
80void g( int );
81
82void f() {
83        float x;
84        double x;
85        @bort(x);
86        @bort(int);
87        g( @voon );
88}
89
90// Local Variables: //
91// tab-width: 4 //
92// End: //
Note: See TracBrowser for help on using the repository browser.