/*
** Splint - annotation-assisted static program checker
** Copyright (C) 1994-2003 University of Virginia,
** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the
** Free Software Foundation; either version 2 of the License, or (at your
** option) any later version.
**
** This program is distributed in the hope that it will be useful, but
** WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** General Public License for more details.
**
** The GNU General Public License is available from http://www.gnu.org/ or
** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA.
**
** For information on splint: info@splint.org
** To report a bug: splint-bug@splint.org
** For more information: http://www.splint.org
*/
/*
** lltok.c
*/
# include "splintMacros.nf"
# include "basic.h"
# include "cgrammar.h"
# include "cgrammar_tokens.h"
bool
lltok_isSemi (lltok tok)
{
return (tok->tok == TSEMI);
}
bool
lltok_isMult (lltok tok)
{
return (tok->tok == TMULT);
}
bool lltok_isIncOp (lltok tok)
{
return (tok->tok == INC_OP);
}
bool lltok_isDecOp (lltok tok)
{
return (tok->tok == DEC_OP);
}
/* DRL added this function 10/23/2000 for boolean stuff */
bool lltok_isEqOp (lltok tok)
{
return (tok->tok == EQ_OP);
}
bool lltok_isNotEqOp (lltok tok)
{
return (tok->tok == NE_OP);
}
/* DRL added this function 10/25/2000 for boolean stuff */
bool lltok_isAndOp (lltok tok)
{
return (tok->tok == AND_OP);
}
bool lltok_isOrOp (lltok tok)
{
return (tok->tok == OR_OP);
}
bool lltok_isNotOp (lltok tok)
{
return (tok->tok == TEXCL);
}
/*drl7x added this function 11/20/00 */
bool lltok_isLt_Op (lltok tok)
{
return (tok->tok == TLT);
}
bool lltok_isGt_Op (lltok tok)
{
return (tok->tok == TGT);
}
bool lltok_isGe_Op (lltok tok)
{
return (tok->tok == GE_OP);
}
bool lltok_isLe_Op (lltok tok)
{
return (tok->tok == LE_OP);
}
/* end drl7x added */
/*drl7x added 11 30 2000*/
bool lltok_isPlus_Op (lltok tok)
{
return (tok->tok == TPLUS);
}
bool lltok_isMinus_Op (lltok tok)
{
return (tok->tok == TMINUS);
}
/*drl7x added 6 6 2001 */
bool lltok_isAmpersand_Op (lltok tok)
{
return (tok->tok == TAMPERSAND);
}
/*end drl added */
/*drl7x added 6 15 2001 */
bool lltok_isExcl_Op (lltok tok)
{
return (tok->tok == TEXCL);
}
bool lltok_isTilde_Op (lltok tok)
{
return (tok->tok == TTILDE);
}
/*end drl added */
bool lltok_isEnsures (lltok tok)
{
return (tok->tok == QPOSTCLAUSE);
}
bool lltok_isRequires (lltok tok)
{
return (tok->tok == QPRECLAUSE);
}
cstring
lltok_unparse (lltok tok)
{
char *lit;
switch (tok->tok)
{
case BREAK: lit = "break"; break;
case CASE: lit = "case"; break;
case CONTINUE: lit = "continue"; break;
case DEFAULT: lit = "default"; break;
case DO: lit = "do"; break;
case CDOUBLE: lit = "double"; break;
case CELSE: lit = "else"; break;
case CFOR: lit = "for"; break;
case GOTO: lit = "goto"; break;
case CIF: lit = "if"; break;
case RETURN: lit = "return"; break;
case CSIZEOF: lit = "sizeof"; break;
case SWITCH: lit = "switch"; break;
case WHILE: lit = "while"; break;
case CSTRUCT: lit = "struct"; break;
case CTYPEDEF: lit = "typedef"; break;
case CUNION: lit = "union"; break;
case CENUM: lit = "enum"; break;
case QEXTERN: lit = "extern"; break;
case QAUTO: lit = "auto"; break;
case QSTATIC: lit = "static"; break;
case RIGHT_ASSIGN: lit = ">>="; break;
case LEFT_ASSIGN: lit = "<<="; break;
case ADD_ASSIGN: lit = "+="; break;
case SUB_ASSIGN: lit = "-="; break;
case MUL_ASSIGN: lit = "*="; break;
case DIV_ASSIGN: lit = "/="; break;
case MOD_ASSIGN: lit = "%="; break;
case AND_ASSIGN: lit = "&="; break;
case XOR_ASSIGN: lit = "^="; break;
case OR_ASSIGN: lit = "|="; break;
case RIGHT_OP: lit = ">>"; break;
case LEFT_OP: lit = "<<"; break;
case INC_OP: lit = "++"; break;
case DEC_OP: lit = "--"; break;
case ARROW_OP: lit = "->"; break;
case AND_OP: lit = "&&"; break;
case OR_OP: lit = "||"; break;
case LE_OP: lit = "<="; break;
case GE_OP: lit = ">="; break;
case EQ_OP: lit = "=="; break;
case NE_OP: lit = "!="; break;
case TSEMI: lit = ";"; break;
case TLBRACE: lit = "{"; break;
case TRBRACE: lit = "}"; break;
case TCOMMA: lit = ","; break;
case TCOLON: lit = ":"; break;
case TASSIGN: lit = "="; break;
case TLPAREN: lit = "("; break;
case TRPAREN: lit = ")"; break;
case TLSQBR: lit = "["; break;
case TRSQBR: lit = "]"; break;
case TDOT: lit = "."; break; /* evans 2003-05-31: Fix reported by psanzani. */
case TAMPERSAND: lit = "&"; break;
case TEXCL: lit = "!"; break;
case TTILDE: lit = "~"; break;
case TMINUS: lit = "-"; break;
case TPLUS: lit = "+"; break;
case TMULT: lit = "*"; break;
case TDIV: lit = "/"; break;
case TPERCENT: lit = "%"; break;
case TLT: lit = "<"; break;
case TGT: lit = ">"; break;
case TCIRC: lit = "^"; break;
case TBAR: lit = "|"; break;
case TQUEST: lit = "?"; break;
case QOUT: lit = "out"; break;
case QONLY: lit = "only"; break;
case QKEEP: lit = "keep"; break;
case QKEPT: lit = "kept"; break;
case QTEMP: lit = "temp"; break;
case QSHARED: lit = "shared"; break;
case QUNIQUE: lit = "unique"; break;
case QREF: lit = "ref"; break;
case QCHECKED: lit = "checked"; break;
case QCHECKEDSTRICT: lit = "checkedstrict"; break;
case QCHECKMOD: lit = "checkmod"; break;
case QUNCHECKED: lit = "unchecked"; break;
case QPRECLAUSE: lit = "requires"; break;
case QPOSTCLAUSE: lit = "ensures"; break;
case QTRUENULL: lit = "truenull"; break;
case QFALSENULL: lit = "falsenull"; break;
case QRETURNED: lit = "returned"; break;
case QEXPOSED: lit = "exposed"; break;
case QNULL: lit = "null"; break;
case QRELNULL: lit = "refnull"; break;
case QOBSERVER: lit = "observer"; break;
case QPARTIAL: lit = "partial"; break;
case QSPECIAL: lit = "special"; break;
case QUSES: lit = "uses"; break;
case QDEFINES: lit = "defines"; break;
case QALLOCATES: lit = "allocates"; break;
case QSETS: lit = "sets"; break;
case QRELEASES: lit = "releases"; break;
case QSETBUFFERSIZE: lit = "setBufferSize"; break;
case QSETSTRINGLENGTH: lit = "setStringLength"; break;
BADDEFAULT;
}
return cstring_makeLiteralTemp (lit);
}
lltok
lltok_create (int tok, fileloc loc)
{
lltok l = (lltok) dmalloc (sizeof (*l));
l->tok = tok;
l->loc = loc;
DPRINTF (("Create: %s [%p]", lltok_unparse (l), loc));
return (l);
}
void lltok_free (lltok t)
{
fileloc_free (t->loc);
sfree (t);
}
void lltok_free2 (lltok t1, lltok t2)
{
lltok_free (t1);
lltok_free (t2);
}
void lltok_free3 (lltok t1, lltok t2, lltok t3)
{
lltok_free (t1);
lltok_free (t2);
lltok_free (t3);
}
syntax highlighted by Code2HTML, v. 0.9.1