%type <typequal> nullterminatedQualifier
%token <tok> QNULLTERMINATED
%token <tok> QSETBUFFERSIZE
-%token <tok> QBUFFERCONSTRAINT
-%token <tok> QENSURESCONSTRAINT
%token <tok> QSETSTRINGLENGTH
%token <tok> QMAXSET
%token <tok> QMAXREAD
%type <globsclause> globalsClause globalsClausePlain
%type <modsclause> modifiesClause modifiesClausePlain nomodsClause
%type <warnclause> warnClause warnClausePlain
-%type <stateclause> conditionClause conditionClausePlain
+%type <funcclause> conditionClause conditionClausePlain
%type <stateclause> stateClause stateClausePlain
%type <sr> globId globIdListExpr
%type <cname> enumerator newId /*@-varuse@*/ /* yacc declares yytranslate here */
%type <count> pointers /*@=varuse@*/
-%type <tok> doHeader stateTag conditionTag
+%type <tok> doHeader stateTag conditionTag startConditionClause
%type <typequal> exitsQualifier checkQualifier stateQualifier
paramQualifier returnQualifier visibilityQualifier
typedefQualifier refcountQualifier definedQualifier
| namedDeclBase PushType TLPAREN TRPAREN
{ setCurrentParams (uentryList_missingParams); }
functionClauses
- optGlobBufConstraints
{ /* need to support globals and modifies here! */
ctype ct = ctype_makeFunction (idDecl_getCtype ($1),
uentryList_makeMissingParams ());
| namedDeclBase PushType TLPAREN genericParamList TRPAREN
{ setCurrentParams ($4); }
functionClauses
- optGlobBufConstraints
{ setImplictfcnConstraints ();
clearCurrentParams ();
$$ = idDecl_replaceCtype ($1, ctype_makeFunction (idDecl_getCtype ($1), $4));
/*drl*/
-optGlobBufConstraints
- : { setProcessingGlobMods (); } optGlobBufConstraintsRest
- { clearProcessingGlobMods (); }
-
-optGlobBufConstraintsRest
- : optGlobBufConstraintsAux optGlobEnsuresConstraintsAux
-
-
-optGlobEnsuresConstraintsAux
-: {
- DPRINTF ( ("doing optGlobEnsuresConstraintsAux\n") );
-context_setProtectVars (); enterParamsTemp ();
- sRef_setGlobalScopeSafe ();
-
-} QENSURESCONSTRAINT BufConstraintList optSemi QENDMACRO
-{
- setEnsuresConstraints ($3);
- exitParamsTemp ();
- sRef_clearGlobalScopeSafe ();
- context_releaseVars ();
- DPRINTF (("done optGlobBufConstraintsAux\n"));}
- | /*empty*/
-
-
-optGlobBufConstraintsAux
-: {
- DPRINTF ( ("doing optGlobBufConstraintsAux\n") );
-context_setProtectVars (); enterParamsTemp ();
- sRef_setGlobalScopeSafe ();
-
-} QBUFFERCONSTRAINT BufConstraintList optSemi QENDMACRO
-{
- setFunctionConstraints ($3);
- exitParamsTemp ();
- sRef_clearGlobalScopeSafe ();
- context_releaseVars ();
- DPRINTF (("done optGlobBufConstraintsAux\n"));}
- | /*empty*/
-
BufConstraintList
: BufConstraint TCAND BufConstraintList { $$ = constraintList_add ($3, $1); }
| BufConstraint {constraintList c; c = constraintList_makeNew(); c = constraintList_add (c, $1); $$ = c}
bufferModifier
: QMAXSET
- |QMAXREAD
+ | QMAXREAD
relationalOp
: GE_OP
| modifiesClause { $$ = functionClause_createModifies ($1); }
| nomodsClause { $$ = functionClause_createModifies ($1); }
| stateClause { $$ = functionClause_createState ($1); }
- | conditionClause { $$ = functionClause_createState ($1); }
+ | conditionClause { $$ = $1; }
| warnClause { $$ = functionClause_createWarn ($1); }
functionClausePlain
| modifiesClausePlain { $$ = functionClause_createModifies ($1); }
| nomodsClause { $$ = functionClause_createModifies ($1); }
| stateClausePlain { $$ = functionClause_createState ($1); }
- | conditionClausePlain { $$ = functionClause_createState ($1); }
+ | conditionClausePlain { $$ = $1; }
| warnClausePlain { $$ = functionClause_createWarn ($1); }
globalsClause
conditionClause
: conditionClausePlain QENDMACRO { $$ = $1; }
+startConditionClause
+: conditionTag NotType { $$ = $1; context_enterFunctionHeader (); }
+
conditionClausePlain
- : conditionTag { context_enterFunctionHeader (); } NotType stateQualifier
+ : startConditionClause stateQualifier
{
context_exitFunctionHeader ();
context_setProtectVars ();
exitParamsTemp ();
sRef_clearGlobalScopeSafe ();
context_releaseVars ();
- $$ = stateClause_create ($1, $4, $6);
+ $$ = functionClause_createState (stateClause_create ($1, $2, $4));
+ }
+ | startConditionClause
+ {
+ context_setProtectVars ();
+ enterParamsTemp ();
+ sRef_setGlobalScopeSafe ();
+ }
+ BufConstraintList 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;
+ }
}
exitsQualifier