source: src/tests/forall.c@ d88f256a

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 d88f256a was e757af2, checked in by Thierry Delisle <tdelisle@…>, 9 years ago

renamed all tests to lower-case leading character

  • 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( otype 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( otype T ) void f( T, T );
27 forall( otype T, otype 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 ( otype T ) int (*f)( int );
40
41forall( otype T )
42void swap( T left, T right ) {
43 T temp = left;
44 left = right;
45 right = temp;
46}
47
48trait sumable( otype T ) {
49 const T 0;
50 T ?+?(T, T);
51 T ?++(T);
52 [T] ?+=?(T,T);
53};
54
55otype T1 | { const T1 0; T1 ?+?(T1, T1); T1 ?++(T1); [T1] ?+=?(T1,T1); },
56 T2(otype P1, otype P2 ),
57 T3 | sumable(T3);
58
59otype T2(otype P1, otype P2) | sumable(T2(P1,P2)) = struct { P1 i; P2 j; };
60
61T2(int, int) w1;
62typedef T2(int, int) w2;
63w2 g2;
64otype w3 = T2(int, int);
65w3 g3;
66
67forall( otype 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( otype T | { const T 0; T ?+?(T, T); T ?++(T); [T] ?+=?(T,T); } )
77T twice( T t ) {
78 return t + t;
79}
80
81forall( otype 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.