typedef /*@null@*/ struct s_stateInfo *stateInfo ;
+typedef enum {
+ SA_UNKNOWN,
+
+ /* Any type of action */
+ SA_CREATED,
+ SA_DECLARED,
+ SA_CHANGED,
+
+ /* Definition actions */
+ SA_UNDEFINED,
+ SA_MUNDEFINED,
+ SA_PDEFINED,
+ SA_DEFINED,
+ SA_RELEASED,
+ SA_ALLOCATED,
+ SA_KILLED,
+ SA_PKILLED,
+ SA_MERGED,
+
+ /* sharing actions */
+ SA_SHARED,
+ SA_ONLY,
+ SA_IMPONLY,
+ SA_OWNED,
+ SA_DEPENDENT,
+ SA_IMPDEPENDENT,
+ SA_KEPT,
+ SA_KEEP,
+ SA_FRESH,
+ SA_XSTACK, /* SA_STACK is defined in some Linux headers (but ISO does not reserve this namespace) */
+ SA_TEMP,
+ SA_IMPTEMP,
+ SA_STATIC,
+ SA_LOCAL,
+
+ SA_REFCOUNTED,
+ SA_REFS,
+ SA_NEWREF,
+ SA_KILLREF,
+
+ /* exposure */
+ SA_EXPOSED,
+ SA_OBSERVER,
+
+ /* nullity actions */
+ SA_BECOMESNULL,
+ SA_BECOMESNONNULL,
+ SA_BECOMESPOSSIBLYNULL,
+
+} stateAction;
/*@null@*/ struct s_stateInfo
{
- /*@only@*/ fileloc loc;
+ /*@only@*/ fileloc loc;
+ stateAction action;
/*@observer@*/ sRef ref;
/*@null@*/ stateInfo previous;
} ;
extern /*@only@*/ stateInfo stateInfo_update (/*@only@*/ stateInfo p_old, stateInfo p_newinfo);
-extern /*@only@*/ stateInfo stateInfo_updateLoc (/*@only@*/ stateInfo p_old, fileloc p_loc) ;
+extern /*@only@*/ stateInfo stateInfo_updateLoc (/*@only@*/ stateInfo p_old,
+ stateAction p_action,
+ fileloc p_loc) ;
extern /*@only@*/ stateInfo
- stateInfo_updateRefLoc (/*@only@*/ stateInfo p_old, /*@exposed@*/ sRef p_ref, fileloc p_loc) ;
+ stateInfo_updateRefLoc (/*@only@*/ stateInfo p_old, /*@exposed@*/ sRef p_ref,
+ stateAction p_action,
+ fileloc p_loc) ;
extern /*@only@*/ stateInfo stateInfo_copy (stateInfo p_a);
extern /*@only@*/ /*@notnull@*/ stateInfo stateInfo_currentLoc (void) ;
-extern /*@only@*/ /*@notnull@*/ stateInfo stateInfo_makeLoc (fileloc p_loc) ;
-extern /*@only@*/ /*@notnull@*/ stateInfo stateInfo_makeRefLoc (/*@exposed@*/ sRef p_ref, fileloc p_loc) ;
+
+extern /*@only@*/ /*@notnull@*/ stateInfo
+stateInfo_makeLoc (fileloc p_loc, stateAction p_action) /*@*/ ;
+
+extern /*@only@*/ /*@notnull@*/ stateInfo
+stateInfo_makeRefLoc (/*@exposed@*/ sRef p_ref, fileloc p_loc, stateAction p_action) /*@*/ ;
extern /*@observer@*/ fileloc stateInfo_getLoc (stateInfo p_info) ;
extern /*@only@*/ cstring stateInfo_unparse (stateInfo p_s) /*@*/ ;
-extern void stateInfo_display (stateInfo p_s, /*@only@*/ cstring p_sname) /*@modifies g_errorstream@*/ ;
+extern stateAction stateAction_fromSState (sstate p_ss) /*@*/ ;
+extern stateAction stateAction_fromNState (nstate p_ns) /*@*/ ;
+extern stateAction stateAction_fromExkind (exkind p_ex) /*@*/ ;
+extern stateAction stateAction_fromAlkind (alkind p_ak) /*@*/ ;
+
+extern void stateInfo_display (stateInfo p_s, /*@only@*/ cstring p_sname)
+ /*@modifies g_errorstream@*/ ;
# else
# error "Multiple include"