/*****************************************************************************/
-
+
+/* cc65 */
#include "codegen.h"
#include "error.h"
#include "expr.h"
+#include "loadexpr.h"
#include "scanner.h"
#include "testexpr.h"
* defined above. If the jump is always true, a warning is output.
*/
{
- ExprDesc lval;
+ ExprDesc Expr;
unsigned Result;
- /* Evaluate the expression */
- expr (hie0, InitExprDesc (&lval));
-
- /* Check for a boolean expression */
- CheckBoolExpr (&lval);
+ /* Read a boolean expression */
+ BoolExpr (hie0, &Expr);
/* Check for a constant expression */
- if (ED_IsRVal (&lval) && lval.Flags == E_MCONST) {
+ if (ED_IsConstAbs (&Expr)) {
/* Result is constant, so we know the outcome */
- Result = (lval.ConstVal != 0);
+ Result = (Expr.IVal != 0);
/* Constant rvalue */
- if (!Invert && lval.ConstVal == 0) {
+ if (!Invert && Expr.IVal == 0) {
g_jump (Label);
Warning ("Unreachable code");
- } else if (Invert && lval.ConstVal != 0) {
+ } else if (Invert && Expr.IVal != 0) {
g_jump (Label);
}
Result = TESTEXPR_UNKNOWN;
/* If the expr hasn't set condition codes, set the force-test flag */
- if ((lval.Test & E_CC) == 0) {
- lval.Test |= E_FORCETEST;
+ if (!ED_IsTested (&Expr)) {
+ ED_MarkForTest (&Expr);
}
/* Load the value into the primary register */
- ExprLoad (CF_FORCECHAR, &lval);
+ LoadExpr (CF_FORCECHAR, &Expr);
/* Generate the jump */
if (Invert) {