Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d23bacfd3f6fa082634f9ddb9205abaf04fbec08
[simgrid.git] / src / smpi / replace_globals.cocci
1 // FIXME: problems
2 //   - does not want to match dynamic arrays...
3 //   - does not match array initializers
4
5 // Function prototype looks like variable dec, but has parentheses
6 @funcproto@
7 type T;
8 identifier func;
9 position p;
10 @@
11 T@p func(...);
12
13 // Define a local variable as one whose declaration is encased in brackets
14 @localvardecl@
15 type T;
16 identifier var;
17 position p;
18 expression E;
19 @@
20 {
21 <...
22 (
23 T@p
24 var
25 ;
26 |
27 T@p
28 var = E
29 ;
30 )
31 ...>
32 }
33
34 // global variable is one whose declaration is neither local nor a function
35 // prototype
36 @globalvardecl@
37 type T;
38 identifier var;
39 position p != { localvardecl.p, funcproto.p };
40 expression value;
41 constant size;
42 @@
43 (
44 T@p 
45 - var
46 + *var = SMPI_INITIALIZE_GLOBAL(T)
47 ;
48 |
49 T@p
50 - var = value 
51 + *var = SMPI_INITIALIZE_AND_SET_GLOBAL(T, value)
52 ;
53 |
54 T@p
55 - var[]
56 + *var[] = SMPI_INITIALIZE_GLOBAL_ARRAY(T, size)
57 ;
58 |
59 T@p
60 - var[size]
61 + *var[] = SMPI_INITIALIZE_GLOBAL_STATIC_ARRAY(T, size)
62 ;
63 |
64 T@p
65 - var[size] = { ... }
66 + *var[] = SMPI_INITIALIZE_AND_SET_GLOBAL_STATIC_ARRAY(T, size)
67 ;
68 )
69
70 @rewritelocalaccess@
71 local idexpression lvar;
72 identifier globalvardecl.var;
73 @@
74 {
75 <...
76 (
77 lvar
78 |
79 +SMPI_GLOBAL_VAR_LOCAL_ACCESS(
80 var
81 +)
82 )
83 ...>
84 }