<rdar://problem/6111648> JavaScript exceptions fail if the scope chain includes the...
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Jul 2008 08:00:19 +0000 (08:00 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Jul 2008 08:00:19 +0000 (08:00 +0000)
Reviewed by Alexey Proskuryakov.

In an attempt to remove the branch I just added to KJS::depth I
used the existence of a Variable Object at a point in the scope
chain as an indicator of function or global scope activation.
However this assumption results in incorrect behaviour if the
global object is injected into the scope chain with 'with'.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@35445 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/VM/Machine.cpp

index 6393375..b62aa50 100644 (file)
@@ -1,3 +1,18 @@
+2008-07-30  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        <rdar://problem/6111648> JavaScript exceptions fail if the scope chain includes the global object
+
+        In an attempt to remove the branch I just added to KJS::depth I
+        used the existence of a Variable Object at a point in the scope
+        chain as an indicator of function or global scope activation.
+        However this assumption results in incorrect behaviour if the
+        global object is injected into the scope chain with 'with'.
+
+        * VM/Machine.cpp:
+        (KJS::depth):
+
 2008-07-30  Alexey Proskuryakov  <ap@webkit.org>
 
         Reviewed by Geoff Garen.
index e18d7fe..00dea6f 100644 (file)
@@ -85,8 +85,10 @@ static int depth(ScopeChain& sc)
     int scopeDepth = 0;
     ScopeChainIterator iter = sc.begin();
     ScopeChainIterator end = sc.end();
-    while (!(*iter)->isVariableObject()) {
+    while (!(*iter)->isActivationObject()) {
         ++iter;
+        if (iter == end)
+            break;
         ++scopeDepth;
     }
     return scopeDepth;