+
+BufConstraintSrefExpr
+: id {
+ $$ =
+ checkbufferConstraintClausesId ($1);}
+ | NEW_IDENTIFIER { $$ = fixSpecClausesId ($1); }
+
+ | BufConstraintSrefExpr TLSQBR TRSQBR { $$ = sRef_makeAnyArrayFetch ($1); }
+ | BufConstraintSrefExpr TLSQBR CCONSTANT TRSQBR {
+ char *t; int c;
+ t = cstring_toCharsSafe (exprNode_unparse($3));
+ c = atoi( t );
+ $$ = sRef_makeArrayFetchKnown($1, c); }
+ | TMULT BufConstraintSrefExpr { $$ = sRef_constructPointer ($2); }
+ | TLPAREN BufConstraintSrefExpr TRPAREN { $$ = $2; }
+ | BufConstraintSrefExpr TDOT newId { cstring_markOwned ($3);
+ $$ = sRef_buildField ($1, $3); }
+ | BufConstraintSrefExpr ARROW_OP newId { cstring_markOwned ($3);
+ $$ = sRef_makeArrow ($1, $3); }
+
+/*
+| BufConstraintTerm TLSQBR TRSQBR { $$ = sRef_makeAnyArrayFetch ($1); }
+ | specClauseListExpr TLSQBR mExpr TRSQBR { $$ = sRef_makeAnyArrayFetch ($1); }
+ | TLPAREN specClauseListExpr TRPAREN { $$ = $2; }
+ | specClauseListExpr TDOT newId { cstring_markOwned ($3);
+ $$ = sRef_buildField ($1, $3); }
+*/
+