source: src/Tests/Forall.c @ a73d57a

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

fix parsing error for EOF message, change cfa-ccp -x flag to -v, regression testing third attempt: consolidate example programs

  • Property mode set to 100644
File size: 1.6 KB
Line 
1int ?=?( int*, int );
2float ?=?( float*, float );
3int * ?=?( int **, int * );
4float * ?=?( float **, float * );
5char ?=?( char*, char );
6void (* ?=?( void (**)(void), void (*)(void) ))(void);
7
8void g1() {
9        forall( type T ) T f( T );
10        void f( int );
11        void h( void (*p)(void) );
12 
13        int x;
14        void (*y)(void);
15        char z;
16        float w;
17 
18        f( x );
19        f( y );
20        f( z );
21        f( w );
22        h( f( y ) );
23}
24
25void g2() {
26        forall( type T ) void f( T, T );
27        forall( type T, type U ) void f( T, U );
28 
29        int x;
30        float y;
31        int *z;
32        float *w;
33 
34        f( x, y );
35        f( z, w );
36        f( x, z );
37}
38
39typedef forall ( type T ) int (*f)( int );
40
41forall( type T )
42void swap( T left, T right ) {
43        T temp = left;
44        left = right;
45        right = temp;
46}
47
48context sumable( type T ) {
49        const T 0;
50        T ?+?(T, T);
51        T ?++(T);
52        [T] ?+=?(T,T);
53};
54
55type T1 | { const T1 0; T1 ?+?(T1, T1); T1 ?++(T1); [T1] ?+=?(T1,T1); },
56        T2(type P1, type P2 ),
57        T3 | sumable(T3);
58
59type T2(type P1, type P2) | sumable(T2(P1,P2)) = struct { P1 i; P2 j; };
60
61T2(int, int) w1;
62typedef T2(int, int) w2;
63w2 g2;
64type w3 = T2(int, int);
65w3 g3;
66
67forall( type T | sumable( T ) )
68T sum( int n, T a[] ) {
69        T total = 0;
70        int i;
71        for ( i = 0; i < n; i += 1 )
72                total = total + a[i];
73        return total;
74}
75
76forall( type T | { const T 0; T ?+?(T, T); T ?++(T); [T] ?+=?(T,T); } )
77T twice( T t ) {
78        return t + t;
79}
80
81forall( type T | { const T 0; int ?!=?(T, T); int ?<?(T, T); } )
82T min( T t1, T t2 ) {
83        return t1 < t2 ? t1 : t2;
84}
85
86int main() {
87        int x = 1, y = 2, a[10];
88        float f;
89
90        swap( x, y );
91        twice( x );
92        f = min( 4.0, 3.0 );
93        sum( 10, a );
94}
95
96// Local Variables: //
97// tab-width: 4 //
98// End: //
Note: See TracBrowser for help on using the repository browser.