:-) (CVS 47)

FossilOrigin-Name: 729d6586b8377d0e6cefa64c8cf3d883e9f0ddc3
diff --git a/src/expr.c b/src/expr.c
index 1efd74e..78feb8f 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -23,7 +23,7 @@
 *************************************************************************
 ** This file contains C code routines used for processing expressions
 **
-** $Id: expr.c,v 1.3 2000/06/03 18:06:53 drh Exp $
+** $Id: expr.c,v 1.4 2000/06/03 19:19:41 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -364,11 +364,11 @@
     case TK_ISNULL:
     case TK_NOTNULL: {
       int dest;
-      sqliteVdbeAddOp(v, OP_Integer, 0, 0, 0, 0);
+      sqliteVdbeAddOp(v, OP_Integer, 1, 0, 0, 0);
       sqliteExprCode(pParse, pExpr->pLeft);
       dest = sqliteVdbeCurrentAddr(v) + 2;
       sqliteVdbeAddOp(v, op, 0, dest, 0, 0);
-      sqliteVdbeAddOp(v, OP_AddImm, 1, 0, 0, 0);
+      sqliteVdbeAddOp(v, OP_AddImm, -1, 0, 0, 0);
       break;
     }
     case TK_FUNCTION: {
diff --git a/src/parse.y b/src/parse.y
index 41b276b..69be148 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -26,7 +26,7 @@
 ** the parser.  Lemon will also generate a header file containing
 ** numeric codes for all of the tokens.
 **
-** @(#) $Id: parse.y,v 1.7 2000/06/03 18:06:53 drh Exp $
+** @(#) $Id: parse.y,v 1.8 2000/06/03 19:19:41 drh Exp $
 */
 %token_prefix TK_
 %token_type {Token}
@@ -242,6 +242,7 @@
   sqliteSetNString(&A->token.z, "-", 1, X.z, X.n, 0);
 }
 item(A) ::= STRING(X).       {A = sqliteExpr(TK_STRING, 0, 0, &X);}
+item(A) ::= NULL.            {A = sqliteExpr(TK_NULL, 0, 0, 0);}
 
 %type fieldlist_opt {IdList*}
 %destructor fieldlist_opt {sqliteIdListDelete($$);}
@@ -255,11 +256,12 @@
 
 %left OR.
 %left AND.
+%right NOT.
 %left EQ NE ISNULL NOTNULL IS LIKE GLOB.
 %left GT GE LT LE.
 %left PLUS MINUS.
 %left STAR SLASH PERCENT.
-%right NOT.
+%right UMINUS.
 
 %type expr {Expr*}
 %destructor expr {sqliteExprDelete($$);}
@@ -293,8 +295,8 @@
 expr(A) ::= expr(X) ISNULL.        {A = sqliteExpr(TK_ISNULL, X, 0, 0);}
 expr(A) ::= expr(X) NOTNULL.       {A = sqliteExpr(TK_NOTNULL, X, 0, 0);}
 expr(A) ::= NOT expr(X).           {A = sqliteExpr(TK_NOT, X, 0, 0);}
-expr(A) ::= MINUS expr(X). [NOT]   {A = sqliteExpr(TK_UMINUS, X, 0, 0);}
-expr(A) ::= PLUS expr(X). [NOT]    {A = X;}
+expr(A) ::= MINUS expr(X). [UMINUS]   {A = sqliteExpr(TK_UMINUS, X, 0, 0);}
+expr(A) ::= PLUS expr(X). [UMINUS]    {A = X;}
 
 %type exprlist {ExprList*}
 %destructor exprlist {sqliteExprListDelete($$);}