3:
4: open C_hack;
5: header '#include <iostream>';
6: proc pr[t]:t="std::cout<<$1<<std::endl;";
7:
8: var x = 1;
9: var px:ptr[int] = addr x;
10:
11: module X {
12: proc h[t,u=ptr[t]]: u * t = '*$1=$2; std::cout <<*$1<<","<<$2<<std::endl;';
13: h(px,1);
14:
15:
16:
17:
18:
19: fun adr[t,u=ptr[t]]: lvalue[t]->u = "&$1";
20: fun drf[t,u=ptr[t]]: u -> t = "*$1";
21:
22: }
23:
24: open X[int];
25: h(px,1);
26:
27:
28: pr$ drf px;
29: pr$ drf$ adr x;
30: pr$ X::drf px;
31: pr$ X::drf$ X::adr x;
32:
33: fun ff[t,k where t==k ]: t * k -> t = "$1+$2";
34:
35: pr$ ff$ 1,2;
36: