]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
More compaction of expr.c. (CVS 1184)
authordrh <drh@noemail.net>
Fri, 16 Jan 2004 16:42:53 +0000 (16:42 +0000)
committerdrh <drh@noemail.net>
Fri, 16 Jan 2004 16:42:53 +0000 (16:42 +0000)
FossilOrigin-Name: 92e7f78057c4e8f6214b6e0a2d80c3ffcbfdf68e

manifest
manifest.uuid
src/expr.c
src/vdbeaux.c

index 4ce91d165f1e616dac2eec698e1277ed5ffb4592..b8433dee10e9a5e9082781db363af4e34b958c5f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Incremental\scode\scompaction\sin\sexpr.c.\s\sNow\sabout\s4%\ssmaller.\nLots\smore\swork\sto\sdo.\s(CVS\s1183)
-D 2004-01-16T15:55:38
+C More\scompaction\sof\sexpr.c.\s(CVS\s1184)
+D 2004-01-16T16:42:54
 F Makefile.in 0515ff9218ad8d5a8f6220f0494b8ef94c67013b
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -31,7 +31,7 @@ F src/copy.c 9e47975ea96751c658bcf1a0c4f0bb7c6ee61e73
 F src/date.c bb89fdb9c89e367b9a728c58cb96e4823974a2c1
 F src/delete.c 0f81e6799c089487615d38e042a2de4d2d6192bc
 F src/encode.c 9e70ea1e4e746f23f18180949e94f1bb1c2220d3
-F src/expr.c 5ecbce47b7f163bb1f64bc5e19fbb115ab468f98
+F src/expr.c e6a05bec1ca8d80d0901e5ff59c4ce3d9553f6cc
 F src/func.c 564c0bbe93c290774b305c0199237b8e8bcbda53
 F src/hash.c 9b56ef3b291e25168f630d5643a4264ec011c70e
 F src/hash.h 3247573ab95b9dd90bcca0307a75d9a16da1ccc7
@@ -64,7 +64,7 @@ F src/vacuum.c 77485a64a6e4e358170f150fff681c1624a092b0
 F src/vdbe.c 802364c5b1b989ec4592aaffcbf575fa3eb0478b
 F src/vdbe.h 3957844e46fea71fd030e78f6a3bd2f7e320fb43
 F src/vdbeInt.h eab39bc209b267271bc4afbcf4991d6c229bae9a
-F src/vdbeaux.c 6f2d43643f83656b2555b7ee320397805db11d4c
+F src/vdbeaux.c dae9f8de7140daebbd621bfccb0982e17c352a9f
 F src/where.c 1302d728bd338c237e6a8282e4e3eadbbdf11e45
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
 F test/attach.test c26848402e7ac829e043e1fa5e0eb87032e5d81d
@@ -180,7 +180,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3
 F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
-P 42c79edc2e8d1051b3bca915b4b205c601b8077f
-R 36f16e7773dddd52ae0de77fcf909446
+P d292ba5148059dce3893b80eabdca4af9f75194e
+R a82c6cee014268ec5c5592ae977adf6a
 U drh
-Z 7d1bc38e295a20482fad97622944af0e
+Z 8377cc2fd09d8eae60d98fbd7e1551ff
index 0ec3fbc59a96b02edb896c6c7fd2f6edaa95feeb..a4c7a31cdfa9d63f7254d94c078073adca0b66e7 100644 (file)
@@ -1 +1 @@
-d292ba5148059dce3893b80eabdca4af9f75194e
\ No newline at end of file
+92e7f78057c4e8f6214b6e0a2d80c3ffcbfdf68e
\ No newline at end of file
index 513cc6f3ebf00bcd55c2abb723d2a2d83a3060ec..8853fb9ecf3bd492f314aa17883c6a8b34171dd7 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains routines used for analyzing expressions and
 ** for generating VDBE code that evaluates expressions in SQLite.
 **
