source: examples/Attributes.c @ 3f840e3

ADTarm-ehast-experimentalcleanup-dtorsenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 3f840e3 was bf71cfd, checked in by Thierry Delisle <tdelisle@…>, 6 years ago

Moved up many directories in source

  • 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 otype
9//
10//    @max( int )
11//
12// 3. constraining a otype variable; the application is implicitly performed at the call site as in (2)
13//
14//    forall( otype 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 otype
26//
27//    (*attr_var)( int )
28//
29// 3. a direct application to a otype 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( otype T | constraint( T ) ) int @attr( T );
50
51int @max = 3;
52
53int main() {
54    int x;
55    otype @otype(otype t);                                                                      // compiler intrinsic
56    otype @widest(otype t);
57    @otype(x) *y;                                                                               // gcc: otypeof(x) *y;
58//    const @widest(double) *w;                                                 // gcc: const otypeof(x) *w;
59//    * @otype(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.