source: src/examples/Attributes.c@ 5f5083e

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 5f5083e was ca26509, checked in by Peter A. Buhr <pabuhr@…>, 9 years ago

relocate and delete example programs under Test directory to test/examples directories

  • 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.