-** $Id: expr.c,v 1.105 2004/01/16 15:55:38 drh Exp $
+** $Id: expr.c,v 1.106 2004/01/16 16:42:54 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -242,7 +242,6 @@ Select *sqliteSelectDup(Select *p){
 ** initially NULL, then create a new expression list.
 */
 ExprList *sqliteExprListAppend(ExprList *pList, Expr *pExpr, Token *pName){
-  int i;
   if( pList==0 ){
     pList = sqliteMalloc( sizeof(ExprList) );
     if( pList==0 ){
@@ -1013,26 +1012,17 @@ void sqliteExprCode(Parse *pParse, Expr *pExpr){
       }
       break;
     }
+    case TK_STRING:
+    case TK_FLOAT:
     case TK_INTEGER: {
-      if( !sqliteFitsIn32Bits(pExpr->token.z) ){
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-      }else{
+      if( pExpr->op==TK_INTEGER && sqliteFitsIn32Bits(pExpr->token.z) ){
         sqliteVdbeAddOp(v, OP_Integer, atoi(pExpr->token.z), 0);
+      }else{
+        sqliteVdbeAddOp(v, OP_String, 0, 0);
       }
-      sqliteVdbeChangeP3(v, -1, pExpr->token.z, pExpr->token.n);
-      break;
-    }
-    case TK_FLOAT: {
-      sqliteVdbeAddOp(v, OP_String, 0, 0);
       assert( pExpr->token.z );
       sqliteVdbeChangeP3(v, -1, pExpr->token.z, pExpr->token.n);
-      break;
-    }
-    case TK_STRING: {
-      int addr = sqliteVdbeAddOp(v, OP_String, 0, 0);
-      assert( pExpr->token.z );
-      sqliteVdbeChangeP3(v, addr, pExpr->token.z, pExpr->token.n);
-      sqliteVdbeDequoteP3(v, addr);
+      sqliteVdbeDequoteP3(v, -1);
       break;
     }
     case TK_NULL: {
@@ -1081,23 +1071,6 @@ void sqliteExprCode(Parse *pParse, Expr *pExpr){
       sqliteVdbeAddOp(v, OP_Concat, 2, 0);
       break;
     }
-    case TK_UPLUS: {
-      Expr *pLeft = pExpr->pLeft;
-      if( pLeft && pLeft->op==TK_INTEGER ){
-        if( sqliteFitsIn32Bits(pLeft->token.z) ){
-          sqliteVdbeAddOp(v, OP_Integer, atoi(pLeft->token.z), 0);
-        }else{
-          sqliteVdbeAddOp(v, OP_String, 0, 0);
-        }
-        sqliteVdbeChangeP3(v, -1, pLeft->token.z, pLeft->token.n);
-      }else if( pLeft && pLeft->op==TK_FLOAT ){
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pLeft->token.z, pLeft->token.n);
-      }else{
-        sqliteExprCode(pParse, pExpr->pLeft);
-      }
-      break;
-    }
     case TK_UMINUS: {
       assert( pExpr->pLeft );
       if( pExpr->pLeft->op==TK_FLOAT || pExpr->pLeft->op==TK_INTEGER ){
@@ -1186,6 +1159,7 @@ void sqliteExprCode(Parse *pParse, Expr *pExpr){
       sqliteVdbeAddOp(v, OP_And, 0, 0);
       break;
     }
+    case TK_UPLUS:
     case TK_AS: {
       sqliteExprCode(pParse, pExpr->pLeft);
       break;
index 6249a29f0bc091de541071553a70d86aeb7725df..ebeed29acaa127edb13915a2e29931cb7e62daaa 100644 (file)
@@ -280,7 +280,11 @@ void sqliteVdbeChangeP3(Vdbe *p, int addr, const char *zP3, int n){
 void sqliteVdbeDequoteP3(Vdbe *p, int addr){
   Op *pOp;
   assert( p->magic==VDBE_MAGIC_INIT );
-  if( p->aOp==0 || addr<0 || addr>=p->nOp ) return;
+  if( p->aOp==0 ) return;
+  if( addr<0 || addr>=p->nOp ){
+    addr = p->nOp - 1;
+    if( addr<0 ) return;
+  }
   pOp = &p->aOp[addr];
   if( pOp->p3==0 || pOp->p3[0]==0 ) return;
   if( pOp->p3type==P3_POINTER ) return;