+// FIXME: problems
+// - does not want to match dynamic arrays...
+// - does not match array initializers
+
// Function prototype looks like variable dec, but has parentheses
@funcproto@
type T;
-identifier f;
+identifier func;
position p;
@@
-T f@p(...);
+T@p func(...);
// Define a local variable as one whose declaration is encased in brackets
@localvardecl@
type T;
-identifier a;
+identifier var;
position p;
expression E;
@@
{
<...
(
- T a@p;
+T@p
+var
+;
|
- T a@p = E;
+T@p
+var = E
+;
)
...>
}
// prototype
@globalvardecl@
type T;
-identifier b;
+identifier var;
position p != { localvardecl.p, funcproto.p };
-expression E;
+expression value;
+constant size;
@@
(
-T
-b@p
-+ = SMPI_INITIALIZE_GLOBAL(b, T)
+T@p
+- var
++ *var = SMPI_INITIALIZE_GLOBAL(T)
;
|
-T
-b@p =
-+ SMPI_INITIALIZE_AND_SET_GLOBAL(b, T,
-E
-+)
+T@p
+- var = value
++ *var = SMPI_INITIALIZE_AND_SET_GLOBAL(T, value)
+;
+|
+T@p
+- var[]
++ *var[] = SMPI_INITIALIZE_GLOBAL_ARRAY(T, size)
+;
+|
+T@p
+- var[size]
++ *var[] = SMPI_INITIALIZE_GLOBAL_STATIC_ARRAY(T, size)
+;
+|
+T@p
+- var[size] = { ... }
++ *var[] = SMPI_INITIALIZE_AND_SET_GLOBAL_STATIC_ARRAY(T, size)
;
)
@rewritelocalaccess@
-local idexpression x;
-identifier globalvardecl.b;
+local idexpression lvar;
+identifier globalvardecl.var;
@@
{
<...
(
-x
+lvar
|
+SMPI_GLOBAL_VAR_LOCAL_ACCESS(
-b
+var
+)
)
...>