{
flagcode modeflags[] =
{
- FLG_BOOLINT, FLG_CHARINT, FLG_FLOATDOUBLE,
+ FLG_BOOLINT, FLG_CHARINT, FLG_FLOATDOUBLE, FLG_LONGINT, FLG_SHORTINT,
FLG_ENUMINT, FLG_RELAXQUALS, FLG_FORWARDDECL,
FLG_CHARINDEX, FLG_ABSTVOIDP, FLG_USEALLGLOBS,
FLG_CHARUNSIGNEDCHAR,
}
/*
-** Flag shortcuts.
+** Flag shortcuts
*/
bool context_msgBoolInt (void)
{
- return gc.flags [FLG_BOOLINT];
+ return context_flagOn (FLG_BOOLINT, g_currentloc);
}
bool context_msgCharInt (void)
{
- return gc.flags [FLG_CHARINT];
+ return context_flagOn (FLG_CHARINT, g_currentloc);
}
bool context_msgEnumInt (void)
{
- return gc.flags [FLG_ENUMINT];
+ return context_flagOn (FLG_ENUMINT, g_currentloc);
+}
+
+bool context_msgLongInt (void)
+{
+ return context_flagOn (FLG_LONGINT, g_currentloc);
+}
+
+bool context_msgShortInt (void)
+{
+ return context_flagOn (FLG_SHORTINT, g_currentloc);
}
bool context_msgPointerArith (void)
{
- return gc.flags [FLG_POINTERARITH];
+ return context_flagOn (FLG_POINTERARITH, g_currentloc);
}
bool context_msgStrictOps (void)
{
- return gc.flags [FLG_STRICTOPS];
+ return context_flagOn (FLG_STRICTOPS, g_currentloc);
}
bool context_msgLh (void)
{
if (c1 == c2) return TRUE;
+ DPRINTF (("cprim close: %s / %s", cprim_unparse (c1), cprim_unparse (c2)));
+
if (c1 == CTX_ANYINTEGRAL)
{
if (context_getFlag (FLG_MATCHANYINTEGRAL)
}
}
+
+ DPRINTF (("cprim close: %s / %s", cprim_unparse (c1), cprim_unparse (c2)));
+
if (context_getFlag (FLG_RELAXTYPES))
{
if (cprim_isNumeric (c1) && cprim_isNumeric (c2)) return TRUE;
{
case CTX_CHAR:
case CTX_UCHAR:
- return (cprim_isAnyChar (c2)
- || (cprim_isAnyInt (c2) && (context_msgCharInt ())));
+ if (cprim_isAnyChar (c2)
+ || (cprim_isAnyInt (c2) && (context_msgCharInt ()))) {
+ return TRUE;
+ }
+ break;
case CTX_DOUBLE:
case CTX_FLOAT:
case CTX_LDOUBLE:
- return (c2 == CTX_DOUBLE || c2 == CTX_FLOAT || c2 == CTX_LDOUBLE);
+ if (c2 == CTX_DOUBLE || c2 == CTX_FLOAT || c2 == CTX_LDOUBLE) {
+ return TRUE;
+ }
+ break;
case CTX_INT:
case CTX_LINT:
case CTX_LLINT:
case CTX_UINT:
case CTX_ULINT:
case CTX_USINT:
- return (cprim_isAnyInt (c2)
- || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ if (cprim_isAnyInt (c2)
+ || (cprim_isAnyChar (c2) && context_msgCharInt ())) {
+ return TRUE;
+ }
default:
- return FALSE;
+ ;
}
}
- else
+
+ if (context_getFlag (FLG_IGNORESIGNS))
{
- if (context_getFlag (FLG_IGNORESIGNS))
+ if (c1 == CTX_UCHAR)
{
- if (c1 == CTX_UCHAR)
- {
- c1 = CTX_CHAR;
- }
- else if (c1 == CTX_UINT)
- {
- c1 = CTX_INT;
- }
- else if (c1 == CTX_ULINT)
- {
- c1 = CTX_LINT;
- }
- /* 2001-06-10: This fix provided by Jim Zelenka: */
- else if (c1 == CTX_ULLINT)
- {
- c1 = CTX_LLINT;
- }
- /* End fix */
- else if (c1 == CTX_USINT)
- {
- c1 = CTX_SINT;
- }
- else
- {
- ;
- }
-
- if (c2 == CTX_UCHAR)
- {
- c2 = CTX_CHAR;
- }
- else if (c2 == CTX_UINT)
- {
- c2 = CTX_INT;
- }
- else if (c2 == CTX_ULINT)
- {
- c2 = CTX_LINT;
- }
- /* 2001-06-10: This fix provided by Jim Zelenka: */
- else if (c2 == CTX_ULLINT)
- {
- c2 = CTX_LLINT;
- }
- /* End fix */
- else if (c2 == CTX_USINT)
- {
- c2 = CTX_SINT;
- }
- else
- {
- ;
- }
+ c1 = CTX_CHAR;
}
-
- if (c1 == c2) return TRUE;
-
- if (context_getFlag (FLG_FLOATDOUBLE))
+ else if (c1 == CTX_UINT)
{
- if (c1 == CTX_FLOAT && c2 == CTX_DOUBLE)
- {
- return TRUE;
- }
- if (c2 == CTX_FLOAT && c1 == CTX_DOUBLE)
- {
- return TRUE;
- }
+ c1 = CTX_INT;
+ }
+ else if (c1 == CTX_ULINT)
+ {
+ c1 = CTX_LINT;
+ }
+ /* 2001-06-10: This fix provided by Jim Zelenka: */
+ else if (c1 == CTX_ULLINT)
+ {
+ c1 = CTX_LLINT;
+ }
+ /* End fix */
+ else if (c1 == CTX_USINT)
+ {
+ c1 = CTX_SINT;
+ }
+ else
+ {
+ ;
+ }
+
+ if (c2 == CTX_UCHAR)
+ {
+ c2 = CTX_CHAR;
+ }
+ else if (c2 == CTX_UINT)
+ {
+ c2 = CTX_INT;
+ }
+ else if (c2 == CTX_ULINT)
+ {
+ c2 = CTX_LINT;
+ }
+ /* 2001-06-10: This fix provided by Jim Zelenka: */
+ else if (c2 == CTX_ULLINT)
+ {
+ c2 = CTX_LLINT;
+ }
+ /* End fix */
+ else if (c2 == CTX_USINT)
+ {
+ c2 = CTX_SINT;
}
+ else
+ {
+ ;
+ }
+ }
- if (!deep && context_getFlag (FLG_RELAXQUALS))
+ if (c1 == c2) return TRUE;
+
+ if (context_getFlag (FLG_FLOATDOUBLE))
+ {
+ if (c1 == CTX_FLOAT && c2 == CTX_DOUBLE)
{
- switch (c1)
- {
- case CTX_DOUBLE:
- return (c2 == CTX_FLOAT);
- case CTX_LDOUBLE:
- return (c2 == CTX_DOUBLE || c2 == CTX_FLOAT);
- case CTX_SINT:
- return (c2 == CTX_CHAR && context_msgCharInt ());
- case CTX_INT:
- return (c2 == CTX_SINT
- || (cprim_isAnyChar (c2) && context_msgCharInt ()));
- case CTX_LLINT:
- return (c2 == CTX_SINT
- || c2 == CTX_INT
+ return TRUE;
+ }
+ if (c2 == CTX_FLOAT && c1 == CTX_DOUBLE)
+ {
+ return TRUE;
+ }
+ }
+
+ DPRINTF (("cprim close: %s / %s", cprim_unparse (c1), cprim_unparse (c2)));
+
+ if (!deep && context_getFlag (FLG_RELAXQUALS))
+ {
+ switch (c1)
+ {
+ case CTX_DOUBLE:
+ return (c2 == CTX_FLOAT);
+ case CTX_LDOUBLE:
+ return (c2 == CTX_DOUBLE || c2 == CTX_FLOAT);
+ case CTX_SINT:
+ return ((c2 == CTX_CHAR && context_msgCharInt ())
+ || (c2 == CTX_INT && context_msgShortInt ())
+ || (c2 == CTX_LINT && context_msgShortInt () && context_msgLongInt ()));
+
+ case CTX_INT:
+ return ((c2 == CTX_SINT
+ || (cprim_isAnyChar (c2) && context_msgCharInt ())
+ || (c2 == CTX_LINT && context_msgLongInt ())));
+
+ case CTX_LLINT:
+ return (c2 == CTX_SINT
+ || c2 == CTX_INT
|| c2 == CTX_LINT
- || (cprim_isAnyChar (c2) && context_msgCharInt ()));
- case CTX_ULLINT:
- return (c2 == CTX_USINT
- || c2 == CTX_UINT
- || c2 == CTX_ULINT
- /* 2001-06-10: This fix provided by Jim Zelenka: */
- || (cprim_isAnyChar (c2) && context_msgCharInt ()));
- case CTX_LINT:
- return (c2 == CTX_SINT
- || c2 == CTX_INT
- || (cprim_isAnyChar (c2) && context_msgCharInt ()));
- case CTX_UINT:
- return (c2 == CTX_USINT
- || (c2 == CTX_UCHAR && context_msgCharInt ()));
- case CTX_USINT:
- return (c2 == CTX_UCHAR && context_msgCharInt ());
- case CTX_ULINT:
- /* 2001-06-10: This fix provided by Jim Zelenka: */
- return (c2 == CTX_UINT || c2 == CTX_USINT
- || (c2 == CTX_UCHAR && context_msgCharInt()));
- case CTX_UCHAR:
- return (c2 == CTX_UINT && context_msgCharInt ());
- case CTX_CHAR:
- return ((c2 == CTX_INT || c2 == CTX_SINT)
- && context_msgCharInt ());
- default:
- return FALSE;
- }
+ || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ case CTX_ULLINT:
+ return (c2 == CTX_USINT
+ || c2 == CTX_UINT
+ || c2 == CTX_ULINT
+ /* 2001-06-10: This fix provided by Jim Zelenka: */
+ || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ case CTX_LINT:
+ return (c2 == CTX_SINT
+ || c2 == CTX_INT
+ || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ case CTX_UINT:
+ return (c2 == CTX_USINT
+ || (c2 == CTX_UCHAR && context_msgCharInt ()));
+ case CTX_USINT:
+ return (c2 == CTX_UCHAR && context_msgCharInt ());
+ case CTX_ULINT:
+ /* 2001-06-10: This fix provided by Jim Zelenka: */
+ return (c2 == CTX_UINT || c2 == CTX_USINT
+ || (c2 == CTX_UCHAR && context_msgCharInt()));
+ case CTX_UCHAR:
+ return (c2 == CTX_UINT && context_msgCharInt ());
+ case CTX_CHAR:
+ return ((c2 == CTX_INT || c2 == CTX_SINT)
+ && context_msgCharInt ());
+ default:
+ return FALSE;
}
- else
+ }
+ else
+ {
+ switch (c1)
{
- switch (c1)
- {
- case CTX_DOUBLE:
- case CTX_LDOUBLE:
- return FALSE;
- case CTX_SINT:
- case CTX_INT:
- case CTX_LINT:
- case CTX_LLINT:
- return (c2 == CTX_CHAR && context_msgCharInt ());
- case CTX_UINT:
- case CTX_USINT:
- case CTX_ULINT:
- case CTX_ULLINT:
- return (c2 == CTX_UCHAR && context_msgCharInt ());
- case CTX_UCHAR:
- return (c2 == CTX_UINT && context_msgCharInt ());
- case CTX_CHAR:
- return ((c2 == CTX_INT || c2 == CTX_SINT)
- && context_msgCharInt ());
- default:
- return FALSE;
- }
+ case CTX_DOUBLE:
+ case CTX_LDOUBLE:
+ return FALSE;
+ case CTX_SINT:
+ if (c2 == CTX_INT && context_msgShortInt ()) {
+ return TRUE;
+ }
+ /*@fallthrough@*/
+ case CTX_INT:
+ if (c2 == CTX_INT && context_msgLongInt ()) {
+ return TRUE;
+ }
+
+ if (c2 == CTX_SINT && context_msgShortInt ()) {
+ return TRUE;
+ }
+ /*@fallthrough@*/
+ case CTX_LINT:
+ if (c2 == CTX_INT && context_msgLongInt ()) {
+ return TRUE;
+ }
+ /*@fallthrough@*/
+ case CTX_LLINT:
+ return (c2 == CTX_CHAR && context_msgCharInt ());
+ case CTX_UINT:
+ case CTX_USINT:
+ case CTX_ULINT:
+ case CTX_ULLINT:
+ return (c2 == CTX_UCHAR && context_msgCharInt ());
+ case CTX_UCHAR:
+ return (c2 == CTX_UINT && context_msgCharInt ());
+ case CTX_CHAR:
+ return ((c2 == CTX_INT || c2 == CTX_SINT)
+ && context_msgCharInt ());
+ default:
+ return FALSE;
}
}
}
compoundliterals compoundstmt constannot controldepth csyntax czechnames czechoslovaknames deadparam \
decl divzero enum enumtag exports external fields flags forbody format freearray \
funcpointer functionmacro glob globals impabstract info init inparam internal iter keep libs \
- linked lintcomments list loopexec looptesteffect \
+ linked lintcomments list longint loopexec looptesteffect \
macros macrosef merge mergenull modifies modtest moduncon \
mongoincludes mystrncat noeffect null observer oldstyle outglob outparam \
parentype postnotnull preds prefixes printflike rc refcounts release repexpose \
list:
-$(SPLINTR) list.c -expect 3
+###
+### 2002-12-12: Added test case for +longint and +shortint flags
+###
+
+.PHONY: longint
+longint:
+ -$(SPLINTR) longint.c -expect 3
+ -$(SPLINTR) longint.c +longint -expect 2
+ -$(SPLINTR) longint.c +shortint -expect 2
+ -$(SPLINTR) longint.c +shortint +longint -expect 0
+
###
### 2002-01-01: Added test case for obvious loop execution.
###
unioninit.expect unioninit.c utypes.c \
utypes.expect widestrings.expect widestrings.c \
functionmacro.expect functionmacro.c info.c info.expect \
- loopexec.c looptesteffect.c mergenull.c shifts.c \
+ longint.c loopexec.c looptesteffect.c mergenull.c shifts.c \
manual.expect ./manual/Makefile \
./manual/annotglobs.c ./manual/bool.c ./manual/bool.h ./manual/clauses.c ./manual/employee.h ./manual/exposure.c ./manual/globals.c ./manual/ignore.c ./manual/implicit.c ./manual/intSet.h ./manual/list.c ./manual/loop.c ./manual/macros.c ./manual/modify.c ./manual/mstring.c ./manual/mstring.h ./manual/mstringnn.c ./manual/multiError.c ./manual/names.c ./manual/noeffect.c ./manual/null.c ./manual/only.c ./manual/order.c ./manual/palindrome.c ./manual/palindrome.h ./manual/refs.c ./manual/returned.c ./manual/rgb.c ./manual/rstring.c ./manual/rstring.h ./manual/sample.c ./manual/setChar.c ./manual/setname.c ./manual/setname.h ./manual/special.c ./manual/stack.c ./manual/sumsquares.c ./manual/switch.c ./manual/testpal.c ./manual/types.c ./manual/unique.c ./manual/usedef.c ./manual/bounds.c \
arraydims.expect arraydims.c \