source: src/Tests/Attributes.c@ 3cfe27f

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors ctor deferred_resn demangler enum forall-pointer-decay gc_noraii jacob/cs343-translation jenkins-sandbox memory new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new string with_gc
Last change on this file since 3cfe27f was 68cd1ce, checked in by Peter A. Buhr <pabuhr@…>, 10 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.