}
tree->decorated = 0;
tree = newNode (CAST, newAst_LINK (newLink), tree);
+ tree->lineno = tree->right->lineno;
/* keep unsigned type during cast to smaller type,
but not when promoting from char to int */
if (!upCasted)
case ':':
case '|':
case '^':
+ case '*':
+ case '+':
+ case '-':
+ case LABEL:
return resultType;
case '&':
if (!tree->right)
return RESULT_TYPE_NONE;
else
return resultType;
+ case IFX:
+ return RESULT_TYPE_IFX;
default:
return RESULT_TYPE_NONE;
}
}
LRVAL (tree) = RRVAL (tree) = 1;
+
TETYPE (tree) = getSpec (TTYPE (tree) =
computeType (LTYPE (tree),
RTYPE (tree),
- ! (IS_UNSIGNED (LTYPE (tree)) && IS_UNSIGNED (RTYPE (tree)))));
+ resultType == RESULT_TYPE_CHAR ? FALSE : TRUE));
/* if right is a literal and */
/* left is also a division by a literal then */
TETYPE (tree) = getSpec (TTYPE (tree) =
computeType (LTYPE (tree),
RTYPE (tree),
- ! (IS_UNSIGNED (LTYPE (tree)) && IS_UNSIGNED (RTYPE (tree)))));
+ resultType == RESULT_TYPE_CHAR ? FALSE : TRUE));
return tree;
/*------------------------------------------------------------------*/
computeType (LTYPE (tree),
RTYPE (tree),
resultType == RESULT_TYPE_CHAR ? FALSE : TRUE));
-
+
return tree;
/*------------------------------------------------------------------*/
tree->left = addCast (tree->left, resultType, TRUE);
TETYPE (tree) = getSpec (TTYPE (tree) =
computeType (LTYPE (tree),
- RTYPE (tree),
+ NULL,
resultType == RESULT_TYPE_CHAR ? FALSE : TRUE));
}
else /* RIGHT_OP */
}
if (tree->opval.op == '>')
{
- /* if the parent is an ifx, then we could do */
- /* return tree->left; */
+ if (resultType == RESULT_TYPE_IFX)
+ {
+ /* the parent is an ifx: */
+ /* if (unsigned value) */
+ return tree->left;
+ }
+
+ /* (unsigned value) ? 1 : 0 */
tree->opval.op = '?';
tree->right = newNode (':',
newAst_VALUE (constVal ("1")),