/*
-** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2001.
+** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
** See ../LICENSE for license information.
**
*/
XPR_INIT, XPR_FACCESS, XPR_ARROW, XPR_CONST, XPR_STRINGLITERAL,
XPR_NUMLIT, XPR_BODY, XPR_NODE, XPR_ITERCALL, XPR_TOK,
XPR_WHILEPRED, XPR_CASE, XPR_FTCASE, XPR_DEFAULT, XPR_FTDEFAULT,
- XPR_BLOCK, XPR_INITBLOCK, XPR_LABEL
+ XPR_BLOCK, XPR_INITBLOCK,
+ XPR_LABEL
} exprKind;
typedef struct
{
cstring literal;
cstring id;
- lltok *tok;
+ lltok tok;
qtype qt; /* sizeof(type) */
/* use for any 2-operator (comma, arrayFetch, case, stmt) */
exprPair pair;
/*@constant null exprNode exprNode_undefined; @*/
# define exprNode_undefined ((exprNode)NULL)
-extern /*@falsenull@*/ bool exprNode_isDefined (exprNode p_e) /*@*/ ;
-extern /*@unused@*/ /*@truenull@*/ bool exprNode_isUndefined (exprNode p_e) /*@*/ ;
-extern /*@truenull@*/ bool exprNode_isError (exprNode p_e) /*@*/ ;
+extern /*@falsewhennull@*/ bool exprNode_isDefined (exprNode p_e) /*@*/ ;
+extern /*@unused@*/ /*@nullwhentrue@*/ bool exprNode_isUndefined (exprNode p_e) /*@*/ ;
+extern /*@nullwhentrue@*/ bool exprNode_isError (exprNode p_e) /*@*/ ;
# define exprNode_isDefined(e) ((e) != exprNode_undefined)
# define exprNode_isUndefined(e) ((e) == exprNode_undefined)
# define exprNode_getType(e) \
(exprNode_isDefined(e) ? (e)->typ : ctype_unknown)
-extern /*@unused@*/ /*@falsenull@*/ bool exprNode_isInParens (/*@sef@*/ exprNode p_e) /*@*/ ;
+extern /*@unused@*/ /*@falsewhennull@*/ bool exprNode_isInParens (/*@sef@*/ exprNode p_e) /*@*/ ;
# define exprNode_isInParens(e) \
(exprNode_isDefined(e) && (e)->kind == XPR_PARENS)
exprNode_vaArg (/*@only@*/ lltok p_tok, /*@only@*/ exprNode p_arg, /*@only@*/ qtype p_qt)
/*@globals internalState@*/ ;
+extern bool exprNode_isMultiStatement (exprNode p_e) /*@*/ ;
+
/*
** Has surrounding quotes.
*/
-extern exprNode
+extern /*@only@*/ /*@notnull@*/ exprNode
exprNode_stringLiteral (/*@only@*/ cstring p_t, /*@only@*/ fileloc p_loc) /*@*/ ;
-extern /*@only@*/ exprNode
+extern /*@only@*/ /*@notnull@*/ exprNode
exprNode_wideStringLiteral (/*@only@*/ cstring p_t, /*@only@*/ fileloc p_loc) /*@*/ ;
/*
** No surrounding quotes.
*/
-extern exprNode
+extern /*@notnull@*/ exprNode
exprNode_rawStringLiteral (/*@only@*/ cstring p_t, /*@only@*/ fileloc p_loc) /*@*/ ;
extern exprNode exprNode_comma (/*@only@*/ exprNode p_e1, /*@only@*/ exprNode p_e2) /*@*/ ;
exprNode exprNode_caseMarker (/*@only@*/ exprNode p_test, bool p_fallThrough) /*@*/ ;
extern exprNode exprNode_concat (/*@only@*/ exprNode p_e1, /*@only@*/ exprNode p_e2);
-extern exprNode exprNode_createTok (/*@only@*/ lltok p_t) /*@*/ ;
+extern /*@notnull@*/ exprNode exprNode_createTok (/*@only@*/ lltok p_t) /*@*/ ;
extern exprNode exprNode_statement (/*@only@*/ exprNode p_e, /*@only@*/ lltok p_t);
extern exprNode exprNode_makeBlock (/*@only@*/ exprNode p_e);
+extern exprNode exprNode_compoundStatementExpression (/*@only@*/ lltok p_tlparen, /*@only@*/ exprNode p_e) ;
+
+extern void exprNode_checkIfPred (exprNode p_pred) /*@modifies g_warningstream@*/ ;
+
extern exprNode exprNode_if (/*@only@*/ exprNode p_pred, /*@only@*/ exprNode p_tclause);
extern exprNode
exprNode_ifelse (/*@only@*/ exprNode p_pred, /*@only@*/ exprNode p_tclause,
extern /*@dependent@*/ /*@observer@*/ cstring
exprNode_unparse (/*@temp@*/ exprNode p_e) /*@*/ ;
-extern bool exprNode_isCharLit (exprNode p_e) /*@*/ ;
-extern bool exprNode_isNumLit (exprNode p_e) /*@*/ ;
+extern /*@falsewhennull@*/ bool exprNode_isBlock (exprNode p_e) /*@*/ ;
+extern /*@falsewhennull@*/ bool exprNode_isCharLiteral (exprNode p_e) /*@*/ ;
+extern /*@falsewhennull@*/ bool exprNode_isNumLiteral (exprNode p_e) /*@*/ ;
extern exprNode
exprNode_makeInitialization (/*@only@*/ idDecl p_t, /*@only@*/ exprNode p_e);
extern exprNode exprNode_iterNewId (/*@only@*/ cstring p_s);
extern exprNode
exprNode_iterStart (/*@observer@*/ uentry p_name, /*@only@*/ exprNodeList p_alist);
-extern exprNode
- exprNode_numLiteral (ctype p_c, /*@temp@*/ cstring p_t,
- /*@only@*/ fileloc p_loc, long p_val);
+extern exprNode exprNode_numLiteral (ctype p_c, /*@temp@*/ cstring p_t,
+ /*@only@*/ fileloc p_loc, long p_val) /*@*/ ;
extern void exprNode_initMod (void) /*@modifies internalState@*/ ;
extern exprNode exprNode_for (/*@keep@*/ exprNode p_inc, /*@keep@*/ exprNode p_body);
extern exprNode
exprNode_forPred (/*@only@*/ exprNode p_init,
/*@only@*/ exprNode p_test, /*@only@*/ exprNode p_inc);
-extern exprNode
- exprNode_floatLiteral (double p_d, ctype p_ct,
- cstring p_text, /*@only@*/ fileloc p_loc);
+extern exprNode exprNode_floatLiteral (double p_d, ctype p_ct,
+ cstring p_text, /*@only@*/ fileloc p_loc) /*@*/ ;
extern /*@notnull@*/ exprNode exprNode_createId (/*@observer@*/ uentry p_c);
extern /*@notnull@*/ exprNode exprNode_makeConstantString (/*@temp@*/ cstring p_c, /*@only@*/ fileloc p_loc) /*@*/ ;
extern exprNode exprNode_cast (/*@only@*/ lltok p_tok, /*@only@*/ exprNode p_e, /*@only@*/ qtype p_q);
exprNode_updateLocation (/*@returned@*/ exprNode p_e, /*@temp@*/ fileloc p_loc);
extern void exprNode_freeShallow (/*@only@*/ exprNode p_e);
extern void exprNode_destroyMod (void) /*@modifies internalState@*/ ;
-extern bool exprNode_isAssign (exprNode p_e) /*@*/ ;
-
-/* added 8-15-00
- by DRL */
-extern /*@observer@*/ fileloc exprNode_getfileloc (exprNode p_e) ;
+extern /*@falsewhennull@*/ bool exprNode_isAssign (exprNode p_e) /*@*/ ;
/*@-exportlocal@*/
extern bool exprNode_isDefaultMarker (exprNode p_e) /*@*/ ;