[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kjs
From:       Maks Orlovich <maksim () kde ! org>
Date:       2005-07-06 22:11:24
Message-ID: 1120687884.488493.26283.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 432299 by orlovich:

Do not needlessly convert things to int on op-assign.
Makes += for strings significantly faster, which should 
help at least some webpages.

Partial merge from JSC


 M  +19 -8     nodes.cpp  


--- trunk/KDE/kdelibs/kjs/nodes.cpp #432298:432299
@@ -1565,8 +1565,8 @@
     Value v1 = l.getValue(exec);
     Value v2 = expr->evaluate(exec);
     KJS_CHECKEXCEPTIONVALUE
-    int i1 = v1.toInt32(exec);
-    int i2 = v2.toInt32(exec);
+    int i1;
+    int i2;
     unsigned int ui;
     switch (oper) {
     case OpMultEq:
@@ -1582,23 +1582,34 @@
       v = add(exec, v1, v2, '-');
       break;
     case OpLShift:
-      v = Number(i1 <<= i2);
+      i1 = v1.toInt32(exec);
+      i2 = v2.toInt32(exec);
+      v = Number(i1 << i2);
       break;
     case OpRShift:
-      v = Number(i1 >>= i2);
+      i1 = v1.toInt32(exec);
+      i2 = v2.toInt32(exec);
+      v = Number(i1 >> i2);
       break;
     case OpURShift:
       ui = v1.toUInt32(exec);
-      v = Number(ui >>= i2);
+      i2 = v2.toInt32(exec);
+      v = Number(ui >> i2);
       break;
     case OpAndEq:
-      v = Number(i1 &= i2);
+      i1 = v1.toInt32(exec);
+      i2 = v2.toInt32(exec);
+      v = Number(i1 & i2);
       break;
     case OpXOrEq:
-      v = Number(i1 ^= i2);
+      i1 = v1.toInt32(exec);
+      i2 = v2.toInt32(exec);
+      v = Number(i1 ^ i2);
       break;
     case OpOrEq:
-      v = Number(i1 |= i2);
+      i1 = v1.toInt32(exec);
+      i2 = v2.toInt32(exec);
+      v = Number(i1 | i2);
       break;
     case OpModEq: {
       double d1 = v1.toNumber(exec);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic