** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
- return (cprim_isAnyInt (c2)
- || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ if (context_getFlag (FLG_IGNORESIGNS))
+ {
+ return (cprim_isAnyUnsignedInt (c2)
+ || (cprim_isUnsignedChar (c2) && context_msgCharInt ()));
+ }
+ else
+ {
+ return (cprim_isAnyInt (c2)
+ || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ }
- 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
- {
- ;
- }
+ 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
+ {
+ ;
+ }
+ }
- 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
- || (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;
- 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;
+int cprim_getExpectedBits (cprim c)
+{
+ /* Any basis to these numbers? Just guesses for now..., check ISO spec */
+ switch (c)
+ {
+ case CTX_UNKNOWN:
+ return 0;
+ case CTX_VOID:
+ return 0;
+ case CTX_CHAR:
+ return 8;
+ case CTX_UCHAR:
+ return 8;
+ case CTX_DOUBLE:
+ return 64;
+ case CTX_LDOUBLE:
+ return 128;
+ case CTX_FLOAT:
+ return 32;
+ case CTX_INT:
+ return 32;
+ case CTX_LINT:
+ return 64;
+ case CTX_LLINT:
+ return 128;
+ case CTX_ULLINT:
+ return 128;
+ case CTX_SINT:
+ return 8;
+ case CTX_UINT:
+ return 32;
+ case CTX_ULINT:
+ return 64;
+ case CTX_USINT:
+ return 8;
+ case CTX_UNSIGNEDINTEGRAL:
+ return 64;
+ case CTX_SIGNEDINTEGRAL:
+ return 64;
+ case CTX_ANYINTEGRAL:
+ return 64;
+ default:
+ return 0;
+ }
+}