X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/28bf4b0bfd405a2057d865910f8589c54a40f17b..a6bfbad8f5ae6b3544a2c767e449ee095aad8978:/src/annotationInfo.c diff --git a/src/annotationInfo.c b/src/annotationInfo.c index 32fafc7..26e7bcc 100644 --- a/src/annotationInfo.c +++ b/src/annotationInfo.c @@ -1,6 +1,6 @@ /* -** LCLint - annotation-assisted static program checker -** Copyright (C) 1994-2001 University of Virginia, +** Splint - annotation-assisted static program checker +** Copyright (C) 1994-2002 University of Virginia, ** Massachusetts Institute of Technology ** ** This program is free software; you can redistribute it and/or modify it @@ -17,17 +17,16 @@ ** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, ** MA 02111-1307, USA. ** -** For information on lclint: lclint-request@cs.virginia.edu -** To report a bug: lclint-bug@cs.virginia.edu -** For more information: http://lclint.cs.virginia.edu +** For information on splint: info@splint.org +** To report a bug: splint-bug@splint.org +** For more information: http://www.splint.org */ /* ** annotationInfo.c */ -# include "lclintMacros.nf" +# include "splintMacros.nf" # include "basic.h" -# include "mtContextNode.h" annotationInfo annotationInfo_create (cstring name, metaStateInfo state, mtContextNode context, @@ -50,6 +49,7 @@ void annotationInfo_free (annotationInfo ainfo) { cstring_free (ainfo->name); fileloc_free (ainfo->loc); + mtContextNode_free (ainfo->context); /* evans 2002-01-03 */ sfree (ainfo); } } @@ -172,5 +172,32 @@ cstring annotationInfo_dump (annotationInfo ainfo) return ainfo; } - BADBRANCH; + BADBRANCHRET (annotationInfo_undefined); +} + +void annotationInfo_showContextRefError (annotationInfo a, sRef sr) +{ + mtContextNode mcontext; + llassert (!annotationInfo_matchesContextRef (a, sr)); + llassert (annotationInfo_isDefined (a)); + mcontext = a->context; + + if (mtContextNode_matchesRef (mcontext, sr)) + { + /* Matches annotation context, must also match meta state context. */ + metaStateInfo minfo = a->state; + + if (mtContextNode_matchesRef (metaStateInfo_getContext (minfo), sr)) + { + BADBRANCH; + } + else + { + mtContextNode_showRefError (metaStateInfo_getContext (minfo), sr); + } + } + else + { + mtContextNode_showRefError (mcontext, sr); + } }