2008-06-03 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Jun 2008 07:46:41 +0000 (07:46 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Jun 2008 07:46:41 +0000 (07:46 +0000)
        Reviewed by Oliver.

        * VM/Machine.cpp:
        (KJS::Machine::privateExecute): Document throw and catch opcodes.

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

JavaScriptCore/ChangeLog
JavaScriptCore/VM/Machine.cpp

index f51aa98b527481420fb92c0bf850d5027b382213..e18014962ccff3e0701d00d221b7a137946a75d8 100644 (file)
@@ -1,3 +1,10 @@
+2008-06-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Document throw and catch opcodes.
+
 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Alexey Proskuryakov.
index acaf6358c9128f8274a3865646455c3c19a42018..05e6fbcbcfaf52bbb51af9108c5b17e263ba2030 100644 (file)
@@ -2255,17 +2255,34 @@ JSValue* Machine::privateExecute(ExecutionFlag flag, ExecState* exec, RegisterFi
         NEXT_OPCODE;
     }
     BEGIN_OPCODE(op_catch) {
+        /* catch ex(r)
+
+           Retrieves the VMs current exception and puts it in register
+           ex. This is only valid after an exception has been raised,
+           and usually forms the beginning of an exception handler.
+        */
         ASSERT(exceptionValue);
         ASSERT(!exec->hadException());
-        int r0 = (++vPC)->u.operand;
-        r[r0].u.jsValue = exceptionValue;
+        int ex = (++vPC)->u.operand;
+        r[ex].u.jsValue = exceptionValue;
         exceptionValue = 0;
+
         ++vPC;
         NEXT_OPCODE;
     }
     BEGIN_OPCODE(op_throw) {
-        int e = (++vPC)->u.operand;
-        exceptionValue = r[e].u.jsValue;
+        /* throw ex(r)
+
+           Throws register ex as an exception. This involves three
+           steps: first, it is set as the current exception in the
+           VM's internal state, then the stack is unwound until an
+           exception handler or a native code boundary is found, and
+           then control resumes at the exception handler if any or
+           else the script returns control to the nearest native caller.
+        */
+
+        int ex = (++vPC)->u.operand;
+        exceptionValue = r[ex].u.jsValue;
         handlerVPC = throwException(exec, exceptionValue, registerBase, vPC, codeBlock, k, scopeChain, r);
         if (!handlerVPC) {
             *exception = exceptionValue;