X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/c3be260484f4cd5a9fb6f9ebc503ae4cecca2252..91b588dea2cd9d465b092f5a934ebf1638f79253:/src/flags.c diff --git a/src/flags.c b/src/flags.c index cdc6dc7..c26a6c6 100644 --- a/src/flags.c +++ b/src/flags.c @@ -1,6 +1,6 @@ /* ** 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 @@ -28,9 +28,9 @@ # include "splintMacros.nf" # include "basic.h" # include "osd.h" -# include "portab.h" # include "rcfiles.h" # include "lslinit.h" +# include "llmain.h" /* ** from the CC man page: @@ -128,6 +128,11 @@ typedef enum { ARG_SPECIAL /* ? */ } argcode; +# ifdef WIN32 +/* Make Microsoft VC++ happy */ +# pragma warning (disable:4715) +# endif + static /*@observer@*/ cstring argcode_unparse (argcode arg) { switch (arg) @@ -143,11 +148,11 @@ static /*@observer@*/ cstring argcode_unparse (argcode arg) case ARG_SPECIAL: BADBRANCH; } +} + # ifdef WIN32 -/* Make Microsoft VC++ happy */ -# pragma warning (disable:4715) +# pragma warning (default : 4715) # endif -} typedef struct { flagkind main; @@ -337,8 +342,6 @@ flagcode_recordError (flagcode f) } else { - /*drl bee: ec*/ - /*drl bee: ec*/ flags[f].nreported = flags[f].nreported + 1; } } @@ -353,8 +356,7 @@ flagcode_recordSuppressed (flagcode f) { llassertprint (f != INVALID_FLAG, ("flagcode: %s", flagcode_unparse (f))); - /*drl bee: ec*/ - /*drl bee: ec*/ flags[f].nsuppressed = flags[f].nsuppressed + 1; + flags[f].nsuppressed = flags[f].nsuppressed + 1; } int @@ -370,7 +372,6 @@ flagcodeHint (flagcode f) { llassert (f != INVALID_FLAG); - /*drl bee: ec*/ if (mstring_isDefined (flags[f].hint)) { return (cstring_fromChars (flags[f].hint)); @@ -403,7 +404,6 @@ flagkind identifyCategory (cstring s) for (i = 0; categories[i].kind != FK_NONE; i++) { - /*drl bee: mRug*/ if (mstring_isDefined (categories[i].name)) { if (cstring_equalLit (s, categories[i].name)) @@ -422,7 +422,6 @@ static /*@observer@*/ cstring categoryName (flagkind kind) for (i = 0; categories[i].kind != FK_NONE; i++) { - /*drl bee: mrUg*/ if (categories[i].kind == kind) { return (cstring_fromChars (categories[i].name)); @@ -438,7 +437,6 @@ static int categoryIndex (flagkind kind) for (i = 0; categories[i].kind != FK_NONE; i++) { - /*drl bee: mRug*/ if (categories[i].kind == kind) { return i; @@ -453,7 +451,6 @@ void printCategory (flagkind kind) int index = categoryIndex (kind); llassert (index >= 0); - /*drl bee: mRug*/ llmsg (message ("%s (%d flags)\n\3%s\n\n", cstring_fromChars (categories[index].name), categorySize (kind), @@ -476,7 +473,6 @@ listAllCategories (void) for (i = 0; categories[i].kind != FK_NONE; i++) { - /*drl bee: mRug*/ flagkind kind = categories[i].kind ; if (categories[i].describe != NULL) @@ -498,7 +494,6 @@ printAllFlags (bool desc, bool full) cstringSList_elements (fl, el) { - /*@i22@*/ /*find out why this is necessary*/ cstring tmp; tmp = cstring_copy(el); llmsg (message ("%q\n\n", describeFlag (tmp))); @@ -710,6 +705,40 @@ printFlagManual (bool html) } end_allFlags ; } +cstring +describeMode (cstring mode) +{ + cstringSList sflags = sortedFlags (); + cstring res = message ("Predefined mode %s sets: ", mode); + + llassert (flags_isModeName (mode)); + + context_setMode (mode); + + cstringSList_elements (sflags, flagname) + { + flagcode code = flags_identifyFlag (flagname); + fflag currentflag = flags[code]; + + if (mstring_isDefined (currentflag.desc) && flagcode_isModeFlag (code)) + { + if (context_getFlag (code)) + { + res = message ("%q\n +%s", res, cstring_fromChars (currentflag.flag)); + } + else + { + res = message ("%q\n -%s", res, cstring_fromChars (currentflag.flag)); + } + } + } end_cstringSList_elements; + + cstringSList_free (sflags); + + res = cstring_appendChar (res, '\n'); + return (res); +} + cstring describeFlagCode (flagcode flag) { @@ -721,9 +750,13 @@ describeFlagCode (flagcode flag) return (cstring_makeLiteral ("")); } + if (flagcode_isModeName (flag)) + { + return (cstring_makeLiteral ("")); + } + context_resetAllFlags (); - /*drl bee: mRug*/ f = flags[flag]; ret = cstring_copy (cstring_fromChars (f.desc)); @@ -856,10 +889,7 @@ describeFlag (cstring flagname) if (flags_isModeName (flagname)) { cstring_free (oflagname); - - return - (message ("%s: predefined mode (see Manual for information)", - flagname)); + return describeMode (flagname); } else { @@ -964,7 +994,6 @@ canonicalizeFlag (cstring s) } ; char *current; - /*drl bee: ia*/ while ((current = transform[i]) != NULL) { if (cstring_containsLit (res, current)) @@ -1111,6 +1140,14 @@ flags_identifyFlagAux (cstring s, bool quiet) { res = FLG_ENUMINT; } + else if (cstring_equalLit (cflag, "intlong")) + { + res = FLG_LONGINT; + } + else if (cstring_equalLit (cflag, "intshort")) + { + res = FLG_SHORTINT; + } /* ** Backwards compatibility for our American friends... */ @@ -1255,7 +1292,7 @@ flags_identifyFlagAux (cstring s, bool quiet) return res; } -void setValueFlag (flagcode opt, cstring arg) +void flags_setValueFlag (flagcode opt, cstring arg) { switch (opt) { @@ -1264,6 +1301,7 @@ void setValueFlag (flagcode opt, cstring arg) case FLG_LIMIT: case FLG_LINELEN: case FLG_INDENTSPACES: + case FLG_LOCINDENTSPACES: case FLG_BUGSLIMIT: case FLG_EXTERNALNAMELEN: case FLG_INTERNALNAMELEN: @@ -1305,11 +1343,11 @@ void setValueFlag (flagcode opt, cstring arg) } } break; - BADDEFAULT; + BADDEFAULT; } } -void setStringFlag (flagcode opt, /*@only@*/ cstring arg) +void flags_setStringFlag (flagcode opt, /*@only@*/ cstring arg) { switch (opt) { @@ -1476,7 +1514,6 @@ extern int flagcode_valueIndex (flagcode f) { /* static valueFlags must be defined */ /*@-usedef@*/ - /*drl bee: sta*/ if (f == valueFlags[i]) /*@=usedef@*/ { return i; @@ -1520,7 +1557,6 @@ extern int flagcode_stringIndex (flagcode f) for (i = 0; i < NUMSTRINGFLAGS; i++) { - /*drl bee: sta*/ /*@-usedef@*/ if (f == stringFlags[i]) /*@=usedef@*/ { return i; @@ -1660,10 +1696,17 @@ flags_processFlags (bool inCommandLine, if (*thisarg == '-' || *thisarg == '+') { bool set = (*thisarg == '+'); - cstring flagname = cstring_fromChars (thisarg + 1); /* skip '-' or '+' */ - flagcode opt = flags_identifyFlag (flagname); + cstring flagname; + flagcode opt; + + if (*(thisarg + 1) == '-') { /* allow -- before flags */ + flagname = cstring_fromChars (thisarg + 2); + } else { + flagname = cstring_fromChars (thisarg + 1); + } - DPRINTF (("Flag: %s", flagcode_unparse (opt))); + opt = flags_identifyFlag (flagname); + DPRINTF (("Flag [%s]: %s", flagname, flagcode_unparse (opt))); if (flagcode_isInvalid (opt)) { @@ -1775,7 +1818,7 @@ flags_processFlags (bool inCommandLine, { if (++i < argc) { - setValueFlag (opt, cstring_fromChars (argv[i])); + flags_setValueFlag (opt, cstring_fromCharsNew (argv[i])); } else { @@ -1791,7 +1834,7 @@ flags_processFlags (bool inCommandLine, { if (++i < argc) { - setValueFlag (opt, cstring_fromChars (argv[i])); + flags_setValueFlag (opt, cstring_fromCharsNew (argv[i])); } else { @@ -1851,7 +1894,7 @@ flags_processFlags (bool inCommandLine, } else { - setStringFlag (opt, cstring_copy (arg)); + flags_setStringFlag (opt, cstring_copy (arg)); } } } @@ -1951,3 +1994,12 @@ flags_processFlags (bool inCommandLine, cstringSList_free (fl); /* evans 2002-07-12: why wasn't this reported!?? */ } + +int flagcode_priority (/*@unused@*/ flagcode code) +{ + /* + ** For now, we do a really simple prioritization: all are 1 + */ + + return 1; +}