/*;-*-C-*-;
** Splint - annotation-assisted static program checker
-** Copyright (C) 1994-2002 University of Virginia,
+** Copyright (C) 1994-2003 University of Virginia,
** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
/* additional tokens introduced by splint pre-processor. */
%token <tok> LLMACRO LLMACROITER LLMACROEND TENDMACRO
+/* For debugging purposes */
+%token <tok> QDREVEALSTATE
+
/* break comments: */
%token <tok> QSWITCHBREAK QLOOPBREAK QINNERBREAK QSAFEBREAK
%token <tok> QINNERCONTINUE
%type <expr> orIterExpr conditionalIterExpr assignIterExpr iterArgExpr
%type <expr> expr optExpr constantExpr
%type <expr> init macroBody iterBody endBody partialIterStmt iterSelectionStmt
-%type <expr> stmt stmtList fcnBody iterStmt iterDefStmt iterDefStmtList
+%type <expr> stmt stmtList fcnBody iterStmt iterDefStmt iterDefStmtList debugStmt
%type <expr> labeledStmt caseStmt defaultStmt
%type <expr> compoundStmt compoundStmtAux compoundStmtRest compoundStmtAuxErr
%type <expr> expressionStmt selectionStmt iterationStmt jumpStmt iterDefIterationStmt
{ setCurrentParams (uentryList_missingParams); }
functionClauses
{ /* need to support globals and modifies here! */
+ functionClauseList fcl;
ctype ct = ctype_makeFunction (idDecl_getCtype ($1),
uentryList_makeMissingParams ());
$$ = idDecl_replaceCtype ($1, ct);
/*drl 7/25/01 added*/
- setImplictfcnConstraints();
+ setImplicitfcnConstraints();
- /* functionClauseList_ImplictConstraints($6); */
+ DPRINTF((message("namedDeclBase PushType TLPAREN TRPAREN...:\n adding implict constraints to functionClause List: %s",
+ functionClauseList_unparse($6)
+ )
+ ));
+
+ fcl = functionClauseList_setImplicitConstraints($6);
- idDecl_addClauses ($$, $6);
+ idDecl_addClauses ($$, fcl);
+
+ DPRINTF((message("1 added fuctionClause List: %s to the Id",
+ functionClauseList_unparse(fcl)
+ )
+ ));
+
+
context_popLoc ();
lltok_free2 ($3, $4);
}
{ setCurrentParams ($4); }
functionClauses
{
- setImplictfcnConstraints ();
- /* functionClauseList_ImplictConstraints($7);*/
+ functionClauseList fcl;
+ setImplicitfcnConstraints ();
clearCurrentParams ();
$$ = idDecl_replaceCtype ($1, ctype_makeFunction (idDecl_getCtype ($1), $4));
- idDecl_addClauses ($$, $7);
+
+ DPRINTF((message("namedDeclBase PushType TLPAREN genericParamList TRPAREN...:\n adding implict constraints to functionClause List: %s",
+ functionClauseList_unparse($7)
+ )
+ )) ;
+
+ fcl = functionClauseList_setImplicitConstraints($7);
+
+ idDecl_addClauses ($$, fcl);
+
+ DPRINTF((message("added fuctionClause List: %s to the Id",
+ functionClauseList_unparse(fcl)
+ )
+ ));
+
+
context_popLoc ();
lltok_free2 ($3, $5);
}
;
optSpecClauseList
- : /* empty */ { $$ = sRefSet_undefined }
+ : /* empty */ { DPRINTF ((message("Empty optSpecClauseList") )); $$ = sRefSet_undefined }
| specClauseList
;
specClauseList
: specClauseListExpr
{ if (sRef_isValid ($1)) { $$ = sRefSet_single ($1); }
- else { $$ = sRefSet_undefined; }
+ else {
+ DPRINTF((message("returning sRefSEt_undefined ") ));
+ $$ = sRefSet_undefined; }
}
| specClauseList TCOMMA specClauseListExpr
{ if (sRef_isValid ($3))
| TMINUS castExpr { $$ = exprNode_preOp ($2, $1); }
| TTILDE castExpr { $$ = exprNode_preOp ($2, $1); }
| TEXCL castExpr { $$ = exprNode_preOp ($2, $1); }
- | sizeofExpr { $$ = $1; }
+ | processSizeof sizeofExpr endprocessSizeof { $$ = $2; }
| offsetofExpr { $$ = $1; }
;
sizeofExprAux { context_sizeofReleaseVars (); $$ = $3; }
;
+processSizeof: {context_enterSizeof()};
+
+
+endprocessSizeof: {context_leaveSizeof()};
+
+
sizeofExprAux
- : CSIZEOF TLPAREN typeExpression TRPAREN { $$ = exprNode_sizeofType ($3); lltok_free3 ($1, $2, $4); }
- | CSIZEOF unaryExpr { $$ = exprNode_sizeofExpr ($2); lltok_free ($1); }
+ : CSIZEOF TLPAREN typeExpression TRPAREN { $$ = exprNode_sizeofType ($3); lltok_free3 ($1, $2, $4); }
+ | CSIZEOF unaryExpr { $$ = exprNode_sizeofExpr ($2); lltok_free ($1); }
| CALIGNOF TLPAREN typeExpression TRPAREN { $$ = exprNode_alignofType ($3); lltok_free3 ($1, $2, $4); }
| CALIGNOF unaryExpr { $$ = exprNode_alignofExpr ($2); lltok_free ($1); }
;
-
+
+
+
castExpr
: unaryExpr
| TLPAREN typeExpression TRPAREN castExpr
structDeclList DeleteStructInnerScope { sRef_clearGlobalScopeSafe (); }
TRBRACE
optStructInvariant
- { ctype ct; ct = declareStruct ($3, $8); context_setGlobalStructInfo(ct, $12); $$ = ct; }
+ { ctype ct; ct = declareStruct ($3, $8); /* context_setGlobalStructInfo(ct, $12); */ $$ = ct; }
| NotType CUNION newId IsType TLBRACE { sRef_setGlobalScopeSafe (); }
CreateStructInnerScope
structDeclList DeleteStructInnerScope { sRef_clearGlobalScopeSafe (); }
| iterationStmt
| iterStmt
| jumpStmt
+ | debugStmt
;
+debugStmt
+ : QDREVEALSTATE TLPAREN expr TRPAREN { exprNode_revealState ($3); $$ = exprNode_undefined; }
+;
iterBody
: iterDefStmtList { $$ = $1; }
| iterationStmtErr
| TLPAREN stmtErr TRPAREN { $$ = exprNode_addParens ($1, $2); }
| jumpStmt
+ | debugStmt
| error { $$ = exprNode_makeError (); }
;