r9299: fixed the evaluation of pointer expressions that evaluate to boolean
authorAndrew Tridgell <tridge@samba.org>
Sat, 13 Aug 2005 03:16:03 +0000 (03:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:33:22 +0000 (13:33 -0500)
source/lib/appweb/ejs/ejsParser.c

index 5b8b84f7b3c0db754f3e5dbcac060f38bde777bb..871907dd10e87adf4ea9c61b55bc8cec3f177511 100644 (file)
@@ -48,6 +48,7 @@ static int            evalExpr(Ejs *ep, MprVar *lhs, int rel, MprVar *rhs);
 static int             evalFloatExpr(Ejs *ep, double l, int rel, double r);
 #endif 
 static int             evalBoolExpr(Ejs *ep, bool l, int rel, bool r);
+static int             evalPtrExpr(Ejs *ep, void *l, int rel, void *r);
 static int             evalNumericExpr(Ejs *ep, MprNum l, int rel, MprNum r);
 static int             evalStringExpr(Ejs *ep, MprVar *lhs, int rel, MprVar *rhs);
 static int             evalFunction(Ejs *ep, MprVar *obj, int flags);
@@ -1670,8 +1671,8 @@ static int evalExpr(Ejs *ep, MprVar *lhs, int rel, MprVar *rhs)
                return 0;
 
        case MPR_TYPE_PTR:
-               mprCopyVarValue(&ep->result, mprCreateBoolVar(lhs->ptr == rhs->ptr), 0);
-               return 0;
+               rc = evalPtrExpr(ep, lhs->ptr, rel, rhs->ptr);
+               break;
 
        case MPR_TYPE_BOOL:
                rc = evalBoolExpr(ep, lhs->boolean, rel, rhs->boolean);
@@ -1806,6 +1807,28 @@ static int evalBoolExpr(Ejs *ep, bool l, int rel, bool r)
        return 0;
 }
 
+static int evalPtrExpr(Ejs *ep, void *l, int rel, void *r) 
+{
+       bool    lval;
+
+       switch (rel) {
+       case EJS_EXPR_EQ:
+               lval = l == r;
+               break;
+       case EJS_EXPR_NOTEQ:
+               lval = l != r;
+               break;
+       case EJS_EXPR_BOOL_COMP:
+               lval = (r == NULL) ? 1 : 0;
+               break;
+       default:
+               ejsError(ep, "Bad operator %d", rel);
+               return -1;
+       }
+       mprCopyVarValue(&ep->result, mprCreateBoolVar(lval), 0);
+       return 0;
+}
+
 /******************************************************************************/
 /*
  *     Expressions with numeric operands