X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcc65%2Ftestexpr.c;h=5b2ae3d02dbddaec1e0b282c2e0d2396ea0bca1e;hb=f196e7c5c93c3f29f1bb672d70be20e120d68729;hp=a8d559f4f3a3e074df2715eb41b1f0e9382a36e7;hpb=878e4f13524e91fbcdc8c97cc461724231339483;p=cc65 diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index a8d559f4f..5b2ae3d02 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -32,10 +32,12 @@ /*****************************************************************************/ - + +/* cc65 */ #include "codegen.h" #include "error.h" #include "expr.h" +#include "loadexpr.h" #include "scanner.h" #include "testexpr.h" @@ -53,26 +55,23 @@ unsigned Test (unsigned Label, int Invert) * 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); } @@ -82,12 +81,12 @@ unsigned Test (unsigned Label, int Invert) 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) {