X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/aeb359b3406a57994bc096e4dd2af58e5a6ad159..d8bc3130a6a56c4dee205a5badd0989bf28d3aab:/src/smpi/replace_globals.cocci diff --git a/src/smpi/replace_globals.cocci b/src/smpi/replace_globals.cocci index 5b80e5c2f1..da0e6ab73f 100644 --- a/src/smpi/replace_globals.cocci +++ b/src/smpi/replace_globals.cocci @@ -18,75 +18,111 @@ position p; @@ T@p func(...); -// Define a local variable as one whose declaration is encased in brackets +// define a local variable declaration as one at some level of nesting @localvardecl@ type T; identifier var; position p; expression E; @@ -{ <... -( +( // default case T@p var ; -| +| // variable has initializer T@p var = E ; ) ...> -} -// global variable is one whose declaration is neither local nor a function -// prototype +// define a global variable declaration as one that is neither a function +// prototype nor a local variable declaration @globalvardecl@ type T; identifier var; -position p != { localvardecl.p, funcproto.p }; +position p != { funcproto.p, localvardecl.p }; expression value; // expression size; @@ -( +( // default case T@p - var + *var = SMPI_VARINIT_GLOBAL(var, T) ; -| +| // variable has initializer (not a struct or array) T@p - var = value + *var = SMPI_VARINIT_GLOBAL_AND_SET(var, T, value) ; -//| +//| // array of specified size //T@p // FIXME: matches, but complains if more than one decl on a line... //- var[size] //+ *var[size] = SMPI_VARINIT_GLOBAL_ARRAY(T, size) //; -//| +//| // array of specified size with initializer //T@p // FIXME: how to match initializer? //- var[size] = { ... } //+ *var[] = SMPI_VARINIT_GLOBAL_ARRAY_AND_SET(T, size, { ... }) //; -//| +//| // array without specified size, but with initializer //T@p // FIXME: how to match initializer? how to figure out size? //- var[] = { ... } //+ *var[] = SMPI_VARINIT_GLOBAL_ARRAY_AND_SET(T, size, { ... }) // size = ? //; +//| struct with initializer? ) -@rewritelocalaccess@ +// rewrite access to global variables based on name, but avoid the declaration +// and local variables that might have the same name +@rewriteglobalaccess@ +type T; local idexpression lvar; identifier globalvardecl.var; @@ -{ <... -( +( // local variable lvar -| +| // rewrite access +SMPI_VARGET_GLOBAL( var +) ) ...> -} + +// define a local static variable declaration as one at some level of nesting +// starting with the word static (exceptions?) +@staticvardecl@ +type T; +identifier var; +expression value; +@@ +<... +( // default case +static T +- var ++ *var = SMPI_VARINIT_STATIC(T, var) +; +| // variable has initializer (not a struct or array) +T +- var = value ++ *var = SMPI_VARINIT_STATIC_AND_SET(var, T, value) +; +) +...> + +// +@rewritestaticaccess@ +type T; +identifier staticvardecl.var; +@@ +( // declaration +T +var +; +| // rewrite access ++SMPI_VARGET_STATIC( +var ++) +)