+startConditionClause
+: conditionTag NotType { $$ = $1; context_enterFunctionHeader (); }
+
+conditionClausePlain
+ : startConditionClause stateQualifier
+ {
+ context_exitFunctionHeader ();
+ context_setProtectVars ();
+ enterParamsTemp ();
+ sRef_setGlobalScopeSafe ();
+ }
+ optSpecClauseList optSemi IsType
+ {
+ exitParamsTemp ();
+ sRef_clearGlobalScopeSafe ();
+ context_releaseVars ();
+ $$ = functionClause_createState (stateClause_create ($1, $2, $4));
+ }
+ | startConditionClause
+ {
+ context_setProtectVars ();
+ enterParamsTemp ();
+ sRef_setGlobalScopeSafe ();
+ }
+ functionConstraint optSemi IsType
+ {
+ context_exitFunctionHeader ();
+ exitParamsTemp ();
+ sRef_clearGlobalScopeSafe ();
+ context_releaseVars ();
+ DPRINTF (("done optGlobBufConstraintsAux\n"));
+
+ if (lltok_isEnsures ($1))
+ {
+ $$ = functionClause_createEnsures ($3);
+ }
+ else if (lltok_isRequires ($1))
+ {
+ $$ = functionClause_createRequires ($3);
+ }
+ else
+ {
+ BADBRANCH;
+ }
+
+ DPRINTF (("FunctionclauseS: %s", functionClause_unparse ($$)));
+ }
+
+functionConstraint
+ : BufConstraintList { $$ = functionConstraint_createBufferConstraint ($1); }
+ | metaStateConstraint { $$ = functionConstraint_createMetaStateConstraint ($1); DPRINTF (("Made constraint: %s", functionConstraint_unparse ($$))); }
+
+exitsQualifier
+ : QEXITS { $$ = qual_createExits (); }
+ | QMAYEXIT { $$ = qual_createMayExit (); }
+ | QTRUEEXIT { $$ = qual_createTrueExit (); }
+ | QFALSEEXIT { $$ = qual_createFalseExit (); }
+ | QNEVEREXIT { $$ = qual_createNeverExit (); }
+
+checkQualifier
+ : QCHECKED { $$ = qual_createChecked (); }
+ | QCHECKMOD { $$ = qual_createCheckMod (); }
+ | QUNCHECKED { $$ = qual_createUnchecked (); }
+ | QCHECKEDSTRICT { $$ = qual_createCheckedStrict (); }
+
+stateQualifier
+ : QOWNED { $$ = qual_createOwned (); }
+ | QDEPENDENT { $$ = qual_createDependent (); }
+ | QYIELD { $$ = qual_createYield (); }
+ | QTEMP { $$ = qual_createTemp (); }
+ | QONLY { $$ = qual_createOnly (); }
+ | QKEEP { $$ = qual_createKeep (); }
+ | QKEPT { $$ = qual_createKept (); }
+ | QSHARED { $$ = qual_createShared (); }
+ | QUNIQUE { $$ = qual_createUnique (); }
+ | QNULL { $$ = qual_createNull (); }
+ | QISNULL { $$ = qual_createIsNull (); }
+ | QRELNULL { $$ = qual_createRelNull (); }
+ | QNOTNULL { $$ = qual_createNotNull (); }
+ | QEXPOSED { $$ = qual_createExposed (); }
+ | QOBSERVER { $$ = qual_createObserver (); }
+ | QNULLTERMINATED { $$ = qual_createNullTerminated (); }
+ | CANNOTATION { $$ = qual_createMetaState ($1); }
+
+
+paramQualifier
+ : QRETURNED { $$ = qual_createReturned (); }
+ | QSEF { $$ = qual_createSef (); }
+
+visibilityQualifier
+ : QUNUSED { $$ = qual_createUnused (); }
+ | QEXTERNAL { $$ = qual_createExternal (); }
+
+returnQualifier
+ : QTRUENULL { $$ = qual_createTrueNull (); }
+ | QFALSENULL { $$ = qual_createFalseNull (); }
+
+typedefQualifier
+ : QABSTRACT { $$ = qual_createAbstract (); }
+ | QCONCRETE { $$ = qual_createConcrete (); }
+ | QMUTABLE { $$ = qual_createMutable (); }
+ | QIMMUTABLE { $$ = qual_createImmutable (); }
+
+refcountQualifier
+ : QREFCOUNTED { $$ = qual_createRefCounted (); }
+ | QREFS { $$ = qual_createRefs (); }
+ | QKILLREF { $$ = qual_createKillRef (); }
+ | QRELDEF { $$ = qual_createRelDef (); }
+ | QNEWREF { $$ = qual_createNewRef (); }
+ | QTEMPREF { $$ = qual_createTempRef (); }