:-) (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($$);}