<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[37433] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/37433">37433</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2008-10-08 17:40:43 -0700 (Wed, 08 Oct 2008)</dd>
</dl>

<h3>Log Message</h3>
<pre>JavaScriptCore:

2008-10-08  Darin Adler  &lt;darin@apple.com&gt;

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21403
          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation

        Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
        client over to the new name.

        Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
        as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
        accessor functions to get at things in the frame.

        Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
        JSGlobalData* and in other cases eliminating them entirely.

        * API/JSObjectRef.cpp:
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeFunction):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectDeleteProperty):
        * API/OpaqueJSString.cpp:
        * API/OpaqueJSString.h:
        * VM/CTI.cpp:
        (JSC::CTI::getConstant):
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp):
        (JSC::CodeGenerator::emitLoad):
        (JSC::CodeGenerator::emitUnexpectedLoad):
        (JSC::CodeGenerator::emitConstruct):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAddSlowCase):
        (JSC::jsAdd):
        (JSC::jsTypeStringForValue):
        (JSC::Machine::resolve):
        (JSC::Machine::resolveSkip):
        (JSC::Machine::resolveGlobal):
        (JSC::inlineResolveBase):
        (JSC::Machine::resolveBase):
        (JSC::Machine::resolveBaseAndProperty):
        (JSC::Machine::resolveBaseAndFunc):
        (JSC::Machine::slideRegisterWindowForCall):
        (JSC::isNotObject):
        (JSC::Machine::callEval):
        (JSC::Machine::dumpCallFrame):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::throwException):
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
        (JSC::Machine::execute):
        (JSC::Machine::debug):
        (JSC::Machine::createExceptionScope):
        (JSC::cachePrototypeChain):
        (JSC::Machine::tryCachePutByID):
        (JSC::Machine::tryCacheGetByID):
        (JSC::Machine::privateExecute):
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::retrieveCaller):
        (JSC::Machine::retrieveLastCaller):
        (JSC::Machine::findFunctionCallFrame):
        (JSC::Machine::getArgumentsData):
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::getCTIArrayLengthTrampoline):
        (JSC::Machine::getCTIStringLengthTrampoline):
        (JSC::Machine::tryCTICacheGetByID):
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_end):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_timeout_check):
        (JSC::Machine::cti_op_loop_if_less):
        (JSC::Machine::cti_op_loop_if_lesseq):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_second):
        (JSC::Machine::cti_op_put_by_id_generic):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_put_by_val):
        (JSC::Machine::cti_op_put_by_val_array):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_jless):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_post_dec):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_get_pnames):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_push_scope):
        (JSC::Machine::cti_op_pop_scope):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_jmp_scopes):
        (JSC::Machine::cti_op_put_by_index):
        (JSC::Machine::cti_op_switch_imm):
        (JSC::Machine::cti_op_switch_char):
        (JSC::Machine::cti_op_switch_string):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_put_getter):
        (JSC::Machine::cti_op_put_setter):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_op_debug):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * VM/Register.h:
        * VM/RegisterFile.h:
        * kjs/Arguments.h:
        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::type):
        (JSC::DebuggerCallFrame::thisObject):
        (JSC::DebuggerCallFrame::evaluate):
        * kjs/DebuggerCallFrame.h:
        * kjs/ExecState.cpp:
        (JSC::CallFrame::thisValue):
        * kjs/ExecState.h:
        * kjs/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::argumentsGetter):
        * kjs/JSActivation.h:
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * kjs/JSVariableObject.h:
        * kjs/Parser.cpp:
        (JSC::Parser::parse):
        * kjs/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * kjs/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * kjs/Shell.cpp:
        (prettyPrintScript):
        * kjs/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * kjs/identifier.cpp:
        (JSC::Identifier::checkSameIdentifierTable):
        * kjs/interpreter.cpp:
        (JSC::Interpreter::checkSyntax):
        (JSC::Interpreter::evaluate):
        * kjs/nodes.cpp:
        (JSC::ThrowableExpressionData::emitThrowError):
        (JSC::RegExpNode::emitCode):
        (JSC::ArrayNode::emitCode):
        (JSC::InstanceOfNode::emitCode):
        * kjs/nodes.h:
        * kjs/regexp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        * kjs/regexp.h:
        * profiler/HeavyProfile.h:
        * profiler/Profile.h:
        * wrec/WREC.cpp:
        * wrec/WREC.h:

WebKit/mac:

2008-10-08  Darin Adler  &lt;darin@apple.com&gt;

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21403
          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger): Update since DebuggerCallFrame is simpler now.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkJavaScriptCoreAPIJSObjectRefcpp">trunk/JavaScriptCore/API/JSObjectRef.cpp</a></li>
<li><a href="#trunkJavaScriptCoreAPIOpaqueJSStringcpp">trunk/JavaScriptCore/API/OpaqueJSString.cpp</a></li>
<li><a href="#trunkJavaScriptCoreAPIOpaqueJSStringh">trunk/JavaScriptCore/API/OpaqueJSString.h</a></li>
<li><a href="#trunkJavaScriptCoreChangeLog">trunk/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkJavaScriptCoreVMCTIcpp">trunk/JavaScriptCore/VM/CTI.cpp</a></li>
<li><a href="#trunkJavaScriptCoreVMCTIh">trunk/JavaScriptCore/VM/CTI.h</a></li>
<li><a href="#trunkJavaScriptCoreVMCodeBlockh">trunk/JavaScriptCore/VM/CodeBlock.h</a></li>
<li><a href="#trunkJavaScriptCoreVMCodeGeneratorcpp">trunk/JavaScriptCore/VM/CodeGenerator.cpp</a></li>
<li><a href="#trunkJavaScriptCoreVMCodeGeneratorh">trunk/JavaScriptCore/VM/CodeGenerator.h</a></li>
<li><a href="#trunkJavaScriptCoreVMMachinecpp">trunk/JavaScriptCore/VM/Machine.cpp</a></li>
<li><a href="#trunkJavaScriptCoreVMMachineh">trunk/JavaScriptCore/VM/Machine.h</a></li>
<li><a href="#trunkJavaScriptCoreVMRegisterh">trunk/JavaScriptCore/VM/Register.h</a></li>
<li><a href="#trunkJavaScriptCoreVMRegisterFileh">trunk/JavaScriptCore/VM/RegisterFile.h</a></li>
<li><a href="#trunkJavaScriptCorekjsArgumentsh">trunk/JavaScriptCore/kjs/Arguments.h</a></li>
<li><a href="#trunkJavaScriptCorekjsDebuggerCallFramecpp">trunk/JavaScriptCore/kjs/DebuggerCallFrame.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsDebuggerCallFrameh">trunk/JavaScriptCore/kjs/DebuggerCallFrame.h</a></li>
<li><a href="#trunkJavaScriptCorekjsExecStatecpp">trunk/JavaScriptCore/kjs/ExecState.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsExecStateh">trunk/JavaScriptCore/kjs/ExecState.h</a></li>
<li><a href="#trunkJavaScriptCorekjsFunctionConstructorcpp">trunk/JavaScriptCore/kjs/FunctionConstructor.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsJSActivationcpp">trunk/JavaScriptCore/kjs/JSActivation.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsJSActivationh">trunk/JavaScriptCore/kjs/JSActivation.h</a></li>
<li><a href="#trunkJavaScriptCorekjsJSGlobalObjectcpp">trunk/JavaScriptCore/kjs/JSGlobalObject.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsJSGlobalObjectFunctionscpp">trunk/JavaScriptCore/kjs/JSGlobalObjectFunctions.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsJSVariableObjecth">trunk/JavaScriptCore/kjs/JSVariableObject.h</a></li>
<li><a href="#trunkJavaScriptCorekjsParsercpp">trunk/JavaScriptCore/kjs/Parser.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsRegExpConstructorcpp">trunk/JavaScriptCore/kjs/RegExpConstructor.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsRegExpPrototypecpp">trunk/JavaScriptCore/kjs/RegExpPrototype.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsShellcpp">trunk/JavaScriptCore/kjs/Shell.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsStringPrototypecpp">trunk/JavaScriptCore/kjs/StringPrototype.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsidentifiercpp">trunk/JavaScriptCore/kjs/identifier.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsinterpretercpp">trunk/JavaScriptCore/kjs/interpreter.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsnodescpp">trunk/JavaScriptCore/kjs/nodes.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsnodesh">trunk/JavaScriptCore/kjs/nodes.h</a></li>
<li><a href="#trunkJavaScriptCorekjsregexpcpp">trunk/JavaScriptCore/kjs/regexp.cpp</a></li>
<li><a href="#trunkJavaScriptCorekjsregexph">trunk/JavaScriptCore/kjs/regexp.h</a></li>
<li><a href="#trunkJavaScriptCoreprofilerHeavyProfileh">trunk/JavaScriptCore/profiler/HeavyProfile.h</a></li>
<li><a href="#trunkJavaScriptCoreprofilerProfileh">trunk/JavaScriptCore/profiler/Profile.h</a></li>
<li><a href="#trunkJavaScriptCorewrecWRECcpp">trunk/JavaScriptCore/wrec/WREC.cpp</a></li>
<li><a href="#trunkJavaScriptCorewrecWRECh">trunk/JavaScriptCore/wrec/WREC.h</a></li>
<li><a href="#trunkWebKitmacChangeLog">trunk/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkWebKitmacWebViewWebScriptDebuggermm">trunk/WebKit/mac/WebView/WebScriptDebugger.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkJavaScriptCoreAPIJSObjectRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/API/JSObjectRef.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/API/JSObjectRef.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/API/JSObjectRef.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx">     exec-&gt;globalData().heap.registerThread();
</span><span class="cx">     JSLock lock(exec);
</span><span class="cx"> 
</span><del>-    Identifier nameID = name ? name-&gt;identifier(exec) : Identifier(exec, &quot;anonymous&quot;);
</del><ins>+    Identifier nameID = name ? name-&gt;identifier(&amp;exec-&gt;globalData()) : Identifier(exec, &quot;anonymous&quot;);
</ins><span class="cx">     
</span><span class="cx">     return toRef(new (exec) JSCallbackFunction(exec, callAsFunction, nameID));
</span><span class="cx"> }
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     exec-&gt;globalData().heap.registerThread();
</span><span class="cx">     JSLock lock(exec);
</span><span class="cx"> 
</span><del>-    Identifier nameID = name ? name-&gt;identifier(exec) : Identifier(exec, &quot;anonymous&quot;);
</del><ins>+    Identifier nameID = name ? name-&gt;identifier(&amp;exec-&gt;globalData()) : Identifier(exec, &quot;anonymous&quot;);
</ins><span class="cx">     
</span><span class="cx">     ArgList args;
</span><span class="cx">     for (unsigned i = 0; i &lt; parameterCount; i++)
</span><span class="lines">@@ -246,7 +246,7 @@
</span><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx">     
</span><del>-    return jsObject-&gt;hasProperty(exec, propertyName-&gt;identifier(exec));
</del><ins>+    return jsObject-&gt;hasProperty(exec, propertyName-&gt;identifier(&amp;exec-&gt;globalData()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValueRef JSObjectGetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx"> 
</span><del>-    JSValue* jsValue = jsObject-&gt;get(exec, propertyName-&gt;identifier(exec));
</del><ins>+    JSValue* jsValue = jsObject-&gt;get(exec, propertyName-&gt;identifier(&amp;exec-&gt;globalData()));
</ins><span class="cx">     if (exec-&gt;hadException()) {
</span><span class="cx">         if (exception)
</span><span class="cx">             *exception = toRef(exec-&gt;exception());
</span><span class="lines">@@ -273,7 +273,7 @@
</span><span class="cx">     JSLock lock(exec);
</span><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><del>-    Identifier name(propertyName-&gt;identifier(exec));
</del><ins>+    Identifier name(propertyName-&gt;identifier(&amp;exec-&gt;globalData()));
</ins><span class="cx">     JSValue* jsValue = toJS(value);
</span><span class="cx"> 
</span><span class="cx">     if (attributes &amp;&amp; !jsObject-&gt;hasProperty(exec, name))
</span><span class="lines">@@ -333,7 +333,7 @@
</span><span class="cx"> 
</span><span class="cx">     JSObject* jsObject = toJS(object);
</span><span class="cx"> 
</span><del>-    bool result = jsObject-&gt;deleteProperty(exec,  propertyName-&gt;identifier(exec));
</del><ins>+    bool result = jsObject-&gt;deleteProperty(exec, propertyName-&gt;identifier(&amp;exec-&gt;globalData()));
</ins><span class="cx">     if (exec-&gt;hadException()) {
</span><span class="cx">         if (exception)
</span><span class="cx">             *exception = toRef(exec-&gt;exception());
</span></span></pre></div>
<a id="trunkJavaScriptCoreAPIOpaqueJSStringcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/API/OpaqueJSString.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/API/OpaqueJSString.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/API/OpaqueJSString.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -46,11 +46,6 @@
</span><span class="cx">     return UString::null();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Identifier OpaqueJSString::identifier(ExecState* exec) const
-{
-    return identifier(&amp;exec-&gt;globalData());
-}
-
</del><span class="cx"> Identifier OpaqueJSString::identifier(JSGlobalData* globalData) const
</span><span class="cx"> {
</span><span class="cx">     if (!this || !m_characters)
</span></span></pre></div>
<a id="trunkJavaScriptCoreAPIOpaqueJSStringh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/API/OpaqueJSString.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/API/OpaqueJSString.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/API/OpaqueJSString.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -29,10 +29,9 @@
</span><span class="cx"> #include &lt;kjs/ustring.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><del>-    class ExecState;
</del><span class="cx">     class Identifier;
</span><span class="cx">     class JSGlobalData;
</span><del>-};
</del><ins>+}
</ins><span class="cx"> 
</span><span class="cx"> struct OpaqueJSString : public ThreadSafeShared&lt;OpaqueJSString&gt; {
</span><span class="cx"> 
</span><span class="lines">@@ -52,8 +51,6 @@
</span><span class="cx">     unsigned length() { return this ? m_length : 0; }
</span><span class="cx"> 
</span><span class="cx">     JSC::UString ustring() const;
</span><del>-
-    JSC::Identifier identifier(JSC::ExecState*) const;
</del><span class="cx">     JSC::Identifier identifier(JSC::JSGlobalData*) const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/ChangeLog (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/ChangeLog        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/ChangeLog        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -1,3 +1,230 @@
</span><ins>+2008-10-08  Darin Adler  &lt;darin@apple.com&gt;
+
+        Reviewed by Cameron Zwarich.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=21403
+          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation
+
+        Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
+        client over to the new name.
+
+        Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
+        as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
+        accessor functions to get at things in the frame.
+
+        Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
+        JSGlobalData* and in other cases eliminating them entirely.
+
+        * API/JSObjectRef.cpp:
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeFunction):
+        (JSObjectHasProperty):
+        (JSObjectGetProperty):
+        (JSObjectSetProperty):
+        (JSObjectDeleteProperty):
+        * API/OpaqueJSString.cpp:
+        * API/OpaqueJSString.h:
+        * VM/CTI.cpp:
+        (JSC::CTI::getConstant):
+        (JSC::CTI::emitGetArg):
+        (JSC::CTI::emitGetPutArg):
+        (JSC::CTI::getConstantImmediateNumericArg):
+        (JSC::CTI::printOpcodeOperandTypes):
+        (JSC::CTI::CTI):
+        (JSC::CTI::compileOpCall):
+        (JSC::CTI::compileBinaryArithOp):
+        (JSC::CTI::privateCompileMainPass):
+        (JSC::CTI::privateCompile):
+        (JSC::CTI::privateCompileGetByIdProto):
+        (JSC::CTI::privateCompileGetByIdChain):
+        (JSC::CTI::compileRegExp):
+        * VM/CTI.h:
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (JSC::CodeGenerator::emitEqualityOp):
+        (JSC::CodeGenerator::emitLoad):
+        (JSC::CodeGenerator::emitUnexpectedLoad):
+        (JSC::CodeGenerator::emitConstruct):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (JSC::jsLess):
+        (JSC::jsLessEq):
+        (JSC::jsAddSlowCase):
+        (JSC::jsAdd):
+        (JSC::jsTypeStringForValue):
+        (JSC::Machine::resolve):
+        (JSC::Machine::resolveSkip):
+        (JSC::Machine::resolveGlobal):
+        (JSC::inlineResolveBase):
+        (JSC::Machine::resolveBase):
+        (JSC::Machine::resolveBaseAndProperty):
+        (JSC::Machine::resolveBaseAndFunc):
+        (JSC::Machine::slideRegisterWindowForCall):
+        (JSC::isNotObject):
+        (JSC::Machine::callEval):
+        (JSC::Machine::dumpCallFrame):
+        (JSC::Machine::dumpRegisters):
+        (JSC::Machine::unwindCallFrame):
+        (JSC::Machine::throwException):
+        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
+        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
+        (JSC::Machine::execute):
+        (JSC::Machine::debug):
+        (JSC::Machine::createExceptionScope):
+        (JSC::cachePrototypeChain):
+        (JSC::Machine::tryCachePutByID):
+        (JSC::Machine::tryCacheGetByID):
+        (JSC::Machine::privateExecute):
+        (JSC::Machine::retrieveArguments):
+        (JSC::Machine::retrieveCaller):
+        (JSC::Machine::retrieveLastCaller):
+        (JSC::Machine::findFunctionCallFrame):
+        (JSC::Machine::getArgumentsData):
+        (JSC::Machine::tryCTICachePutByID):
+        (JSC::Machine::getCTIArrayLengthTrampoline):
+        (JSC::Machine::getCTIStringLengthTrampoline):
+        (JSC::Machine::tryCTICacheGetByID):
+        (JSC::Machine::cti_op_convert_this):
+        (JSC::Machine::cti_op_end):
+        (JSC::Machine::cti_op_add):
+        (JSC::Machine::cti_op_pre_inc):
+        (JSC::Machine::cti_timeout_check):
+        (JSC::Machine::cti_op_loop_if_less):
+        (JSC::Machine::cti_op_loop_if_lesseq):
+        (JSC::Machine::cti_op_new_object):
+        (JSC::Machine::cti_op_put_by_id):
+        (JSC::Machine::cti_op_put_by_id_second):
+        (JSC::Machine::cti_op_put_by_id_generic):
+        (JSC::Machine::cti_op_put_by_id_fail):
+        (JSC::Machine::cti_op_get_by_id):
+        (JSC::Machine::cti_op_get_by_id_second):
+        (JSC::Machine::cti_op_get_by_id_generic):
+        (JSC::Machine::cti_op_get_by_id_fail):
+        (JSC::Machine::cti_op_instanceof):
+        (JSC::Machine::cti_op_del_by_id):
+        (JSC::Machine::cti_op_mul):
+        (JSC::Machine::cti_op_new_func):
+        (JSC::Machine::cti_op_call_JSFunction):
+        (JSC::Machine::cti_vm_compile):
+        (JSC::Machine::cti_op_push_activation):
+        (JSC::Machine::cti_op_call_NotJSFunction):
+        (JSC::Machine::cti_op_create_arguments):
+        (JSC::Machine::cti_op_tear_off_activation):
+        (JSC::Machine::cti_op_tear_off_arguments):
+        (JSC::Machine::cti_op_ret_profiler):
+        (JSC::Machine::cti_op_ret_scopeChain):
+        (JSC::Machine::cti_op_new_array):
+        (JSC::Machine::cti_op_resolve):
+        (JSC::Machine::cti_op_construct_JSConstruct):
+        (JSC::Machine::cti_op_construct_NotJSConstruct):
+        (JSC::Machine::cti_op_get_by_val):
+        (JSC::Machine::cti_op_resolve_func):
+        (JSC::Machine::cti_op_sub):
+        (JSC::Machine::cti_op_put_by_val):
+        (JSC::Machine::cti_op_put_by_val_array):
+        (JSC::Machine::cti_op_lesseq):
+        (JSC::Machine::cti_op_loop_if_true):
+        (JSC::Machine::cti_op_negate):
+        (JSC::Machine::cti_op_resolve_base):
+        (JSC::Machine::cti_op_resolve_skip):
+        (JSC::Machine::cti_op_resolve_global):
+        (JSC::Machine::cti_op_div):
+        (JSC::Machine::cti_op_pre_dec):
+        (JSC::Machine::cti_op_jless):
+        (JSC::Machine::cti_op_not):
+        (JSC::Machine::cti_op_jtrue):
+        (JSC::Machine::cti_op_post_inc):
+        (JSC::Machine::cti_op_eq):
+        (JSC::Machine::cti_op_lshift):
+        (JSC::Machine::cti_op_bitand):
+        (JSC::Machine::cti_op_rshift):
+        (JSC::Machine::cti_op_bitnot):
+        (JSC::Machine::cti_op_resolve_with_base):
+        (JSC::Machine::cti_op_new_func_exp):
+        (JSC::Machine::cti_op_mod):
+        (JSC::Machine::cti_op_less):
+        (JSC::Machine::cti_op_neq):
+        (JSC::Machine::cti_op_post_dec):
+        (JSC::Machine::cti_op_urshift):
+        (JSC::Machine::cti_op_bitxor):
+        (JSC::Machine::cti_op_new_regexp):
+        (JSC::Machine::cti_op_bitor):
+        (JSC::Machine::cti_op_call_eval):
+        (JSC::Machine::cti_op_throw):
+        (JSC::Machine::cti_op_get_pnames):
+        (JSC::Machine::cti_op_next_pname):
+        (JSC::Machine::cti_op_push_scope):
+        (JSC::Machine::cti_op_pop_scope):
+        (JSC::Machine::cti_op_typeof):
+        (JSC::Machine::cti_op_to_jsnumber):
+        (JSC::Machine::cti_op_in):
+        (JSC::Machine::cti_op_push_new_scope):
+        (JSC::Machine::cti_op_jmp_scopes):
+        (JSC::Machine::cti_op_put_by_index):
+        (JSC::Machine::cti_op_switch_imm):
+        (JSC::Machine::cti_op_switch_char):
+        (JSC::Machine::cti_op_switch_string):
+        (JSC::Machine::cti_op_del_by_val):
+        (JSC::Machine::cti_op_put_getter):
+        (JSC::Machine::cti_op_put_setter):
+        (JSC::Machine::cti_op_new_error):
+        (JSC::Machine::cti_op_debug):
+        (JSC::Machine::cti_vm_throw):
+        * VM/Machine.h:
+        * VM/Register.h:
+        * VM/RegisterFile.h:
+        * kjs/Arguments.h:
+        * kjs/DebuggerCallFrame.cpp:
+        (JSC::DebuggerCallFrame::functionName):
+        (JSC::DebuggerCallFrame::type):
+        (JSC::DebuggerCallFrame::thisObject):
+        (JSC::DebuggerCallFrame::evaluate):
+        * kjs/DebuggerCallFrame.h:
+        * kjs/ExecState.cpp:
+        (JSC::CallFrame::thisValue):
+        * kjs/ExecState.h:
+        * kjs/FunctionConstructor.cpp:
+        (JSC::constructFunction):
+        * kjs/JSActivation.cpp:
+        (JSC::JSActivation::JSActivation):
+        (JSC::JSActivation::argumentsGetter):
+        * kjs/JSActivation.h:
+        * kjs/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::init):
+        * kjs/JSGlobalObjectFunctions.cpp:
+        (JSC::globalFuncEval):
+        * kjs/JSVariableObject.h:
+        * kjs/Parser.cpp:
+        (JSC::Parser::parse):
+        * kjs/RegExpConstructor.cpp:
+        (JSC::constructRegExp):
+        * kjs/RegExpPrototype.cpp:
+        (JSC::regExpProtoFuncCompile):
+        * kjs/Shell.cpp:
+        (prettyPrintScript):
+        * kjs/StringPrototype.cpp:
+        (JSC::stringProtoFuncMatch):
+        (JSC::stringProtoFuncSearch):
+        * kjs/identifier.cpp:
+        (JSC::Identifier::checkSameIdentifierTable):
+        * kjs/interpreter.cpp:
+        (JSC::Interpreter::checkSyntax):
+        (JSC::Interpreter::evaluate):
+        * kjs/nodes.cpp:
+        (JSC::ThrowableExpressionData::emitThrowError):
+        (JSC::RegExpNode::emitCode):
+        (JSC::ArrayNode::emitCode):
+        (JSC::InstanceOfNode::emitCode):
+        * kjs/nodes.h:
+        * kjs/regexp.cpp:
+        (JSC::RegExp::RegExp):
+        (JSC::RegExp::create):
+        * kjs/regexp.h:
+        * profiler/HeavyProfile.h:
+        * profiler/Profile.h:
+        * wrec/WREC.cpp:
+        * wrec/WREC.h:
+
</ins><span class="cx"> 2008-10-08  Mark Rowe  &lt;mrowe@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Typed by Maciej Stachowiak, reviewed by Mark Rowe.
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMCTIcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/CTI.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/CTI.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/CTI.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include &quot;Machine.h&quot;
</span><span class="cx"> #include &quot;wrec/WREC.h&quot;
</span><span class="cx"> #include &quot;ResultType.h&quot;
</span><ins>+
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx"> #include &lt;sys/sysctl.h&gt;
</span><span class="cx"> #endif
</span><span class="lines">@@ -43,12 +44,15 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(MAC)
</span><del>-bool isSSE2Present()
</del><ins>+
+static inline bool isSSE2Present()
</ins><span class="cx"> {
</span><span class="cx">     return true; // All X86 Macs are guaranteed to support at least SSE2
</span><span class="cx"> }
</span><del>-#else COMPILER(MSVC)
-bool isSSE2Present()
</del><ins>+
+#else
+
+static bool isSSE2Present()
</ins><span class="cx"> {
</span><span class="cx">     static const int SSE2FeatureBit = 1 &lt;&lt; 26;
</span><span class="cx">     struct SSE2Check {
</span><span class="lines">@@ -72,8 +76,12 @@
</span><span class="cx">     static SSE2Check check;
</span><span class="cx">     return check.present;
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+COMPILE_ASSERT(CTI_ARGS_code == 0xC, CTI_ARGS_code_is_C);
+COMPILE_ASSERT(CTI_ARGS_callFrame == 0xE, CTI_ARGS_callFrame_is_E);
+
</ins><span class="cx"> #if COMPILER(GCC) &amp;&amp; PLATFORM(X86)
</span><span class="cx"> 
</span><span class="cx"> asm(
</span><span class="lines">@@ -83,8 +91,8 @@
</span><span class="cx">     &quot;pushl %edi&quot; &quot;\n&quot;
</span><span class="cx">     &quot;subl $0x24, %esp&quot; &quot;\n&quot;
</span><span class="cx">     &quot;movl $512, %esi&quot; &quot;\n&quot;
</span><del>-    &quot;movl 0x38(%esp), %edi&quot; &quot;\n&quot; // Ox38 = 0x0E * 4, 0x0E = CTI_ARGS_r
-    &quot;call *0x30(%esp)&quot; &quot;\n&quot; // Ox30 = 0x0C * 4, 0x0C = CTI_ARGS_code
</del><ins>+    &quot;movl 0x38(%esp), %edi&quot; &quot;\n&quot; // Ox38 = 0x0E * 4, 0x0E = CTI_ARGS_callFrame (see assertion above)
+    &quot;call *0x30(%esp)&quot; &quot;\n&quot; // Ox30 = 0x0C * 4, 0x0C = CTI_ARGS_code (see assertion above)
</ins><span class="cx">     &quot;addl $0x24, %esp&quot; &quot;\n&quot;
</span><span class="cx">     &quot;popl %edi&quot; &quot;\n&quot;
</span><span class="cx">     &quot;popl %esi&quot; &quot;\n&quot;
</span><span class="lines">@@ -114,7 +122,7 @@
</span><span class="cx">             mov esi, 512;
</span><span class="cx">             mov ecx, esp;
</span><span class="cx">             mov edi, [esp + 0x38];
</span><del>-            call [esp + 0x30];
</del><ins>+            call [esp + 0x30]; // Ox30 = 0x0C * 4, 0x0C = CTI_ARGS_code (see assertion above)
</ins><span class="cx">             add esp, 0x24;
</span><span class="cx">             pop edi;
</span><span class="cx">             pop esi;
</span><span class="lines">@@ -138,15 +146,14 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> ALWAYS_INLINE bool CTI::isConstant(int src)
</span><span class="cx"> {
</span><span class="cx">     return src &gt;= m_codeBlock-&gt;numVars &amp;&amp; src &lt; m_codeBlock-&gt;numVars + m_codeBlock-&gt;numConstants;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE JSValue* CTI::getConstant(ExecState* exec, int src)
</del><ins>+ALWAYS_INLINE JSValue* CTI::getConstant(CallFrame* callFrame, int src)
</ins><span class="cx"> {
</span><del>-    return m_codeBlock-&gt;constantRegisters[src - m_codeBlock-&gt;numVars].jsValue(exec);
</del><ins>+    return m_codeBlock-&gt;constantRegisters[src - m_codeBlock-&gt;numVars].jsValue(callFrame);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // get arg puts an arg from the SF register array into a h/w register
</span><span class="lines">@@ -154,7 +161,7 @@
</span><span class="cx"> {
</span><span class="cx">     // TODO: we want to reuse values that are already in registers if we can - add a register allocator!
</span><span class="cx">     if (isConstant(src)) {
</span><del>-        JSValue* js = getConstant(m_exec, src);
</del><ins>+        JSValue* js = getConstant(m_callFrame, src);
</ins><span class="cx">         m_jit.movl_i32r(reinterpret_cast&lt;unsigned&gt;(js), dst);
</span><span class="cx">     } else
</span><span class="cx">         m_jit.movl_mr(src * sizeof(Register), X86::edi, dst);
</span><span class="lines">@@ -164,7 +171,7 @@
</span><span class="cx"> ALWAYS_INLINE void CTI::emitGetPutArg(unsigned src, unsigned offset, X86Assembler::RegisterID scratch)
</span><span class="cx"> {
</span><span class="cx">     if (isConstant(src)) {
</span><del>-        JSValue* js = getConstant(m_exec, src);
</del><ins>+        JSValue* js = getConstant(m_callFrame, src);
</ins><span class="cx">         m_jit.movl_i32m(reinterpret_cast&lt;unsigned&gt;(js), offset + sizeof(void*), X86::esp);
</span><span class="cx">     } else {
</span><span class="cx">         m_jit.movl_mr(src * sizeof(Register), X86::edi, scratch);
</span><span class="lines">@@ -186,7 +193,7 @@
</span><span class="cx"> ALWAYS_INLINE JSValue* CTI::getConstantImmediateNumericArg(unsigned src)
</span><span class="cx"> {
</span><span class="cx">     if (isConstant(src)) {
</span><del>-        JSValue* js = getConstant(m_exec, src);
</del><ins>+        JSValue* js = getConstant(m_callFrame, src);
</ins><span class="cx">         return JSImmediate::isNumber(js) ? js : 0;
</span><span class="cx">     }
</span><span class="cx">     return 0;
</span><span class="lines">@@ -249,7 +256,7 @@
</span><span class="cx"> {
</span><span class="cx">     char which1 = '*';
</span><span class="cx">     if (isConstant(src1)) {
</span><del>-        JSValue* js = getConstant(m_exec, src1);
</del><ins>+        JSValue* js = getConstant(m_callFrame, src1);
</ins><span class="cx">         which1 = 
</span><span class="cx">             JSImmediate::isImmediate(js) ?
</span><span class="cx">                 (JSImmediate::isNumber(js) ? 'i' :
</span><span class="lines">@@ -263,7 +270,7 @@
</span><span class="cx">     }
</span><span class="cx">     char which2 = '*';
</span><span class="cx">     if (isConstant(src2)) {
</span><del>-        JSValue* js = getConstant(m_exec, src2);
</del><ins>+        JSValue* js = getConstant(m_callFrame, src2);
</ins><span class="cx">         which2 = 
</span><span class="cx">             JSImmediate::isImmediate(js) ?
</span><span class="cx">                 (JSImmediate::isNumber(js) ? 'i' :
</span><span class="lines">@@ -445,10 +452,10 @@
</span><span class="cx">     m_jit.orl_i32r(JSImmediate::FullTagTypeBool, reg);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-CTI::CTI(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
</del><ins>+CTI::CTI(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
</ins><span class="cx">     : m_jit(machine-&gt;jitCodeBuffer())
</span><span class="cx">     , m_machine(machine)
</span><del>-    , m_exec(exec)
</del><ins>+    , m_callFrame(callFrame)
</ins><span class="cx">     , m_codeBlock(codeBlock)
</span><span class="cx">     , m_labels(codeBlock ? codeBlock-&gt;instructions.size() : 0)
</span><span class="cx">     , m_structureStubCompilationInfo(codeBlock ? codeBlock-&gt;structureIDInstructions.size() : 0)
</span><span class="lines">@@ -487,7 +494,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_jit.movl_mr(OBJECT_OFFSET(JSFunction, m_scopeChain) + OBJECT_OFFSET(ScopeChain, m_node), X86::ecx, X86::ecx); // newScopeChain
</span><span class="cx">     m_jit.movl_i32m(argCount, RegisterFile::ArgumentCount * static_cast&lt;int&gt;(sizeof(Register)), X86::edx);
</span><del>-    m_jit.movl_rm(X86::edi, RegisterFile::CallerRegisters * static_cast&lt;int&gt;(sizeof(Register)), X86::edx);
</del><ins>+    m_jit.movl_rm(X86::edi, RegisterFile::CallerFrame * static_cast&lt;int&gt;(sizeof(Register)), X86::edx);
</ins><span class="cx">     m_jit.movl_rm(X86::ecx, RegisterFile::ScopeChain * static_cast&lt;int&gt;(sizeof(Register)), X86::edx);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -515,8 +522,8 @@
</span><span class="cx"> 
</span><span class="cx">         int thisVal = instruction[i + 3].u.operand;
</span><span class="cx">         if (thisVal == missingThisObjectMarker()) {
</span><del>-            // FIXME: should this be loaded dynamically off m_exec?
-            m_jit.movl_i32m(reinterpret_cast&lt;unsigned&gt;(m_exec-&gt;globalThisValue()), firstArg * sizeof(Register), X86::edi);
</del><ins>+            // FIXME: should this be loaded dynamically off m_callFrame?
+            m_jit.movl_i32m(reinterpret_cast&lt;unsigned&gt;(m_callFrame-&gt;globalThisValue()), firstArg * sizeof(Register), X86::edi);
</ins><span class="cx">         } else {
</span><span class="cx">             emitGetArg(thisVal, X86::ecx);
</span><span class="cx">             emitPutResult(firstArg, X86::ecx);
</span><span class="lines">@@ -559,8 +566,8 @@
</span><span class="cx">     // load ctiCode from the new codeBlock.
</span><span class="cx">     m_jit.movl_mr(OBJECT_OFFSET(CodeBlock, ctiCode), X86::eax, X86::eax);
</span><span class="cx"> 
</span><del>-    // Setup the new value of 'r' in edi, and on the stack, too.
-    emitPutCTIParam(X86::edx, CTI_ARGS_r);
</del><ins>+    // Put the new value of 'callFrame' into edi and onto the stack, too.
+    emitPutCTIParam(X86::edx, CTI_ARGS_callFrame);
</ins><span class="cx">     m_jit.movl_rr(X86::edx, X86::edi);
</span><span class="cx"> 
</span><span class="cx">     // Check the ctiCode has been generated - if not, this is handled in a slow case.
</span><span class="lines">@@ -685,7 +692,7 @@
</span><span class="cx"> 
</span><span class="cx"> void CTI::compileBinaryArithOp(OpcodeID opcodeID, unsigned dst, unsigned src1, unsigned src2, OperandTypes types, unsigned i)
</span><span class="cx"> {
</span><del>-    StructureID* numberStructureID = m_exec-&gt;globalData().numberStructureID.get();
</del><ins>+    StructureID* numberStructureID = m_callFrame-&gt;globalData().numberStructureID.get();
</ins><span class="cx">     X86Assembler::JmpSrc wasJSNumberCell1, wasJSNumberCell1b, wasJSNumberCell2, wasJSNumberCell2b;
</span><span class="cx"> 
</span><span class="cx">     emitGetArg(src1, X86::eax);
</span><span class="lines">@@ -878,7 +885,7 @@
</span><span class="cx">         case op_mov: {
</span><span class="cx">             unsigned src = instruction[i + 2].u.operand;
</span><span class="cx">             if (isConstant(src))
</span><del>-                m_jit.movl_i32r(reinterpret_cast&lt;unsigned&gt;(getConstant(m_exec, src)), X86::edx);
</del><ins>+                m_jit.movl_i32r(reinterpret_cast&lt;unsigned&gt;(getConstant(m_callFrame, src)), X86::edx);
</ins><span class="cx">             else
</span><span class="cx">                 emitGetArg(src, X86::edx);
</span><span class="cx">             emitPutResult(instruction[i + 1].u.operand, X86::edx);
</span><span class="lines">@@ -1238,8 +1245,8 @@
</span><span class="cx">             emitGetArg(RegisterFile::ReturnPC, X86::edx);
</span><span class="cx"> 
</span><span class="cx">             // Restore our caller's &quot;r&quot;.
</span><del>-            emitGetArg(RegisterFile::CallerRegisters, X86::edi);
-            emitPutCTIParam(X86::edi, CTI_ARGS_r);
</del><ins>+            emitGetArg(RegisterFile::CallerFrame, X86::edi);
+            emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
</ins><span class="cx"> 
</span><span class="cx">             // Return.
</span><span class="cx">             m_jit.pushl_r(X86::edx);
</span><span class="lines">@@ -1803,7 +1810,7 @@
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">         case op_catch: {
</span><del>-            emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r
</del><ins>+            emitGetCTIParam(CTI_ARGS_callFrame, X86::edi); // edi := r
</ins><span class="cx">             emitPutResult(instruction[i + 1].u.operand);
</span><span class="cx">             i += 2;
</span><span class="cx">             break;
</span><span class="lines">@@ -2652,7 +2659,7 @@
</span><span class="cx"> 
</span><span class="cx">     // The prototype object definitely exists (if this stub exists the CodeBlock is referencing a StructureID that is
</span><span class="cx">     // referencing the prototype object - let's speculatively load it's table nice and early!)
</span><del>-    JSObject* protoObject = static_cast&lt;JSObject*&gt;(structureID-&gt;prototypeForLookup(m_exec));
</del><ins>+    JSObject* protoObject = static_cast&lt;JSObject*&gt;(structureID-&gt;prototypeForLookup(m_callFrame));
</ins><span class="cx">     PropertyStorage* protoPropertyStorage = &amp;protoObject-&gt;m_propertyStorage;
</span><span class="cx">     m_jit.movl_mr(static_cast&lt;void*&gt;(protoPropertyStorage), X86::edx);
</span><span class="cx"> 
</span><span class="lines">@@ -2695,7 +2702,7 @@
</span><span class="cx"> #else
</span><span class="cx">     // The prototype object definitely exists (if this stub exists the CodeBlock is referencing a StructureID that is
</span><span class="cx">     // referencing the prototype object - let's speculatively load it's table nice and early!)
</span><del>-    JSObject* protoObject = static_cast&lt;JSObject*&gt;(structureID-&gt;prototypeForLookup(m_exec));
</del><ins>+    JSObject* protoObject = static_cast&lt;JSObject*&gt;(structureID-&gt;prototypeForLookup(m_callFrame));
</ins><span class="cx">     PropertyStorage* protoPropertyStorage = &amp;protoObject-&gt;m_propertyStorage;
</span><span class="cx">     m_jit.movl_mr(static_cast&lt;void*&gt;(protoPropertyStorage), X86::edx);
</span><span class="cx"> 
</span><span class="lines">@@ -2744,7 +2751,7 @@
</span><span class="cx">     RefPtr&lt;StructureID&gt;* chainEntries = chain-&gt;head();
</span><span class="cx">     JSObject* protoObject = 0;
</span><span class="cx">     for (unsigned i = 0; i&lt;count; ++i) {
</span><del>-        protoObject = static_cast&lt;JSObject*&gt;(currStructureID-&gt;prototypeForLookup(m_exec));
</del><ins>+        protoObject = static_cast&lt;JSObject*&gt;(currStructureID-&gt;prototypeForLookup(m_callFrame));
</ins><span class="cx">         currStructureID = chainEntries[i].get();
</span><span class="cx"> 
</span><span class="cx">         // Check the prototype object's StructureID had not changed.
</span><span class="lines">@@ -3044,7 +3051,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WREC)
</span><span class="cx"> 
</span><del>-void* CTI::compileRegExp(ExecState* exec, const UString&amp; pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase, bool multiline)
</del><ins>+void* CTI::compileRegExp(Machine* machine, const UString&amp; pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase, bool multiline)
</ins><span class="cx"> {
</span><span class="cx">     // TODO: better error messages
</span><span class="cx">     if (pattern.size() &gt; MaxPatternSize) {
</span><span class="lines">@@ -3052,7 +3059,7 @@
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    X86Assembler jit(exec-&gt;machine()-&gt;jitCodeBuffer());
</del><ins>+    X86Assembler jit(machine-&gt;jitCodeBuffer());
</ins><span class="cx">     WRECParser parser(pattern, ignoreCase, multiline, jit);
</span><span class="cx">     
</span><span class="cx">     jit.emitConvertToFastCall();
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMCTIh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/CTI.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/CTI.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/CTI.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -47,20 +47,18 @@
</span><span class="cx"> 
</span><span class="cx"> #define CTI_ARGS_code 0x0C
</span><span class="cx"> #define CTI_ARGS_registerFile 0x0D
</span><del>-#define CTI_ARGS_r 0x0E
</del><ins>+#define CTI_ARGS_callFrame 0x0E
</ins><span class="cx"> #define CTI_ARGS_exception 0x0F
</span><span class="cx"> #define CTI_ARGS_profilerReference 0x10
</span><span class="cx"> #define CTI_ARGS_globalData 0x11
</span><span class="cx"> #define ARG_registerFile ((RegisterFile*)(ARGS)[CTI_ARGS_registerFile])
</span><del>-#define ARG_r ((Register*)(ARGS)[CTI_ARGS_r])
</del><ins>+#define ARG_callFrame ((CallFrame*)(ARGS)[CTI_ARGS_callFrame])
</ins><span class="cx"> #define ARG_exception ((JSValue**)(ARGS)[CTI_ARGS_exception])
</span><span class="cx"> #define ARG_profilerReference ((Profiler**)(ARGS)[CTI_ARGS_profilerReference])
</span><span class="cx"> #define ARG_globalData ((JSGlobalData*)(ARGS)[CTI_ARGS_globalData])
</span><span class="cx"> 
</span><del>-#define ARG_exec CallFrame::create(ARG_r)
</del><ins>+#define ARG_setCallFrame(newCallFrame) (*(CallFrame**)&amp;(ARGS)[CTI_ARGS_callFrame] = (newCallFrame))
</ins><span class="cx"> 
</span><del>-#define ARG_setR(newR) (*(Register**)&amp;(ARGS)[CTI_ARGS_r] = newR)
-
</del><span class="cx"> #define ARG_src1 ((JSValue*)((ARGS)[1]))
</span><span class="cx"> #define ARG_src2 ((JSValue*)((ARGS)[2]))
</span><span class="cx"> #define ARG_src3 ((JSValue*)((ARGS)[3]))
</span><span class="lines">@@ -92,7 +90,6 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx">     class CodeBlock;
</span><del>-    class ExecState;
</del><span class="cx">     class JSPropertyNameIterator;
</span><span class="cx">     class JSValue;
</span><span class="cx">     class Machine;
</span><span class="lines">@@ -249,7 +246,7 @@
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     extern &quot;C&quot; {
</span><del>-        JSValue* ctiTrampoline(void* code, RegisterFile*, Register* callFrame, JSValue** exception, Profiler**, JSGlobalData*);
</del><ins>+        JSValue* ctiTrampoline(void* code, RegisterFile*, CallFrame*, JSValue** exception, Profiler**, JSGlobalData*);
</ins><span class="cx">         void ctiVMThrowTrampoline();
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="lines">@@ -283,77 +280,77 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     public:
</span><del>-        static void compile(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
</del><ins>+        static void compile(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             cti.privateCompile();
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WREC)
</span><del>-        static void* compileRegExp(ExecState* exec, const UString&amp; pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase = false, bool multiline = false);
</del><ins>+        static void* compileRegExp(Machine*, const UString&amp; pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase = false, bool multiline = false);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-        static void compileGetByIdSelf(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
</del><ins>+        static void compileGetByIdSelf(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             cti.privateCompileGetByIdSelf(structureID, cachedOffset, returnAddress);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void compileGetByIdProto(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, StructureID* prototypeStructureID, size_t cachedOffset, void* returnAddress)
</del><ins>+        static void compileGetByIdProto(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, StructureID* prototypeStructureID, size_t cachedOffset, void* returnAddress)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             cti.privateCompileGetByIdProto(structureID, prototypeStructureID, cachedOffset, returnAddress);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void compileGetByIdChain(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, StructureIDChain* chain, size_t count, size_t cachedOffset, void* returnAddress)
</del><ins>+        static void compileGetByIdChain(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, StructureIDChain* chain, size_t count, size_t cachedOffset, void* returnAddress)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             cti.privateCompileGetByIdChain(structureID, chain, count, cachedOffset, returnAddress);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void compilePutByIdReplace(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
</del><ins>+        static void compilePutByIdReplace(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             cti.privateCompilePutByIdReplace(structureID, cachedOffset, returnAddress);
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        static void compilePutByIdTransition(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* oldStructureID, StructureID* newStructureID, size_t cachedOffset, StructureIDChain* sIDC, void* returnAddress)
</del><ins>+        static void compilePutByIdTransition(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* oldStructureID, StructureID* newStructureID, size_t cachedOffset, StructureIDChain* sIDC, void* returnAddress)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             cti.privateCompilePutByIdTransition(oldStructureID, newStructureID, cachedOffset, sIDC, returnAddress);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void* compileArrayLengthTrampoline(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
</del><ins>+        static void* compileArrayLengthTrampoline(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             return cti.privateCompileArrayLengthTrampoline();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void* compileStringLengthTrampoline(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
</del><ins>+        static void* compileStringLengthTrampoline(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             return cti.privateCompileStringLengthTrampoline();
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         static void patchGetByIdSelf(CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress);
</span><span class="cx">         static void patchPutByIdReplace(CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress);
</span><span class="cx"> 
</span><del>-        static void compilePatchGetArrayLength(Machine* machine, ExecState* exec, CodeBlock* codeBlock, void* returnAddress)
</del><ins>+        static void compilePatchGetArrayLength(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress)
</ins><span class="cx">         {
</span><del>-            CTI cti(machine, exec, codeBlock);
</del><ins>+            CTI cti(machine, callFrame, codeBlock);
</ins><span class="cx">             return cti.privateCompilePatchGetArrayLength(returnAddress);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        inline static JSValue* execute(void* code, RegisterFile* registerFile, Register* r, JSGlobalData* globalData, JSValue** exception)
</del><ins>+        inline static JSValue* execute(void* code, RegisterFile* registerFile, CallFrame* callFrame, JSGlobalData* globalData, JSValue** exception)
</ins><span class="cx">         {
</span><del>-            return ctiTrampoline(code, registerFile, r, exception, Profiler::enabledProfilerReference(), globalData);
</del><ins>+            return ctiTrampoline(code, registerFile, callFrame, exception, Profiler::enabledProfilerReference(), globalData);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        CTI(Machine*, ExecState*, CodeBlock*);
</del><ins>+        CTI(Machine*, CallFrame*, CodeBlock*);
</ins><span class="cx">         
</span><span class="cx">         bool isConstant(int src);
</span><del>-        JSValue* getConstant(ExecState*, int src);
</del><ins>+        JSValue* getConstant(CallFrame*, int src);
</ins><span class="cx"> 
</span><span class="cx">         void privateCompileMainPass();
</span><span class="cx">         void privateCompileLinkPass();
</span><span class="lines">@@ -429,7 +426,7 @@
</span><span class="cx"> 
</span><span class="cx">         X86Assembler m_jit;
</span><span class="cx">         Machine* m_machine;
</span><del>-        ExecState* m_exec;
</del><ins>+        CallFrame* m_callFrame;
</ins><span class="cx">         CodeBlock* m_codeBlock;
</span><span class="cx"> 
</span><span class="cx">         Vector&lt;CallRecord&gt; m_calls;
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/CodeBlock.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/CodeBlock.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/CodeBlock.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx">                 UString errMsg;
</span><span class="cx">                 
</span><span class="cx">                 SourceCode source = makeSource(evalSource);
</span><del>-                evalNode = exec-&gt;parser()-&gt;parse&lt;EvalNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</del><ins>+                evalNode = exec-&gt;globalData().parser-&gt;parse&lt;EvalNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</ins><span class="cx">                 if (evalNode) {
</span><span class="cx">                     if (evalSource.size() &lt; maxCacheableSourceLength &amp;&amp; (*scopeChain-&gt;begin())-&gt;isVariableObject() &amp;&amp; cacheMap.size() &lt; maxCacheEntries)
</span><span class="cx">                         cacheMap.set(evalSource.rep(), evalNode);
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMCodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/CodeGenerator.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/CodeGenerator.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/CodeGenerator.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -718,8 +718,8 @@
</span><span class="cx">         if (src1-&gt;index() == dstIndex
</span><span class="cx">             &amp;&amp; src1-&gt;isTemporary()
</span><span class="cx">             &amp;&amp; static_cast&lt;unsigned&gt;(src2-&gt;index()) &lt; m_codeBlock-&gt;constantRegisters.size()
</span><del>-            &amp;&amp; m_codeBlock-&gt;constantRegisters[src2-&gt;index()].jsValue(globalExec())-&gt;isString()) {
-            const UString&amp; value = static_cast&lt;JSString*&gt;(m_codeBlock-&gt;constantRegisters[src2-&gt;index()].jsValue(globalExec()))-&gt;value();
</del><ins>+            &amp;&amp; m_codeBlock-&gt;constantRegisters[src2-&gt;index()].jsValue(m_scopeChain-&gt;globalObject()-&gt;globalExec())-&gt;isString()) {
+            const UString&amp; value = static_cast&lt;JSString*&gt;(m_codeBlock-&gt;constantRegisters[src2-&gt;index()].jsValue(m_scopeChain-&gt;globalObject()-&gt;globalExec()))-&gt;value();
</ins><span class="cx">             if (value == &quot;undefined&quot;) {
</span><span class="cx">                 rewindUnaryOp();
</span><span class="cx">                 emitOpcode(op_is_undefined);
</span><span class="lines">@@ -782,10 +782,10 @@
</span><span class="cx">     // FIXME: Our hash tables won't hold infinity, so we make a new JSNumberCell each time.
</span><span class="cx">     // Later we can do the extra work to handle that like the other cases.
</span><span class="cx">     if (number == HashTraits&lt;double&gt;::emptyValue() || HashTraits&lt;double&gt;::isDeletedValue(number))
</span><del>-        return emitLoad(dst, jsNumber(globalExec(), number));
</del><ins>+        return emitLoad(dst, jsNumber(globalData(), number));
</ins><span class="cx">     JSValue*&amp; valueInMap = m_numberMap.add(number, 0).first-&gt;second;
</span><span class="cx">     if (!valueInMap)
</span><del>-        valueInMap = jsNumber(globalExec(), number);
</del><ins>+        valueInMap = jsNumber(globalData(), number);
</ins><span class="cx">     return emitLoad(dst, valueInMap);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -793,7 +793,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSString*&amp; valueInMap = m_stringMap.add(identifier.ustring().rep(), 0).first-&gt;second;
</span><span class="cx">     if (!valueInMap)
</span><del>-        valueInMap = jsOwnedString(globalExec(), identifier.ustring());
</del><ins>+        valueInMap = jsOwnedString(globalData(), identifier.ustring());
</ins><span class="cx">     return emitLoad(dst, valueInMap);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -817,7 +817,7 @@
</span><span class="cx"> {
</span><span class="cx">     emitOpcode(op_unexpected_load);
</span><span class="cx">     instructions().append(dst-&gt;index());
</span><del>-    instructions().append(addUnexpectedConstant(jsNumber(globalExec(), d)));
</del><ins>+    instructions().append(addUnexpectedConstant(jsNumber(globalData(), d)));
</ins><span class="cx">     return dst;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1188,7 +1188,7 @@
</span><span class="cx">     // Load prototype.
</span><span class="cx">     emitExpressionInfo(divot, startOffset, endOffset);
</span><span class="cx">     RefPtr&lt;RegisterID&gt; funcProto = newTemporary();
</span><del>-    emitGetById(funcProto.get(), func, globalExec()-&gt;propertyNames().prototype);
</del><ins>+    emitGetById(funcProto.get(), func, globalData()-&gt;propertyNames-&gt;prototype);
</ins><span class="cx"> 
</span><span class="cx">     // Generate code for arguments.
</span><span class="cx">     Vector&lt;RefPtr&lt;RegisterID&gt;, 16&gt; argv;
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMCodeGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/CodeGenerator.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/CodeGenerator.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/CodeGenerator.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -320,8 +320,6 @@
</span><span class="cx"> 
</span><span class="cx">         CodeType codeType() const { return m_codeType; }
</span><span class="cx"> 
</span><del>-        ExecState* globalExec() { return m_scopeChain-&gt;globalObject()-&gt;globalExec(); }
-
</del><span class="cx">     private:
</span><span class="cx">         void emitOpcode(OpcodeID);
</span><span class="cx">         void retrieveLastBinaryOp(int&amp; dstIndex, int&amp; src1Index, int&amp; src2Index);
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMMachinecpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/Machine.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/Machine.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/Machine.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -162,7 +162,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline bool jsLess(ExecState* exec, JSValue* v1, JSValue* v2)
</del><ins>+static inline bool jsLess(CallFrame* callFrame, JSValue* v1, JSValue* v2)
</ins><span class="cx"> {
</span><span class="cx">     if (JSImmediate::areBothImmediateNumbers(v1, v2))
</span><span class="cx">         return JSImmediate::getTruncatedInt32(v1) &lt; JSImmediate::getTruncatedInt32(v2);
</span><span class="lines">@@ -172,14 +172,14 @@
</span><span class="cx">     if (fastIsNumber(v1, n1) &amp;&amp; fastIsNumber(v2, n2))
</span><span class="cx">         return n1 &lt; n2;
</span><span class="cx"> 
</span><del>-    Machine* machine = exec-&gt;machine();
</del><ins>+    Machine* machine = callFrame-&gt;machine();
</ins><span class="cx">     if (machine-&gt;isJSString(v1) &amp;&amp; machine-&gt;isJSString(v2))
</span><span class="cx">         return static_cast&lt;const JSString*&gt;(v1)-&gt;value() &lt; static_cast&lt;const JSString*&gt;(v2)-&gt;value();
</span><span class="cx"> 
</span><span class="cx">     JSValue* p1;
</span><span class="cx">     JSValue* p2;
</span><del>-    bool wasNotString1 = v1-&gt;getPrimitiveNumber(exec, n1, p1);
-    bool wasNotString2 = v2-&gt;getPrimitiveNumber(exec, n2, p2);
</del><ins>+    bool wasNotString1 = v1-&gt;getPrimitiveNumber(callFrame, n1, p1);
+    bool wasNotString2 = v2-&gt;getPrimitiveNumber(callFrame, n2, p2);
</ins><span class="cx"> 
</span><span class="cx">     if (wasNotString1 | wasNotString2)
</span><span class="cx">         return n1 &lt; n2;
</span><span class="lines">@@ -187,7 +187,7 @@
</span><span class="cx">     return static_cast&lt;const JSString*&gt;(p1)-&gt;value() &lt; static_cast&lt;const JSString*&gt;(p2)-&gt;value();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline bool jsLessEq(ExecState* exec, JSValue* v1, JSValue* v2)
</del><ins>+static inline bool jsLessEq(CallFrame* callFrame, JSValue* v1, JSValue* v2)
</ins><span class="cx"> {
</span><span class="cx">     if (JSImmediate::areBothImmediateNumbers(v1, v2))
</span><span class="cx">         return JSImmediate::getTruncatedInt32(v1) &lt;= JSImmediate::getTruncatedInt32(v2);
</span><span class="lines">@@ -197,14 +197,14 @@
</span><span class="cx">     if (fastIsNumber(v1, n1) &amp;&amp; fastIsNumber(v2, n2))
</span><span class="cx">         return n1 &lt;= n2;
</span><span class="cx"> 
</span><del>-    Machine* machine = exec-&gt;machine();
</del><ins>+    Machine* machine = callFrame-&gt;machine();
</ins><span class="cx">     if (machine-&gt;isJSString(v1) &amp;&amp; machine-&gt;isJSString(v2))
</span><span class="cx">         return !(static_cast&lt;const JSString*&gt;(v2)-&gt;value() &lt; static_cast&lt;const JSString*&gt;(v1)-&gt;value());
</span><span class="cx"> 
</span><span class="cx">     JSValue* p1;
</span><span class="cx">     JSValue* p2;
</span><del>-    bool wasNotString1 = v1-&gt;getPrimitiveNumber(exec, n1, p1);
-    bool wasNotString2 = v2-&gt;getPrimitiveNumber(exec, n2, p2);
</del><ins>+    bool wasNotString1 = v1-&gt;getPrimitiveNumber(callFrame, n1, p1);
+    bool wasNotString2 = v2-&gt;getPrimitiveNumber(callFrame, n2, p2);
</ins><span class="cx"> 
</span><span class="cx">     if (wasNotString1 | wasNotString2)
</span><span class="cx">         return n1 &lt;= n2;
</span><span class="lines">@@ -212,20 +212,20 @@
</span><span class="cx">     return !(static_cast&lt;const JSString*&gt;(p2)-&gt;value() &lt; static_cast&lt;const JSString*&gt;(p1)-&gt;value());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static NEVER_INLINE JSValue* jsAddSlowCase(ExecState* exec, JSValue* v1, JSValue* v2)
</del><ins>+static NEVER_INLINE JSValue* jsAddSlowCase(CallFrame* callFrame, JSValue* v1, JSValue* v2)
</ins><span class="cx"> {
</span><span class="cx">     // exception for the Date exception in defaultValue()
</span><del>-    JSValue* p1 = v1-&gt;toPrimitive(exec);
-    JSValue* p2 = v2-&gt;toPrimitive(exec);
</del><ins>+    JSValue* p1 = v1-&gt;toPrimitive(callFrame);
+    JSValue* p2 = v2-&gt;toPrimitive(callFrame);
</ins><span class="cx"> 
</span><span class="cx">     if (p1-&gt;isString() || p2-&gt;isString()) {
</span><del>-        RefPtr&lt;UString::Rep&gt; value = concatenate(p1-&gt;toString(exec).rep(), p2-&gt;toString(exec).rep());
</del><ins>+        RefPtr&lt;UString::Rep&gt; value = concatenate(p1-&gt;toString(callFrame).rep(), p2-&gt;toString(callFrame).rep());
</ins><span class="cx">         if (!value)
</span><del>-            return throwOutOfMemoryError(exec);
-        return jsString(exec, value.release());
</del><ins>+            return throwOutOfMemoryError(callFrame);
+        return jsString(callFrame, value.release());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return jsNumber(exec, p1-&gt;toNumber(exec) + p2-&gt;toNumber(exec));
</del><ins>+    return jsNumber(callFrame, p1-&gt;toNumber(callFrame) + p2-&gt;toNumber(callFrame));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Fast-path choices here are based on frequency data from SunSpider:
</span><span class="lines">@@ -237,21 +237,21 @@
</span><span class="cx"> //    13962   Add case: 5 3
</span><span class="cx"> //    4000    Add case: 3 5
</span><span class="cx"> 
</span><del>-static ALWAYS_INLINE JSValue* jsAdd(ExecState* exec, JSValue* v1, JSValue* v2)
</del><ins>+static ALWAYS_INLINE JSValue* jsAdd(CallFrame* callFrame, JSValue* v1, JSValue* v2)
</ins><span class="cx"> {
</span><span class="cx">     double left;
</span><span class="cx">     double right = 0.0;
</span><span class="cx"> 
</span><span class="cx">     bool rightIsNumber = fastIsNumber(v2, right);
</span><span class="cx">     if (rightIsNumber &amp;&amp; fastIsNumber(v1, left))
</span><del>-        return jsNumber(exec, left + right);
</del><ins>+        return jsNumber(callFrame, left + right);
</ins><span class="cx">     
</span><span class="cx">     bool leftIsString = v1-&gt;isString();
</span><span class="cx">     if (leftIsString &amp;&amp; v2-&gt;isString()) {
</span><span class="cx">         RefPtr&lt;UString::Rep&gt; value = concatenate(static_cast&lt;JSString*&gt;(v1)-&gt;value().rep(), static_cast&lt;JSString*&gt;(v2)-&gt;value().rep());
</span><span class="cx">         if (!value)
</span><del>-            return throwOutOfMemoryError(exec);
-        return jsString(exec, value.release());
</del><ins>+            return throwOutOfMemoryError(callFrame);
+        return jsString(callFrame, value.release());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (rightIsNumber &amp; leftIsString) {
</span><span class="lines">@@ -260,34 +260,34 @@
</span><span class="cx">             concatenate(static_cast&lt;JSString*&gt;(v1)-&gt;value().rep(), right);
</span><span class="cx"> 
</span><span class="cx">         if (!value)
</span><del>-            return throwOutOfMemoryError(exec);
-        return jsString(exec, value.release());
</del><ins>+            return throwOutOfMemoryError(callFrame);
+        return jsString(callFrame, value.release());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // All other cases are pretty uncommon
</span><del>-    return jsAddSlowCase(exec, v1, v2);
</del><ins>+    return jsAddSlowCase(callFrame, v1, v2);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static JSValue* jsTypeStringForValue(ExecState* exec, JSValue* v)
</del><ins>+static JSValue* jsTypeStringForValue(CallFrame* callFrame, JSValue* v)
</ins><span class="cx"> {
</span><span class="cx">     if (v-&gt;isUndefined())
</span><del>-        return jsNontrivialString(exec, &quot;undefined&quot;);
</del><ins>+        return jsNontrivialString(callFrame, &quot;undefined&quot;);
</ins><span class="cx">     if (v-&gt;isBoolean())
</span><del>-        return jsNontrivialString(exec, &quot;boolean&quot;);
</del><ins>+        return jsNontrivialString(callFrame, &quot;boolean&quot;);
</ins><span class="cx">     if (v-&gt;isNumber())
</span><del>-        return jsNontrivialString(exec, &quot;number&quot;);
</del><ins>+        return jsNontrivialString(callFrame, &quot;number&quot;);
</ins><span class="cx">     if (v-&gt;isString())
</span><del>-        return jsNontrivialString(exec, &quot;string&quot;);
</del><ins>+        return jsNontrivialString(callFrame, &quot;string&quot;);
</ins><span class="cx">     if (v-&gt;isObject()) {
</span><span class="cx">         // Return &quot;undefined&quot; for objects that should be treated
</span><span class="cx">         // as null when doing comparisons.
</span><span class="cx">         if (static_cast&lt;JSObject*&gt;(v)-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined())
</span><del>-            return jsNontrivialString(exec, &quot;undefined&quot;);
</del><ins>+            return jsNontrivialString(callFrame, &quot;undefined&quot;);
</ins><span class="cx">         CallData callData;
</span><span class="cx">         if (static_cast&lt;JSObject*&gt;(v)-&gt;getCallData(callData) != CallTypeNone)
</span><del>-            return jsNontrivialString(exec, &quot;function&quot;);
</del><ins>+            return jsNontrivialString(callFrame, &quot;function&quot;);
</ins><span class="cx">     }
</span><del>-    return jsNontrivialString(exec, &quot;object&quot;);
</del><ins>+    return jsNontrivialString(callFrame, &quot;object&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static bool jsIsObjectType(JSValue* v)
</span><span class="lines">@@ -318,43 +318,43 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE bool Machine::resolve(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue)
</del><ins>+NEVER_INLINE bool Machine::resolve(CallFrame* callFrame, Instruction* vPC, JSValue*&amp; exceptionValue)
</ins><span class="cx"> {
</span><span class="cx">     int dst = (vPC + 1)-&gt;u.operand;
</span><span class="cx">     int property = (vPC + 2)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="cx">     ASSERT(iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     Identifier&amp; ident = codeBlock-&gt;identifiers[property];
</span><span class="cx">     do {
</span><span class="cx">         JSObject* o = *iter;
</span><span class="cx">         PropertySlot slot(o);
</span><del>-        if (o-&gt;getPropertySlot(exec, ident, slot)) {
-            JSValue* result = slot.getValue(exec, ident);
-            exceptionValue = exec-&gt;exception();
</del><ins>+        if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
+            JSValue* result = slot.getValue(callFrame, ident);
+            exceptionValue = callFrame-&gt;globalData().exception;
</ins><span class="cx">             if (exceptionValue)
</span><span class="cx">                 return false;
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx">     } while (++iter != end);
</span><del>-    exceptionValue = createUndefinedVariableError(exec, ident, vPC, codeBlock);
</del><ins>+    exceptionValue = createUndefinedVariableError(callFrame, ident, vPC, codeBlock);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE bool Machine::resolveSkip(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue)
</del><ins>+NEVER_INLINE bool Machine::resolveSkip(CallFrame* callFrame, Instruction* vPC, JSValue*&amp; exceptionValue)
</ins><span class="cx"> {
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">     int dst = (vPC + 1)-&gt;u.operand;
</span><span class="cx">     int property = (vPC + 2)-&gt;u.operand;
</span><span class="cx">     int skip = (vPC + 3)-&gt;u.operand + codeBlock-&gt;needsFullScopeChain;
</span><span class="cx"> 
</span><del>-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="cx">     ASSERT(iter != end);
</span><span class="lines">@@ -366,20 +366,20 @@
</span><span class="cx">     do {
</span><span class="cx">         JSObject* o = *iter;
</span><span class="cx">         PropertySlot slot(o);
</span><del>-        if (o-&gt;getPropertySlot(exec, ident, slot)) {
-            JSValue* result = slot.getValue(exec, ident);
-            exceptionValue = exec-&gt;exception();
</del><ins>+        if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
+            JSValue* result = slot.getValue(callFrame, ident);
+            exceptionValue = callFrame-&gt;globalData().exception;
</ins><span class="cx">             if (exceptionValue)
</span><span class="cx">                 return false;
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx">     } while (++iter != end);
</span><del>-    exceptionValue = createUndefinedVariableError(exec, ident, vPC, codeBlock);
</del><ins>+    exceptionValue = createUndefinedVariableError(callFrame, ident, vPC, codeBlock);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE bool Machine::resolveGlobal(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue)
</del><ins>+NEVER_INLINE bool Machine::resolveGlobal(CallFrame* callFrame, Instruction* vPC, JSValue*&amp; exceptionValue)
</ins><span class="cx"> {
</span><span class="cx">     int dst = (vPC + 1)-&gt;u.operand;
</span><span class="cx">     JSGlobalObject* globalObject = static_cast&lt;JSGlobalObject*&gt;((vPC + 2)-&gt;u.jsCell);
</span><span class="lines">@@ -389,37 +389,37 @@
</span><span class="cx">     int offset = (vPC + 5)-&gt;u.operand;
</span><span class="cx"> 
</span><span class="cx">     if (structureID == globalObject-&gt;structureID()) {
</span><del>-        r[dst] = globalObject-&gt;getDirectOffset(offset);
</del><ins>+        callFrame[dst] = globalObject-&gt;getDirectOffset(offset);
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     Identifier&amp; ident = codeBlock-&gt;identifiers[property];
</span><span class="cx">     PropertySlot slot(globalObject);
</span><del>-    if (globalObject-&gt;getPropertySlot(exec, ident, slot)) {
-        JSValue* result = slot.getValue(exec, ident);
</del><ins>+    if (globalObject-&gt;getPropertySlot(callFrame, ident, slot)) {
+        JSValue* result = slot.getValue(callFrame, ident);
</ins><span class="cx">         if (slot.isCacheable()) {
</span><span class="cx">             if (vPC[4].u.structureID)
</span><span class="cx">                 vPC[4].u.structureID-&gt;deref();
</span><span class="cx">             globalObject-&gt;structureID()-&gt;ref();
</span><span class="cx">             vPC[4] = globalObject-&gt;structureID();
</span><span class="cx">             vPC[5] = slot.cachedOffset();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        exceptionValue = exec-&gt;exception();
</del><ins>+        exceptionValue = callFrame-&gt;globalData().exception;
</ins><span class="cx">         if (exceptionValue)
</span><span class="cx">             return false;
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    exceptionValue = createUndefinedVariableError(exec, ident, vPC, codeBlock);
</del><ins>+    exceptionValue = createUndefinedVariableError(callFrame, ident, vPC, codeBlock);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE static JSValue* inlineResolveBase(ExecState* exec, Identifier&amp; property, ScopeChainNode* scopeChain)
</del><ins>+ALWAYS_INLINE static JSValue* inlineResolveBase(CallFrame* callFrame, Identifier&amp; property, ScopeChainNode* scopeChain)
</ins><span class="cx"> {
</span><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator next = iter;
</span><span class="lines">@@ -431,7 +431,7 @@
</span><span class="cx">     JSObject* base;
</span><span class="cx">     while (true) {
</span><span class="cx">         base = *iter;
</span><del>-        if (next == end || base-&gt;getPropertySlot(exec, property, slot))
</del><ins>+        if (next == end || base-&gt;getPropertySlot(callFrame, property, slot))
</ins><span class="cx">             return base;
</span><span class="cx"> 
</span><span class="cx">         iter = next;
</span><span class="lines">@@ -442,22 +442,20 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE void Machine::resolveBase(ExecState* exec, Instruction* vPC, Register* r)
</del><ins>+NEVER_INLINE void Machine::resolveBase(CallFrame* callFrame, Instruction* vPC)
</ins><span class="cx"> {
</span><span class="cx">     int dst = (vPC + 1)-&gt;u.operand;
</span><span class="cx">     int property = (vPC + 2)-&gt;u.operand;
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
-    r[dst] = inlineResolveBase(exec, codeBlock-&gt;identifiers[property], scopeChain);
</del><ins>+    callFrame[dst] = inlineResolveBase(callFrame, callFrame-&gt;codeBlock()-&gt;identifiers[property], callFrame-&gt;scopeChain());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE bool Machine::resolveBaseAndProperty(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue)
</del><ins>+NEVER_INLINE bool Machine::resolveBaseAndProperty(CallFrame* callFrame, Instruction* vPC, JSValue*&amp; exceptionValue)
</ins><span class="cx"> {
</span><span class="cx">     int baseDst = (vPC + 1)-&gt;u.operand;
</span><span class="cx">     int propDst = (vPC + 2)-&gt;u.operand;
</span><span class="cx">     int property = (vPC + 3)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="cx"> 
</span><span class="lines">@@ -465,35 +463,35 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     Identifier&amp; ident = codeBlock-&gt;identifiers[property];
</span><span class="cx">     JSObject* base;
</span><span class="cx">     do {
</span><span class="cx">         base = *iter;
</span><span class="cx">         PropertySlot slot(base);
</span><del>-        if (base-&gt;getPropertySlot(exec, ident, slot)) {
-            JSValue* result = slot.getValue(exec, ident);
-            exceptionValue = exec-&gt;exception();
</del><ins>+        if (base-&gt;getPropertySlot(callFrame, ident, slot)) {
+            JSValue* result = slot.getValue(callFrame, ident);
+            exceptionValue = callFrame-&gt;globalData().exception;
</ins><span class="cx">             if (exceptionValue)
</span><span class="cx">                 return false;
</span><del>-            r[propDst] = result;
-            r[baseDst] = base;
</del><ins>+            callFrame[propDst] = result;
+            callFrame[baseDst] = base;
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx">         ++iter;
</span><span class="cx">     } while (iter != end);
</span><span class="cx"> 
</span><del>-    exceptionValue = createUndefinedVariableError(exec, ident, vPC, codeBlock);
</del><ins>+    exceptionValue = createUndefinedVariableError(callFrame, ident, vPC, codeBlock);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE bool Machine::resolveBaseAndFunc(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue)
</del><ins>+NEVER_INLINE bool Machine::resolveBaseAndFunc(CallFrame* callFrame, Instruction* vPC, JSValue*&amp; exceptionValue)
</ins><span class="cx"> {
</span><span class="cx">     int baseDst = (vPC + 1)-&gt;u.operand;
</span><span class="cx">     int funcDst = (vPC + 2)-&gt;u.operand;
</span><span class="cx">     int property = (vPC + 3)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="cx"> 
</span><span class="lines">@@ -501,13 +499,13 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     Identifier&amp; ident = codeBlock-&gt;identifiers[property];
</span><span class="cx">     JSObject* base;
</span><span class="cx">     do {
</span><span class="cx">         base = *iter;
</span><span class="cx">         PropertySlot slot(base);
</span><del>-        if (base-&gt;getPropertySlot(exec, ident, slot)) {            
</del><ins>+        if (base-&gt;getPropertySlot(callFrame, ident, slot)) {            
</ins><span class="cx">             // ECMA 11.2.3 says that if we hit an activation the this value should be null.
</span><span class="cx">             // However, section 10.2.3 says that in the case where the value provided
</span><span class="cx">             // by the caller is null, the global object should be used. It also says
</span><span class="lines">@@ -515,25 +513,26 @@
</span><span class="cx">             // of implementation we use the global object anyway here. This guarantees
</span><span class="cx">             // that in host objects you always get a valid object for this.
</span><span class="cx">             // We also handle wrapper substitution for the global object at the same time.
</span><del>-            JSObject* thisObj = base-&gt;toThisObject(exec);
-            JSValue* result = slot.getValue(exec, ident);
-            exceptionValue = exec-&gt;exception();
</del><ins>+            JSObject* thisObj = base-&gt;toThisObject(callFrame);
+            JSValue* result = slot.getValue(callFrame, ident);
+            exceptionValue = callFrame-&gt;globalData().exception;
</ins><span class="cx">             if (exceptionValue)
</span><span class="cx">                 return false;
</span><span class="cx"> 
</span><del>-            r[baseDst] = thisObj;
-            r[funcDst] = result;
</del><ins>+            callFrame[baseDst] = thisObj;
+            callFrame[funcDst] = result;
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx">         ++iter;
</span><span class="cx">     } while (iter != end);
</span><span class="cx"> 
</span><del>-    exceptionValue = createUndefinedVariableError(exec, ident, vPC, codeBlock);
</del><ins>+    exceptionValue = createUndefinedVariableError(callFrame, ident, vPC, codeBlock);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE Register* slideRegisterWindowForCall(CodeBlock* newCodeBlock, RegisterFile* registerFile, Register* r, size_t registerOffset, int argc)
</del><ins>+ALWAYS_INLINE CallFrame* Machine::slideRegisterWindowForCall(CodeBlock* newCodeBlock, RegisterFile* registerFile, CallFrame* callFrame, size_t registerOffset, int argc)
</ins><span class="cx"> {
</span><ins>+    Register* r = callFrame-&gt;registers();
</ins><span class="cx">     Register* newEnd = r + registerOffset + newCodeBlock-&gt;numCalleeRegisters;
</span><span class="cx"> 
</span><span class="cx">     if (LIKELY(argc == newCodeBlock-&gt;numParameters)) { // correct number of arguments
</span><span class="lines">@@ -565,42 +564,42 @@
</span><span class="cx">             argv[i + argc] = argv[i];
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return r;
</del><ins>+    return CallFrame::create(r);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static NEVER_INLINE bool isNotObject(ExecState* exec, bool forInstanceOf, CodeBlock* codeBlock, const Instruction* vPC, JSValue* value, JSValue*&amp; exceptionData)
</del><ins>+static NEVER_INLINE bool isNotObject(CallFrame* callFrame, bool forInstanceOf, CodeBlock* codeBlock, const Instruction* vPC, JSValue* value, JSValue*&amp; exceptionData)
</ins><span class="cx"> {
</span><span class="cx">     if (value-&gt;isObject())
</span><span class="cx">         return false;
</span><del>-    exceptionData = createInvalidParamError(exec, forInstanceOf ? &quot;instanceof&quot; : &quot;in&quot; , value, vPC, codeBlock);
</del><ins>+    exceptionData = createInvalidParamError(callFrame, forInstanceOf ? &quot;instanceof&quot; : &quot;in&quot; , value, vPC, codeBlock);
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE JSValue* Machine::callEval(ExecState* exec, JSObject* thisObj, ScopeChainNode* scopeChain, RegisterFile* registerFile, Register* r, int argv, int argc, JSValue*&amp; exceptionValue)
</del><ins>+NEVER_INLINE JSValue* Machine::callEval(CallFrame* callFrame, JSObject* thisObj, ScopeChainNode* scopeChain, RegisterFile* registerFile, int argv, int argc, JSValue*&amp; exceptionValue)
</ins><span class="cx"> {
</span><span class="cx">     if (argc &lt; 2)
</span><span class="cx">         return jsUndefined();
</span><span class="cx"> 
</span><del>-    JSValue* program = r[argv + 1].jsValue(exec);
</del><ins>+    JSValue* program = callFrame[argv + 1].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">     if (!program-&gt;isString())
</span><span class="cx">         return program;
</span><span class="cx"> 
</span><span class="cx">     Profiler** profiler = Profiler::enabledProfilerReference();
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;willExecute(exec, scopeChain-&gt;globalObject()-&gt;evalFunction());
</del><ins>+        (*profiler)-&gt;willExecute(callFrame, scopeChain-&gt;globalObject()-&gt;evalFunction());
</ins><span class="cx"> 
</span><span class="cx">     UString programSource = static_cast&lt;JSString*&gt;(program)-&gt;value();
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
-    RefPtr&lt;EvalNode&gt; evalNode = codeBlock-&gt;evalCodeCache.get(exec, programSource, scopeChain, exceptionValue);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
+    RefPtr&lt;EvalNode&gt; evalNode = codeBlock-&gt;evalCodeCache.get(callFrame, programSource, scopeChain, exceptionValue);
</ins><span class="cx"> 
</span><span class="cx">     JSValue* result = 0;
</span><span class="cx">     if (evalNode)
</span><del>-        result = exec-&gt;globalData().machine-&gt;execute(evalNode.get(), exec, thisObj, r - registerFile-&gt;start() + argv + 1 + RegisterFile::CallFrameHeaderSize, scopeChain, &amp;exceptionValue);
</del><ins>+        result = callFrame-&gt;globalData().machine-&gt;execute(evalNode.get(), callFrame, thisObj, callFrame-&gt;registers() - registerFile-&gt;start() + argv + 1 + RegisterFile::CallFrameHeaderSize, scopeChain, &amp;exceptionValue);
</ins><span class="cx"> 
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;didExecute(exec, scopeChain-&gt;globalObject()-&gt;evalFunction());
</del><ins>+        (*profiler)-&gt;didExecute(callFrame, scopeChain-&gt;globalObject()-&gt;evalFunction());
</ins><span class="cx"> 
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -652,24 +651,24 @@
</span><span class="cx"> 
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> 
</span><del>-void Machine::dumpCallFrame(const RegisterFile* registerFile, const Register* r)
</del><ins>+void Machine::dumpCallFrame(const RegisterFile* registerFile, CallFrame* callFrame)
</ins><span class="cx"> {
</span><del>-    JSGlobalObject* globalObject = scopeChain(r)-&gt;globalObject();
</del><ins>+    JSGlobalObject* globalObject = callFrame-&gt;scopeChain()-&gt;globalObject();
</ins><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     codeBlock-&gt;dump(globalObject-&gt;globalExec());
</span><span class="cx"> 
</span><del>-    dumpRegisters(registerFile, r);
</del><ins>+    dumpRegisters(registerFile, callFrame);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Machine::dumpRegisters(const RegisterFile* registerFile, const Register* r)
</del><ins>+void Machine::dumpRegisters(const RegisterFile* registerFile, CallFrame* callFrame)
</ins><span class="cx"> {
</span><span class="cx">     printf(&quot;Register frame: \n\n&quot;);
</span><span class="cx">     printf(&quot;----------------------------------------------------\n&quot;);
</span><span class="cx">     printf(&quot;            use            |   address  |   value   \n&quot;);
</span><span class="cx">     printf(&quot;----------------------------------------------------\n&quot;);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     const Register* it;
</span><span class="cx">     const Register* end;
</span><span class="cx"> 
</span><span class="lines">@@ -683,7 +682,7 @@
</span><span class="cx">         printf(&quot;----------------------------------------------------\n&quot;);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    it = r - RegisterFile::CallFrameHeaderSize - codeBlock-&gt;numParameters;
</del><ins>+    it = callFrame-&gt;registers() - RegisterFile::CallFrameHeaderSize - codeBlock-&gt;numParameters;
</ins><span class="cx">     printf(&quot;[this]                     | %10p | %10p \n&quot;, it, (*it).v()); ++it;
</span><span class="cx">     end = it + max(codeBlock-&gt;numParameters - 1, 0); // - 1 to skip &quot;this&quot;
</span><span class="cx">     if (it != end) {
</span><span class="lines">@@ -739,8 +738,6 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-//#if !defined(NDEBUG) || ENABLE(SAMPLING_TOOL)
-
</del><span class="cx"> bool Machine::isOpcode(Opcode opcode)
</span><span class="cx"> {
</span><span class="cx"> #if HAVE(COMPUTED_GOTO)
</span><span class="lines">@@ -752,41 +749,32 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-//#endif
-
-NEVER_INLINE bool Machine::unwindCallFrame(ExecState*&amp; exec, JSValue* exceptionValue, const Instruction*&amp; vPC, CodeBlock*&amp; codeBlock, Register*&amp; r)
</del><ins>+NEVER_INLINE bool Machine::unwindCallFrame(CallFrame*&amp; callFrame, JSValue* exceptionValue, const Instruction*&amp; vPC, CodeBlock*&amp; codeBlock)
</ins><span class="cx"> {
</span><span class="cx">     CodeBlock* oldCodeBlock = codeBlock;
</span><del>-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx"> 
</span><del>-    if (Debugger* debugger = exec-&gt;dynamicGlobalObject()-&gt;debugger()) {
-        DebuggerCallFrame debuggerCallFrame(exec-&gt;dynamicGlobalObject(), codeBlock, scopeChain, r, exceptionValue);
-        if (r[RegisterFile::Callee].jsValue(exec))
</del><ins>+    if (Debugger* debugger = callFrame-&gt;dynamicGlobalObject()-&gt;debugger()) {
+        DebuggerCallFrame debuggerCallFrame(callFrame, exceptionValue);
+        if (callFrame-&gt;callee())
</ins><span class="cx">             debugger-&gt;returnEvent(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;ownerNode-&gt;lastLine());
</span><span class="cx">         else
</span><span class="cx">             debugger-&gt;didExecuteProgram(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;ownerNode-&gt;lastLine());
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (Profiler* profiler = *Profiler::enabledProfilerReference()) {
</span><del>-        if (r[RegisterFile::Callee].jsValue(exec))
-            profiler-&gt;didExecute(exec, static_cast&lt;JSObject*&gt;(r[RegisterFile::Callee].jsValue(exec)));
</del><ins>+        if (callFrame-&gt;callee())
+            profiler-&gt;didExecute(callFrame, callFrame-&gt;callee());
</ins><span class="cx">         else
</span><del>-            profiler-&gt;didExecute(exec, codeBlock-&gt;ownerNode-&gt;sourceURL(), codeBlock-&gt;ownerNode-&gt;lineNo());
</del><ins>+            profiler-&gt;didExecute(callFrame, codeBlock-&gt;ownerNode-&gt;sourceURL(), codeBlock-&gt;ownerNode-&gt;lineNo());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // If this call frame created an activation or an 'arguments' object, tear it off.
</span><span class="cx">     if (oldCodeBlock-&gt;codeType == FunctionCode &amp;&amp; oldCodeBlock-&gt;needsFullScopeChain) {
</span><span class="cx">         while (!scopeChain-&gt;object-&gt;isObject(&amp;JSActivation::info))
</span><span class="cx">             scopeChain = scopeChain-&gt;pop();
</span><del>-        JSActivation* activation = static_cast&lt;JSActivation*&gt;(scopeChain-&gt;object);
-        ASSERT(activation-&gt;isObject(&amp;JSActivation::info));
-
-        Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue());
-        ASSERT(!arguments || arguments-&gt;isObject(&amp;Arguments::info));
-
-        activation-&gt;copyRegisters(arguments);
-    } else if (Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue())) {
-        ASSERT(arguments-&gt;isObject(&amp;Arguments::info));
</del><ins>+        static_cast&lt;JSActivation*&gt;(scopeChain-&gt;object)-&gt;copyRegisters(callFrame-&gt;optionalCalleeArguments());
+    } else if (Arguments* arguments = callFrame-&gt;optionalCalleeArguments()) {
</ins><span class="cx">         if (!arguments-&gt;isTornOff())
</span><span class="cx">             arguments-&gt;copyRegisters();
</span><span class="cx">     }
</span><span class="lines">@@ -794,53 +782,52 @@
</span><span class="cx">     if (oldCodeBlock-&gt;needsFullScopeChain)
</span><span class="cx">         scopeChain-&gt;deref();
</span><span class="cx"> 
</span><del>-    void* returnPC = r[RegisterFile::ReturnPC].v();
-    r = r[RegisterFile::CallerRegisters].r();
-    exec = CallFrame::create(r);
-    if (isHostCallFrame(r))
</del><ins>+    void* returnPC = callFrame-&gt;returnPC();
+    callFrame = callFrame-&gt;callerFrame();
+    if (callFrame-&gt;hasHostCallFrameFlag())
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    codeBlock = this-&gt;codeBlock(r);
</del><ins>+    codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     vPC = vPCForPC(codeBlock, returnPC);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE Instruction* Machine::throwException(ExecState* exec, JSValue*&amp; exceptionValue, const Instruction* vPC, Register*&amp; r, bool explicitThrow)
</del><ins>+NEVER_INLINE Instruction* Machine::throwException(CallFrame*&amp; callFrame, JSValue*&amp; exceptionValue, const Instruction* vPC, bool explicitThrow)
</ins><span class="cx"> {
</span><span class="cx">     // Set up the exception object
</span><span class="cx">     
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     if (exceptionValue-&gt;isObject()) {
</span><span class="cx">         JSObject* exception = static_cast&lt;JSObject*&gt;(exceptionValue);
</span><span class="cx">         if (exception-&gt;isNotAnObjectErrorStub()) {
</span><del>-            exception = createNotAnObjectError(exec, static_cast&lt;JSNotAnObjectErrorStub*&gt;(exception), vPC, codeBlock);
</del><ins>+            exception = createNotAnObjectError(callFrame, static_cast&lt;JSNotAnObjectErrorStub*&gt;(exception), vPC, codeBlock);
</ins><span class="cx">             exceptionValue = exception;
</span><span class="cx">         } else {
</span><del>-            if (!exception-&gt;hasProperty(exec, Identifier(exec, &quot;line&quot;)) &amp;&amp; 
-                !exception-&gt;hasProperty(exec, Identifier(exec, &quot;sourceId&quot;)) &amp;&amp; 
-                !exception-&gt;hasProperty(exec, Identifier(exec, &quot;sourceURL&quot;)) &amp;&amp; 
-                !exception-&gt;hasProperty(exec, Identifier(exec, expressionBeginOffsetPropertyName)) &amp;&amp; 
-                !exception-&gt;hasProperty(exec, Identifier(exec, expressionCaretOffsetPropertyName)) &amp;&amp; 
-                !exception-&gt;hasProperty(exec, Identifier(exec, expressionEndOffsetPropertyName))) {
</del><ins>+            if (!exception-&gt;hasProperty(callFrame, Identifier(callFrame, &quot;line&quot;)) &amp;&amp; 
+                !exception-&gt;hasProperty(callFrame, Identifier(callFrame, &quot;sourceId&quot;)) &amp;&amp; 
+                !exception-&gt;hasProperty(callFrame, Identifier(callFrame, &quot;sourceURL&quot;)) &amp;&amp; 
+                !exception-&gt;hasProperty(callFrame, Identifier(callFrame, expressionBeginOffsetPropertyName)) &amp;&amp; 
+                !exception-&gt;hasProperty(callFrame, Identifier(callFrame, expressionCaretOffsetPropertyName)) &amp;&amp; 
+                !exception-&gt;hasProperty(callFrame, Identifier(callFrame, expressionEndOffsetPropertyName))) {
</ins><span class="cx">                 if (explicitThrow) {
</span><span class="cx">                     int startOffset = 0;
</span><span class="cx">                     int endOffset = 0;
</span><span class="cx">                     int divotPoint = 0;
</span><span class="cx">                     int line = codeBlock-&gt;expressionRangeForVPC(vPC, divotPoint, startOffset, endOffset);
</span><del>-                    exception-&gt;putWithAttributes(exec, Identifier(exec, &quot;line&quot;), jsNumber(exec, line), ReadOnly | DontDelete);
</del><ins>+                    exception-&gt;putWithAttributes(callFrame, Identifier(callFrame, &quot;line&quot;), jsNumber(callFrame, line), ReadOnly | DontDelete);
</ins><span class="cx">                     
</span><span class="cx">                     // We only hit this path for error messages and throw statements, which don't have a specific failure position
</span><span class="cx">                     // So we just give the full range of the error/throw statement.
</span><del>-                    exception-&gt;putWithAttributes(exec, Identifier(exec, expressionBeginOffsetPropertyName), jsNumber(exec, divotPoint - startOffset), ReadOnly | DontDelete);
-                    exception-&gt;putWithAttributes(exec, Identifier(exec, expressionEndOffsetPropertyName), jsNumber(exec, divotPoint + endOffset), ReadOnly | DontDelete);
</del><ins>+                    exception-&gt;putWithAttributes(callFrame, Identifier(callFrame, expressionBeginOffsetPropertyName), jsNumber(callFrame, divotPoint - startOffset), ReadOnly | DontDelete);
+                    exception-&gt;putWithAttributes(callFrame, Identifier(callFrame, expressionEndOffsetPropertyName), jsNumber(callFrame, divotPoint + endOffset), ReadOnly | DontDelete);
</ins><span class="cx">                 } else
</span><del>-                    exception-&gt;putWithAttributes(exec, Identifier(exec, &quot;line&quot;), jsNumber(exec, codeBlock-&gt;lineNumberForVPC(vPC)), ReadOnly | DontDelete);
-                exception-&gt;putWithAttributes(exec, Identifier(exec, &quot;sourceId&quot;), jsNumber(exec, codeBlock-&gt;ownerNode-&gt;sourceID()), ReadOnly | DontDelete);
-                exception-&gt;putWithAttributes(exec, Identifier(exec, &quot;sourceURL&quot;), jsOwnedString(exec, codeBlock-&gt;ownerNode-&gt;sourceURL()), ReadOnly | DontDelete);
</del><ins>+                    exception-&gt;putWithAttributes(callFrame, Identifier(callFrame, &quot;line&quot;), jsNumber(callFrame, codeBlock-&gt;lineNumberForVPC(vPC)), ReadOnly | DontDelete);
+                exception-&gt;putWithAttributes(callFrame, Identifier(callFrame, &quot;sourceId&quot;), jsNumber(callFrame, codeBlock-&gt;ownerNode-&gt;sourceID()), ReadOnly | DontDelete);
+                exception-&gt;putWithAttributes(callFrame, Identifier(callFrame, &quot;sourceURL&quot;), jsOwnedString(callFrame, codeBlock-&gt;ownerNode-&gt;sourceURL()), ReadOnly | DontDelete);
</ins><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             if (exception-&gt;isWatchdogException()) {
</span><del>-                while (unwindCallFrame(exec, exceptionValue, vPC, codeBlock, r)) {
</del><ins>+                while (unwindCallFrame(callFrame, exceptionValue, vPC, codeBlock)) {
</ins><span class="cx">                     // Don't need handler checks or anything, we just want to unroll all the JS callframes possible.
</span><span class="cx">                 }
</span><span class="cx">                 return 0;
</span><span class="lines">@@ -848,9 +835,8 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (Debugger* debugger = exec-&gt;dynamicGlobalObject()-&gt;debugger()) {
-        ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
-        DebuggerCallFrame debuggerCallFrame(exec-&gt;dynamicGlobalObject(), codeBlock, scopeChain, r, exceptionValue);
</del><ins>+    if (Debugger* debugger = callFrame-&gt;dynamicGlobalObject()-&gt;debugger()) {
+        DebuggerCallFrame debuggerCallFrame(callFrame, exceptionValue);
</ins><span class="cx">         debugger-&gt;exception(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;lineNumberForVPC(vPC));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -860,47 +846,47 @@
</span><span class="cx">     Instruction* handlerVPC;
</span><span class="cx"> 
</span><span class="cx">     while (!codeBlock-&gt;getHandlerForVPC(vPC, handlerVPC, scopeDepth)) {
</span><del>-        if (!unwindCallFrame(exec, exceptionValue, vPC, codeBlock, r))
</del><ins>+        if (!unwindCallFrame(callFrame, exceptionValue, vPC, codeBlock))
</ins><span class="cx">             return 0;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Now unwind the scope chain within the exception handler's call frame.
</span><span class="cx"> 
</span><del>-    ScopeChain sc(this-&gt;scopeChain(r));
</del><ins>+    ScopeChain sc(callFrame-&gt;scopeChain());
</ins><span class="cx">     int scopeDelta = depth(codeBlock, sc) - scopeDepth;
</span><span class="cx">     ASSERT(scopeDelta &gt;= 0);
</span><span class="cx">     while (scopeDelta--)
</span><span class="cx">         sc.pop();
</span><del>-    r[RegisterFile::ScopeChain] = sc.node();
</del><ins>+    callFrame-&gt;setScopeChain(sc.node());
</ins><span class="cx"> 
</span><span class="cx">     return handlerVPC;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class DynamicGlobalObjectScope {
</del><ins>+class DynamicGlobalObjectScope : Noncopyable {
</ins><span class="cx"> public:
</span><del>-    DynamicGlobalObjectScope(ExecState* exec, JSGlobalObject* dynamicGlobalObject) 
-        : m_exec(exec)
-        , m_savedGlobalObject(exec-&gt;globalData().dynamicGlobalObject)
</del><ins>+    DynamicGlobalObjectScope(CallFrame* callFrame, JSGlobalObject* dynamicGlobalObject) 
+        : m_dynamicGlobalObjectSlot(callFrame-&gt;globalData().dynamicGlobalObject)
+        , m_savedDynamicGlobalObject(m_dynamicGlobalObjectSlot)
</ins><span class="cx">     {
</span><del>-        exec-&gt;globalData().dynamicGlobalObject = dynamicGlobalObject;
</del><ins>+        m_dynamicGlobalObjectSlot = dynamicGlobalObject;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ~DynamicGlobalObjectScope()
</span><span class="cx">     {
</span><del>-        m_exec-&gt;globalData().dynamicGlobalObject = m_savedGlobalObject;
</del><ins>+        m_dynamicGlobalObjectSlot = m_savedDynamicGlobalObject;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    ExecState* m_exec;
-    JSGlobalObject* m_savedGlobalObject;
</del><ins>+    JSGlobalObject*&amp; m_dynamicGlobalObjectSlot;
+    JSGlobalObject* m_savedDynamicGlobalObject;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-JSValue* Machine::execute(ProgramNode* programNode, ExecState* exec, ScopeChainNode* scopeChain, JSObject* thisObj, JSValue** exception)
</del><ins>+JSValue* Machine::execute(ProgramNode* programNode, CallFrame* callFrame, ScopeChainNode* scopeChain, JSObject* thisObj, JSValue** exception)
</ins><span class="cx"> {
</span><del>-    ASSERT(!exec-&gt;hadException());
</del><ins>+    ASSERT(!scopeChain-&gt;globalData-&gt;exception);
</ins><span class="cx"> 
</span><span class="cx">     if (m_reentryDepth &gt;= MaxReentryDepth) {
</span><del>-        *exception = createStackOverflowError(exec);
</del><ins>+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -909,41 +895,41 @@
</span><span class="cx">     Register* oldEnd = m_registerFile.end();
</span><span class="cx">     Register* newEnd = oldEnd + codeBlock-&gt;numParameters + RegisterFile::CallFrameHeaderSize + codeBlock-&gt;numCalleeRegisters;
</span><span class="cx">     if (!m_registerFile.grow(newEnd)) {
</span><del>-        *exception = createStackOverflowError(exec);
</del><ins>+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    DynamicGlobalObjectScope globalObjectScope(exec, scopeChain-&gt;globalObject());
</del><ins>+    DynamicGlobalObjectScope globalObjectScope(callFrame, scopeChain-&gt;globalObject());
</ins><span class="cx"> 
</span><span class="cx">     JSGlobalObject* lastGlobalObject = m_registerFile.globalObject();
</span><del>-    JSGlobalObject* globalObject = exec-&gt;dynamicGlobalObject();
</del><ins>+    JSGlobalObject* globalObject = callFrame-&gt;dynamicGlobalObject();
</ins><span class="cx">     globalObject-&gt;copyGlobalsTo(m_registerFile);
</span><span class="cx"> 
</span><del>-    Register* r = oldEnd + codeBlock-&gt;numParameters + RegisterFile::CallFrameHeaderSize;
-    r[codeBlock-&gt;thisRegister] = thisObj;
-    initializeCallFrame(r, codeBlock, 0, scopeChain, makeHostCallFramePointer(0), 0, 0, 0);
</del><ins>+    CallFrame* newCallFrame = CallFrame::create(oldEnd + codeBlock-&gt;numParameters + RegisterFile::CallFrameHeaderSize);
+    newCallFrame[codeBlock-&gt;thisRegister] = thisObj;
+    newCallFrame-&gt;init(codeBlock, 0, scopeChain, CallFrame::noCaller(), 0, 0, 0);
</ins><span class="cx"> 
</span><span class="cx">     if (codeBlock-&gt;needsFullScopeChain)
</span><del>-        scopeChain = scopeChain-&gt;copy();
</del><ins>+        scopeChain-&gt;ref();
</ins><span class="cx"> 
</span><span class="cx">     Profiler** profiler = Profiler::enabledProfilerReference();
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;willExecute(exec, programNode-&gt;sourceURL(), programNode-&gt;lineNo());
</del><ins>+        (*profiler)-&gt;willExecute(newCallFrame, programNode-&gt;sourceURL(), programNode-&gt;lineNo());
</ins><span class="cx"> 
</span><span class="cx">     m_reentryDepth++;
</span><span class="cx"> #if ENABLE(CTI)
</span><span class="cx">     if (!codeBlock-&gt;ctiCode)
</span><del>-        CTI::compile(this, exec, codeBlock);
-    JSValue* result = CTI::execute(codeBlock-&gt;ctiCode, &amp;m_registerFile, r, scopeChain-&gt;globalData, exception);
</del><ins>+        CTI::compile(this, newCallFrame, codeBlock);
+    JSValue* result = CTI::execute(codeBlock-&gt;ctiCode, &amp;m_registerFile, newCallFrame, scopeChain-&gt;globalData, exception);
</ins><span class="cx"> #else
</span><del>-    JSValue* result = privateExecute(Normal, &amp;m_registerFile, r, exception);
</del><ins>+    JSValue* result = privateExecute(Normal, &amp;m_registerFile, newCallFrame, exception);
</ins><span class="cx"> #endif
</span><span class="cx">     m_reentryDepth--;
</span><span class="cx"> 
</span><span class="cx">     MACHINE_SAMPLING_privateExecuteReturned();
</span><span class="cx"> 
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;didExecute(exec, programNode-&gt;sourceURL(), programNode-&gt;lineNo());
</del><ins>+        (*profiler)-&gt;didExecute(callFrame, programNode-&gt;sourceURL(), programNode-&gt;lineNo());
</ins><span class="cx"> 
</span><span class="cx">     if (m_reentryDepth &amp;&amp; lastGlobalObject &amp;&amp; globalObject != lastGlobalObject)
</span><span class="cx">         lastGlobalObject-&gt;copyGlobalsTo(m_registerFile);
</span><span class="lines">@@ -953,12 +939,12 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue* Machine::execute(FunctionBodyNode* functionBodyNode, ExecState* exec, JSFunction* function, JSObject* thisObj, const ArgList&amp; args, ScopeChainNode* scopeChain, JSValue** exception)
</del><ins>+JSValue* Machine::execute(FunctionBodyNode* functionBodyNode, CallFrame* callFrame, JSFunction* function, JSObject* thisObj, const ArgList&amp; args, ScopeChainNode* scopeChain, JSValue** exception)
</ins><span class="cx"> {
</span><del>-    ASSERT(!exec-&gt;hadException());
</del><ins>+    ASSERT(!scopeChain-&gt;globalData-&gt;exception);
</ins><span class="cx"> 
</span><span class="cx">     if (m_reentryDepth &gt;= MaxReentryDepth) {
</span><del>-        *exception = createStackOverflowError(exec);
</del><ins>+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -966,41 +952,40 @@
</span><span class="cx">     int argc = 1 + args.size(); // implicit &quot;this&quot; parameter
</span><span class="cx"> 
</span><span class="cx">     if (!m_registerFile.grow(oldEnd + argc)) {
</span><del>-        *exception = createStackOverflowError(exec);
</del><ins>+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    DynamicGlobalObjectScope globalObjectScope(exec, exec-&gt;globalData().dynamicGlobalObject ? exec-&gt;globalData().dynamicGlobalObject : scopeChain-&gt;globalObject());
</del><ins>+    DynamicGlobalObjectScope globalObjectScope(callFrame, callFrame-&gt;globalData().dynamicGlobalObject ? callFrame-&gt;globalData().dynamicGlobalObject : scopeChain-&gt;globalObject());
</ins><span class="cx"> 
</span><del>-    Register* argv = oldEnd;
</del><ins>+    CallFrame* newCallFrame = CallFrame::create(oldEnd);
</ins><span class="cx">     size_t dst = 0;
</span><del>-    argv[dst] = thisObj;
-
</del><ins>+    newCallFrame[0] = thisObj;
</ins><span class="cx">     ArgList::const_iterator end = args.end();
</span><span class="cx">     for (ArgList::const_iterator it = args.begin(); it != end; ++it)
</span><del>-        argv[++dst] = *it;
</del><ins>+        newCallFrame[++dst] = *it;
</ins><span class="cx"> 
</span><span class="cx">     CodeBlock* codeBlock = &amp;functionBodyNode-&gt;byteCode(scopeChain);
</span><del>-    Register* r = slideRegisterWindowForCall(codeBlock, &amp;m_registerFile, argv, argc + RegisterFile::CallFrameHeaderSize, argc);
-    if (UNLIKELY(!r)) {
-        *exception = createStackOverflowError(exec);
</del><ins>+    newCallFrame = slideRegisterWindowForCall(codeBlock, &amp;m_registerFile, newCallFrame, argc + RegisterFile::CallFrameHeaderSize, argc);
+    if (UNLIKELY(!newCallFrame)) {
+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         m_registerFile.shrink(oldEnd);
</span><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx">     // a 0 codeBlock indicates a built-in caller
</span><del>-    initializeCallFrame(r, codeBlock, 0, scopeChain, makeHostCallFramePointer(exec-&gt;registers()), 0, argc, function);
</del><ins>+    newCallFrame-&gt;init(codeBlock, 0, scopeChain, callFrame-&gt;addHostCallFrameFlag(), 0, argc, function);
</ins><span class="cx"> 
</span><span class="cx">     Profiler** profiler = Profiler::enabledProfilerReference();
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;willExecute(exec, function);
</del><ins>+        (*profiler)-&gt;willExecute(newCallFrame, function);
</ins><span class="cx"> 
</span><span class="cx">     m_reentryDepth++;
</span><span class="cx"> #if ENABLE(CTI)
</span><span class="cx">     if (!codeBlock-&gt;ctiCode)
</span><del>-        CTI::compile(this, exec, codeBlock);
-    JSValue* result = CTI::execute(codeBlock-&gt;ctiCode, &amp;m_registerFile, r, scopeChain-&gt;globalData, exception);
</del><ins>+        CTI::compile(this, newCallFrame, codeBlock);
+    JSValue* result = CTI::execute(codeBlock-&gt;ctiCode, &amp;m_registerFile, newCallFrame, scopeChain-&gt;globalData, exception);
</ins><span class="cx"> #else
</span><del>-    JSValue* result = privateExecute(Normal, &amp;m_registerFile, r, exception);
</del><ins>+    JSValue* result = privateExecute(Normal, &amp;m_registerFile, newCallFrame, exception);
</ins><span class="cx"> #endif
</span><span class="cx">     m_reentryDepth--;
</span><span class="cx"> 
</span><span class="lines">@@ -1010,21 +995,21 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue* Machine::execute(EvalNode* evalNode, ExecState* exec, JSObject* thisObj, ScopeChainNode* scopeChain, JSValue** exception)
</del><ins>+JSValue* Machine::execute(EvalNode* evalNode, CallFrame* callFrame, JSObject* thisObj, ScopeChainNode* scopeChain, JSValue** exception)
</ins><span class="cx"> {
</span><del>-    return execute(evalNode, exec, thisObj, m_registerFile.size() + evalNode-&gt;byteCode(scopeChain).numParameters + RegisterFile::CallFrameHeaderSize, scopeChain, exception);
</del><ins>+    return execute(evalNode, callFrame, thisObj, m_registerFile.size() + evalNode-&gt;byteCode(scopeChain).numParameters + RegisterFile::CallFrameHeaderSize, scopeChain, exception);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue* Machine::execute(EvalNode* evalNode, ExecState* exec, JSObject* thisObj, int registerOffset, ScopeChainNode* scopeChain, JSValue** exception)
</del><ins>+JSValue* Machine::execute(EvalNode* evalNode, CallFrame* callFrame, JSObject* thisObj, int registerOffset, ScopeChainNode* scopeChain, JSValue** exception)
</ins><span class="cx"> {
</span><del>-    ASSERT(!exec-&gt;hadException());
</del><ins>+    ASSERT(!scopeChain-&gt;globalData-&gt;exception);
</ins><span class="cx"> 
</span><span class="cx">     if (m_reentryDepth &gt;= MaxReentryDepth) {
</span><del>-        *exception = createStackOverflowError(exec);
</del><ins>+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    DynamicGlobalObjectScope globalObjectScope(exec, exec-&gt;globalData().dynamicGlobalObject ? exec-&gt;globalData().dynamicGlobalObject : scopeChain-&gt;globalObject());
</del><ins>+    DynamicGlobalObjectScope globalObjectScope(callFrame, callFrame-&gt;globalData().dynamicGlobalObject ? callFrame-&gt;globalData().dynamicGlobalObject : scopeChain-&gt;globalObject());
</ins><span class="cx"> 
</span><span class="cx">     EvalCodeBlock* codeBlock = &amp;evalNode-&gt;byteCode(scopeChain);
</span><span class="cx"> 
</span><span class="lines">@@ -1045,9 +1030,9 @@
</span><span class="cx">         Node::VarStack::const_iterator varStackEnd = varStack.end();
</span><span class="cx">         for (Node::VarStack::const_iterator it = varStack.begin(); it != varStackEnd; ++it) {
</span><span class="cx">             const Identifier&amp; ident = (*it).first;
</span><del>-            if (!variableObject-&gt;hasProperty(exec, ident)) {
</del><ins>+            if (!variableObject-&gt;hasProperty(callFrame, ident)) {
</ins><span class="cx">                 PutPropertySlot slot;
</span><del>-                variableObject-&gt;put(exec, ident, jsUndefined(), slot);
</del><ins>+                variableObject-&gt;put(callFrame, ident, jsUndefined(), slot);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -1055,7 +1040,7 @@
</span><span class="cx">         Node::FunctionStack::const_iterator functionStackEnd = functionStack.end();
</span><span class="cx">         for (Node::FunctionStack::const_iterator it = functionStack.begin(); it != functionStackEnd; ++it) {
</span><span class="cx">             PutPropertySlot slot;
</span><del>-            variableObject-&gt;put(exec, (*it)-&gt;m_ident, (*it)-&gt;makeFunction(exec, scopeChain), slot);
</del><ins>+            variableObject-&gt;put(callFrame, (*it)-&gt;m_ident, (*it)-&gt;makeFunction(callFrame, scopeChain), slot);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     }
</span><span class="lines">@@ -1063,70 +1048,66 @@
</span><span class="cx">     Register* oldEnd = m_registerFile.end();
</span><span class="cx">     Register* newEnd = m_registerFile.start() + registerOffset + codeBlock-&gt;numCalleeRegisters;
</span><span class="cx">     if (!m_registerFile.grow(newEnd)) {
</span><del>-        *exception = createStackOverflowError(exec);
</del><ins>+        *exception = createStackOverflowError(callFrame);
</ins><span class="cx">         return jsNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Register* r = m_registerFile.start() + registerOffset;
</del><ins>+    CallFrame* newCallFrame = CallFrame::create(m_registerFile.start() + registerOffset);
</ins><span class="cx"> 
</span><span class="cx">     // a 0 codeBlock indicates a built-in caller
</span><del>-    r[codeBlock-&gt;thisRegister] = thisObj;
-    initializeCallFrame(r, codeBlock, 0, scopeChain, makeHostCallFramePointer(exec-&gt;registers()), 0, 0, 0);
</del><ins>+    newCallFrame[codeBlock-&gt;thisRegister] = thisObj;
+    newCallFrame-&gt;init(codeBlock, 0, scopeChain, callFrame-&gt;addHostCallFrameFlag(), 0, 0, 0);
</ins><span class="cx"> 
</span><span class="cx">     if (codeBlock-&gt;needsFullScopeChain)
</span><del>-        scopeChain = scopeChain-&gt;copy();
</del><ins>+        scopeChain-&gt;ref();
</ins><span class="cx"> 
</span><span class="cx">     Profiler** profiler = Profiler::enabledProfilerReference();
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;willExecute(exec, evalNode-&gt;sourceURL(), evalNode-&gt;lineNo());
</del><ins>+        (*profiler)-&gt;willExecute(newCallFrame, evalNode-&gt;sourceURL(), evalNode-&gt;lineNo());
</ins><span class="cx"> 
</span><span class="cx">     m_reentryDepth++;
</span><span class="cx"> #if ENABLE(CTI)
</span><span class="cx">     if (!codeBlock-&gt;ctiCode)
</span><del>-        CTI::compile(this, exec, codeBlock);
-    JSValue* result = CTI::execute(codeBlock-&gt;ctiCode, &amp;m_registerFile, r, scopeChain-&gt;globalData, exception);
</del><ins>+        CTI::compile(this, newCallFrame, codeBlock);
+    JSValue* result = CTI::execute(codeBlock-&gt;ctiCode, &amp;m_registerFile, newCallFrame, scopeChain-&gt;globalData, exception);
</ins><span class="cx"> #else
</span><del>-    JSValue* result = privateExecute(Normal, &amp;m_registerFile, r, exception);
</del><ins>+    JSValue* result = privateExecute(Normal, &amp;m_registerFile, newCallFrame, exception);
</ins><span class="cx"> #endif
</span><span class="cx">     m_reentryDepth--;
</span><span class="cx"> 
</span><span class="cx">     MACHINE_SAMPLING_privateExecuteReturned();
</span><span class="cx"> 
</span><span class="cx">     if (*profiler)
</span><del>-        (*profiler)-&gt;didExecute(exec, evalNode-&gt;sourceURL(), evalNode-&gt;lineNo());
</del><ins>+        (*profiler)-&gt;didExecute(callFrame, evalNode-&gt;sourceURL(), evalNode-&gt;lineNo());
</ins><span class="cx"> 
</span><span class="cx">     m_registerFile.shrink(oldEnd);
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE void Machine::debug(ExecState* exec, Register* r, DebugHookID debugHookID, int firstLine, int lastLine)
</del><ins>+NEVER_INLINE void Machine::debug(CallFrame* callFrame, DebugHookID debugHookID, int firstLine, int lastLine)
</ins><span class="cx"> {
</span><del>-    Debugger* debugger = exec-&gt;dynamicGlobalObject()-&gt;debugger();
</del><ins>+    Debugger* debugger = callFrame-&gt;dynamicGlobalObject()-&gt;debugger();
</ins><span class="cx">     if (!debugger)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
-    ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
-    DebuggerCallFrame debuggerCallFrame(exec-&gt;dynamicGlobalObject(), codeBlock, scopeChain, r, 0);
-
</del><span class="cx">     switch (debugHookID) {
</span><span class="cx">         case DidEnterCallFrame:
</span><del>-            debugger-&gt;callEvent(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), firstLine);
</del><ins>+            debugger-&gt;callEvent(DebuggerCallFrame(callFrame, 0), callFrame-&gt;codeBlock()-&gt;ownerNode-&gt;sourceID(), firstLine);
</ins><span class="cx">             return;
</span><span class="cx">         case WillLeaveCallFrame:
</span><del>-            debugger-&gt;returnEvent(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), lastLine);
</del><ins>+            debugger-&gt;returnEvent(DebuggerCallFrame(callFrame, 0), callFrame-&gt;codeBlock()-&gt;ownerNode-&gt;sourceID(), lastLine);
</ins><span class="cx">             return;
</span><span class="cx">         case WillExecuteStatement:
</span><del>-            debugger-&gt;atStatement(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), firstLine);
</del><ins>+            debugger-&gt;atStatement(DebuggerCallFrame(callFrame, 0), callFrame-&gt;codeBlock()-&gt;ownerNode-&gt;sourceID(), firstLine);
</ins><span class="cx">             return;
</span><span class="cx">         case WillExecuteProgram:
</span><del>-            debugger-&gt;willExecuteProgram(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), firstLine);
</del><ins>+            debugger-&gt;willExecuteProgram(DebuggerCallFrame(callFrame, 0), callFrame-&gt;codeBlock()-&gt;ownerNode-&gt;sourceID(), firstLine);
</ins><span class="cx">             return;
</span><span class="cx">         case DidExecuteProgram:
</span><del>-            debugger-&gt;didExecuteProgram(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), lastLine);
</del><ins>+            debugger-&gt;didExecuteProgram(DebuggerCallFrame(callFrame, 0), callFrame-&gt;codeBlock()-&gt;ownerNode-&gt;sourceID(), lastLine);
</ins><span class="cx">             return;
</span><span class="cx">         case DidReachBreakpoint:
</span><del>-            debugger-&gt;didReachBreakpoint(debuggerCallFrame, codeBlock-&gt;ownerNode-&gt;sourceID(), lastLine);
</del><ins>+            debugger-&gt;didReachBreakpoint(DebuggerCallFrame(callFrame, 0), callFrame-&gt;codeBlock()-&gt;ownerNode-&gt;sourceID(), lastLine);
</ins><span class="cx">             return;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -1216,21 +1197,21 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE ScopeChainNode* Machine::createExceptionScope(ExecState* exec, const Instruction* vPC, Register* r)
</del><ins>+NEVER_INLINE ScopeChainNode* Machine::createExceptionScope(CallFrame* callFrame, const Instruction* vPC)
</ins><span class="cx"> {
</span><span class="cx">     int dst = (++vPC)-&gt;u.operand;
</span><del>-    CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     Identifier&amp; property = codeBlock-&gt;identifiers[(++vPC)-&gt;u.operand];
</span><del>-    JSValue* value = r[(++vPC)-&gt;u.operand].jsValue(exec);
-    JSObject* scope = new (exec) JSStaticScopeObject(exec, property, value, DontDelete);
-    r[dst] = scope;
</del><ins>+    JSValue* value = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+    JSObject* scope = new (callFrame) JSStaticScopeObject(callFrame, property, value, DontDelete);
+    callFrame[dst] = scope;
</ins><span class="cx"> 
</span><del>-    return scopeChain(r)-&gt;push(scope);
</del><ins>+    return callFrame-&gt;scopeChain()-&gt;push(scope);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static StructureIDChain* cachePrototypeChain(ExecState* exec, StructureID* structureID)
</del><ins>+static StructureIDChain* cachePrototypeChain(CallFrame* callFrame, StructureID* structureID)
</ins><span class="cx"> {
</span><del>-    JSValue* prototype = structureID-&gt;prototypeForLookup(exec);
</del><ins>+    JSValue* prototype = structureID-&gt;prototypeForLookup(callFrame);
</ins><span class="cx">     if (JSImmediate::isImmediate(prototype))
</span><span class="cx">         return 0;
</span><span class="cx">     RefPtr&lt;StructureIDChain&gt; chain = StructureIDChain::create(static_cast&lt;JSObject*&gt;(prototype)-&gt;structureID());
</span><span class="lines">@@ -1238,7 +1219,7 @@
</span><span class="cx">     return structureID-&gt;cachedPrototypeChain();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE void Machine::tryCachePutByID(ExecState* exec, CodeBlock* codeBlock, Instruction* vPC, JSValue* baseValue, const PutPropertySlot&amp; slot)
</del><ins>+NEVER_INLINE void Machine::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, Instruction* vPC, JSValue* baseValue, const PutPropertySlot&amp; slot)
</ins><span class="cx"> {
</span><span class="cx">     // Recursive invocation may already have specialized this instruction.
</span><span class="cx">     if (vPC[0].u.opcode != getOpcode(op_put_by_id))
</span><span class="lines">@@ -1290,7 +1271,7 @@
</span><span class="cx">         vPC[5] = structureID;
</span><span class="cx">         StructureIDChain* chain = structureID-&gt;cachedPrototypeChain();
</span><span class="cx">         if (!chain) {
</span><del>-            chain = cachePrototypeChain(exec, structureID);
</del><ins>+            chain = cachePrototypeChain(callFrame, structureID);
</ins><span class="cx">             if (!chain) {
</span><span class="cx">                 // This happens if someone has manually inserted null into the prototype chain
</span><span class="cx">                 vPC[0] = getOpcode(op_put_by_id_generic);
</span><span class="lines">@@ -1315,7 +1296,7 @@
</span><span class="cx">     vPC[4] = 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE void Machine::tryCacheGetByID(ExecState* exec, CodeBlock* codeBlock, Instruction* vPC, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp; slot)
</del><ins>+NEVER_INLINE void Machine::tryCacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, Instruction* vPC, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp; slot)
</ins><span class="cx"> {
</span><span class="cx">     // Recursive invocation may already have specialized this instruction.
</span><span class="cx">     if (vPC[0].u.opcode != getOpcode(op_get_by_id))
</span><span class="lines">@@ -1327,12 +1308,12 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (isJSArray(baseValue) &amp;&amp; propertyName == exec-&gt;propertyNames().length) {
</del><ins>+    if (isJSArray(baseValue) &amp;&amp; propertyName == callFrame-&gt;propertyNames().length) {
</ins><span class="cx">         vPC[0] = getOpcode(op_get_array_length);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (isJSString(baseValue) &amp;&amp; propertyName == exec-&gt;propertyNames().length) {
</del><ins>+    if (isJSString(baseValue) &amp;&amp; propertyName == callFrame-&gt;propertyNames().length) {
</ins><span class="cx">         vPC[0] = getOpcode(op_get_string_length);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -1374,7 +1355,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (slot.slotBase() == structureID-&gt;prototypeForLookup(exec)) {
</del><ins>+    if (slot.slotBase() == structureID-&gt;prototypeForLookup(callFrame)) {
</ins><span class="cx">         ASSERT(slot.slotBase()-&gt;isObject());
</span><span class="cx"> 
</span><span class="cx">         JSObject* baseObject = static_cast&lt;JSObject*&gt;(slot.slotBase());
</span><span class="lines">@@ -1398,7 +1379,7 @@
</span><span class="cx">     size_t count = 0;
</span><span class="cx">     JSObject* o = static_cast&lt;JSObject*&gt;(baseValue);
</span><span class="cx">     while (slot.slotBase() != o) {
</span><del>-        JSValue* v = o-&gt;structureID()-&gt;prototypeForLookup(exec);
</del><ins>+        JSValue* v = o-&gt;structureID()-&gt;prototypeForLookup(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         // If we didn't find base in baseValue's prototype chain, then baseValue
</span><span class="cx">         // must be a proxy for another object.
</span><span class="lines">@@ -1422,7 +1403,7 @@
</span><span class="cx"> 
</span><span class="cx">     StructureIDChain* chain = structureID-&gt;cachedPrototypeChain();
</span><span class="cx">     if (!chain)
</span><del>-        chain = cachePrototypeChain(exec, structureID);
</del><ins>+        chain = cachePrototypeChain(callFrame, structureID);
</ins><span class="cx">     ASSERT(chain);
</span><span class="cx"> 
</span><span class="cx">     vPC[0] = getOpcode(op_get_by_id_chain);
</span><span class="lines">@@ -1440,7 +1421,7 @@
</span><span class="cx">     vPC[4] = 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue* Machine::privateExecute(ExecutionFlag flag, RegisterFile* registerFile, Register* r, JSValue** exception)
</del><ins>+JSValue* Machine::privateExecute(ExecutionFlag flag, RegisterFile* registerFile, CallFrame* callFrame, JSValue** exception)
</ins><span class="cx"> {
</span><span class="cx">     // One-time initialization of our address tables. We have to put this code
</span><span class="cx">     // here because our labels are only in scope inside this function.
</span><span class="lines">@@ -1465,13 +1446,11 @@
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#define exec CallFrame::create(r)
-
-    JSGlobalData* globalData = &amp;exec-&gt;globalData();
</del><ins>+    JSGlobalData* globalData = &amp;callFrame-&gt;globalData();
</ins><span class="cx">     JSValue* exceptionValue = 0;
</span><span class="cx">     Instruction* handlerVPC = 0;
</span><span class="cx"> 
</span><del>-    Instruction* vPC = this-&gt;codeBlock(r)-&gt;instructions.begin();
</del><ins>+    Instruction* vPC = callFrame-&gt;codeBlock()-&gt;instructions.begin();
</ins><span class="cx">     Profiler** enabledProfilerReference = Profiler::enabledProfilerReference();
</span><span class="cx">     unsigned tickCount = m_ticksUntilNextTimeoutCheck + 1;
</span><span class="cx"> 
</span><span class="lines">@@ -1489,13 +1468,13 @@
</span><span class="cx"> 
</span><span class="cx"> #define CHECK_FOR_TIMEOUT() \
</span><span class="cx">     if (!--tickCount) { \
</span><del>-        if ((exceptionValue = checkTimeout(exec-&gt;dynamicGlobalObject()))) \
</del><ins>+        if ((exceptionValue = checkTimeout(callFrame-&gt;dynamicGlobalObject()))) \
</ins><span class="cx">             goto vm_throw; \
</span><span class="cx">         tickCount = m_ticksUntilNextTimeoutCheck; \
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if HAVE(COMPUTED_GOTO)
</span><del>-    #define NEXT_OPCODE MACHINE_SAMPLING_sample(this-&gt;codeBlock(r), vPC); goto *vPC-&gt;u.opcode
</del><ins>+    #define NEXT_OPCODE MACHINE_SAMPLING_sample(callFrame-&gt;codeBlock(), vPC); goto *vPC-&gt;u.opcode
</ins><span class="cx"> #if DUMP_OPCODE_STATS
</span><span class="cx">     #define BEGIN_OPCODE(opcode) opcode: OpcodeStats::recordInstruction(opcode);
</span><span class="cx"> #else
</span><span class="lines">@@ -1503,7 +1482,7 @@
</span><span class="cx"> #endif
</span><span class="cx">     NEXT_OPCODE;
</span><span class="cx"> #else
</span><del>-    #define NEXT_OPCODE MACHINE_SAMPLING_sample(this-&gt;codeBlock(r), vPC); goto interpreterLoopStart
</del><ins>+    #define NEXT_OPCODE MACHINE_SAMPLING_sample(callFrame-&gt;codeBlock(), vPC); goto interpreterLoopStart
</ins><span class="cx"> #if DUMP_OPCODE_STATS
</span><span class="cx">     #define BEGIN_OPCODE(opcode) case opcode: OpcodeStats::recordInstruction(opcode);
</span><span class="cx"> #else
</span><span class="lines">@@ -1521,7 +1500,7 @@
</span><span class="cx">            constructor, and puts the result in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = constructEmptyObject(exec);
</del><ins>+        callFrame[dst] = constructEmptyObject(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1537,8 +1516,8 @@
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int firstArg = (++vPC)-&gt;u.operand;
</span><span class="cx">         int argCount = (++vPC)-&gt;u.operand;
</span><del>-        ArgList args(r + firstArg, argCount);
-        r[dst] = constructArray(exec, args);
</del><ins>+        ArgList args(callFrame-&gt;registers() + firstArg, argCount);
+        callFrame[dst] = constructArray(callFrame, args);
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1552,7 +1531,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int regExp = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = new (globalData) RegExpObject(scopeChain(r)-&gt;globalObject()-&gt;regExpStructure(), codeBlock(r)-&gt;regexps[regExp]);
</del><ins>+        callFrame[dst] = new (globalData) RegExpObject(callFrame-&gt;scopeChain()-&gt;globalObject()-&gt;regExpStructure(), callFrame-&gt;codeBlock()-&gt;regexps[regExp]);
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1564,7 +1543,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = r[src];
</del><ins>+        callFrame[dst] = callFrame[src];
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1577,14 +1556,14 @@
</span><span class="cx">            as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::areBothImmediateNumbers(src1, src2))
</span><del>-            r[dst] = jsBoolean(reinterpret_cast&lt;intptr_t&gt;(src1) == reinterpret_cast&lt;intptr_t&gt;(src2));
</del><ins>+            callFrame[dst] = jsBoolean(reinterpret_cast&lt;intptr_t&gt;(src1) == reinterpret_cast&lt;intptr_t&gt;(src2));
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsBoolean(equalSlowCase(exec, src1, src2));
</del><ins>+            JSValue* result = jsBoolean(equalSlowCase(callFrame, src1, src2));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1597,15 +1576,15 @@
</span><span class="cx">            operator, and puts the result as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (src-&gt;isUndefinedOrNull()) {
</span><del>-            r[dst] = jsBoolean(true);
</del><ins>+            callFrame[dst] = jsBoolean(true);
</ins><span class="cx">             ++vPC;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        r[dst] = jsBoolean(!JSImmediate::isImmediate(src) &amp;&amp; src-&gt;asCell()-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined());
</del><ins>+        callFrame[dst] = jsBoolean(!JSImmediate::isImmediate(src) &amp;&amp; src-&gt;asCell()-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined());
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -1617,14 +1596,14 @@
</span><span class="cx">            result as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::areBothImmediateNumbers(src1, src2))
</span><del>-            r[dst] = jsBoolean(src1 != src2);
</del><ins>+            callFrame[dst] = jsBoolean(src1 != src2);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsBoolean(!equalSlowCase(exec, src1, src2));
</del><ins>+            JSValue* result = jsBoolean(!equalSlowCase(callFrame, src1, src2));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1637,15 +1616,15 @@
</span><span class="cx">            operator, and puts the result as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (src-&gt;isUndefinedOrNull()) {
</span><del>-            r[dst] = jsBoolean(false);
</del><ins>+            callFrame[dst] = jsBoolean(false);
</ins><span class="cx">             ++vPC;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        r[dst] = jsBoolean(JSImmediate::isImmediate(src) || !static_cast&lt;JSCell*&gt;(src)-&gt;asCell()-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined());
</del><ins>+        callFrame[dst] = jsBoolean(JSImmediate::isImmediate(src) || !static_cast&lt;JSCell*&gt;(src)-&gt;asCell()-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined());
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -1657,14 +1636,14 @@
</span><span class="cx">            result as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::areBothImmediate(src1, src2))
</span><del>-            r[dst] = jsBoolean(reinterpret_cast&lt;intptr_t&gt;(src1) == reinterpret_cast&lt;intptr_t&gt;(src2));
</del><ins>+            callFrame[dst] = jsBoolean(reinterpret_cast&lt;intptr_t&gt;(src1) == reinterpret_cast&lt;intptr_t&gt;(src2));
</ins><span class="cx">         else if (JSImmediate::isEitherImmediate(src1, src2) &amp; (src1 != JSImmediate::zeroImmediate()) &amp; (src2 != JSImmediate::zeroImmediate()))
</span><del>-            r[dst] = jsBoolean(false);
</del><ins>+            callFrame[dst] = jsBoolean(false);
</ins><span class="cx">         else
</span><del>-            r[dst] = jsBoolean(strictEqualSlowCase(src1, src2));
</del><ins>+            callFrame[dst] = jsBoolean(strictEqualSlowCase(src1, src2));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1677,15 +1656,15 @@
</span><span class="cx">            puts the result as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (JSImmediate::areBothImmediate(src1, src2))
</span><del>-            r[dst] = jsBoolean(reinterpret_cast&lt;intptr_t&gt;(src1) != reinterpret_cast&lt;intptr_t&gt;(src2));
</del><ins>+            callFrame[dst] = jsBoolean(reinterpret_cast&lt;intptr_t&gt;(src1) != reinterpret_cast&lt;intptr_t&gt;(src2));
</ins><span class="cx">         else if (JSImmediate::isEitherImmediate(src1, src2) &amp; (src1 != JSImmediate::zeroImmediate()) &amp; (src2 != JSImmediate::zeroImmediate()))
</span><del>-            r[dst] = jsBoolean(true);
</del><ins>+            callFrame[dst] = jsBoolean(true);
</ins><span class="cx">         else
</span><del>-            r[dst] = jsBoolean(!strictEqualSlowCase(src1, src2));
</del><ins>+            callFrame[dst] = jsBoolean(!strictEqualSlowCase(src1, src2));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1698,11 +1677,11 @@
</span><span class="cx">            a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* result = jsBoolean(jsLess(exec, src1, src2));
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* result = jsBoolean(jsLess(callFrame, src1, src2));
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1715,11 +1694,11 @@
</span><span class="cx">            puts the result as a boolean in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* result = jsBoolean(jsLessEq(exec, src1, src2));
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* result = jsBoolean(jsLessEq(callFrame, src1, src2));
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1731,13 +1710,13 @@
</span><span class="cx">            back in register srcDst.
</span><span class="cx">         */
</span><span class="cx">         int srcDst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* v = r[srcDst].jsValue(exec);
</del><ins>+        JSValue* v = callFrame[srcDst].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::canDoFastAdditiveOperations(v))
</span><del>-            r[srcDst] = JSImmediate::incImmediateNumber(v);
</del><ins>+            callFrame[srcDst] = JSImmediate::incImmediateNumber(v);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, v-&gt;toNumber(exec) + 1);
</del><ins>+            JSValue* result = jsNumber(callFrame, v-&gt;toNumber(callFrame) + 1);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[srcDst] = result;
</del><ins>+            callFrame[srcDst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1750,13 +1729,13 @@
</span><span class="cx">            back in register srcDst.
</span><span class="cx">         */
</span><span class="cx">         int srcDst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* v = r[srcDst].jsValue(exec);
</del><ins>+        JSValue* v = callFrame[srcDst].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::canDoFastAdditiveOperations(v))
</span><del>-            r[srcDst] = JSImmediate::decImmediateNumber(v);
</del><ins>+            callFrame[srcDst] = JSImmediate::decImmediateNumber(v);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, v-&gt;toNumber(exec) - 1);
</del><ins>+            JSValue* result = jsNumber(callFrame, v-&gt;toNumber(callFrame) - 1);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[srcDst] = result;
</del><ins>+            callFrame[srcDst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1771,15 +1750,15 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int srcDst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* v = r[srcDst].jsValue(exec);
</del><ins>+        JSValue* v = callFrame[srcDst].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::canDoFastAdditiveOperations(v)) {
</span><del>-            r[dst] = v;
-            r[srcDst] = JSImmediate::incImmediateNumber(v);
</del><ins>+            callFrame[dst] = v;
+            callFrame[srcDst] = JSImmediate::incImmediateNumber(v);
</ins><span class="cx">         } else {
</span><del>-            JSValue* number = r[srcDst].jsValue(exec)-&gt;toJSNumber(exec);
</del><ins>+            JSValue* number = callFrame[srcDst].jsValue(callFrame)-&gt;toJSNumber(callFrame);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = number;
-            r[srcDst] = jsNumber(exec, number-&gt;uncheckedGetNumber() + 1);
</del><ins>+            callFrame[dst] = number;
+            callFrame[srcDst] = jsNumber(callFrame, number-&gt;uncheckedGetNumber() + 1);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1794,15 +1773,15 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int srcDst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* v = r[srcDst].jsValue(exec);
</del><ins>+        JSValue* v = callFrame[srcDst].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::canDoFastAdditiveOperations(v)) {
</span><del>-            r[dst] = v;
-            r[srcDst] = JSImmediate::decImmediateNumber(v);
</del><ins>+            callFrame[dst] = v;
+            callFrame[srcDst] = JSImmediate::decImmediateNumber(v);
</ins><span class="cx">         } else {
</span><del>-            JSValue* number = r[srcDst].jsValue(exec)-&gt;toJSNumber(exec);
</del><ins>+            JSValue* number = callFrame[srcDst].jsValue(callFrame)-&gt;toJSNumber(callFrame);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = number;
-            r[srcDst] = jsNumber(exec, number-&gt;uncheckedGetNumber() - 1);
</del><ins>+            callFrame[dst] = number;
+            callFrame[srcDst] = jsNumber(callFrame, number-&gt;uncheckedGetNumber() - 1);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1817,14 +1796,14 @@
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* srcVal = r[src].jsValue(exec);
</del><ins>+        JSValue* srcVal = callFrame[src].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (LIKELY(srcVal-&gt;isNumber()))
</span><del>-            r[dst] = r[src];
</del><ins>+            callFrame[dst] = callFrame[src];
</ins><span class="cx">         else {
</span><del>-            JSValue* result = srcVal-&gt;toJSNumber(exec);
</del><ins>+            JSValue* result = srcVal-&gt;toJSNumber(callFrame);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1837,14 +1816,14 @@
</span><span class="cx">            result in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         double v;
</span><span class="cx">         if (fastIsNumber(src, v))
</span><del>-            r[dst] = jsNumber(exec, -v);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, -v);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, -src-&gt;toNumber(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, -src-&gt;toNumber(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1858,14 +1837,14 @@
</span><span class="cx">            numeric add, depending on the types of the operands.)
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::canDoFastAdditiveOperations(src1) &amp;&amp; JSImmediate::canDoFastAdditiveOperations(src2))
</span><del>-            r[dst] = JSImmediate::addImmediateNumbers(src1, src2);
</del><ins>+            callFrame[dst] = JSImmediate::addImmediateNumbers(src1, src2);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsAdd(exec, src1, src2);
</del><ins>+            JSValue* result = jsAdd(callFrame, src1, src2);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx">         vPC += 2;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1877,16 +1856,16 @@
</span><span class="cx">            numbers), and puts the product in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         double left;
</span><span class="cx">         double right;
</span><span class="cx">         if (fastIsNumber(src1, left) &amp;&amp; fastIsNumber(src2, right))
</span><del>-            r[dst] = jsNumber(exec, left * right);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left * right);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, src1-&gt;toNumber(exec) * src2-&gt;toNumber(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, src1-&gt;toNumber(callFrame) * src2-&gt;toNumber(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         vPC += 2;
</span><span class="lines">@@ -1900,16 +1879,16 @@
</span><span class="cx">            quotient in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* dividend = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* divisor = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* dividend = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* divisor = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         double left;
</span><span class="cx">         double right;
</span><span class="cx">         if (fastIsNumber(dividend, left) &amp;&amp; fastIsNumber(divisor, right))
</span><del>-            r[dst] = jsNumber(exec, left / right);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left / right);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, dividend-&gt;toNumber(exec) / divisor-&gt;toNumber(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, dividend-&gt;toNumber(callFrame) / divisor-&gt;toNumber(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1925,19 +1904,19 @@
</span><span class="cx">         int dividend = (++vPC)-&gt;u.operand;
</span><span class="cx">         int divisor = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* dividendValue = r[dividend].jsValue(exec);
-        JSValue* divisorValue = r[divisor].jsValue(exec);
</del><ins>+        JSValue* dividendValue = callFrame[dividend].jsValue(callFrame);
+        JSValue* divisorValue = callFrame[divisor].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (JSImmediate::areBothImmediateNumbers(dividendValue, divisorValue) &amp;&amp; divisorValue != JSImmediate::from(0)) {
</span><del>-            r[dst] = JSImmediate::from(JSImmediate::getTruncatedInt32(dividendValue) % JSImmediate::getTruncatedInt32(divisorValue));
</del><ins>+            callFrame[dst] = JSImmediate::from(JSImmediate::getTruncatedInt32(dividendValue) % JSImmediate::getTruncatedInt32(divisorValue));
</ins><span class="cx">             ++vPC;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        double d = dividendValue-&gt;toNumber(exec);
-        JSValue* result = jsNumber(exec, fmod(d, divisorValue-&gt;toNumber(exec)));
</del><ins>+        double d = dividendValue-&gt;toNumber(callFrame);
+        JSValue* result = jsNumber(callFrame, fmod(d, divisorValue-&gt;toNumber(callFrame)));
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -1949,18 +1928,18 @@
</span><span class="cx">            register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         double left;
</span><span class="cx">         double right;
</span><span class="cx">         if (JSImmediate::canDoFastAdditiveOperations(src1) &amp;&amp; JSImmediate::canDoFastAdditiveOperations(src2))
</span><del>-            r[dst] = JSImmediate::subImmediateNumbers(src1, src2);
</del><ins>+            callFrame[dst] = JSImmediate::subImmediateNumbers(src1, src2);
</ins><span class="cx">         else if (fastIsNumber(src1, left) &amp;&amp; fastIsNumber(src2, right))
</span><del>-            r[dst] = jsNumber(exec, left - right);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left - right);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, src1-&gt;toNumber(exec) - src2-&gt;toNumber(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, src1-&gt;toNumber(callFrame) - src2-&gt;toNumber(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx">         vPC += 2;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -1973,18 +1952,18 @@
</span><span class="cx">            in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* val = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* shift = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* val = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* shift = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int32_t left;
</span><span class="cx">         uint32_t right;
</span><span class="cx">         if (JSImmediate::areBothImmediateNumbers(val, shift))
</span><del>-            r[dst] = jsNumber(exec, JSImmediate::getTruncatedInt32(val) &lt;&lt; (JSImmediate::getTruncatedUInt32(shift) &amp; 0x1f));
</del><ins>+            callFrame[dst] = jsNumber(callFrame, JSImmediate::getTruncatedInt32(val) &lt;&lt; (JSImmediate::getTruncatedUInt32(shift) &amp; 0x1f));
</ins><span class="cx">         else if (fastToInt32(val, left) &amp;&amp; fastToUInt32(shift, right))
</span><del>-            r[dst] = jsNumber(exec, left &lt;&lt; (right &amp; 0x1f));
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left &lt;&lt; (right &amp; 0x1f));
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, (val-&gt;toInt32(exec)) &lt;&lt; (shift-&gt;toUInt32(exec) &amp; 0x1f));
</del><ins>+            JSValue* result = jsNumber(callFrame, (val-&gt;toInt32(callFrame)) &lt;&lt; (shift-&gt;toUInt32(callFrame) &amp; 0x1f));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -1998,18 +1977,18 @@
</span><span class="cx">            uint32), and puts the result in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* val = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* shift = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* val = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* shift = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int32_t left;
</span><span class="cx">         uint32_t right;
</span><span class="cx">         if (JSImmediate::areBothImmediateNumbers(val, shift))
</span><del>-            r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
</del><ins>+            callFrame[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
</ins><span class="cx">         else if (fastToInt32(val, left) &amp;&amp; fastToUInt32(shift, right))
</span><del>-            r[dst] = jsNumber(exec, left &gt;&gt; (right &amp; 0x1f));
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left &gt;&gt; (right &amp; 0x1f));
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, (val-&gt;toInt32(exec)) &gt;&gt; (shift-&gt;toUInt32(exec) &amp; 0x1f));
</del><ins>+            JSValue* result = jsNumber(callFrame, (val-&gt;toInt32(callFrame)) &gt;&gt; (shift-&gt;toUInt32(callFrame) &amp; 0x1f));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -2023,14 +2002,14 @@
</span><span class="cx">            uint32), and puts the result in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* val = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* shift = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* val = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* shift = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (JSImmediate::areBothImmediateNumbers(val, shift) &amp;&amp; !JSImmediate::isNegative(val))
</span><del>-            r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
</del><ins>+            callFrame[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, (val-&gt;toUInt32(exec)) &gt;&gt; (shift-&gt;toUInt32(exec) &amp; 0x1f));
</del><ins>+            JSValue* result = jsNumber(callFrame, (val-&gt;toUInt32(callFrame)) &gt;&gt; (shift-&gt;toUInt32(callFrame) &amp; 0x1f));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -2044,18 +2023,18 @@
</span><span class="cx">            in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int32_t left;
</span><span class="cx">         int32_t right;
</span><span class="cx">         if (JSImmediate::areBothImmediateNumbers(src1, src2))
</span><del>-            r[dst] = JSImmediate::andImmediateNumbers(src1, src2);
</del><ins>+            callFrame[dst] = JSImmediate::andImmediateNumbers(src1, src2);
</ins><span class="cx">         else if (fastToInt32(src1, left) &amp;&amp; fastToInt32(src2, right))
</span><del>-            r[dst] = jsNumber(exec, left &amp; right);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left &amp; right);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, src1-&gt;toInt32(exec) &amp; src2-&gt;toInt32(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, src1-&gt;toInt32(callFrame) &amp; src2-&gt;toInt32(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         vPC += 2;
</span><span class="lines">@@ -2069,18 +2048,18 @@
</span><span class="cx">            in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int32_t left;
</span><span class="cx">         int32_t right;
</span><span class="cx">         if (JSImmediate::areBothImmediateNumbers(src1, src2))
</span><del>-            r[dst] = JSImmediate::xorImmediateNumbers(src1, src2);
</del><ins>+            callFrame[dst] = JSImmediate::xorImmediateNumbers(src1, src2);
</ins><span class="cx">         else if (fastToInt32(src1, left) &amp;&amp; fastToInt32(src2, right))
</span><del>-            r[dst] = jsNumber(exec, left ^ right);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left ^ right);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, src1-&gt;toInt32(exec) ^ src2-&gt;toInt32(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, src1-&gt;toInt32(callFrame) ^ src2-&gt;toInt32(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         vPC += 2;
</span><span class="lines">@@ -2094,18 +2073,18 @@
</span><span class="cx">            result in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int32_t left;
</span><span class="cx">         int32_t right;
</span><span class="cx">         if (JSImmediate::areBothImmediateNumbers(src1, src2))
</span><del>-            r[dst] = JSImmediate::orImmediateNumbers(src1, src2);
</del><ins>+            callFrame[dst] = JSImmediate::orImmediateNumbers(src1, src2);
</ins><span class="cx">         else if (fastToInt32(src1, left) &amp;&amp; fastToInt32(src2, right))
</span><del>-            r[dst] = jsNumber(exec, left | right);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, left | right);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, src1-&gt;toInt32(exec) | src2-&gt;toInt32(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, src1-&gt;toInt32(callFrame) | src2-&gt;toInt32(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         vPC += 2;
</span><span class="lines">@@ -2118,14 +2097,14 @@
</span><span class="cx">            and puts the result in register dst.
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* src = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int32_t value;
</span><span class="cx">         if (fastToInt32(src, value))
</span><del>-            r[dst] = jsNumber(exec, ~value);
</del><ins>+            callFrame[dst] = jsNumber(callFrame, ~value);
</ins><span class="cx">         else {
</span><del>-            JSValue* result = jsNumber(exec, ~src-&gt;toInt32(exec));
</del><ins>+            JSValue* result = jsNumber(callFrame, ~src-&gt;toInt32(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx">         }
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2138,9 +2117,9 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* result = jsBoolean(!r[src].jsValue(exec)-&gt;toBoolean(exec));
</del><ins>+        JSValue* result = jsBoolean(!callFrame[src].jsValue(callFrame)-&gt;toBoolean(callFrame));
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2163,13 +2142,13 @@
</span><span class="cx">         int base = (++vPC)-&gt;u.operand;
</span><span class="cx">         int baseProto = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* baseVal = r[base].jsValue(exec);
</del><ins>+        JSValue* baseVal = callFrame[base].jsValue(callFrame);
</ins><span class="cx"> 
</span><del>-        if (isNotObject(exec, true, codeBlock(r), vPC, baseVal, exceptionValue))
</del><ins>+        if (isNotObject(callFrame, true, callFrame-&gt;codeBlock(), vPC, baseVal, exceptionValue))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx"> 
</span><span class="cx">         JSObject* baseObj = static_cast&lt;JSObject*&gt;(baseVal);
</span><del>-        r[dst] = jsBoolean(baseObj-&gt;structureID()-&gt;typeInfo().implementsHasInstance() ? baseObj-&gt;hasInstance(exec, r[value].jsValue(exec), r[baseProto].jsValue(exec)) : false);
</del><ins>+        callFrame[dst] = jsBoolean(baseObj-&gt;structureID()-&gt;typeInfo().implementsHasInstance() ? baseObj-&gt;hasInstance(callFrame, callFrame[value].jsValue(callFrame), callFrame[baseProto].jsValue(callFrame)) : false);
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2182,7 +2161,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = jsTypeStringForValue(exec, r[src].jsValue(exec));
</del><ins>+        callFrame[dst] = jsTypeStringForValue(callFrame, callFrame[src].jsValue(callFrame));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2196,8 +2175,8 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* v = r[src].jsValue(exec);
-        r[dst] = jsBoolean(JSImmediate::isImmediate(v) ? v-&gt;isUndefined() : v-&gt;asCell()-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined());
</del><ins>+        JSValue* v = callFrame[src].jsValue(callFrame);
+        callFrame[dst] = jsBoolean(JSImmediate::isImmediate(v) ? v-&gt;isUndefined() : v-&gt;asCell()-&gt;structureID()-&gt;typeInfo().masqueradesAsUndefined());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2211,7 +2190,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = jsBoolean(r[src].jsValue(exec)-&gt;isBoolean());
</del><ins>+        callFrame[dst] = jsBoolean(callFrame[src].jsValue(callFrame)-&gt;isBoolean());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2225,7 +2204,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = jsBoolean(r[src].jsValue(exec)-&gt;isNumber());
</del><ins>+        callFrame[dst] = jsBoolean(callFrame[src].jsValue(callFrame)-&gt;isNumber());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2239,7 +2218,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = jsBoolean(r[src].jsValue(exec)-&gt;isString());
</del><ins>+        callFrame[dst] = jsBoolean(callFrame[src].jsValue(callFrame)-&gt;isString());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2253,7 +2232,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = jsBoolean(jsIsObjectType(r[src].jsValue(exec)));
</del><ins>+        callFrame[dst] = jsBoolean(jsIsObjectType(callFrame[src].jsValue(callFrame)));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2267,7 +2246,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = jsBoolean(jsIsFunctionType(r[src].jsValue(exec)));
</del><ins>+        callFrame[dst] = jsBoolean(jsIsFunctionType(callFrame[src].jsValue(callFrame)));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2285,21 +2264,21 @@
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx">         int base = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* baseVal = r[base].jsValue(exec);
-        if (isNotObject(exec, false, codeBlock(r), vPC, baseVal, exceptionValue))
</del><ins>+        JSValue* baseVal = callFrame[base].jsValue(callFrame);
+        if (isNotObject(callFrame, false, callFrame-&gt;codeBlock(), vPC, baseVal, exceptionValue))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx"> 
</span><span class="cx">         JSObject* baseObj = static_cast&lt;JSObject*&gt;(baseVal);
</span><span class="cx"> 
</span><del>-        JSValue* propName = r[property].jsValue(exec);
</del><ins>+        JSValue* propName = callFrame[property].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         uint32_t i;
</span><span class="cx">         if (propName-&gt;getUInt32(i))
</span><del>-            r[dst] = jsBoolean(baseObj-&gt;hasProperty(exec, i));
</del><ins>+            callFrame[dst] = jsBoolean(baseObj-&gt;hasProperty(callFrame, i));
</ins><span class="cx">         else {
</span><del>-            Identifier property(exec, propName-&gt;toString(exec));
</del><ins>+            Identifier property(callFrame, propName-&gt;toString(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = jsBoolean(baseObj-&gt;hasProperty(exec, property));
</del><ins>+            callFrame[dst] = jsBoolean(baseObj-&gt;hasProperty(callFrame, property));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -2312,7 +2291,7 @@
</span><span class="cx">            scope chain, and writes the resulting value to register
</span><span class="cx">            dst. If the property is not found, raises an exception.
</span><span class="cx">         */
</span><del>-        if (UNLIKELY(!resolve(exec, vPC, r, exceptionValue)))
</del><ins>+        if (UNLIKELY(!resolve(callFrame, vPC, exceptionValue)))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx"> 
</span><span class="cx">         vPC += 3;
</span><span class="lines">@@ -2325,7 +2304,7 @@
</span><span class="cx">          scope chain skipping the top 'skip' levels, and writes the resulting
</span><span class="cx">          value to register dst. If the property is not found, raises an exception.
</span><span class="cx">          */
</span><del>-        if (UNLIKELY(!resolveSkip(exec, vPC, r, exceptionValue)))
</del><ins>+        if (UNLIKELY(!resolveSkip(callFrame, vPC, exceptionValue)))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx"> 
</span><span class="cx">         vPC += 4;
</span><span class="lines">@@ -2340,7 +2319,7 @@
</span><span class="cx">            a fast lookup using the case offset, otherwise fall back to a full resolve and
</span><span class="cx">            cache the new structureID and offset
</span><span class="cx">          */
</span><del>-        if (UNLIKELY(!resolveGlobal(exec, vPC, r,  exceptionValue)))
</del><ins>+        if (UNLIKELY(!resolveGlobal(callFrame, vPC, exceptionValue)))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx">         
</span><span class="cx">         vPC += 6;
</span><span class="lines">@@ -2357,7 +2336,7 @@
</span><span class="cx">         ASSERT(scope-&gt;isGlobalObject());
</span><span class="cx">         int index = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        r[dst] = scope-&gt;registerAt(index);
</del><ins>+        callFrame[dst] = scope-&gt;registerAt(index);
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2371,7 +2350,7 @@
</span><span class="cx">         int index = (++vPC)-&gt;u.operand;
</span><span class="cx">         int value = (++vPC)-&gt;u.operand;
</span><span class="cx">         
</span><del>-        scope-&gt;registerAt(index) = r[value].jsValue(exec);
</del><ins>+        scope-&gt;registerAt(index) = callFrame[value].jsValue(callFrame);
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }            
</span><span class="lines">@@ -2383,9 +2362,9 @@
</span><span class="cx">          */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int index = (++vPC)-&gt;u.operand;
</span><del>-        int skip = (++vPC)-&gt;u.operand + codeBlock(r)-&gt;needsFullScopeChain;
</del><ins>+        int skip = (++vPC)-&gt;u.operand + callFrame-&gt;codeBlock()-&gt;needsFullScopeChain;
</ins><span class="cx"> 
</span><del>-        ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+        ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">         ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">         ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="cx">         ASSERT(iter != end);
</span><span class="lines">@@ -2396,7 +2375,7 @@
</span><span class="cx"> 
</span><span class="cx">         ASSERT((*iter)-&gt;isVariableObject());
</span><span class="cx">         JSVariableObject* scope = static_cast&lt;JSVariableObject*&gt;(*iter);
</span><del>-        r[dst] = scope-&gt;registerAt(index);
</del><ins>+        callFrame[dst] = scope-&gt;registerAt(index);
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2405,10 +2384,10 @@
</span><span class="cx"> 
</span><span class="cx">          */
</span><span class="cx">         int index = (++vPC)-&gt;u.operand;
</span><del>-        int skip = (++vPC)-&gt;u.operand + codeBlock(r)-&gt;needsFullScopeChain;
</del><ins>+        int skip = (++vPC)-&gt;u.operand + callFrame-&gt;codeBlock()-&gt;needsFullScopeChain;
</ins><span class="cx">         int value = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+        ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">         ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">         ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="cx">         ASSERT(iter != end);
</span><span class="lines">@@ -2419,7 +2398,7 @@
</span><span class="cx"> 
</span><span class="cx">         ASSERT((*iter)-&gt;isVariableObject());
</span><span class="cx">         JSVariableObject* scope = static_cast&lt;JSVariableObject*&gt;(*iter);
</span><del>-        scope-&gt;registerAt(index) = r[value].jsValue(exec);
</del><ins>+        scope-&gt;registerAt(index) = callFrame[value].jsValue(callFrame);
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2431,7 +2410,7 @@
</span><span class="cx">            register dst. If none is found, the outermost scope (which
</span><span class="cx">            will be the global object) is stored in register dst.
</span><span class="cx">         */
</span><del>-        resolveBase(exec, vPC, r);
</del><ins>+        resolveBase(callFrame, vPC);
</ins><span class="cx"> 
</span><span class="cx">         vPC += 3;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2448,7 +2427,7 @@
</span><span class="cx">            resolve, or resolve_base followed by get_by_id, as it
</span><span class="cx">            avoids duplicate hash lookups.
</span><span class="cx">         */
</span><del>-        if (UNLIKELY(!resolveBaseAndProperty(exec, vPC, r, exceptionValue)))
</del><ins>+        if (UNLIKELY(!resolveBaseAndProperty(callFrame, vPC, exceptionValue)))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx"> 
</span><span class="cx">         vPC += 4;
</span><span class="lines">@@ -2469,7 +2448,7 @@
</span><span class="cx">            the global object, which is the right behavior for function
</span><span class="cx">            calls but not for other property lookup.
</span><span class="cx">         */
</span><del>-        if (UNLIKELY(!resolveBaseAndFunc(exec, vPC, r, exceptionValue)))
</del><ins>+        if (UNLIKELY(!resolveBaseAndFunc(callFrame, vPC, exceptionValue)))
</ins><span class="cx">             goto vm_throw;
</span><span class="cx"> 
</span><span class="cx">         vPC += 4;
</span><span class="lines">@@ -2485,16 +2464,16 @@
</span><span class="cx">         int base = vPC[2].u.operand;
</span><span class="cx">         int property = vPC[3].u.operand;
</span><span class="cx"> 
</span><del>-        CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">         Identifier&amp; ident = codeBlock-&gt;identifiers[property];
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx">         PropertySlot slot(baseValue);
</span><del>-        JSValue* result = baseValue-&gt;get(exec, ident, slot);
</del><ins>+        JSValue* result = baseValue-&gt;get(callFrame, ident, slot);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><del>-        tryCacheGetByID(exec, codeBlock, vPC, baseValue, ident, slot);
</del><ins>+        tryCacheGetByID(callFrame, codeBlock, vPC, baseValue, ident, slot);
</ins><span class="cx"> 
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         vPC += 8;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2506,7 +2485,7 @@
</span><span class="cx">            op_get_by_id.
</span><span class="cx">         */
</span><span class="cx">         int base = vPC[2].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (LIKELY(!JSImmediate::isImmediate(baseValue))) {
</span><span class="cx">             JSCell* baseCell = static_cast&lt;JSCell*&gt;(baseValue);
</span><span class="lines">@@ -2518,15 +2497,15 @@
</span><span class="cx">                 int dst = vPC[1].u.operand;
</span><span class="cx">                 int offset = vPC[5].u.operand;
</span><span class="cx"> 
</span><del>-                ASSERT(baseObject-&gt;get(exec, codeBlock(r)-&gt;identifiers[vPC[3].u.operand]) == baseObject-&gt;getDirectOffset(offset));
-                r[dst] = baseObject-&gt;getDirectOffset(offset);
</del><ins>+                ASSERT(baseObject-&gt;get(callFrame, callFrame-&gt;codeBlock()-&gt;identifiers[vPC[3].u.operand]) == baseObject-&gt;getDirectOffset(offset));
+                callFrame[dst] = baseObject-&gt;getDirectOffset(offset);
</ins><span class="cx"> 
</span><span class="cx">                 vPC += 8;
</span><span class="cx">                 NEXT_OPCODE;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        uncacheGetByID(codeBlock(r), vPC);
</del><ins>+        uncacheGetByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_get_by_id_proto) {
</span><span class="lines">@@ -2537,23 +2516,23 @@
</span><span class="cx">            reverts to op_get_by_id.
</span><span class="cx">         */
</span><span class="cx">         int base = vPC[2].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (LIKELY(!JSImmediate::isImmediate(baseValue))) {
</span><span class="cx">             JSCell* baseCell = static_cast&lt;JSCell*&gt;(baseValue);
</span><span class="cx">             StructureID* structureID = vPC[4].u.structureID;
</span><span class="cx"> 
</span><span class="cx">             if (LIKELY(baseCell-&gt;structureID() == structureID)) {
</span><del>-                ASSERT(structureID-&gt;prototypeForLookup(exec)-&gt;isObject());
-                JSObject* protoObject = static_cast&lt;JSObject*&gt;(structureID-&gt;prototypeForLookup(exec));
</del><ins>+                ASSERT(structureID-&gt;prototypeForLookup(callFrame)-&gt;isObject());
+                JSObject* protoObject = static_cast&lt;JSObject*&gt;(structureID-&gt;prototypeForLookup(callFrame));
</ins><span class="cx">                 StructureID* protoStructureID = vPC[5].u.structureID;
</span><span class="cx"> 
</span><span class="cx">                 if (LIKELY(protoObject-&gt;structureID() == protoStructureID)) {
</span><span class="cx">                     int dst = vPC[1].u.operand;
</span><span class="cx">                     int offset = vPC[6].u.operand;
</span><span class="cx"> 
</span><del>-                    ASSERT(protoObject-&gt;get(exec, codeBlock(r)-&gt;identifiers[vPC[3].u.operand]) == protoObject-&gt;getDirectOffset(offset));
-                    r[dst] = protoObject-&gt;getDirectOffset(offset);
</del><ins>+                    ASSERT(protoObject-&gt;get(callFrame, callFrame-&gt;codeBlock()-&gt;identifiers[vPC[3].u.operand]) == protoObject-&gt;getDirectOffset(offset));
+                    callFrame[dst] = protoObject-&gt;getDirectOffset(offset);
</ins><span class="cx"> 
</span><span class="cx">                     vPC += 8;
</span><span class="cx">                     NEXT_OPCODE;
</span><span class="lines">@@ -2561,7 +2540,7 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        uncacheGetByID(codeBlock(r), vPC);
</del><ins>+        uncacheGetByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_get_by_id_chain) {
</span><span class="lines">@@ -2572,7 +2551,7 @@
</span><span class="cx">            reverts to op_get_by_id.
</span><span class="cx">         */
</span><span class="cx">         int base = vPC[2].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (LIKELY(!JSImmediate::isImmediate(baseValue))) {
</span><span class="cx">             JSCell* baseCell = static_cast&lt;JSCell*&gt;(baseValue);
</span><span class="lines">@@ -2585,7 +2564,7 @@
</span><span class="cx"> 
</span><span class="cx">                 JSObject* baseObject = static_cast&lt;JSObject*&gt;(baseCell);
</span><span class="cx">                 while (1) {
</span><del>-                    baseObject = static_cast&lt;JSObject*&gt;(baseObject-&gt;structureID()-&gt;prototypeForLookup(exec));
</del><ins>+                    baseObject = static_cast&lt;JSObject*&gt;(baseObject-&gt;structureID()-&gt;prototypeForLookup(callFrame));
</ins><span class="cx">                     if (UNLIKELY(baseObject-&gt;structureID() != (*it).get()))
</span><span class="cx">                         break;
</span><span class="cx"> 
</span><span class="lines">@@ -2593,8 +2572,8 @@
</span><span class="cx">                         int dst = vPC[1].u.operand;
</span><span class="cx">                         int offset = vPC[7].u.operand;
</span><span class="cx"> 
</span><del>-                        ASSERT(baseObject-&gt;get(exec, codeBlock(r)-&gt;identifiers[vPC[3].u.operand]) == baseObject-&gt;getDirectOffset(offset));
-                        r[dst] = baseObject-&gt;getDirectOffset(offset);
</del><ins>+                        ASSERT(baseObject-&gt;get(callFrame, callFrame-&gt;codeBlock()-&gt;identifiers[vPC[3].u.operand]) == baseObject-&gt;getDirectOffset(offset));
+                        callFrame[dst] = baseObject-&gt;getDirectOffset(offset);
</ins><span class="cx"> 
</span><span class="cx">                         vPC += 8;
</span><span class="cx">                         NEXT_OPCODE;
</span><span class="lines">@@ -2603,7 +2582,7 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        uncacheGetByID(codeBlock(r), vPC);
</del><ins>+        uncacheGetByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_get_by_id_generic) {
</span><span class="lines">@@ -2616,13 +2595,13 @@
</span><span class="cx">         int base = vPC[2].u.operand;
</span><span class="cx">         int property = vPC[3].u.operand;
</span><span class="cx"> 
</span><del>-        Identifier&amp; ident = codeBlock(r)-&gt;identifiers[property];
-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        Identifier&amp; ident = callFrame-&gt;codeBlock()-&gt;identifiers[property];
+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx">         PropertySlot slot(baseValue);
</span><del>-        JSValue* result = baseValue-&gt;get(exec, ident, slot);
</del><ins>+        JSValue* result = baseValue-&gt;get(callFrame, ident, slot);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         vPC += 8;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2635,15 +2614,15 @@
</span><span class="cx">         */
</span><span class="cx"> 
</span><span class="cx">         int base = vPC[2].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx">         if (LIKELY(isJSArray(baseValue))) {
</span><span class="cx">             int dst = vPC[1].u.operand;
</span><del>-            r[dst] = jsNumber(exec, static_cast&lt;JSArray*&gt;(baseValue)-&gt;length());
</del><ins>+            callFrame[dst] = jsNumber(callFrame, static_cast&lt;JSArray*&gt;(baseValue)-&gt;length());
</ins><span class="cx">             vPC += 8;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        uncacheGetByID(codeBlock(r), vPC);
</del><ins>+        uncacheGetByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_get_string_length) {
</span><span class="lines">@@ -2655,15 +2634,15 @@
</span><span class="cx">         */
</span><span class="cx"> 
</span><span class="cx">         int base = vPC[2].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx">         if (LIKELY(isJSString(baseValue))) {
</span><span class="cx">             int dst = vPC[1].u.operand;
</span><del>-            r[dst] = jsNumber(exec, static_cast&lt;JSString*&gt;(baseValue)-&gt;value().size());
</del><ins>+            callFrame[dst] = jsNumber(callFrame, static_cast&lt;JSString*&gt;(baseValue)-&gt;value().size());
</ins><span class="cx">             vPC += 8;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        uncacheGetByID(codeBlock(r), vPC);
</del><ins>+        uncacheGetByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_put_by_id) {
</span><span class="lines">@@ -2680,14 +2659,14 @@
</span><span class="cx">         int property = vPC[2].u.operand;
</span><span class="cx">         int value = vPC[3].u.operand;
</span><span class="cx"> 
</span><del>-        CodeBlock* codeBlock = this-&gt;codeBlock(r);
-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx">         Identifier&amp; ident = codeBlock-&gt;identifiers[property];
</span><span class="cx">         PutPropertySlot slot;
</span><del>-        baseValue-&gt;put(exec, ident, r[value].jsValue(exec), slot);
</del><ins>+        baseValue-&gt;put(callFrame, ident, callFrame[value].jsValue(callFrame), slot);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><del>-        tryCachePutByID(exec, codeBlock, vPC, baseValue, slot);
</del><ins>+        tryCachePutByID(callFrame, codeBlock, vPC, baseValue, slot);
</ins><span class="cx"> 
</span><span class="cx">         vPC += 8;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2704,7 +2683,7 @@
</span><span class="cx">            the register file.
</span><span class="cx">          */
</span><span class="cx">         int base = vPC[1].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx">         
</span><span class="cx">         if (LIKELY(!JSImmediate::isImmediate(baseValue))) {
</span><span class="cx">             JSCell* baseCell = static_cast&lt;JSCell*&gt;(baseValue);
</span><span class="lines">@@ -2717,29 +2696,29 @@
</span><span class="cx"> 
</span><span class="cx">                 RefPtr&lt;StructureID&gt;* it = vPC[6].u.structureIDChain-&gt;head();
</span><span class="cx"> 
</span><del>-                JSObject* proto = static_cast&lt;JSObject*&gt;(baseObject-&gt;structureID()-&gt;prototypeForLookup(exec));
</del><ins>+                JSObject* proto = static_cast&lt;JSObject*&gt;(baseObject-&gt;structureID()-&gt;prototypeForLookup(callFrame));
</ins><span class="cx">                 while (!proto-&gt;isNull()) {
</span><span class="cx">                     if (UNLIKELY(proto-&gt;structureID() != (*it).get())) {
</span><del>-                        uncachePutByID(codeBlock(r), vPC);
</del><ins>+                        uncachePutByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">                         NEXT_OPCODE;
</span><span class="cx">                     }
</span><span class="cx">                     ++it;
</span><del>-                    proto = static_cast&lt;JSObject*&gt;(proto-&gt;structureID()-&gt;prototypeForLookup(exec));
</del><ins>+                    proto = static_cast&lt;JSObject*&gt;(proto-&gt;structureID()-&gt;prototypeForLookup(callFrame));
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 baseObject-&gt;transitionTo(newStructureID);
</span><span class="cx"> 
</span><span class="cx">                 int value = vPC[3].u.operand;
</span><span class="cx">                 unsigned offset = vPC[7].u.operand;
</span><del>-                ASSERT(baseObject-&gt;offsetForLocation(baseObject-&gt;getDirectLocation(codeBlock(r)-&gt;identifiers[vPC[2].u.operand])) == offset);
-                baseObject-&gt;putDirectOffset(offset, r[value].jsValue(exec));
</del><ins>+                ASSERT(baseObject-&gt;offsetForLocation(baseObject-&gt;getDirectLocation(callFrame-&gt;codeBlock()-&gt;identifiers[vPC[2].u.operand])) == offset);
+                baseObject-&gt;putDirectOffset(offset, callFrame[value].jsValue(callFrame));
</ins><span class="cx"> 
</span><span class="cx">                 vPC += 8;
</span><span class="cx">                 NEXT_OPCODE;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        uncachePutByID(codeBlock(r), vPC);
</del><ins>+        uncachePutByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_put_by_id_replace) {
</span><span class="lines">@@ -2754,7 +2733,7 @@
</span><span class="cx">            the register file.
</span><span class="cx">         */
</span><span class="cx">         int base = vPC[1].u.operand;
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (LIKELY(!JSImmediate::isImmediate(baseValue))) {
</span><span class="cx">             JSCell* baseCell = static_cast&lt;JSCell*&gt;(baseValue);
</span><span class="lines">@@ -2766,15 +2745,15 @@
</span><span class="cx">                 int value = vPC[3].u.operand;
</span><span class="cx">                 unsigned offset = vPC[5].u.operand;
</span><span class="cx">                 
</span><del>-                ASSERT(baseObject-&gt;offsetForLocation(baseObject-&gt;getDirectLocation(codeBlock(r)-&gt;identifiers[vPC[2].u.operand])) == offset);
-                baseObject-&gt;putDirectOffset(offset, r[value].jsValue(exec));
</del><ins>+                ASSERT(baseObject-&gt;offsetForLocation(baseObject-&gt;getDirectLocation(callFrame-&gt;codeBlock()-&gt;identifiers[vPC[2].u.operand])) == offset);
+                baseObject-&gt;putDirectOffset(offset, callFrame[value].jsValue(callFrame));
</ins><span class="cx"> 
</span><span class="cx">                 vPC += 8;
</span><span class="cx">                 NEXT_OPCODE;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        uncachePutByID(codeBlock(r), vPC);
</del><ins>+        uncachePutByID(callFrame-&gt;codeBlock(), vPC);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_put_by_id_generic) {
</span><span class="lines">@@ -2790,10 +2769,10 @@
</span><span class="cx">         int property = vPC[2].u.operand;
</span><span class="cx">         int value = vPC[3].u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
-        Identifier&amp; ident = codeBlock(r)-&gt;identifiers[property];
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
+        Identifier&amp; ident = callFrame-&gt;codeBlock()-&gt;identifiers[property];
</ins><span class="cx">         PutPropertySlot slot;
</span><del>-        baseValue-&gt;put(exec, ident, r[value].jsValue(exec), slot);
</del><ins>+        baseValue-&gt;put(callFrame, ident, callFrame[value].jsValue(callFrame), slot);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><span class="cx">         vPC += 8;
</span><span class="lines">@@ -2811,11 +2790,11 @@
</span><span class="cx">         int base = (++vPC)-&gt;u.operand;
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSObject* baseObj = r[base].jsValue(exec)-&gt;toObject(exec);
-        Identifier&amp; ident = codeBlock(r)-&gt;identifiers[property];
-        JSValue* result = jsBoolean(baseObj-&gt;deleteProperty(exec, ident));
</del><ins>+        JSObject* baseObj = callFrame[base].jsValue(callFrame)-&gt;toObject(callFrame);
+        Identifier&amp; ident = callFrame-&gt;codeBlock()-&gt;identifiers[property];
+        JSValue* result = jsBoolean(baseObj-&gt;deleteProperty(callFrame, ident));
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2831,8 +2810,8 @@
</span><span class="cx">         int base = (++vPC)-&gt;u.operand;
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx">         
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
-        JSValue* subscript = r[property].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
+        JSValue* subscript = callFrame[property].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         JSValue* result;
</span><span class="cx">         unsigned i;
</span><span class="lines">@@ -2844,18 +2823,18 @@
</span><span class="cx">                 if (jsArray-&gt;canGetIndex(i))
</span><span class="cx">                     result = jsArray-&gt;getIndex(i);
</span><span class="cx">                 else
</span><del>-                    result = jsArray-&gt;JSArray::get(exec, i);
</del><ins>+                    result = jsArray-&gt;JSArray::get(callFrame, i);
</ins><span class="cx">             } else if (isJSString(baseValue) &amp;&amp; static_cast&lt;JSString*&gt;(baseValue)-&gt;canGetIndex(i))
</span><del>-                result = static_cast&lt;JSString*&gt;(baseValue)-&gt;getIndex(&amp;exec-&gt;globalData(), i);
</del><ins>+                result = static_cast&lt;JSString*&gt;(baseValue)-&gt;getIndex(&amp;callFrame-&gt;globalData(), i);
</ins><span class="cx">             else
</span><del>-                result = baseValue-&gt;get(exec, i);
</del><ins>+                result = baseValue-&gt;get(callFrame, i);
</ins><span class="cx">         } else {
</span><del>-            Identifier property(exec, subscript-&gt;toString(exec));
-            result = baseValue-&gt;get(exec, property);
</del><ins>+            Identifier property(callFrame, subscript-&gt;toString(callFrame));
+            result = baseValue-&gt;get(callFrame, property);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2874,8 +2853,8 @@
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx">         int value = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* baseValue = r[base].jsValue(exec);
-        JSValue* subscript = r[property].jsValue(exec);
</del><ins>+        JSValue* baseValue = callFrame[base].jsValue(callFrame);
+        JSValue* subscript = callFrame[property].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         unsigned i;
</span><span class="cx"> 
</span><span class="lines">@@ -2884,16 +2863,16 @@
</span><span class="cx">             if (isJSArray(baseValue)) {
</span><span class="cx">                 JSArray* jsArray = static_cast&lt;JSArray*&gt;(baseValue);
</span><span class="cx">                 if (jsArray-&gt;canSetIndex(i))
</span><del>-                    jsArray-&gt;setIndex(i, r[value].jsValue(exec));
</del><ins>+                    jsArray-&gt;setIndex(i, callFrame[value].jsValue(callFrame));
</ins><span class="cx">                 else
</span><del>-                    jsArray-&gt;JSArray::put(exec, i, r[value].jsValue(exec));
</del><ins>+                    jsArray-&gt;JSArray::put(callFrame, i, callFrame[value].jsValue(callFrame));
</ins><span class="cx">             } else
</span><del>-                baseValue-&gt;put(exec, i, r[value].jsValue(exec));
</del><ins>+                baseValue-&gt;put(callFrame, i, callFrame[value].jsValue(callFrame));
</ins><span class="cx">         } else {
</span><del>-            Identifier property(exec, subscript-&gt;toString(exec));
-            if (!exec-&gt;hadException()) { // Don't put to an object if toString threw an exception.
</del><ins>+            Identifier property(callFrame, subscript-&gt;toString(callFrame));
+            if (!globalData-&gt;exception) { // Don't put to an object if toString threw an exception.
</ins><span class="cx">                 PutPropertySlot slot;
</span><del>-                baseValue-&gt;put(exec, property, r[value].jsValue(exec), slot);
</del><ins>+                baseValue-&gt;put(callFrame, property, callFrame[value].jsValue(callFrame), slot);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -2913,22 +2892,22 @@
</span><span class="cx">         int base = (++vPC)-&gt;u.operand;
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSObject* baseObj = r[base].jsValue(exec)-&gt;toObject(exec); // may throw
</del><ins>+        JSObject* baseObj = callFrame[base].jsValue(callFrame)-&gt;toObject(callFrame); // may throw
</ins><span class="cx"> 
</span><del>-        JSValue* subscript = r[property].jsValue(exec);
</del><ins>+        JSValue* subscript = callFrame[property].jsValue(callFrame);
</ins><span class="cx">         JSValue* result;
</span><span class="cx">         uint32_t i;
</span><span class="cx">         if (subscript-&gt;getUInt32(i))
</span><del>-            result = jsBoolean(baseObj-&gt;deleteProperty(exec, i));
</del><ins>+            result = jsBoolean(baseObj-&gt;deleteProperty(callFrame, i));
</ins><span class="cx">         else {
</span><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            Identifier property(exec, subscript-&gt;toString(exec));
</del><ins>+            Identifier property(callFrame, subscript-&gt;toString(callFrame));
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            result = jsBoolean(baseObj-&gt;deleteProperty(exec, property));
</del><ins>+            result = jsBoolean(baseObj-&gt;deleteProperty(callFrame, property));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        r[dst] = result;
</del><ins>+        callFrame[dst] = result;
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -2948,7 +2927,7 @@
</span><span class="cx">         unsigned property = (++vPC)-&gt;u.operand;
</span><span class="cx">         int value = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        r[base].jsValue(exec)-&gt;put(exec, property, r[value].jsValue(exec));
</del><ins>+        callFrame[base].jsValue(callFrame)-&gt;put(callFrame, property, callFrame[value].jsValue(callFrame));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -2995,7 +2974,7 @@
</span><span class="cx">          */
</span><span class="cx">         int cond = (++vPC)-&gt;u.operand;
</span><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><del>-        if (r[cond].jsValue(exec)-&gt;toBoolean(exec)) {
</del><ins>+        if (callFrame[cond].jsValue(callFrame)-&gt;toBoolean(callFrame)) {
</ins><span class="cx">             vPC += target;
</span><span class="cx">             CHECK_FOR_TIMEOUT();
</span><span class="cx">             NEXT_OPCODE;
</span><span class="lines">@@ -3012,7 +2991,7 @@
</span><span class="cx">         */
</span><span class="cx">         int cond = (++vPC)-&gt;u.operand;
</span><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><del>-        if (r[cond].jsValue(exec)-&gt;toBoolean(exec)) {
</del><ins>+        if (callFrame[cond].jsValue(callFrame)-&gt;toBoolean(callFrame)) {
</ins><span class="cx">             vPC += target;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="lines">@@ -3028,7 +3007,7 @@
</span><span class="cx">         */
</span><span class="cx">         int cond = (++vPC)-&gt;u.operand;
</span><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><del>-        if (!r[cond].jsValue(exec)-&gt;toBoolean(exec)) {
</del><ins>+        if (!callFrame[cond].jsValue(callFrame)-&gt;toBoolean(callFrame)) {
</ins><span class="cx">             vPC += target;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="lines">@@ -3047,11 +3026,11 @@
</span><span class="cx">            Additionally this loop instruction may terminate JS execution is
</span><span class="cx">            the JS timeout is reached.
</span><span class="cx">          */
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><span class="cx">         
</span><del>-        bool result = jsLess(exec, src1, src2);
</del><ins>+        bool result = jsLess(callFrame, src1, src2);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx">         
</span><span class="cx">         if (result) {
</span><span class="lines">@@ -3074,11 +3053,11 @@
</span><span class="cx">            Additionally this loop instruction may terminate JS execution is
</span><span class="cx">            the JS timeout is reached.
</span><span class="cx">         */
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><span class="cx">         
</span><del>-        bool result = jsLessEq(exec, src1, src2);
</del><ins>+        bool result = jsLessEq(callFrame, src1, src2);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx">         
</span><span class="cx">         if (result) {
</span><span class="lines">@@ -3098,11 +3077,11 @@
</span><span class="cx">            target from the current instruction, if and only if the 
</span><span class="cx">            result of the comparison is false.
</span><span class="cx">         */
</span><del>-        JSValue* src1 = r[(++vPC)-&gt;u.operand].jsValue(exec);
-        JSValue* src2 = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* src1 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
+        JSValue* src2 = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        bool result = jsLess(exec, src1, src2);
</del><ins>+        bool result = jsLess(callFrame, src1, src2);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx">         
</span><span class="cx">         if (!result) {
</span><span class="lines">@@ -3124,12 +3103,12 @@
</span><span class="cx">          */
</span><span class="cx">         int tableIndex = (++vPC)-&gt;u.operand;
</span><span class="cx">         int defaultOffset = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* scrutinee = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* scrutinee = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (!JSImmediate::isNumber(scrutinee))
</span><span class="cx">             vPC += defaultOffset;
</span><span class="cx">         else {
</span><span class="cx">             int32_t value = JSImmediate::getTruncatedInt32(scrutinee);
</span><del>-            vPC += codeBlock(r)-&gt;immediateSwitchJumpTables[tableIndex].offsetForValue(value, defaultOffset);
</del><ins>+            vPC += callFrame-&gt;codeBlock()-&gt;immediateSwitchJumpTables[tableIndex].offsetForValue(value, defaultOffset);
</ins><span class="cx">         }
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -3144,7 +3123,7 @@
</span><span class="cx">          */
</span><span class="cx">         int tableIndex = (++vPC)-&gt;u.operand;
</span><span class="cx">         int defaultOffset = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* scrutinee = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* scrutinee = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (!scrutinee-&gt;isString())
</span><span class="cx">             vPC += defaultOffset;
</span><span class="cx">         else {
</span><span class="lines">@@ -3152,7 +3131,7 @@
</span><span class="cx">             if (value-&gt;size() != 1)
</span><span class="cx">                 vPC += defaultOffset;
</span><span class="cx">             else
</span><del>-                vPC += codeBlock(r)-&gt;characterSwitchJumpTables[tableIndex].offsetForValue(value-&gt;data()[0], defaultOffset);
</del><ins>+                vPC += callFrame-&gt;codeBlock()-&gt;characterSwitchJumpTables[tableIndex].offsetForValue(value-&gt;data()[0], defaultOffset);
</ins><span class="cx">         }
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -3167,11 +3146,11 @@
</span><span class="cx">          */
</span><span class="cx">         int tableIndex = (++vPC)-&gt;u.operand;
</span><span class="cx">         int defaultOffset = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* scrutinee = r[(++vPC)-&gt;u.operand].jsValue(exec);
</del><ins>+        JSValue* scrutinee = callFrame[(++vPC)-&gt;u.operand].jsValue(callFrame);
</ins><span class="cx">         if (!scrutinee-&gt;isString())
</span><span class="cx">             vPC += defaultOffset;
</span><span class="cx">         else 
</span><del>-            vPC += codeBlock(r)-&gt;stringSwitchJumpTables[tableIndex].offsetForValue(static_cast&lt;JSString*&gt;(scrutinee)-&gt;value().rep(), defaultOffset);
</del><ins>+            vPC += callFrame-&gt;codeBlock()-&gt;stringSwitchJumpTables[tableIndex].offsetForValue(static_cast&lt;JSString*&gt;(scrutinee)-&gt;value().rep(), defaultOffset);
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_new_func) {
</span><span class="lines">@@ -3185,7 +3164,7 @@
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int func = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        r[dst] = codeBlock(r)-&gt;functions[func]-&gt;makeFunction(exec, scopeChain(r));
</del><ins>+        callFrame[dst] = callFrame-&gt;codeBlock()-&gt;functions[func]-&gt;makeFunction(callFrame, callFrame-&gt;scopeChain());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3201,7 +3180,7 @@
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int func = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        r[dst] = codeBlock(r)-&gt;functionExpressions[func]-&gt;makeFunction(exec, scopeChain(r));
</del><ins>+        callFrame[dst] = callFrame-&gt;codeBlock()-&gt;functionExpressions[func]-&gt;makeFunction(callFrame, callFrame-&gt;scopeChain());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3225,17 +3204,17 @@
</span><span class="cx">         int argCount = (++vPC)-&gt;u.operand;
</span><span class="cx">         ++vPC; // registerOffset
</span><span class="cx"> 
</span><del>-        JSValue* funcVal = r[func].jsValue(exec);
-        JSValue* baseVal = r[thisVal].jsValue(exec);
</del><ins>+        JSValue* funcVal = callFrame[func].jsValue(callFrame);
+        JSValue* baseVal = callFrame[thisVal].jsValue(callFrame);
</ins><span class="cx"> 
</span><del>-        ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+        ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">         if (baseVal == scopeChain-&gt;globalObject() &amp;&amp; funcVal == scopeChain-&gt;globalObject()-&gt;evalFunction()) {
</span><del>-            JSObject* thisObject = static_cast&lt;JSObject*&gt;(r[codeBlock(r)-&gt;thisRegister].jsValue(exec));
-            JSValue* result = callEval(exec, thisObject, scopeChain, registerFile, r, firstArg, argCount, exceptionValue);
</del><ins>+            JSObject* thisObject = static_cast&lt;JSObject*&gt;(callFrame[callFrame-&gt;codeBlock()-&gt;thisRegister].jsValue(callFrame));
+            JSValue* result = callEval(callFrame, thisObject, scopeChain, registerFile, firstArg, argCount, exceptionValue);
</ins><span class="cx">             if (exceptionValue)
</span><span class="cx">                 goto vm_throw;
</span><span class="cx"> 
</span><del>-            r[dst] = result;
</del><ins>+            callFrame[dst] = result;
</ins><span class="cx"> 
</span><span class="cx">             ++vPC;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="lines">@@ -3245,7 +3224,7 @@
</span><span class="cx">         // this instruction as a normal function call, supplying the proper 'this'
</span><span class="cx">         // value.
</span><span class="cx">         vPC -= 6;
</span><del>-        r[thisVal] = baseVal-&gt;toThisObject(exec);
</del><ins>+        callFrame[thisVal] = baseVal-&gt;toThisObject(callFrame);
</ins><span class="cx"> 
</span><span class="cx"> #if HAVE(COMPUTED_GOTO)
</span><span class="cx">         // Hack around gcc performance quirk by performing an indirect goto
</span><span class="lines">@@ -3299,7 +3278,7 @@
</span><span class="cx">         int argCount = (++vPC)-&gt;u.operand;
</span><span class="cx">         int registerOffset = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* v = r[func].jsValue(exec);
</del><ins>+        JSValue* v = callFrame[func].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         CallData callData;
</span><span class="cx">         CallType callType = v-&gt;getCallData(callData);
</span><span class="lines">@@ -3309,21 +3288,21 @@
</span><span class="cx">             FunctionBodyNode* functionBodyNode = callData.js.functionBody;
</span><span class="cx">             CodeBlock* newCodeBlock = &amp;functionBodyNode-&gt;byteCode(callDataScopeChain);
</span><span class="cx"> 
</span><del>-            r[firstArg] = thisVal == missingThisObjectMarker() ? exec-&gt;globalThisValue() : r[thisVal].jsValue(exec);
</del><ins>+            callFrame[firstArg] = thisVal == missingThisObjectMarker() ? callFrame-&gt;globalThisValue() : callFrame[thisVal].jsValue(callFrame);
</ins><span class="cx">             
</span><del>-            Register* savedR = r;
</del><ins>+            CallFrame* previousCallFrame = callFrame;
</ins><span class="cx"> 
</span><del>-            r = slideRegisterWindowForCall(newCodeBlock, registerFile, r, registerOffset, argCount);
-            if (UNLIKELY(!r)) {
-                r = savedR;
-                exceptionValue = createStackOverflowError(CallFrame::create(r));
</del><ins>+            callFrame = slideRegisterWindowForCall(newCodeBlock, registerFile, callFrame, registerOffset, argCount);
+            if (UNLIKELY(!callFrame)) {
+                callFrame = previousCallFrame;
+                exceptionValue = createStackOverflowError(callFrame);
</ins><span class="cx">                 goto vm_throw;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            initializeCallFrame(r, newCodeBlock, vPC + 1, callDataScopeChain, savedR, dst, argCount, v);
</del><ins>+            callFrame-&gt;init(newCodeBlock, vPC + 1, callDataScopeChain, previousCallFrame, dst, argCount, static_cast&lt;JSFunction*&gt;(v));
</ins><span class="cx">     
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;willExecute(exec, static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;willExecute(callFrame, static_cast&lt;JSObject*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             vPC = newCodeBlock-&gt;instructions.begin();
</span><span class="cx"> 
</span><span class="lines">@@ -3335,25 +3314,25 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (callType == CallTypeHost) {
</span><del>-            JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec-&gt;globalThisValue() : r[thisVal].jsValue(exec);
-            ArgList args(r + firstArg + 1, argCount - 1);
</del><ins>+            JSValue* thisValue = thisVal == missingThisObjectMarker() ? callFrame-&gt;globalThisValue() : callFrame[thisVal].jsValue(callFrame);
+            ArgList args(callFrame-&gt;registers() + firstArg + 1, argCount - 1);
</ins><span class="cx"> 
</span><del>-            ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
-            initializeCallFrame(r + registerOffset, 0, vPC + 1, scopeChain, r, dst, argCount, v);
-            ExecState* callFrame = CallFrame::create(r + registerOffset);
</del><ins>+            ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
+            CallFrame* newCallFrame = CallFrame::create(callFrame-&gt;registers() + registerOffset);
+            newCallFrame-&gt;init(0, vPC + 1, scopeChain, callFrame, dst, argCount, static_cast&lt;JSFunction*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;willExecute(callFrame, static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;willExecute(newCallFrame, static_cast&lt;JSFunction*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             MACHINE_SAMPLING_callingHostFunction();
</span><span class="cx"> 
</span><del>-            JSValue* returnValue = callData.native.function(callFrame, static_cast&lt;JSObject*&gt;(v), thisValue, args);
</del><ins>+            JSValue* returnValue = callData.native.function(newCallFrame, static_cast&lt;JSFunction*&gt;(v), thisValue, args);
</ins><span class="cx">             VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><del>-            r[dst] = returnValue;
</del><ins>+            newCallFrame[dst] = returnValue;
</ins><span class="cx"> 
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;didExecute(CallFrame::create(r), static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;didExecute(callFrame, static_cast&lt;JSFunction*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             ++vPC;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="lines">@@ -3361,28 +3340,24 @@
</span><span class="cx"> 
</span><span class="cx">         ASSERT(callType == CallTypeNone);
</span><span class="cx"> 
</span><del>-        exceptionValue = createNotAFunctionError(exec, v, vPC, codeBlock(r));
</del><ins>+        exceptionValue = createNotAFunctionError(callFrame, v, vPC, callFrame-&gt;codeBlock());
</ins><span class="cx">         goto vm_throw;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_tear_off_activation) {
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        JSActivation* activation = static_cast&lt;JSActivation*&gt;(r[src].getJSValue());
-        ASSERT(codeBlock(r)-&gt;needsFullScopeChain);
</del><ins>+        ASSERT(callFrame-&gt;codeBlock()-&gt;needsFullScopeChain);
+        JSActivation* activation = static_cast&lt;JSActivation*&gt;(callFrame[src].getJSValue());
</ins><span class="cx">         ASSERT(activation-&gt;isObject(&amp;JSActivation::info));
</span><span class="cx"> 
</span><del>-        Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue());
-        ASSERT(!arguments || arguments-&gt;isObject(&amp;Arguments::info));
-        activation-&gt;copyRegisters(arguments);
</del><ins>+        activation-&gt;copyRegisters(callFrame-&gt;optionalCalleeArguments());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_tear_off_arguments) {
</span><del>-        Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue());
-        ASSERT(codeBlock(r)-&gt;usesArguments &amp;&amp; !codeBlock(r)-&gt;needsFullScopeChain);
-        ASSERT(arguments-&gt;isObject(&amp;Arguments::info));
</del><ins>+        ASSERT(callFrame-&gt;codeBlock()-&gt;usesArguments &amp;&amp; !callFrame-&gt;codeBlock()-&gt;needsFullScopeChain);
</ins><span class="cx"> 
</span><del>-        arguments-&gt;copyRegisters();
</del><ins>+        callFrame-&gt;optionalCalleeArguments()-&gt;copyRegisters();
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3400,21 +3375,21 @@
</span><span class="cx">         int result = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><span class="cx">         if (*enabledProfilerReference)
</span><del>-            (*enabledProfilerReference)-&gt;didExecute(exec, static_cast&lt;JSObject*&gt;(r[RegisterFile::Callee].jsValue(exec)));
</del><ins>+            (*enabledProfilerReference)-&gt;didExecute(callFrame, callFrame-&gt;callee());
</ins><span class="cx"> 
</span><del>-        if (codeBlock(r)-&gt;needsFullScopeChain)
-            scopeChain(r)-&gt;deref();
</del><ins>+        if (callFrame-&gt;codeBlock()-&gt;needsFullScopeChain)
+            callFrame-&gt;scopeChain()-&gt;deref();
</ins><span class="cx"> 
</span><del>-        JSValue* returnValue = r[result].jsValue(exec);
</del><ins>+        JSValue* returnValue = callFrame[result].jsValue(callFrame);
</ins><span class="cx"> 
</span><del>-        vPC = r[RegisterFile::ReturnPC].vPC();
-        int dst = r[RegisterFile::ReturnValueRegister].i();
-        r = r[RegisterFile::CallerRegisters].r();
</del><ins>+        vPC = callFrame-&gt;returnPC();
+        int dst = callFrame-&gt;returnValueRegister();
+        callFrame = callFrame-&gt;callerFrame();
</ins><span class="cx">         
</span><del>-        if (isHostCallFrame(r))
</del><ins>+        if (callFrame-&gt;hasHostCallFrameFlag())
</ins><span class="cx">             return returnValue;
</span><span class="cx"> 
</span><del>-        r[dst] = returnValue;
</del><ins>+        callFrame[dst] = returnValue;
</ins><span class="cx"> 
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -3430,13 +3405,13 @@
</span><span class="cx">         */
</span><span class="cx"> 
</span><span class="cx">         size_t i = 0;
</span><del>-        CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">         
</span><span class="cx">         for (size_t count = codeBlock-&gt;numVars; i &lt; count; ++i)
</span><del>-            r[i] = jsUndefined();
</del><ins>+            callFrame[i] = jsUndefined();
</ins><span class="cx"> 
</span><span class="cx">         for (size_t count = codeBlock-&gt;constantRegisters.size(), j = 0; j &lt; count; ++i, ++j)
</span><del>-            r[i] = codeBlock-&gt;constantRegisters[j];
</del><ins>+            callFrame[i] = codeBlock-&gt;constantRegisters[j];
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3455,27 +3430,27 @@
</span><span class="cx">         */
</span><span class="cx"> 
</span><span class="cx">         size_t i = 0;
</span><del>-        CodeBlock* codeBlock = this-&gt;codeBlock(r);
</del><ins>+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">         for (size_t count = codeBlock-&gt;numVars; i &lt; count; ++i)
</span><del>-            r[i] = jsUndefined();
</del><ins>+            callFrame[i] = jsUndefined();
</ins><span class="cx"> 
</span><span class="cx">         for (size_t count = codeBlock-&gt;constantRegisters.size(), j = 0; j &lt; count; ++i, ++j)
</span><del>-            r[i] = codeBlock-&gt;constantRegisters[j];
</del><ins>+            callFrame[i] = codeBlock-&gt;constantRegisters[j];
</ins><span class="cx"> 
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><del>-        JSActivation* activation = new (globalData) JSActivation(exec, static_cast&lt;FunctionBodyNode*&gt;(codeBlock-&gt;ownerNode), r);
-        r[dst] = activation;
-        r[RegisterFile::ScopeChain] = scopeChain(r)-&gt;copy()-&gt;push(activation);
</del><ins>+        JSActivation* activation = new (globalData) JSActivation(callFrame, static_cast&lt;FunctionBodyNode*&gt;(codeBlock-&gt;ownerNode));
+        callFrame[dst] = activation;
+        callFrame-&gt;setScopeChain(callFrame-&gt;scopeChain()-&gt;copy()-&gt;push(activation));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_convert_this) {
</span><span class="cx">         int thisRegister = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* thisVal = r[thisRegister].getJSValue();
</del><ins>+        JSValue* thisVal = callFrame[thisRegister].getJSValue();
</ins><span class="cx">         if (thisVal-&gt;needsThisConversion())
</span><del>-            r[thisRegister] = thisVal-&gt;toThisObject(exec);
</del><ins>+            callFrame[thisRegister] = thisVal-&gt;toThisObject(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3491,9 +3466,9 @@
</span><span class="cx">            block.
</span><span class="cx">         */
</span><span class="cx"> 
</span><del>-        Arguments* arguments = new (globalData) Arguments(exec, r);
-        r[RegisterFile::OptionalCalleeArguments] = arguments;
-        r[RegisterFile::ArgumentsRegister] = arguments;
</del><ins>+        Arguments* arguments = new (globalData) Arguments(callFrame);
+        callFrame-&gt;setCalleeArguments(arguments);
+        callFrame[RegisterFile::ArgumentsRegister] = arguments;
</ins><span class="cx">         
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3520,42 +3495,42 @@
</span><span class="cx">         int argCount = (++vPC)-&gt;u.operand;
</span><span class="cx">         int registerOffset = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSValue* v = r[constr].jsValue(exec);
</del><ins>+        JSValue* v = callFrame[constr].jsValue(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         ConstructData constructData;
</span><span class="cx">         ConstructType constructType = v-&gt;getConstructData(constructData);
</span><span class="cx"> 
</span><span class="cx">         if (constructType == ConstructTypeJS) {
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;willExecute(exec, static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;willExecute(callFrame, static_cast&lt;JSObject*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             ScopeChainNode* callDataScopeChain = constructData.js.scopeChain;
</span><span class="cx">             FunctionBodyNode* functionBodyNode = constructData.js.functionBody;
</span><span class="cx">             CodeBlock* newCodeBlock = &amp;functionBodyNode-&gt;byteCode(callDataScopeChain);
</span><span class="cx"> 
</span><span class="cx">             StructureID* structure;
</span><del>-            JSValue* prototype = r[constrProto].jsValue(exec);
</del><ins>+            JSValue* prototype = callFrame[constrProto].jsValue(callFrame);
</ins><span class="cx">             if (prototype-&gt;isObject())
</span><span class="cx">                 structure = static_cast&lt;JSObject*&gt;(prototype)-&gt;inheritorID();
</span><span class="cx">             else
</span><span class="cx">                 structure = callDataScopeChain-&gt;globalObject()-&gt;emptyObjectStructure();
</span><span class="cx">             JSObject* newObject = new (globalData) JSObject(structure);
</span><span class="cx"> 
</span><del>-            r[firstArg] = newObject; // &quot;this&quot; value
</del><ins>+            callFrame[firstArg] = newObject; // &quot;this&quot; value
</ins><span class="cx"> 
</span><del>-            Register* savedR = r;
</del><ins>+            CallFrame* previousCallFrame = callFrame;
</ins><span class="cx"> 
</span><del>-            r = slideRegisterWindowForCall(newCodeBlock, registerFile, r, registerOffset, argCount);
-            if (UNLIKELY(!r)) {
-                r = savedR;
-                exceptionValue = createStackOverflowError(CallFrame::create(r));
</del><ins>+            callFrame = slideRegisterWindowForCall(newCodeBlock, registerFile, callFrame, registerOffset, argCount);
+            if (UNLIKELY(!callFrame)) {
+                callFrame = previousCallFrame;
+                exceptionValue = createStackOverflowError(callFrame);
</ins><span class="cx">                 goto vm_throw;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            initializeCallFrame(r, newCodeBlock, vPC + 1, callDataScopeChain, savedR, dst, argCount, v);
</del><ins>+            callFrame-&gt;init(newCodeBlock, vPC + 1, callDataScopeChain, previousCallFrame, dst, argCount, static_cast&lt;JSFunction*&gt;(v));
</ins><span class="cx">     
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;didExecute(exec, static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;didExecute(callFrame, static_cast&lt;JSObject*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             vPC = newCodeBlock-&gt;instructions.begin();
</span><span class="cx"> 
</span><span class="lines">@@ -3567,25 +3542,25 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (constructType == ConstructTypeHost) {
</span><del>-            ArgList args(r + firstArg + 1, argCount - 1);
</del><ins>+            ArgList args(callFrame-&gt;registers() + firstArg + 1, argCount - 1);
</ins><span class="cx"> 
</span><del>-            ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
-            initializeCallFrame(r + registerOffset, 0, vPC + 1, scopeChain, r, dst, argCount, v);
-            r += registerOffset;
</del><ins>+            ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
+            CallFrame::create(callFrame-&gt;registers() + registerOffset)-&gt;init(0, vPC + 1, scopeChain, callFrame, dst, argCount, static_cast&lt;JSFunction*&gt;(v));
+            callFrame = CallFrame::create(callFrame-&gt;registers() + registerOffset);
</ins><span class="cx"> 
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;willExecute(exec, static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;willExecute(callFrame, static_cast&lt;JSObject*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             MACHINE_SAMPLING_callingHostFunction();
</span><span class="cx"> 
</span><del>-            JSValue* returnValue = constructData.native.function(exec, static_cast&lt;JSObject*&gt;(v), args);
-            r -= registerOffset;
</del><ins>+            JSValue* returnValue = constructData.native.function(callFrame, static_cast&lt;JSObject*&gt;(v), args);
+            callFrame = CallFrame::create(callFrame-&gt;registers() - registerOffset);
</ins><span class="cx"> 
</span><span class="cx">             VM_CHECK_EXCEPTION();
</span><del>-            r[dst] = returnValue;
</del><ins>+            callFrame[dst] = returnValue;
</ins><span class="cx"> 
</span><span class="cx">             if (*enabledProfilerReference)
</span><del>-                (*enabledProfilerReference)-&gt;didExecute(exec, static_cast&lt;JSObject*&gt;(v));
</del><ins>+                (*enabledProfilerReference)-&gt;didExecute(callFrame, static_cast&lt;JSObject*&gt;(v));
</ins><span class="cx"> 
</span><span class="cx">             ++vPC;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="lines">@@ -3593,7 +3568,7 @@
</span><span class="cx"> 
</span><span class="cx">         ASSERT(constructType == ConstructTypeNone);
</span><span class="cx"> 
</span><del>-        exceptionValue = createNotAConstructorError(exec, v, vPC, codeBlock(r));
</del><ins>+        exceptionValue = createNotAConstructorError(callFrame, v, vPC, callFrame-&gt;codeBlock());
</ins><span class="cx">         goto vm_throw;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_construct_verify) {
</span><span class="lines">@@ -3604,13 +3579,13 @@
</span><span class="cx">         */
</span><span class="cx"> 
</span><span class="cx">         int dst = vPC[1].u.operand;;
</span><del>-        if (LIKELY(r[dst].jsValue(exec)-&gt;isObject())) {
</del><ins>+        if (LIKELY(callFrame[dst].jsValue(callFrame)-&gt;isObject())) {
</ins><span class="cx">             vPC += 3;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         int override = vPC[2].u.operand;
</span><del>-        r[dst] = r[override];
</del><ins>+        callFrame[dst] = callFrame[override];
</ins><span class="cx"> 
</span><span class="cx">         vPC += 3;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3622,11 +3597,11 @@
</span><span class="cx">            of the current scope chain.
</span><span class="cx">         */
</span><span class="cx">         int scope = (++vPC)-&gt;u.operand;
</span><del>-        JSValue* v = r[scope].jsValue(exec);
-        JSObject* o = v-&gt;toObject(exec);
</del><ins>+        JSValue* v = callFrame[scope].jsValue(callFrame);
+        JSObject* o = v-&gt;toObject(callFrame);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><del>-        r[RegisterFile::ScopeChain] = scopeChain(r)-&gt;push(o);
</del><ins>+        callFrame-&gt;setScopeChain(callFrame-&gt;scopeChain()-&gt;push(o));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3636,7 +3611,7 @@
</span><span class="cx"> 
</span><span class="cx">            Removes the top item from the current scope chain.
</span><span class="cx">         */
</span><del>-        r[RegisterFile::ScopeChain] = scopeChain(r)-&gt;pop();
</del><ins>+        callFrame-&gt;setScopeChain(callFrame-&gt;scopeChain()-&gt;pop());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3652,7 +3627,7 @@
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int base = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        r[dst] = JSPropertyNameIterator::create(exec, r[base].jsValue(exec));
</del><ins>+        callFrame[dst] = JSPropertyNameIterator::create(callFrame, callFrame[base].jsValue(callFrame));
</ins><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="lines">@@ -3669,10 +3644,10 @@
</span><span class="cx">         int iter = (++vPC)-&gt;u.operand;
</span><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        JSPropertyNameIterator* it = r[iter].jsPropertyNameIterator();
-        if (JSValue* temp = it-&gt;next(exec)) {
</del><ins>+        JSPropertyNameIterator* it = callFrame[iter].propertyNameIterator();
+        if (JSValue* temp = it-&gt;next(callFrame)) {
</ins><span class="cx">             CHECK_FOR_TIMEOUT();
</span><del>-            r[dst] = temp;
</del><ins>+            callFrame[dst] = temp;
</ins><span class="cx">             vPC += target;
</span><span class="cx">             NEXT_OPCODE;
</span><span class="cx">         }
</span><span class="lines">@@ -3691,10 +3666,10 @@
</span><span class="cx">         int count = (++vPC)-&gt;u.operand;
</span><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        ScopeChainNode* tmp = scopeChain(r);
</del><ins>+        ScopeChainNode* tmp = callFrame-&gt;scopeChain();
</ins><span class="cx">         while (count--)
</span><span class="cx">             tmp = tmp-&gt;pop();
</span><del>-        r[RegisterFile::ScopeChain] = tmp;
</del><ins>+        callFrame-&gt;setScopeChain(tmp);
</ins><span class="cx"> 
</span><span class="cx">         vPC += target;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3710,7 +3685,7 @@
</span><span class="cx">            object is then pushed onto the ScopeChain.  The scope object is then stored
</span><span class="cx">            in dst for GC.
</span><span class="cx">          */
</span><del>-        r[RegisterFile::ScopeChain] = createExceptionScope(exec, vPC, r);
</del><ins>+        callFrame-&gt;setScopeChain(createExceptionScope(callFrame, vPC));
</ins><span class="cx"> 
</span><span class="cx">         vPC += 4;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3726,9 +3701,9 @@
</span><span class="cx">            and usually forms the beginning of an exception handler.
</span><span class="cx">         */
</span><span class="cx">         ASSERT(exceptionValue);
</span><del>-        ASSERT(!exec-&gt;hadException());
</del><ins>+        ASSERT(!globalData-&gt;exception);
</ins><span class="cx">         int ex = (++vPC)-&gt;u.operand;
</span><del>-        r[ex] = exceptionValue;
</del><ins>+        callFrame[ex] = exceptionValue;
</ins><span class="cx">         exceptionValue = 0;
</span><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="lines">@@ -3746,9 +3721,9 @@
</span><span class="cx">         */
</span><span class="cx"> 
</span><span class="cx">         int ex = (++vPC)-&gt;u.operand;
</span><del>-        exceptionValue = r[ex].jsValue(exec);
</del><ins>+        exceptionValue = callFrame[ex].jsValue(callFrame);
</ins><span class="cx"> 
</span><del>-        handlerVPC = throwException(exec, exceptionValue, vPC, r, true);
</del><ins>+        handlerVPC = throwException(callFrame, exceptionValue, vPC, true);
</ins><span class="cx">         if (!handlerVPC) {
</span><span class="cx">             *exception = exceptionValue;
</span><span class="cx">             return jsNull();
</span><span class="lines">@@ -3773,7 +3748,7 @@
</span><span class="cx">         */
</span><span class="cx">         int dst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int src = (++vPC)-&gt;u.operand;
</span><del>-        r[dst] = codeBlock(r)-&gt;unexpectedConstants[src];
</del><ins>+        callFrame[dst] = callFrame-&gt;codeBlock()-&gt;unexpectedConstants[src];
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3790,8 +3765,8 @@
</span><span class="cx">         int type = (++vPC)-&gt;u.operand;
</span><span class="cx">         int message = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        CodeBlock* codeBlock = this-&gt;codeBlock(r);
-        r[dst] = Error::create(exec, (ErrorType)type, codeBlock-&gt;unexpectedConstants[message]-&gt;toString(exec), codeBlock-&gt;lineNumberForVPC(vPC), codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;ownerNode-&gt;sourceURL());
</del><ins>+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
+        callFrame[dst] = Error::create(callFrame, (ErrorType)type, codeBlock-&gt;unexpectedConstants[message]-&gt;toString(callFrame), codeBlock-&gt;lineNumberForVPC(vPC), codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;ownerNode-&gt;sourceURL());
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3803,13 +3778,13 @@
</span><span class="cx">            program. Return control to the calling native code.
</span><span class="cx">         */
</span><span class="cx"> 
</span><del>-        if (codeBlock(r)-&gt;needsFullScopeChain) {
-            ScopeChainNode* scopeChain = this-&gt;scopeChain(r);
</del><ins>+        if (callFrame-&gt;codeBlock()-&gt;needsFullScopeChain) {
+            ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx">             ASSERT(scopeChain-&gt;refCount &gt; 1);
</span><span class="cx">             scopeChain-&gt;deref();
</span><span class="cx">         }
</span><span class="cx">         int result = (++vPC)-&gt;u.operand;
</span><del>-        return r[result].jsValue(exec);
</del><ins>+        return callFrame[result].jsValue(callFrame);
</ins><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_put_getter) {
</span><span class="cx">         /* put_getter base(r) property(id) function(r)
</span><span class="lines">@@ -3826,11 +3801,11 @@
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx">         int function = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        ASSERT(r[base].jsValue(exec)-&gt;isObject());
-        JSObject* baseObj = static_cast&lt;JSObject*&gt;(r[base].jsValue(exec));
-        Identifier&amp; ident = codeBlock(r)-&gt;identifiers[property];
-        ASSERT(r[function].jsValue(exec)-&gt;isObject());
-        baseObj-&gt;defineGetter(exec, ident, static_cast&lt;JSObject*&gt;(r[function].jsValue(exec)));
</del><ins>+        ASSERT(callFrame[base].jsValue(callFrame)-&gt;isObject());
+        JSObject* baseObj = static_cast&lt;JSObject*&gt;(callFrame[base].jsValue(callFrame));
+        Identifier&amp; ident = callFrame-&gt;codeBlock()-&gt;identifiers[property];
+        ASSERT(callFrame[function].jsValue(callFrame)-&gt;isObject());
+        baseObj-&gt;defineGetter(callFrame, ident, static_cast&lt;JSObject*&gt;(callFrame[function].jsValue(callFrame)));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3850,11 +3825,11 @@
</span><span class="cx">         int property = (++vPC)-&gt;u.operand;
</span><span class="cx">         int function = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        ASSERT(r[base].jsValue(exec)-&gt;isObject());
-        JSObject* baseObj = static_cast&lt;JSObject*&gt;(r[base].jsValue(exec));
-        Identifier&amp; ident = codeBlock(r)-&gt;identifiers[property];
-        ASSERT(r[function].jsValue(exec)-&gt;isObject());
-        baseObj-&gt;defineSetter(exec, ident, static_cast&lt;JSObject*&gt;(r[function].jsValue(exec)));
</del><ins>+        ASSERT(callFrame[base].jsValue(callFrame)-&gt;isObject());
+        JSObject* baseObj = static_cast&lt;JSObject*&gt;(callFrame[base].jsValue(callFrame));
+        Identifier&amp; ident = callFrame-&gt;codeBlock()-&gt;identifiers[property];
+        ASSERT(callFrame[function].jsValue(callFrame)-&gt;isObject());
+        baseObj-&gt;defineSetter(callFrame, ident, static_cast&lt;JSObject*&gt;(callFrame[function].jsValue(callFrame)));
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3867,7 +3842,7 @@
</span><span class="cx">         */
</span><span class="cx">         int retAddrDst = (++vPC)-&gt;u.operand;
</span><span class="cx">         int target = (++vPC)-&gt;u.operand;
</span><del>-        r[retAddrDst] = vPC + 1;
</del><ins>+        callFrame[retAddrDst] = vPC + 1;
</ins><span class="cx"> 
</span><span class="cx">         vPC += target;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3880,7 +3855,7 @@
</span><span class="cx">          register, not as an immediate.
</span><span class="cx">         */
</span><span class="cx">         int retAddrSrc = (++vPC)-&gt;u.operand;
</span><del>-        vPC = r[retAddrSrc].vPC();
</del><ins>+        vPC = callFrame[retAddrSrc].vPC();
</ins><span class="cx">         NEXT_OPCODE;
</span><span class="cx">     }
</span><span class="cx">     BEGIN_OPCODE(op_debug) {
</span><span class="lines">@@ -3893,7 +3868,7 @@
</span><span class="cx">         int firstLine = (++vPC)-&gt;u.operand;
</span><span class="cx">         int lastLine = (++vPC)-&gt;u.operand;
</span><span class="cx"> 
</span><del>-        debug(exec, r, static_cast&lt;DebugHookID&gt;(debugHookID), firstLine, lastLine);
</del><ins>+        debug(callFrame, static_cast&lt;DebugHookID&gt;(debugHookID), firstLine, lastLine);
</ins><span class="cx"> 
</span><span class="cx">         ++vPC;
</span><span class="cx">         NEXT_OPCODE;
</span><span class="lines">@@ -3905,7 +3880,7 @@
</span><span class="cx">             // cannot fathom if we don't assign to the exceptionValue before branching)
</span><span class="cx">             exceptionValue = createInterruptedExecutionException(globalData);
</span><span class="cx">         }
</span><del>-        handlerVPC = throwException(exec, exceptionValue, vPC, r, false);
</del><ins>+        handlerVPC = throwException(callFrame, exceptionValue, vPC, false);
</ins><span class="cx">         if (!handlerVPC) {
</span><span class="cx">             *exception = exceptionValue;
</span><span class="cx">             return jsNull();
</span><span class="lines">@@ -3921,99 +3896,91 @@
</span><span class="cx">     #undef BEGIN_OPCODE
</span><span class="cx">     #undef VM_CHECK_EXCEPTION
</span><span class="cx">     #undef CHECK_FOR_TIMEOUT
</span><del>-    #undef exec
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue* Machine::retrieveArguments(ExecState* exec, JSFunction* function) const
</del><ins>+JSValue* Machine::retrieveArguments(CallFrame* callFrame, JSFunction* function) const
</ins><span class="cx"> {
</span><del>-    Register* r = this-&gt;callFrame(exec, function);
-    if (!r)
</del><ins>+    CallFrame* functionCallFrame = findFunctionCallFrame(callFrame, function);
+    if (!functionCallFrame)
</ins><span class="cx">         return jsNull();
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = functionCallFrame-&gt;codeBlock();
</ins><span class="cx">     if (codeBlock-&gt;usesArguments) {
</span><span class="cx">         ASSERT(codeBlock-&gt;codeType == FunctionCode);
</span><span class="cx">         SymbolTable&amp; symbolTable = static_cast&lt;FunctionBodyNode*&gt;(codeBlock-&gt;ownerNode)-&gt;symbolTable();
</span><del>-        int argumentsIndex = symbolTable.get(exec-&gt;propertyNames().arguments.ustring().rep()).getIndex();
-        return r[argumentsIndex].jsValue(exec);
</del><ins>+        int argumentsIndex = symbolTable.get(functionCallFrame-&gt;propertyNames().arguments.ustring().rep()).getIndex();
+        return functionCallFrame[argumentsIndex].jsValue(callFrame);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue());
</del><ins>+    Arguments* arguments = functionCallFrame-&gt;optionalCalleeArguments();
</ins><span class="cx">     if (!arguments) {
</span><del>-        arguments = new (exec) Arguments(exec, r);
</del><ins>+        arguments = new (functionCallFrame) Arguments(functionCallFrame);
</ins><span class="cx">         arguments-&gt;copyRegisters();
</span><del>-        r[RegisterFile::OptionalCalleeArguments] = arguments;
</del><ins>+        callFrame-&gt;setCalleeArguments(arguments);
</ins><span class="cx">     }
</span><del>-    ASSERT(arguments-&gt;isObject(&amp;Arguments::info));
</del><span class="cx"> 
</span><span class="cx">     return arguments;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue* Machine::retrieveCaller(ExecState* exec, InternalFunction* function) const
</del><ins>+JSValue* Machine::retrieveCaller(CallFrame* callFrame, InternalFunction* function) const
</ins><span class="cx"> {
</span><del>-    Register* r = this-&gt;callFrame(exec, function);
-    if (!r)
</del><ins>+    CallFrame* functionCallFrame = findFunctionCallFrame(callFrame, function);
+    if (!functionCallFrame)
</ins><span class="cx">         return jsNull();
</span><span class="cx"> 
</span><del>-    Register* callerR = r[RegisterFile::CallerRegisters].r();
-    if (isHostCallFrame(callerR))
</del><ins>+    CallFrame* callerFrame = functionCallFrame-&gt;callerFrame();
+    if (callerFrame-&gt;hasHostCallFrameFlag())
</ins><span class="cx">         return jsNull();
</span><span class="cx"> 
</span><del>-    JSValue* caller = callerR[RegisterFile::Callee].jsValue(exec);
</del><ins>+    JSValue* caller = callerFrame-&gt;callee();
</ins><span class="cx">     if (!caller)
</span><span class="cx">         return jsNull();
</span><span class="cx"> 
</span><span class="cx">     return caller;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Machine::retrieveLastCaller(ExecState* exec, int&amp; lineNumber, intptr_t&amp; sourceID, UString&amp; sourceURL, JSValue*&amp; function) const
</del><ins>+void Machine::retrieveLastCaller(CallFrame* callFrame, int&amp; lineNumber, intptr_t&amp; sourceID, UString&amp; sourceURL, JSValue*&amp; function) const
</ins><span class="cx"> {
</span><span class="cx">     function = 0;
</span><span class="cx">     lineNumber = -1;
</span><span class="cx">     sourceURL = UString();
</span><span class="cx"> 
</span><del>-    Register* r = exec-&gt;registers();
-    Register* callerR = r[RegisterFile::CallerRegisters].r();
-    if (isHostCallFrame(callerR))
</del><ins>+    CallFrame* callerFrame = callFrame-&gt;callerFrame();
+    if (callerFrame-&gt;hasHostCallFrameFlag())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    CodeBlock* callerCodeBlock = codeBlock(callerR);
</del><ins>+    CodeBlock* callerCodeBlock = callerFrame-&gt;codeBlock();
</ins><span class="cx">     if (!callerCodeBlock)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    Instruction* vPC = vPCForPC(callerCodeBlock, r[RegisterFile::ReturnPC].v());
</del><ins>+    Instruction* vPC = vPCForPC(callerCodeBlock, callFrame-&gt;returnPC());
</ins><span class="cx">     lineNumber = callerCodeBlock-&gt;lineNumberForVPC(vPC - 1);
</span><span class="cx">     sourceID = callerCodeBlock-&gt;ownerNode-&gt;sourceID();
</span><span class="cx">     sourceURL = callerCodeBlock-&gt;ownerNode-&gt;sourceURL();
</span><del>-
-    JSValue* caller = callerR[RegisterFile::Callee].getJSValue();
-    if (!caller)
-        return;
-
-    function = caller;
</del><ins>+    function = callerFrame-&gt;callee();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-Register* Machine::callFrame(ExecState* exec, InternalFunction* function) const
</del><ins>+CallFrame* Machine::findFunctionCallFrame(CallFrame* callFrame, InternalFunction* function)
</ins><span class="cx"> {
</span><del>-    for (Register* r = exec-&gt;registers(); r; r = stripHostCallFrameBit(r[RegisterFile::CallerRegisters].r()))
-        if (r[RegisterFile::Callee].getJSValue() == function)
-            return r;
</del><ins>+    for (CallFrame* candidate = callFrame; candidate; candidate = candidate-&gt;callerFrame()-&gt;removeHostCallFrameFlag()) {
+        if (candidate-&gt;callee() == function)
+            return candidate;
+    }
</ins><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Machine::getArgumentsData(Register* callFrame, JSFunction*&amp; function, ptrdiff_t&amp; firstParameterIndex, Register*&amp; argv, int&amp; argc)
</del><ins>+void Machine::getArgumentsData(CallFrame* callFrame, JSFunction*&amp; function, ptrdiff_t&amp; firstParameterIndex, Register*&amp; argv, int&amp; argc)
</ins><span class="cx"> {
</span><del>-    function = static_cast&lt;JSFunction*&gt;(callFrame[RegisterFile::Callee].getJSValue());
-    ASSERT(function-&gt;inherits(&amp;JSFunction::info));
</del><ins>+    function = callFrame-&gt;callee();
</ins><span class="cx">     
</span><span class="cx">     CodeBlock* codeBlock = &amp;function-&gt;m_body-&gt;generatedByteCode();
</span><span class="cx">     int numParameters = codeBlock-&gt;numParameters;
</span><del>-    argc = callFrame[RegisterFile::ArgumentCount].i();
</del><ins>+    argc = callFrame-&gt;argumentCount();
</ins><span class="cx"> 
</span><span class="cx">     if (argc &lt;= numParameters)
</span><del>-        argv = callFrame - RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip &quot;this&quot;
</del><ins>+        argv = callFrame-&gt;registers() - RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip &quot;this&quot;
</ins><span class="cx">     else
</span><del>-        argv = callFrame - RegisterFile::CallFrameHeaderSize - numParameters - argc + 1; // + 1 to skip &quot;this&quot;
</del><ins>+        argv = callFrame-&gt;registers() - RegisterFile::CallFrameHeaderSize - numParameters - argc + 1; // + 1 to skip &quot;this&quot;
</ins><span class="cx"> 
</span><span class="cx">     argc -= 1; // - 1 to skip &quot;this&quot;
</span><span class="cx">     firstParameterIndex = -RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip &quot;this&quot;
</span><span class="lines">@@ -4026,7 +3993,7 @@
</span><span class="cx">     ctiSetReturnAddress(returnAddress, reinterpret_cast&lt;void*&gt;(ctiVMThrowTrampoline));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE void Machine::tryCTICachePutByID(ExecState* exec, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const PutPropertySlot&amp; slot)
</del><ins>+NEVER_INLINE void Machine::tryCTICachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const PutPropertySlot&amp; slot)
</ins><span class="cx"> {
</span><span class="cx">     // The interpreter checks for recursion here; I do not believe this can occur in CTI.
</span><span class="cx"> 
</span><span class="lines">@@ -4068,7 +4035,7 @@
</span><span class="cx">         vPC[5] = structureID;
</span><span class="cx">         StructureIDChain* chain = structureID-&gt;cachedPrototypeChain();
</span><span class="cx">         if (!chain) {
</span><del>-            chain = cachePrototypeChain(exec, structureID);
</del><ins>+            chain = cachePrototypeChain(callFrame, structureID);
</ins><span class="cx">             if (!chain) {
</span><span class="cx">                 // This happens if someone has manually inserted null into the prototype chain
</span><span class="cx">                 vPC[0] = getOpcode(op_put_by_id_generic);
</span><span class="lines">@@ -4078,7 +4045,7 @@
</span><span class="cx">         vPC[6] = chain;
</span><span class="cx">         vPC[7] = slot.cachedOffset();
</span><span class="cx">         codeBlock-&gt;refStructureIDs(vPC);
</span><del>-        CTI::compilePutByIdTransition(this, exec, codeBlock, structureID-&gt;previousID(), structureID, slot.cachedOffset(), chain, returnAddress);
</del><ins>+        CTI::compilePutByIdTransition(this, callFrame, codeBlock, structureID-&gt;previousID(), structureID, slot.cachedOffset(), chain, returnAddress);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -4088,30 +4055,30 @@
</span><span class="cx">     codeBlock-&gt;refStructureIDs(vPC);
</span><span class="cx"> 
</span><span class="cx"> #if USE(CTI_REPATCH_PIC)
</span><del>-    UNUSED_PARAM(exec);
</del><ins>+    UNUSED_PARAM(callFrame);
</ins><span class="cx">     CTI::patchPutByIdReplace(codeBlock, structureID, slot.cachedOffset(), returnAddress);
</span><span class="cx"> #else
</span><del>-    CTI::compilePutByIdReplace(this, exec, codeBlock, structureID, slot.cachedOffset(), returnAddress);
</del><ins>+    CTI::compilePutByIdReplace(this, callFrame, codeBlock, structureID, slot.cachedOffset(), returnAddress);
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void* Machine::getCTIArrayLengthTrampoline(ExecState* exec, CodeBlock* codeBlock)
</del><ins>+void* Machine::getCTIArrayLengthTrampoline(CallFrame* callFrame, CodeBlock* codeBlock)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_ctiArrayLengthTrampoline)
</span><del>-        m_ctiArrayLengthTrampoline = CTI::compileArrayLengthTrampoline(this, exec, codeBlock);
</del><ins>+        m_ctiArrayLengthTrampoline = CTI::compileArrayLengthTrampoline(this, callFrame, codeBlock);
</ins><span class="cx">         
</span><span class="cx">     return m_ctiArrayLengthTrampoline;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void* Machine::getCTIStringLengthTrampoline(ExecState* exec, CodeBlock* codeBlock)
</del><ins>+void* Machine::getCTIStringLengthTrampoline(CallFrame* callFrame, CodeBlock* codeBlock)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_ctiStringLengthTrampoline)
</span><del>-        m_ctiStringLengthTrampoline = CTI::compileStringLengthTrampoline(this, exec, codeBlock);
</del><ins>+        m_ctiStringLengthTrampoline = CTI::compileStringLengthTrampoline(this, callFrame, codeBlock);
</ins><span class="cx">         
</span><span class="cx">     return m_ctiStringLengthTrampoline;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NEVER_INLINE void Machine::tryCTICacheGetByID(ExecState* exec, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp; slot)
</del><ins>+NEVER_INLINE void Machine::tryCTICacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp; slot)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Write a test that proves we need to check for recursion here just
</span><span class="cx">     // like the interpreter does, then add a check for recursion.
</span><span class="lines">@@ -4122,18 +4089,18 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (isJSArray(baseValue) &amp;&amp; propertyName == exec-&gt;propertyNames().length) {
</del><ins>+    if (isJSArray(baseValue) &amp;&amp; propertyName == callFrame-&gt;propertyNames().length) {
</ins><span class="cx"> #if USE(CTI_REPATCH_PIC)
</span><del>-        CTI::compilePatchGetArrayLength(this, exec, codeBlock, returnAddress);
</del><ins>+        CTI::compilePatchGetArrayLength(this, callFrame, codeBlock, returnAddress);
</ins><span class="cx"> #else
</span><del>-        ctiRepatchCallByReturnAddress(returnAddress, getCTIArrayLengthTrampoline(exec, codeBlock));
</del><ins>+        ctiRepatchCallByReturnAddress(returnAddress, getCTIArrayLengthTrampoline(callFrame, codeBlock));
</ins><span class="cx"> #endif
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    if (isJSString(baseValue) &amp;&amp; propertyName == exec-&gt;propertyNames().length) {
</del><ins>+    if (isJSString(baseValue) &amp;&amp; propertyName == callFrame-&gt;propertyNames().length) {
</ins><span class="cx">         // The tradeoff of compiling an repatched inline string length access routine does not seem
</span><span class="cx">         // to pay off, so we currently only do this for arrays.
</span><del>-        ctiRepatchCallByReturnAddress(returnAddress, getCTIStringLengthTrampoline(exec, codeBlock));
</del><ins>+        ctiRepatchCallByReturnAddress(returnAddress, getCTIStringLengthTrampoline(callFrame, codeBlock));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4169,12 +4136,12 @@
</span><span class="cx"> #if USE(CTI_REPATCH_PIC)
</span><span class="cx">         CTI::patchGetByIdSelf(codeBlock, structureID, slot.cachedOffset(), returnAddress);
</span><span class="cx"> #else
</span><del>-        CTI::compileGetByIdSelf(this, exec, codeBlock, structureID, slot.cachedOffset(), returnAddress);
</del><ins>+        CTI::compileGetByIdSelf(this, callFrame, codeBlock, structureID, slot.cachedOffset(), returnAddress);
</ins><span class="cx"> #endif
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (slot.slotBase() == structureID-&gt;prototypeForLookup(exec)) {
</del><ins>+    if (slot.slotBase() == structureID-&gt;prototypeForLookup(callFrame)) {
</ins><span class="cx">         ASSERT(slot.slotBase()-&gt;isObject());
</span><span class="cx"> 
</span><span class="cx">         JSObject* slotBaseObject = static_cast&lt;JSObject*&gt;(slot.slotBase());
</span><span class="lines">@@ -4193,14 +4160,14 @@
</span><span class="cx">         vPC[6] = slot.cachedOffset();
</span><span class="cx">         codeBlock-&gt;refStructureIDs(vPC);
</span><span class="cx"> 
</span><del>-        CTI::compileGetByIdProto(this, exec, codeBlock, structureID, slotBaseObject-&gt;structureID(), slot.cachedOffset(), returnAddress);
</del><ins>+        CTI::compileGetByIdProto(this, callFrame, codeBlock, structureID, slotBaseObject-&gt;structureID(), slot.cachedOffset(), returnAddress);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     size_t count = 0;
</span><span class="cx">     JSObject* o = static_cast&lt;JSObject*&gt;(baseValue);
</span><span class="cx">     while (slot.slotBase() != o) {
</span><del>-        JSValue* v = o-&gt;structureID()-&gt;prototypeForLookup(exec);
</del><ins>+        JSValue* v = o-&gt;structureID()-&gt;prototypeForLookup(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         // If we didn't find slotBase in baseValue's prototype chain, then baseValue
</span><span class="cx">         // must be a proxy for another object.
</span><span class="lines">@@ -4225,7 +4192,7 @@
</span><span class="cx"> 
</span><span class="cx">     StructureIDChain* chain = structureID-&gt;cachedPrototypeChain();
</span><span class="cx">     if (!chain)
</span><del>-        chain = cachePrototypeChain(exec, structureID);
</del><ins>+        chain = cachePrototypeChain(callFrame, structureID);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(chain);
</span><span class="cx">     vPC[0] = getOpcode(op_get_by_id_chain);
</span><span class="lines">@@ -4235,7 +4202,7 @@
</span><span class="cx">     vPC[7] = slot.cachedOffset();
</span><span class="cx">     codeBlock-&gt;refStructureIDs(vPC);
</span><span class="cx"> 
</span><del>-    CTI::compileGetByIdChain(this, exec, codeBlock, structureID, chain, count, slot.cachedOffset(), returnAddress);
</del><ins>+    CTI::compileGetByIdChain(this, callFrame, codeBlock, structureID, chain, count, slot.cachedOffset(), returnAddress);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #define VM_THROW_EXCEPTION() \
</span><span class="lines">@@ -4290,17 +4257,16 @@
</span><span class="cx"> JSValue* Machine::cti_op_convert_this(CTI_ARGS)
</span><span class="cx"> {
</span><span class="cx">     JSValue* v1 = ARG_src1;
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSObject* result = v1-&gt;toThisObject(exec);
</del><ins>+    JSObject* result = v1-&gt;toThisObject(callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_end(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    Register* r = ARG_r;
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
</del><ins>+    ScopeChainNode* scopeChain = ARG_callFrame-&gt;scopeChain();
</ins><span class="cx">     ASSERT(scopeChain-&gt;refCount &gt; 1);
</span><span class="cx">     scopeChain-&gt;deref();
</span><span class="cx"> }
</span><span class="lines">@@ -4317,13 +4283,13 @@
</span><span class="cx">     if (rightIsNumber &amp;&amp; fastIsNumber(v1, left))
</span><span class="cx">         return jsNumber(ARG_globalData, left + right);
</span><span class="cx">     
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     bool leftIsString = v1-&gt;isString();
</span><span class="cx">     if (leftIsString &amp;&amp; v2-&gt;isString()) {
</span><span class="cx">         RefPtr&lt;UString::Rep&gt; value = concatenate(static_cast&lt;JSString*&gt;(v1)-&gt;value().rep(), static_cast&lt;JSString*&gt;(v2)-&gt;value().rep());
</span><span class="cx">         if (UNLIKELY(!value)) {
</span><del>-            throwOutOfMemoryError(exec);
</del><ins>+            throwOutOfMemoryError(callFrame);
</ins><span class="cx">             VM_THROW_EXCEPTION();
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -4336,14 +4302,14 @@
</span><span class="cx">             concatenate(static_cast&lt;JSString*&gt;(v1)-&gt;value().rep(), right);
</span><span class="cx"> 
</span><span class="cx">         if (UNLIKELY(!value)) {
</span><del>-            throwOutOfMemoryError(exec);
</del><ins>+            throwOutOfMemoryError(callFrame);
</ins><span class="cx">             VM_THROW_EXCEPTION();
</span><span class="cx">         }
</span><span class="cx">         return jsString(ARG_globalData, value.release());
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // All other cases are pretty uncommon
</span><del>-    JSValue* result = jsAddSlowCase(exec, v1, v2);
</del><ins>+    JSValue* result = jsAddSlowCase(callFrame, v1, v2);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -4352,15 +4318,15 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* v = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, v-&gt;toNumber(exec) + 1);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, v-&gt;toNumber(callFrame) + 1);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_timeout_check(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    if (ARG_globalData-&gt;machine-&gt;checkTimeout(ARG_exec-&gt;dynamicGlobalObject())) {
</del><ins>+    if (ARG_globalData-&gt;machine-&gt;checkTimeout(ARG_callFrame-&gt;dynamicGlobalObject())) {
</ins><span class="cx">         ARG_globalData-&gt;exception = createInterruptedExecutionException(ARG_globalData);
</span><span class="cx">         VM_THROW_EXCEPTION_AT_END();
</span><span class="cx">     }
</span><span class="lines">@@ -4370,9 +4336,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx">     JSValue* src2 = ARG_src2;
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    bool result = jsLess(exec, src1, src2);
</del><ins>+    bool result = jsLess(callFrame, src1, src2);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -4381,25 +4347,25 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx">     JSValue* src2 = ARG_src2;
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    bool result = jsLessEq(exec, src1, src2);
</del><ins>+    bool result = jsLessEq(callFrame, src1, src2);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_new_object(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return constructEmptyObject(ARG_exec);;
</del><ins>+    return constructEmptyObject(ARG_callFrame);;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_id(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx"> 
</span><span class="cx">     PutPropertySlot slot;
</span><del>-    ARG_src1-&gt;put(exec, ident, ARG_src3, slot);
</del><ins>+    ARG_src1-&gt;put(callFrame, ident, ARG_src3, slot);
</ins><span class="cx"> 
</span><span class="cx">     ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_put_by_id_second);
</span><span class="cx"> 
</span><span class="lines">@@ -4408,37 +4374,26 @@
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_id_second(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Identifier&amp; ident = *ARG_id2;
-
-    JSValue* baseValue = ARG_src1;
</del><span class="cx">     PutPropertySlot slot;
</span><del>-    baseValue-&gt;put(exec, ident, ARG_src3, slot);
-
-    Register* r = ARG_r;
-    ARG_globalData-&gt;machine-&gt;tryCTICachePutByID(exec, codeBlock(r), CTI_RETURN_ADDRESS, baseValue, slot);
-
</del><ins>+    ARG_src1-&gt;put(ARG_callFrame, *ARG_id2, ARG_src3, slot);
+    ARG_globalData-&gt;machine-&gt;tryCTICachePutByID(ARG_callFrame, ARG_callFrame-&gt;codeBlock(), CTI_RETURN_ADDRESS, ARG_src1, slot);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_id_generic(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Identifier&amp; ident = *ARG_id2;
-
</del><span class="cx">     PutPropertySlot slot;
</span><del>-    ARG_src1-&gt;put(exec, ident, ARG_src3, slot);
-
</del><ins>+    ARG_src1-&gt;put(ARG_callFrame, *ARG_id2, ARG_src3, slot);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_id_fail(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx"> 
</span><span class="cx">     PutPropertySlot slot;
</span><del>-    ARG_src1-&gt;put(exec, ident, ARG_src3, slot);
</del><ins>+    ARG_src1-&gt;put(callFrame, ident, ARG_src3, slot);
</ins><span class="cx"> 
</span><span class="cx">     // should probably uncachePutByID() ... this would mean doing a vPC lookup - might be worth just bleeding this until the end.
</span><span class="cx">     ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_put_by_id_generic);
</span><span class="lines">@@ -4448,12 +4403,12 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_get_by_id(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="cx">     PropertySlot slot(baseValue);
</span><del>-    JSValue* result = baseValue-&gt;get(exec, ident, slot);
</del><ins>+    JSValue* result = baseValue-&gt;get(callFrame, ident, slot);
</ins><span class="cx"> 
</span><span class="cx">     ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_get_by_id_second);
</span><span class="cx"> 
</span><span class="lines">@@ -4463,15 +4418,14 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_get_by_id_second(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="cx">     PropertySlot slot(baseValue);
</span><del>-    JSValue* result = baseValue-&gt;get(exec, ident, slot);
</del><ins>+    JSValue* result = baseValue-&gt;get(callFrame, ident, slot);
</ins><span class="cx"> 
</span><del>-    Register* r = ARG_r;
-    ARG_globalData-&gt;machine-&gt;tryCTICacheGetByID(exec, codeBlock(r), CTI_RETURN_ADDRESS, baseValue, ident, slot);
</del><ins>+    ARG_globalData-&gt;machine-&gt;tryCTICacheGetByID(callFrame, callFrame-&gt;codeBlock(), CTI_RETURN_ADDRESS, baseValue, ident, slot);
</ins><span class="cx"> 
</span><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="lines">@@ -4479,12 +4433,12 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_get_by_id_generic(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="cx">     PropertySlot slot(baseValue);
</span><del>-    JSValue* result = baseValue-&gt;get(exec, ident, slot);
</del><ins>+    JSValue* result = baseValue-&gt;get(callFrame, ident, slot);
</ins><span class="cx"> 
</span><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="lines">@@ -4492,12 +4446,12 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_get_by_id_fail(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="cx">     PropertySlot slot(baseValue);
</span><del>-    JSValue* result = baseValue-&gt;get(exec, ident, slot);
</del><ins>+    JSValue* result = baseValue-&gt;get(callFrame, ident, slot);
</ins><span class="cx"> 
</span><span class="cx">     // should probably uncacheGetByID() ... this would mean doing a vPC lookup - might be worth just bleeding this until the end.
</span><span class="cx">     ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_get_by_id_generic);
</span><span class="lines">@@ -4508,7 +4462,7 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_instanceof(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     JSValue* value = ARG_src1;
</span><span class="cx">     JSValue* baseVal = ARG_src2;
</span><span class="cx">     JSValue* proto = ARG_src3;
</span><span class="lines">@@ -4522,11 +4476,11 @@
</span><span class="cx">            || (baseCell-&gt;structureID()-&gt;typeInfo().flags() &amp; (ImplementsHasInstance | OverridesHasInstance)) != ImplementsHasInstance);
</span><span class="cx"> 
</span><span class="cx">     if (!baseVal-&gt;isObject()) {
</span><del>-        Register* r = ARG_r;
-        CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+        CallFrame* callFrame = ARG_callFrame;
+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">         ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">         unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><del>-        ARG_globalData-&gt;exception = createInvalidParamError(exec, &quot;instanceof&quot;, baseVal, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</del><ins>+        ARG_globalData-&gt;exception = createInvalidParamError(callFrame, &quot;instanceof&quot;, baseVal, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</ins><span class="cx">         VM_THROW_EXCEPTION();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4534,14 +4488,14 @@
</span><span class="cx">         return jsBoolean(false);
</span><span class="cx"> 
</span><span class="cx">     if (!proto-&gt;isObject()) {
</span><del>-        throwError(exec, TypeError, &quot;instanceof called on an object with an invalid prototype property.&quot;);
</del><ins>+        throwError(callFrame, TypeError, &quot;instanceof called on an object with an invalid prototype property.&quot;);
</ins><span class="cx">         VM_THROW_EXCEPTION();
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     if (!value-&gt;isObject())
</span><span class="cx">         return jsBoolean(false);
</span><span class="cx"> 
</span><del>-    JSValue* result = jsBoolean(static_cast&lt;JSObject*&gt;(baseCell)-&gt;hasInstance(exec, valueCell, protoCell));
</del><ins>+    JSValue* result = jsBoolean(static_cast&lt;JSObject*&gt;(baseCell)-&gt;hasInstance(callFrame, valueCell, protoCell));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx"> 
</span><span class="cx">     return result;
</span><span class="lines">@@ -4549,12 +4503,12 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_del_by_id(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx">     
</span><del>-    JSObject* baseObj = ARG_src1-&gt;toObject(exec);
</del><ins>+    JSObject* baseObj = ARG_src1-&gt;toObject(callFrame);
</ins><span class="cx"> 
</span><del>-    JSValue* result = jsBoolean(baseObj-&gt;deleteProperty(exec, ident));
</del><ins>+    JSValue* result = jsBoolean(baseObj-&gt;deleteProperty(callFrame, ident));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -4569,15 +4523,15 @@
</span><span class="cx">     if (fastIsNumber(src1, left) &amp;&amp; fastIsNumber(src2, right))
</span><span class="cx">         return jsNumber(ARG_globalData, left * right);
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toNumber(exec) * src2-&gt;toNumber(exec));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toNumber(callFrame) * src2-&gt;toNumber(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_new_func(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return ARG_func1-&gt;makeFunction(ARG_exec, Machine::scopeChain(ARG_r));
</del><ins>+    return ARG_func1-&gt;makeFunction(ARG_callFrame, ARG_callFrame-&gt;scopeChain());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> VoidPtrPair Machine::cti_op_call_JSFunction(CTI_ARGS)
</span><span class="lines">@@ -4588,41 +4542,33 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(*ARG_profilerReference != 0))
</span><del>-        (*ARG_profilerReference)-&gt;willExecute(CallFrame::create(ARG_r), static_cast&lt;JSObject*&gt;(ARG_src1));
</del><ins>+        (*ARG_profilerReference)-&gt;willExecute(ARG_callFrame, static_cast&lt;JSFunction*&gt;(ARG_src1));
</ins><span class="cx"> 
</span><span class="cx">     ScopeChainNode* callDataScopeChain = static_cast&lt;JSFunction*&gt;(ARG_src1)-&gt;m_scopeChain.node();
</span><span class="cx">     CodeBlock* newCodeBlock = &amp;static_cast&lt;JSFunction*&gt;(ARG_src1)-&gt;m_body-&gt;byteCode(callDataScopeChain);
</span><span class="cx"> 
</span><del>-    Register* r = slideRegisterWindowForCall(newCodeBlock, ARG_registerFile, ARG_r, ARG_int2, ARG_int3);
-    if (UNLIKELY(!r)) {
-        ARG_globalData-&gt;exception = createStackOverflowError(CallFrame::create(ARG_r));
</del><ins>+    CallFrame* callFrame = slideRegisterWindowForCall(newCodeBlock, ARG_registerFile, ARG_callFrame, ARG_int2, ARG_int3);
+    if (UNLIKELY(!callFrame)) {
+        ARG_globalData-&gt;exception = createStackOverflowError(ARG_callFrame);
</ins><span class="cx">         VM_THROW_EXCEPTION_2();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    VoidPtrPair pair = { newCodeBlock, r };
</del><ins>+    VoidPtrPair pair = { newCodeBlock, callFrame };
</ins><span class="cx">     return pair;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void* Machine::cti_vm_compile(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
-
</del><ins>+    CodeBlock* codeBlock = ARG_callFrame-&gt;codeBlock();
</ins><span class="cx">     if (!codeBlock-&gt;ctiCode)
</span><del>-        CTI::compile(ARG_globalData-&gt;machine, CallFrame::create(r), codeBlock);
-
</del><ins>+        CTI::compile(ARG_globalData-&gt;machine, ARG_callFrame, codeBlock);
</ins><span class="cx">     return codeBlock-&gt;ctiCode;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_push_activation(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
-
-    JSActivation* activation = new (ARG_globalData) JSActivation(exec, static_cast&lt;FunctionBodyNode*&gt;(codeBlock-&gt;ownerNode), r);
-    r[RegisterFile::ScopeChain] = scopeChain-&gt;copy()-&gt;push(activation);
</del><ins>+    JSActivation* activation = new (ARG_globalData) JSActivation(ARG_callFrame, static_cast&lt;FunctionBodyNode*&gt;(ARG_callFrame-&gt;codeBlock()-&gt;ownerNode));
+    ARG_callFrame-&gt;setScopeChain(ARG_callFrame-&gt;scopeChain()-&gt;copy()-&gt;push(activation));
</ins><span class="cx">     return activation;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4638,97 +4584,78 @@
</span><span class="cx">     if (callType == CallTypeHost) {
</span><span class="cx">         int registerOffset = ARG_int2;
</span><span class="cx">         int argCount = ARG_int3;
</span><del>-        Register* savedR = ARG_r;
-        Register* r = savedR + registerOffset;
</del><ins>+        CallFrame* previousCallFrame = ARG_callFrame;
+        CallFrame* callFrame = CallFrame::create(previousCallFrame-&gt;registers() + registerOffset);
</ins><span class="cx"> 
</span><del>-        initializeCallFrame(r, 0, ARG_instr4 + 1, scopeChain(savedR), savedR, 0, argCount, funcVal);
-        ARG_setR(r);
</del><ins>+        callFrame-&gt;init(0, ARG_instr4 + 1, previousCallFrame-&gt;scopeChain(), previousCallFrame, 0, argCount, static_cast&lt;JSFunction*&gt;(funcVal));
+        ARG_setCallFrame(callFrame);
</ins><span class="cx"> 
</span><span class="cx">         if (*ARG_profilerReference)
</span><del>-            (*ARG_profilerReference)-&gt;willExecute(CallFrame::create(r), static_cast&lt;JSObject*&gt;(funcVal));
</del><ins>+            (*ARG_profilerReference)-&gt;willExecute(callFrame, static_cast&lt;JSFunction*&gt;(funcVal));
</ins><span class="cx"> 
</span><del>-        Register* argv = r - RegisterFile::CallFrameHeaderSize - argCount;
</del><ins>+        Register* argv = ARG_callFrame-&gt;registers() - RegisterFile::CallFrameHeaderSize - argCount;
</ins><span class="cx">         ArgList argList(argv + 1, argCount - 1);
</span><span class="cx"> 
</span><span class="cx">         CTI_MACHINE_SAMPLING_callingHostFunction();
</span><span class="cx"> 
</span><del>-        JSValue* returnValue = callData.native.function(CallFrame::create(r), static_cast&lt;JSObject*&gt;(funcVal), argv[0].jsValue(CallFrame::create(r)), argList);
-        ARG_setR(savedR);
</del><ins>+        JSValue* returnValue = callData.native.function(callFrame, static_cast&lt;JSFunction*&gt;(funcVal), argv[0].jsValue(callFrame), argList);
+        ARG_setCallFrame(previousCallFrame);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><span class="cx">         if (*ARG_profilerReference)
</span><del>-            (*ARG_profilerReference)-&gt;didExecute(CallFrame::create(savedR), static_cast&lt;JSObject*&gt;(funcVal));
</del><ins>+            (*ARG_profilerReference)-&gt;didExecute(previousCallFrame, static_cast&lt;JSFunction*&gt;(funcVal));
</ins><span class="cx"> 
</span><span class="cx">         return returnValue;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT(callType == CallTypeNone);
</span><span class="cx"> 
</span><del>-    ARG_globalData-&gt;exception = createNotAFunctionError(CallFrame::create(ARG_r), funcVal, ARG_instr4, codeBlock(ARG_r));
</del><ins>+    ARG_globalData-&gt;exception = createNotAFunctionError(ARG_callFrame, funcVal, ARG_instr4, ARG_callFrame-&gt;codeBlock());
</ins><span class="cx">     VM_THROW_EXCEPTION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_create_arguments(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-
-    Arguments* arguments = new (ARG_globalData) Arguments(exec, r);
-    r[RegisterFile::OptionalCalleeArguments] = arguments;
-    r[RegisterFile::ArgumentsRegister] = arguments;
</del><ins>+    Arguments* arguments = new (ARG_globalData) Arguments(ARG_callFrame);
+    ARG_callFrame-&gt;setCalleeArguments(arguments);
+    ARG_callFrame[RegisterFile::ArgumentsRegister] = arguments;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_tear_off_activation(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    Register* r = ARG_r;
-
-    JSActivation* activation = static_cast&lt;JSActivation*&gt;(ARG_src1);
-    ASSERT(codeBlock(r)-&gt;needsFullScopeChain);
-    ASSERT(activation-&gt;isObject(&amp;JSActivation::info));
-
-    Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue());
-    ASSERT(!arguments || arguments-&gt;isObject(&amp;Arguments::info));
-    activation-&gt;copyRegisters(arguments);
</del><ins>+    ASSERT(ARG_callFrame-&gt;codeBlock()-&gt;needsFullScopeChain);
+    ASSERT(ARG_src1-&gt;isObject(&amp;JSActivation::info));
+    static_cast&lt;JSActivation*&gt;(ARG_src1)-&gt;copyRegisters(ARG_callFrame-&gt;optionalCalleeArguments());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_tear_off_arguments(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    Register* r = ARG_r;
-
-    Arguments* arguments = static_cast&lt;Arguments*&gt;(r[RegisterFile::OptionalCalleeArguments].getJSValue());
-    ASSERT(codeBlock(r)-&gt;usesArguments &amp;&amp; !codeBlock(r)-&gt;needsFullScopeChain);
-    ASSERT(arguments-&gt;isObject(&amp;Arguments::info));
-
-    arguments-&gt;copyRegisters();
</del><ins>+    ASSERT(ARG_callFrame-&gt;codeBlock()-&gt;usesArguments &amp;&amp; !ARG_callFrame-&gt;codeBlock()-&gt;needsFullScopeChain);
+    ARG_callFrame-&gt;optionalCalleeArguments()-&gt;copyRegisters();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_ret_profiler(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-
-    Register* r = ARG_r;
</del><span class="cx">     ASSERT(*ARG_profilerReference);
</span><del>-    (*ARG_profilerReference)-&gt;didExecute(exec, static_cast&lt;JSObject*&gt;(r[RegisterFile::Callee].jsValue(exec)));
</del><ins>+    (*ARG_profilerReference)-&gt;didExecute(ARG_callFrame, ARG_callFrame-&gt;callee());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_ret_scopeChain(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    Register* r = ARG_r;
-    ASSERT(codeBlock(r)-&gt;needsFullScopeChain);
-    scopeChain(r)-&gt;deref();
</del><ins>+    ASSERT(ARG_callFrame-&gt;codeBlock()-&gt;needsFullScopeChain);
+    ARG_callFrame-&gt;scopeChain()-&gt;deref();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_new_array(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ArgList argsList(ARG_registers1, ARG_int2);
-    return constructArray(ARG_exec, argsList);
</del><ins>+    ArgList argList(ARG_registers1, ARG_int2);
+    return constructArray(ARG_callFrame, argList);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_resolve(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx"> 
</span><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="lines">@@ -4738,24 +4665,24 @@
</span><span class="cx">     do {
</span><span class="cx">         JSObject* o = *iter;
</span><span class="cx">         PropertySlot slot(o);
</span><del>-        if (o-&gt;getPropertySlot(exec, ident, slot)) {
-            JSValue* result = slot.getValue(exec, ident);
</del><ins>+        if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
+            JSValue* result = slot.getValue(callFrame, ident);
</ins><span class="cx">             VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">             return result;
</span><span class="cx">         }
</span><span class="cx">     } while (++iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">     unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><del>-    exec-&gt;setException(createUndefinedVariableError(exec, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock));
</del><ins>+    ARG_globalData-&gt;exception = createUndefinedVariableError(callFrame, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</ins><span class="cx">     VM_THROW_EXCEPTION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> VoidPtrPair Machine::cti_op_construct_JSConstruct(CTI_ARGS)
</span><span class="cx"> {
</span><span class="cx">     RegisterFile* registerFile = ARG_registerFile;
</span><del>-    Register* r = ARG_r;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     JSFunction* constructor = static_cast&lt;JSFunction*&gt;(ARG_src1);
</span><span class="cx">     JSValue* constrProtoVal = ARG_src2;
</span><span class="lines">@@ -4769,7 +4696,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (*ARG_profilerReference)
</span><del>-        (*ARG_profilerReference)-&gt;willExecute(CallFrame::create(r), constructor);
</del><ins>+        (*ARG_profilerReference)-&gt;willExecute(callFrame, constructor);
</ins><span class="cx"> 
</span><span class="cx">     ScopeChainNode* callDataScopeChain = constructor-&gt;m_scopeChain.node();
</span><span class="cx">     FunctionBodyNode* functionBodyNode = constructor-&gt;m_body.get();
</span><span class="lines">@@ -4782,22 +4709,21 @@
</span><span class="cx">         structure = callDataScopeChain-&gt;globalObject()-&gt;emptyObjectStructure();
</span><span class="cx">     JSObject* newObject = new (ARG_globalData) JSObject(structure);
</span><span class="cx"> 
</span><del>-    r[firstArg] = newObject; // &quot;this&quot; value
</del><ins>+    callFrame[firstArg] = newObject; // &quot;this&quot; value
</ins><span class="cx"> 
</span><del>-    r = slideRegisterWindowForCall(newCodeBlock, registerFile, r, registerOffset, argCount);
-    if (UNLIKELY(!r)) {
-        ARG_globalData-&gt;exception = createStackOverflowError(CallFrame::create(ARG_r));
</del><ins>+    callFrame = slideRegisterWindowForCall(newCodeBlock, registerFile, callFrame, registerOffset, argCount);
+    if (UNLIKELY(!callFrame)) {
+        ARG_globalData-&gt;exception = createStackOverflowError(ARG_callFrame);
</ins><span class="cx">         VM_THROW_EXCEPTION_2();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    VoidPtrPair pair = { newCodeBlock, r };
</del><ins>+    VoidPtrPair pair = { newCodeBlock, callFrame };
</ins><span class="cx">     return pair;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_construct_NotJSConstruct(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     JSValue* constrVal = ARG_src1;
</span><span class="cx">     int firstArg = ARG_int3;
</span><span class="lines">@@ -4810,30 +4736,30 @@
</span><span class="cx"> 
</span><span class="cx">     if (constructType == ConstructTypeHost) {
</span><span class="cx">         if (*ARG_profilerReference)
</span><del>-            (*ARG_profilerReference)-&gt;willExecute(exec, constructor);
</del><ins>+            (*ARG_profilerReference)-&gt;willExecute(callFrame, constructor);
</ins><span class="cx"> 
</span><del>-        ArgList argList(r + firstArg + 1, argCount - 1);
</del><ins>+        ArgList argList(callFrame-&gt;registers() + firstArg + 1, argCount - 1);
</ins><span class="cx"> 
</span><span class="cx">         CTI_MACHINE_SAMPLING_callingHostFunction();
</span><span class="cx"> 
</span><del>-        JSValue* returnValue = constructData.native.function(exec, constructor, argList);
</del><ins>+        JSValue* returnValue = constructData.native.function(callFrame, constructor, argList);
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><span class="cx"> 
</span><span class="cx">         if (*ARG_profilerReference)
</span><del>-            (*ARG_profilerReference)-&gt;didExecute(exec, constructor);
</del><ins>+            (*ARG_profilerReference)-&gt;didExecute(callFrame, constructor);
</ins><span class="cx"> 
</span><span class="cx">         return returnValue;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT(constructType == ConstructTypeNone);
</span><span class="cx"> 
</span><del>-    exec-&gt;setException(createNotAConstructorError(exec, constrVal, ARG_instr6, codeBlock(r)));
</del><ins>+    ARG_globalData-&gt;exception = createNotAConstructorError(callFrame, constrVal, ARG_instr6, callFrame-&gt;codeBlock());
</ins><span class="cx">     VM_THROW_EXCEPTION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_get_by_val(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Machine* machine = ARG_globalData-&gt;machine;
</span><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="lines">@@ -4849,14 +4775,14 @@
</span><span class="cx">             if (jsArray-&gt;canGetIndex(i))
</span><span class="cx">                 result = jsArray-&gt;getIndex(i);
</span><span class="cx">             else
</span><del>-                result = jsArray-&gt;JSArray::get(exec, i);
</del><ins>+                result = jsArray-&gt;JSArray::get(callFrame, i);
</ins><span class="cx">         } else if (machine-&gt;isJSString(baseValue) &amp;&amp; static_cast&lt;JSString*&gt;(baseValue)-&gt;canGetIndex(i))
</span><span class="cx">             result = static_cast&lt;JSString*&gt;(baseValue)-&gt;getIndex(ARG_globalData, i);
</span><span class="cx">         else
</span><del>-            result = baseValue-&gt;get(exec, i);
</del><ins>+            result = baseValue-&gt;get(callFrame, i);
</ins><span class="cx">     } else {
</span><del>-        Identifier property(exec, subscript-&gt;toString(exec));
-        result = baseValue-&gt;get(exec, property);
</del><ins>+        Identifier property(callFrame, subscript-&gt;toString(callFrame));
+        result = baseValue-&gt;get(callFrame, property);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="lines">@@ -4865,9 +4791,8 @@
</span><span class="cx"> 
</span><span class="cx"> VoidPtrPair Machine::cti_op_resolve_func(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx"> 
</span><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="lines">@@ -4881,7 +4806,7 @@
</span><span class="cx">     do {
</span><span class="cx">         base = *iter;
</span><span class="cx">         PropertySlot slot(base);
</span><del>-        if (base-&gt;getPropertySlot(exec, ident, slot)) {            
</del><ins>+        if (base-&gt;getPropertySlot(callFrame, ident, slot)) {            
</ins><span class="cx">             // ECMA 11.2.3 says that if we hit an activation the this value should be null.
</span><span class="cx">             // However, section 10.2.3 says that in the case where the value provided
</span><span class="cx">             // by the caller is null, the global object should be used. It also says
</span><span class="lines">@@ -4889,8 +4814,8 @@
</span><span class="cx">             // of implementation we use the global object anyway here. This guarantees
</span><span class="cx">             // that in host objects you always get a valid object for this.
</span><span class="cx">             // We also handle wrapper substitution for the global object at the same time.
</span><del>-            JSObject* thisObj = base-&gt;toThisObject(exec);
-            JSValue* result = slot.getValue(exec, ident);
</del><ins>+            JSObject* thisObj = base-&gt;toThisObject(callFrame);
+            JSValue* result = slot.getValue(callFrame, ident);
</ins><span class="cx">             VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx"> 
</span><span class="cx">             VoidPtrPair pair = { thisObj, result };
</span><span class="lines">@@ -4899,10 +4824,10 @@
</span><span class="cx">         ++iter;
</span><span class="cx">     } while (iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">     unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><del>-    exec-&gt;setException(createUndefinedVariableError(exec, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock));
</del><ins>+    ARG_globalData-&gt;exception = createUndefinedVariableError(callFrame, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</ins><span class="cx">     VM_THROW_EXCEPTION_2();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4916,15 +4841,15 @@
</span><span class="cx">     if (fastIsNumber(src1, left) &amp;&amp; fastIsNumber(src2, right))
</span><span class="cx">         return jsNumber(ARG_globalData, left - right);
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toNumber(exec) - src2-&gt;toNumber(exec));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toNumber(callFrame) - src2-&gt;toNumber(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_val(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     Machine* machine = ARG_globalData-&gt;machine;
</span><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="lines">@@ -4940,14 +4865,14 @@
</span><span class="cx">             if (jsArray-&gt;canSetIndex(i))
</span><span class="cx">                 jsArray-&gt;setIndex(i, value);
</span><span class="cx">             else
</span><del>-                jsArray-&gt;JSArray::put(exec, i, value);
</del><ins>+                jsArray-&gt;JSArray::put(callFrame, i, value);
</ins><span class="cx">         } else
</span><del>-            baseValue-&gt;put(exec, i, value);
</del><ins>+            baseValue-&gt;put(callFrame, i, value);
</ins><span class="cx">     } else {
</span><del>-        Identifier property(exec, subscript-&gt;toString(exec));
</del><ins>+        Identifier property(callFrame, subscript-&gt;toString(callFrame));
</ins><span class="cx">         if (!ARG_globalData-&gt;exception) { // Don't put to an object if toString threw an exception.
</span><span class="cx">             PutPropertySlot slot;
</span><del>-            baseValue-&gt;put(exec, property, value, slot);
</del><ins>+            baseValue-&gt;put(callFrame, property, value, slot);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4956,7 +4881,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_val_array(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><span class="cx">     int i = ARG_int2;
</span><span class="lines">@@ -4965,13 +4890,13 @@
</span><span class="cx">     ASSERT(ARG_globalData-&gt;machine-&gt;isJSArray(baseValue));
</span><span class="cx"> 
</span><span class="cx">     if (LIKELY(i &gt;= 0))
</span><del>-        static_cast&lt;JSArray*&gt;(baseValue)-&gt;JSArray::put(exec, i, value);
</del><ins>+        static_cast&lt;JSArray*&gt;(baseValue)-&gt;JSArray::put(callFrame, i, value);
</ins><span class="cx">     else {
</span><del>-        Identifier property(exec, JSImmediate::from(i)-&gt;toString(exec));
</del><ins>+        Identifier property(callFrame, JSImmediate::from(i)-&gt;toString(callFrame));
</ins><span class="cx">         // FIXME: can toString throw an exception here?
</span><span class="cx">         if (!ARG_globalData-&gt;exception) { // Don't put to an object if toString threw an exception.
</span><span class="cx">             PutPropertySlot slot;
</span><del>-            baseValue-&gt;put(exec, property, value, slot);
</del><ins>+            baseValue-&gt;put(callFrame, property, value, slot);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4980,8 +4905,8 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_lesseq(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsBoolean(jsLessEq(exec, ARG_src1, ARG_src2));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsBoolean(jsLessEq(callFrame, ARG_src1, ARG_src2));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -4990,9 +4915,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    bool result = src1-&gt;toBoolean(exec);
</del><ins>+    bool result = src1-&gt;toBoolean(callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5005,22 +4930,21 @@
</span><span class="cx">     if (fastIsNumber(src, v))
</span><span class="cx">         return jsNumber(ARG_globalData, -v);
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, -src-&gt;toNumber(exec));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, -src-&gt;toNumber(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_resolve_base(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return inlineResolveBase(ARG_exec, *ARG_id1, scopeChain(ARG_r));
</del><ins>+    return inlineResolveBase(ARG_callFrame, *ARG_id1, ARG_callFrame-&gt;scopeChain());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_resolve_skip(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx"> 
</span><span class="cx">     int skip = ARG_int2;
</span><span class="cx"> 
</span><span class="lines">@@ -5035,31 +4959,31 @@
</span><span class="cx">     do {
</span><span class="cx">         JSObject* o = *iter;
</span><span class="cx">         PropertySlot slot(o);
</span><del>-        if (o-&gt;getPropertySlot(exec, ident, slot)) {
-            JSValue* result = slot.getValue(exec, ident);
</del><ins>+        if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
+            JSValue* result = slot.getValue(callFrame, ident);
</ins><span class="cx">             VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">             return result;
</span><span class="cx">         }
</span><span class="cx">     } while (++iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">     unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><del>-    exec-&gt;setException(createUndefinedVariableError(exec, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock));
</del><ins>+    ARG_globalData-&gt;exception = createUndefinedVariableError(callFrame, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</ins><span class="cx">     VM_THROW_EXCEPTION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_resolve_global(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     JSGlobalObject* globalObject = static_cast&lt;JSGlobalObject*&gt;(ARG_src1);
</span><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx">     Instruction* vPC = ARG_instr3;
</span><span class="cx">     ASSERT(globalObject-&gt;isGlobalObject());
</span><span class="cx"> 
</span><span class="cx">     PropertySlot slot(globalObject);
</span><del>-    if (globalObject-&gt;getPropertySlot(exec, ident, slot)) {
-        JSValue* result = slot.getValue(exec, ident);
</del><ins>+    if (globalObject-&gt;getPropertySlot(callFrame, ident, slot)) {
+        JSValue* result = slot.getValue(callFrame, ident);
</ins><span class="cx">         if (slot.isCacheable()) {
</span><span class="cx">             if (vPC[4].u.structureID)
</span><span class="cx">                 vPC[4].u.structureID-&gt;deref();
</span><span class="lines">@@ -5073,8 +4997,7 @@
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    Register* r = ARG_r;
-    exec-&gt;setException(createUndefinedVariableError(exec, ident, vPC, codeBlock(r)));    
</del><ins>+    ARG_globalData-&gt;exception = createUndefinedVariableError(callFrame, ident, vPC, callFrame-&gt;codeBlock());
</ins><span class="cx">     VM_THROW_EXCEPTION();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -5088,8 +5011,8 @@
</span><span class="cx">     if (fastIsNumber(src1, left) &amp;&amp; fastIsNumber(src2, right))
</span><span class="cx">         return jsNumber(ARG_globalData, left / right);
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toNumber(exec) / src2-&gt;toNumber(exec));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toNumber(callFrame) / src2-&gt;toNumber(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5098,8 +5021,8 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* v = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, v-&gt;toNumber(exec) - 1);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, v-&gt;toNumber(callFrame) - 1);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5108,9 +5031,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx">     JSValue* src2 = ARG_src2;
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    bool result = jsLess(exec, src1, src2);
</del><ins>+    bool result = jsLess(callFrame, src1, src2);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5119,9 +5042,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* src = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSValue* result = jsBoolean(!src-&gt;toBoolean(exec));
</del><ins>+    JSValue* result = jsBoolean(!src-&gt;toBoolean(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5130,9 +5053,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    bool result = src1-&gt;toBoolean(exec);
</del><ins>+    bool result = src1-&gt;toBoolean(callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5141,9 +5064,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* v = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSValue* number = v-&gt;toJSNumber(exec);
</del><ins>+    JSValue* number = v-&gt;toJSNumber(callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_2();
</span><span class="cx"> 
</span><span class="cx">     VoidPtrPair pair = { number, jsNumber(ARG_globalData, number-&gt;uncheckedGetNumber() + 1) };
</span><span class="lines">@@ -5155,10 +5078,10 @@
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx">     JSValue* src2 = ARG_src2;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(!JSImmediate::areBothImmediateNumbers(src1, src2));
</span><del>-    JSValue* result = jsBoolean(equalSlowCaseInline(exec, src1, src2));
</del><ins>+    JSValue* result = jsBoolean(equalSlowCaseInline(callFrame, src1, src2));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5175,8 +5098,8 @@
</span><span class="cx">     if (fastToInt32(val, left) &amp;&amp; fastToUInt32(shift, right))
</span><span class="cx">         return jsNumber(ARG_globalData, left &lt;&lt; (right &amp; 0x1f));
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, (val-&gt;toInt32(exec)) &lt;&lt; (shift-&gt;toUInt32(exec) &amp; 0x1f));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, (val-&gt;toInt32(callFrame)) &lt;&lt; (shift-&gt;toUInt32(callFrame) &amp; 0x1f));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5191,8 +5114,8 @@
</span><span class="cx">     if (fastToInt32(src1, left) &amp;&amp; fastToInt32(src2, right))
</span><span class="cx">         return jsNumber(ARG_globalData, left &amp; right);
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toInt32(exec) &amp; src2-&gt;toInt32(exec));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toInt32(callFrame) &amp; src2-&gt;toInt32(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5209,8 +5132,8 @@
</span><span class="cx">     if (fastToInt32(val, left) &amp;&amp; fastToUInt32(shift, right))
</span><span class="cx">         return jsNumber(ARG_globalData, left &gt;&gt; (right &amp; 0x1f));
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, (val-&gt;toInt32(exec)) &gt;&gt; (shift-&gt;toUInt32(exec) &amp; 0x1f));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, (val-&gt;toInt32(callFrame)) &gt;&gt; (shift-&gt;toUInt32(callFrame) &amp; 0x1f));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5223,17 +5146,16 @@
</span><span class="cx">     if (fastToInt32(src, value))
</span><span class="cx">         return jsNumber(ARG_globalData, ~value);
</span><span class="cx">             
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsNumber(ARG_globalData, ~src-&gt;toInt32(exec));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsNumber(ARG_globalData, ~src-&gt;toInt32(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> VoidPtrPair Machine::cti_op_resolve_with_base(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx"> 
</span><span class="cx">     ScopeChainIterator iter = scopeChain-&gt;begin();
</span><span class="cx">     ScopeChainIterator end = scopeChain-&gt;end();
</span><span class="lines">@@ -5247,8 +5169,8 @@
</span><span class="cx">     do {
</span><span class="cx">         base = *iter;
</span><span class="cx">         PropertySlot slot(base);
</span><del>-        if (base-&gt;getPropertySlot(exec, ident, slot)) {
-            JSValue* result = slot.getValue(exec, ident);
</del><ins>+        if (base-&gt;getPropertySlot(callFrame, ident, slot)) {
+            JSValue* result = slot.getValue(callFrame, ident);
</ins><span class="cx">             VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx"> 
</span><span class="cx">             VoidPtrPair pair = { base, result };
</span><span class="lines">@@ -5257,16 +5179,16 @@
</span><span class="cx">         ++iter;
</span><span class="cx">     } while (iter != end);
</span><span class="cx"> 
</span><del>-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">     unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><del>-    exec-&gt;setException(createUndefinedVariableError(exec, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock));
</del><ins>+    ARG_globalData-&gt;exception = createUndefinedVariableError(callFrame, ident, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</ins><span class="cx">     VM_THROW_EXCEPTION_2();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_new_func_exp(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return ARG_funcexp1-&gt;makeFunction(ARG_exec, scopeChain(ARG_r));
</del><ins>+    return ARG_funcexp1-&gt;makeFunction(ARG_callFrame, ARG_callFrame-&gt;scopeChain());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_mod(CTI_ARGS)
</span><span class="lines">@@ -5274,17 +5196,17 @@
</span><span class="cx">     JSValue* dividendValue = ARG_src1;
</span><span class="cx">     JSValue* divisorValue = ARG_src2;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    double d = dividendValue-&gt;toNumber(exec);
-    JSValue* result = jsNumber(ARG_globalData, fmod(d, divisorValue-&gt;toNumber(exec)));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    double d = dividendValue-&gt;toNumber(callFrame);
+    JSValue* result = jsNumber(ARG_globalData, fmod(d, divisorValue-&gt;toNumber(callFrame)));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_less(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsBoolean(jsLess(exec, ARG_src1, ARG_src2));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsBoolean(jsLess(callFrame, ARG_src1, ARG_src2));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5296,8 +5218,8 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(!JSImmediate::areBothImmediateNumbers(src1, src2));
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* result = jsBoolean(!equalSlowCaseInline(exec, src1, src2));
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    JSValue* result = jsBoolean(!equalSlowCaseInline(callFrame, src1, src2));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -5306,9 +5228,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* v = ARG_src1;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSValue* number = v-&gt;toJSNumber(exec);
</del><ins>+    JSValue* number = v-&gt;toJSNumber(callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_2();
</span><span class="cx"> 
</span><span class="cx">     VoidPtrPair pair = { number, jsNumber(ARG_globalData, number-&gt;uncheckedGetNumber() - 1) };
</span><span class="lines">@@ -5320,12 +5242,12 @@
</span><span class="cx">     JSValue* val = ARG_src1;
</span><span class="cx">     JSValue* shift = ARG_src2;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     if (JSImmediate::areBothImmediateNumbers(val, shift) &amp;&amp; !JSImmediate::isNegative(val))
</span><span class="cx">         return JSImmediate::rightShiftImmediateNumbers(val, shift);
</span><span class="cx">     else {
</span><del>-        JSValue* result = jsNumber(ARG_globalData, (val-&gt;toUInt32(exec)) &gt;&gt; (shift-&gt;toUInt32(exec) &amp; 0x1f));
</del><ins>+        JSValue* result = jsNumber(ARG_globalData, (val-&gt;toUInt32(callFrame)) &gt;&gt; (shift-&gt;toUInt32(callFrame) &amp; 0x1f));
</ins><span class="cx">         VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="lines">@@ -5336,16 +5258,16 @@
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx">     JSValue* src2 = ARG_src2;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toInt32(exec) ^ src2-&gt;toInt32(exec));
</del><ins>+    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toInt32(callFrame) ^ src2-&gt;toInt32(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_new_regexp(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return new (ARG_globalData) RegExpObject(scopeChain(ARG_r)-&gt;globalObject()-&gt;regExpStructure(), ARG_regexp1);
</del><ins>+    return new (ARG_globalData) RegExpObject(ARG_callFrame-&gt;lexicalGlobalObject()-&gt;regExpStructure(), ARG_regexp1);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_bitor(CTI_ARGS)
</span><span class="lines">@@ -5353,20 +5275,19 @@
</span><span class="cx">     JSValue* src1 = ARG_src1;
</span><span class="cx">     JSValue* src2 = ARG_src2;
</span><span class="cx"> 
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toInt32(exec) | src2-&gt;toInt32(exec));
</del><ins>+    JSValue* result = jsNumber(ARG_globalData, src1-&gt;toInt32(callFrame) | src2-&gt;toInt32(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_call_eval(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     RegisterFile* registerFile = ARG_registerFile;
</span><del>-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
-    ScopeChainNode* scopeChain = Machine::scopeChain(r);
</del><ins>+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
+    ScopeChainNode* scopeChain = callFrame-&gt;scopeChain();
</ins><span class="cx"> 
</span><span class="cx">     Machine* machine = ARG_globalData-&gt;machine;
</span><span class="cx">     
</span><span class="lines">@@ -5376,9 +5297,9 @@
</span><span class="cx">     JSValue* baseVal = ARG_src5;
</span><span class="cx"> 
</span><span class="cx">     if (baseVal == scopeChain-&gt;globalObject() &amp;&amp; funcVal == scopeChain-&gt;globalObject()-&gt;evalFunction()) {
</span><del>-        JSObject* thisObject = static_cast&lt;JSObject*&gt;(r[codeBlock-&gt;thisRegister].jsValue(exec));
</del><ins>+        JSObject* thisObject = static_cast&lt;JSObject*&gt;(callFrame[codeBlock-&gt;thisRegister].jsValue(callFrame));
</ins><span class="cx">         JSValue* exceptionValue = 0;
</span><del>-        JSValue* result = machine-&gt;callEval(exec, thisObject, scopeChain, registerFile,  r, registerOffset - RegisterFile::CallFrameHeaderSize - argCount, argCount, exceptionValue);
</del><ins>+        JSValue* result = machine-&gt;callEval(callFrame, thisObject, scopeChain, registerFile, registerOffset - RegisterFile::CallFrameHeaderSize - argCount, argCount, exceptionValue);
</ins><span class="cx">         VM_CHECK_EXCEPTION_ARG(exceptionValue);
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="lines">@@ -5388,9 +5309,8 @@
</span><span class="cx"> 
</span><span class="cx"> void* Machine::cti_op_throw(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">     unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><span class="lines">@@ -5398,15 +5318,15 @@
</span><span class="cx">     JSValue* exceptionValue = ARG_src1;
</span><span class="cx">     ASSERT(exceptionValue);
</span><span class="cx"> 
</span><del>-    Instruction* handlerVPC = ARG_globalData-&gt;machine-&gt;throwException(exec, exceptionValue, codeBlock-&gt;instructions.begin() + vPCIndex, r, true);
</del><ins>+    Instruction* handlerVPC = ARG_globalData-&gt;machine-&gt;throwException(callFrame, exceptionValue, codeBlock-&gt;instructions.begin() + vPCIndex, true);
</ins><span class="cx"> 
</span><span class="cx">     if (!handlerVPC) {
</span><span class="cx">         *ARG_exception = exceptionValue;
</span><span class="cx">         return JSImmediate::nullImmediate();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ARG_setR(r);
-    void* catchRoutine = Machine::codeBlock(r)-&gt;nativeExceptionCodeForHandlerVPC(handlerVPC);
</del><ins>+    ARG_setCallFrame(callFrame);
+    void* catchRoutine = callFrame-&gt;codeBlock()-&gt;nativeExceptionCodeForHandlerVPC(handlerVPC);
</ins><span class="cx">     ASSERT(catchRoutine);
</span><span class="cx">     ctiSetReturnAddress(&amp;CTI_RETURN_ADDRESS, catchRoutine);
</span><span class="cx">     return exceptionValue;
</span><span class="lines">@@ -5414,13 +5334,13 @@
</span><span class="cx"> 
</span><span class="cx"> JSPropertyNameIterator* Machine::cti_op_get_pnames(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return JSPropertyNameIterator::create(ARG_exec, ARG_src1);
</del><ins>+    return JSPropertyNameIterator::create(ARG_callFrame, ARG_src1);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_next_pname(CTI_ARGS)
</span><span class="cx"> {
</span><span class="cx">     JSPropertyNameIterator* it = ARG_pni1;
</span><del>-    JSValue* temp = it-&gt;next(ARG_exec);
</del><ins>+    JSValue* temp = it-&gt;next(ARG_callFrame);
</ins><span class="cx">     if (!temp)
</span><span class="cx">         it-&gt;invalidate();
</span><span class="cx">     return temp;
</span><span class="lines">@@ -5428,25 +5348,19 @@
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_push_scope(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    JSValue* v = ARG_src1;
-
-    JSObject* o = v-&gt;toObject(exec);
</del><ins>+    JSObject* o = ARG_src1-&gt;toObject(ARG_callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_VOID();
</span><del>-
-    Register* r = ARG_r;
-    r[RegisterFile::ScopeChain] = scopeChain(r)-&gt;push(o);
</del><ins>+    ARG_callFrame-&gt;setScopeChain(ARG_callFrame-&gt;scopeChain()-&gt;push(o));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_pop_scope(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    Register* r = ARG_r;
-    r[RegisterFile::ScopeChain] = scopeChain(r)-&gt;pop();
</del><ins>+    ARG_callFrame-&gt;setScopeChain(ARG_callFrame-&gt;scopeChain()-&gt;pop());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_typeof(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    return jsTypeStringForValue(ARG_exec, ARG_src1);
</del><ins>+    return jsTypeStringForValue(ARG_callFrame, ARG_src1);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_is_undefined(CTI_ARGS)
</span><span class="lines">@@ -5507,24 +5421,24 @@
</span><span class="cx"> JSValue* Machine::cti_op_to_jsnumber(CTI_ARGS)
</span><span class="cx"> {
</span><span class="cx">     JSValue* src = ARG_src1;
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    JSValue* result = src-&gt;toJSNumber(exec);
</del><ins>+    JSValue* result = src-&gt;toJSNumber(callFrame);
</ins><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_in(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     JSValue* baseVal = ARG_src2;
</span><span class="cx"> 
</span><span class="cx">     if (!baseVal-&gt;isObject()) {
</span><del>-        Register* r = ARG_r;
-        CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+        CallFrame* callFrame = ARG_callFrame;
+        CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">         ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
</span><span class="cx">         unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
</span><del>-        exec-&gt;setException(createInvalidParamError(exec, &quot;in&quot;, baseVal, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock));
</del><ins>+        ARG_globalData-&gt;exception = createInvalidParamError(callFrame, &quot;in&quot;, baseVal, codeBlock-&gt;instructions.begin() + vPCIndex, codeBlock);
</ins><span class="cx">         VM_THROW_EXCEPTION();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -5533,47 +5447,47 @@
</span><span class="cx"> 
</span><span class="cx">     uint32_t i;
</span><span class="cx">     if (propName-&gt;getUInt32(i))
</span><del>-        return jsBoolean(baseObj-&gt;hasProperty(exec, i));
</del><ins>+        return jsBoolean(baseObj-&gt;hasProperty(callFrame, i));
</ins><span class="cx"> 
</span><del>-    Identifier property(exec, propName-&gt;toString(exec));
</del><ins>+    Identifier property(callFrame, propName-&gt;toString(callFrame));
</ins><span class="cx">     VM_CHECK_EXCEPTION();
</span><del>-    return jsBoolean(baseObj-&gt;hasProperty(exec, property));
</del><ins>+    return jsBoolean(baseObj-&gt;hasProperty(callFrame, property));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_push_new_scope(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    JSObject* scope = new (ARG_globalData) JSStaticScopeObject(ARG_exec, *ARG_id1, ARG_src2, DontDelete);
</del><ins>+    JSObject* scope = new (ARG_globalData) JSStaticScopeObject(ARG_callFrame, *ARG_id1, ARG_src2, DontDelete);
</ins><span class="cx"> 
</span><del>-    Register* r = ARG_r;
-    r[RegisterFile::ScopeChain] = scopeChain(r)-&gt;push(scope);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    callFrame-&gt;setScopeChain(callFrame-&gt;scopeChain()-&gt;push(scope));
</ins><span class="cx">     return scope;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_jmp_scopes(CTI_ARGS)
</span><span class="cx"> {
</span><span class="cx">     unsigned count = ARG_int1;
</span><del>-    Register* r = ARG_r;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><del>-    ScopeChainNode* tmp = scopeChain(r);
</del><ins>+    ScopeChainNode* tmp = callFrame-&gt;scopeChain();
</ins><span class="cx">     while (count--)
</span><span class="cx">         tmp = tmp-&gt;pop();
</span><del>-    r[RegisterFile::ScopeChain] = tmp;
</del><ins>+    callFrame-&gt;setScopeChain(tmp);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_by_index(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx">     unsigned property = ARG_int2;
</span><span class="cx"> 
</span><del>-    ARG_src1-&gt;put(exec, property, ARG_src3);
</del><ins>+    ARG_src1-&gt;put(callFrame, property, ARG_src3);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void* Machine::cti_op_switch_imm(CTI_ARGS)
</span><span class="cx"> {
</span><span class="cx">     JSValue* scrutinee = ARG_src1;
</span><span class="cx">     unsigned tableIndex = ARG_int2;
</span><del>-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">     if (JSImmediate::isNumber(scrutinee)) {
</span><span class="cx">         int32_t value = JSImmediate::getTruncatedInt32(scrutinee);
</span><span class="lines">@@ -5587,8 +5501,8 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* scrutinee = ARG_src1;
</span><span class="cx">     unsigned tableIndex = ARG_int2;
</span><del>-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">     void* result = codeBlock-&gt;characterSwitchJumpTables[tableIndex].ctiDefault;
</span><span class="cx"> 
</span><span class="lines">@@ -5605,8 +5519,8 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue* scrutinee = ARG_src1;
</span><span class="cx">     unsigned tableIndex = ARG_int2;
</span><del>-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">     void* result = codeBlock-&gt;stringSwitchJumpTables[tableIndex].ctiDefault;
</span><span class="cx"> 
</span><span class="lines">@@ -5620,21 +5534,21 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_del_by_val(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     JSValue* baseValue = ARG_src1;
</span><del>-    JSObject* baseObj = baseValue-&gt;toObject(exec); // may throw
</del><ins>+    JSObject* baseObj = baseValue-&gt;toObject(callFrame); // may throw
</ins><span class="cx"> 
</span><span class="cx">     JSValue* subscript = ARG_src2;
</span><span class="cx">     JSValue* result;
</span><span class="cx">     uint32_t i;
</span><span class="cx">     if (subscript-&gt;getUInt32(i))
</span><del>-        result = jsBoolean(baseObj-&gt;deleteProperty(exec, i));
</del><ins>+        result = jsBoolean(baseObj-&gt;deleteProperty(callFrame, i));
</ins><span class="cx">     else {
</span><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        Identifier property(exec, subscript-&gt;toString(exec));
</del><ins>+        Identifier property(callFrame, subscript-&gt;toString(callFrame));
</ins><span class="cx">         VM_CHECK_EXCEPTION();
</span><del>-        result = jsBoolean(baseObj-&gt;deleteProperty(exec, property));
</del><ins>+        result = jsBoolean(baseObj-&gt;deleteProperty(callFrame, property));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     VM_CHECK_EXCEPTION_AT_END();
</span><span class="lines">@@ -5643,55 +5557,52 @@
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_getter(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(ARG_src1-&gt;isObject());
</span><span class="cx">     JSObject* baseObj = static_cast&lt;JSObject*&gt;(ARG_src1);
</span><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx">     ASSERT(ARG_src3-&gt;isObject());
</span><del>-    baseObj-&gt;defineGetter(exec, ident, static_cast&lt;JSObject*&gt;(ARG_src3));
</del><ins>+    baseObj-&gt;defineGetter(callFrame, ident, static_cast&lt;JSObject*&gt;(ARG_src3));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_put_setter(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(ARG_src1-&gt;isObject());
</span><span class="cx">     JSObject* baseObj = static_cast&lt;JSObject*&gt;(ARG_src1);
</span><span class="cx">     Identifier&amp; ident = *ARG_id2;
</span><span class="cx">     ASSERT(ARG_src3-&gt;isObject());
</span><del>-    baseObj-&gt;defineSetter(exec, ident, static_cast&lt;JSObject*&gt;(ARG_src3));
</del><ins>+    baseObj-&gt;defineSetter(callFrame, ident, static_cast&lt;JSObject*&gt;(ARG_src3));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* Machine::cti_op_new_error(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx">     unsigned type = ARG_int1;
</span><span class="cx">     JSValue* message = ARG_src2;
</span><span class="cx">     unsigned lineNumber = ARG_int3;
</span><span class="cx"> 
</span><del>-    return Error::create(exec, static_cast&lt;ErrorType&gt;(type), message-&gt;toString(exec), lineNumber, codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;ownerNode-&gt;sourceURL());
</del><ins>+    return Error::create(callFrame, static_cast&lt;ErrorType&gt;(type), message-&gt;toString(callFrame), lineNumber, codeBlock-&gt;ownerNode-&gt;sourceID(), codeBlock-&gt;ownerNode-&gt;sourceURL());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Machine::cti_op_debug(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
</ins><span class="cx"> 
</span><span class="cx">     int debugHookID = ARG_int1;
</span><span class="cx">     int firstLine = ARG_int2;
</span><span class="cx">     int lastLine = ARG_int3;
</span><span class="cx"> 
</span><del>-    ARG_globalData-&gt;machine-&gt;debug(exec, r, static_cast&lt;DebugHookID&gt;(debugHookID), firstLine, lastLine);
</del><ins>+    ARG_globalData-&gt;machine-&gt;debug(callFrame, static_cast&lt;DebugHookID&gt;(debugHookID), firstLine, lastLine);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void* Machine::cti_vm_throw(CTI_ARGS)
</span><span class="cx"> {
</span><del>-    ExecState* exec = ARG_exec;
-    Register* r = ARG_r;
-    CodeBlock* codeBlock = Machine::codeBlock(r);
</del><ins>+    CallFrame* callFrame = ARG_callFrame;
+    CodeBlock* codeBlock = callFrame-&gt;codeBlock();
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(codeBlock-&gt;ctiReturnAddressVPCMap.contains(ARG_globalData-&gt;throwReturnAddress));
</span><span class="cx">     unsigned vPCIndex = codeBlock-&gt;ctiReturnAddressVPCMap.get(ARG_globalData-&gt;throwReturnAddress);
</span><span class="lines">@@ -5700,15 +5611,15 @@
</span><span class="cx">     ASSERT(exceptionValue);
</span><span class="cx">     ARG_globalData-&gt;exception = 0;
</span><span class="cx"> 
</span><del>-    Instruction* handlerVPC = ARG_globalData-&gt;machine-&gt;throwException(exec, exceptionValue, codeBlock-&gt;instructions.begin() + vPCIndex, r, false);
</del><ins>+    Instruction* handlerVPC = ARG_globalData-&gt;machine-&gt;throwException(callFrame, exceptionValue, codeBlock-&gt;instructions.begin() + vPCIndex, false);
</ins><span class="cx"> 
</span><span class="cx">     if (!handlerVPC) {
</span><span class="cx">         *ARG_exception = exceptionValue;
</span><span class="cx">         return JSImmediate::nullImmediate();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ARG_setR(r);
-    void* catchRoutine = Machine::codeBlock(r)-&gt;nativeExceptionCodeForHandlerVPC(handlerVPC);
</del><ins>+    ARG_setCallFrame(callFrame);
+    void* catchRoutine = callFrame-&gt;codeBlock()-&gt;nativeExceptionCodeForHandlerVPC(handlerVPC);
</ins><span class="cx">     ASSERT(catchRoutine);
</span><span class="cx">     ctiSetReturnAddress(&amp;CTI_RETURN_ADDRESS, catchRoutine);
</span><span class="cx">     return exceptionValue;
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMMachineh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/Machine.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/Machine.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/Machine.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -44,7 +44,6 @@
</span><span class="cx"> 
</span><span class="cx">     class CodeBlock;
</span><span class="cx">     class EvalNode;
</span><del>-    class ExecState;
</del><span class="cx">     class FunctionBodyNode;
</span><span class="cx">     class Instruction;
</span><span class="cx">     class InternalFunction;
</span><span class="lines">@@ -95,18 +94,15 @@
</span><span class="cx"> 
</span><span class="cx">         bool isOpcode(Opcode opcode);
</span><span class="cx">         
</span><del>-        JSValue* execute(ProgramNode*, ExecState*, ScopeChainNode*, JSObject* thisObj, JSValue** exception);
-        JSValue* execute(FunctionBodyNode*, ExecState*, JSFunction*, JSObject* thisObj, const ArgList&amp; args, ScopeChainNode*, JSValue** exception);
-        JSValue* execute(EvalNode* evalNode, ExecState* exec, JSObject* thisObj, ScopeChainNode* scopeChain, JSValue** exception);
</del><ins>+        JSValue* execute(ProgramNode*, CallFrame*, ScopeChainNode*, JSObject* thisObj, JSValue** exception);
+        JSValue* execute(FunctionBodyNode*, CallFrame*, JSFunction*, JSObject* thisObj, const ArgList&amp; args, ScopeChainNode*, JSValue** exception);
+        JSValue* execute(EvalNode* evalNode, CallFrame* exec, JSObject* thisObj, ScopeChainNode* scopeChain, JSValue** exception);
</ins><span class="cx"> 
</span><del>-        JSValue* retrieveArguments(ExecState*, JSFunction*) const;
-        JSValue* retrieveCaller(ExecState*, InternalFunction*) const;
-        void retrieveLastCaller(ExecState* exec, int&amp; lineNumber, intptr_t&amp; sourceID, UString&amp; sourceURL, JSValue*&amp; function) const;
</del><ins>+        JSValue* retrieveArguments(CallFrame*, JSFunction*) const;
+        JSValue* retrieveCaller(CallFrame*, InternalFunction*) const;
+        void retrieveLastCaller(CallFrame*, int&amp; lineNumber, intptr_t&amp; sourceID, UString&amp; sourceURL, JSValue*&amp; function) const;
</ins><span class="cx">         
</span><del>-        static ScopeChainNode* scopeChain(const Register* r) { return r[RegisterFile::ScopeChain].scopeChain(); }
-        static CodeBlock* codeBlock(const Register* r) { return r[RegisterFile::CodeBlock].codeBlock(); }
-
-        void getArgumentsData(Register* callFrame, JSFunction*&amp;, ptrdiff_t&amp; firstParameterIndex, Register*&amp; argv, int&amp; argc);
</del><ins>+        void getArgumentsData(CallFrame*, JSFunction*&amp;, ptrdiff_t&amp; firstParameterIndex, Register*&amp; argv, int&amp; argc);
</ins><span class="cx">         void setTimeoutTime(unsigned timeoutTime) { m_timeoutTime = timeoutTime; }
</span><span class="cx">         
</span><span class="cx">         void startTimeoutCheck()
</span><span class="lines">@@ -239,49 +235,49 @@
</span><span class="cx"> 
</span><span class="cx">         bool isJSArray(JSValue* v) { return !JSImmediate::isImmediate(v) &amp;&amp; v-&gt;asCell()-&gt;vptr() == m_jsArrayVptr; }
</span><span class="cx">         bool isJSString(JSValue* v) { return !JSImmediate::isImmediate(v) &amp;&amp; v-&gt;asCell()-&gt;vptr() == m_jsStringVptr; }
</span><del>-        
-        ALWAYS_INLINE static void initializeCallFrame(Register* callFrame, CodeBlock*, Instruction*, ScopeChainNode*, Register* r, int returnValueRegister, int argc, JSValue* function);
</del><span class="cx"> 
</span><span class="cx">     private:
</span><span class="cx">         enum ExecutionFlag { Normal, InitializeAndReturn };
</span><span class="cx"> 
</span><del>-        NEVER_INLINE JSValue* callEval(ExecState* exec, JSObject* thisObj, ScopeChainNode* scopeChain, RegisterFile*, Register* r, int argv, int argc, JSValue*&amp; exceptionValue);
-        JSValue* execute(EvalNode*, ExecState*, JSObject* thisObj, int registerOffset, ScopeChainNode*, JSValue** exception);
</del><ins>+        NEVER_INLINE JSValue* callEval(CallFrame*, JSObject* thisObject, ScopeChainNode*, RegisterFile*, int argv, int argc, JSValue*&amp; exceptionValue);
+        JSValue* execute(EvalNode*, CallFrame*, JSObject* thisObject, int registerOffset, ScopeChainNode*, JSValue** exception);
</ins><span class="cx"> 
</span><del>-        NEVER_INLINE void debug(ExecState*, Register*, DebugHookID, int firstLine, int lastLine);
</del><ins>+        NEVER_INLINE void debug(CallFrame*, DebugHookID, int firstLine, int lastLine);
</ins><span class="cx"> 
</span><del>-        NEVER_INLINE bool resolve(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue);
-        NEVER_INLINE bool resolveSkip(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue);
-        NEVER_INLINE bool resolveGlobal(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue);
-        NEVER_INLINE void resolveBase(ExecState* exec, Instruction* vPC, Register* r);
-        NEVER_INLINE bool resolveBaseAndProperty(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue);
-        NEVER_INLINE ScopeChainNode* createExceptionScope(ExecState* exec, const Instruction* vPC, Register* r);
</del><ins>+        NEVER_INLINE bool resolve(CallFrame*, Instruction*, JSValue*&amp; exceptionValue);
+        NEVER_INLINE bool resolveSkip(CallFrame*, Instruction*, JSValue*&amp; exceptionValue);
+        NEVER_INLINE bool resolveGlobal(CallFrame*, Instruction*, JSValue*&amp; exceptionValue);
+        NEVER_INLINE void resolveBase(CallFrame*, Instruction* vPC);
+        NEVER_INLINE bool resolveBaseAndProperty(CallFrame*, Instruction*, JSValue*&amp; exceptionValue);
+        NEVER_INLINE ScopeChainNode* createExceptionScope(CallFrame*, const Instruction* vPC);
</ins><span class="cx"> 
</span><del>-        NEVER_INLINE bool unwindCallFrame(ExecState*&amp;, JSValue*, const Instruction*&amp;, CodeBlock*&amp;, Register*&amp;);
-        NEVER_INLINE Instruction* throwException(ExecState*, JSValue*&amp;, const Instruction*, Register*&amp;, bool);
-        NEVER_INLINE bool resolveBaseAndFunc(ExecState* exec, Instruction* vPC, Register* r, JSValue*&amp; exceptionValue);
</del><ins>+        NEVER_INLINE bool unwindCallFrame(CallFrame*&amp;, JSValue*, const Instruction*&amp;, CodeBlock*&amp;);
+        NEVER_INLINE Instruction* throwException(CallFrame*&amp;, JSValue*&amp;, const Instruction*, bool);
+        NEVER_INLINE bool resolveBaseAndFunc(CallFrame*, Instruction*, JSValue*&amp; exceptionValue);
</ins><span class="cx"> 
</span><del>-        Register* callFrame(ExecState*, InternalFunction*) const;
</del><ins>+        static ALWAYS_INLINE CallFrame* slideRegisterWindowForCall(CodeBlock*, RegisterFile*, CallFrame*, size_t registerOffset, int argc);
</ins><span class="cx"> 
</span><del>-        JSValue* privateExecute(ExecutionFlag, RegisterFile*, Register*, JSValue** exception);
</del><ins>+        static CallFrame* findFunctionCallFrame(CallFrame*, InternalFunction*);
</ins><span class="cx"> 
</span><del>-        void dumpCallFrame(const RegisterFile*, const Register*);
-        void dumpRegisters(const RegisterFile*, const Register*);
</del><ins>+        JSValue* privateExecute(ExecutionFlag, RegisterFile*, CallFrame*, JSValue** exception);
</ins><span class="cx"> 
</span><ins>+        void dumpCallFrame(const RegisterFile*, CallFrame*);
+        void dumpRegisters(const RegisterFile*, CallFrame*);
+
</ins><span class="cx">         JSValue* checkTimeout(JSGlobalObject*);
</span><span class="cx">         void resetTimeoutCheck();
</span><span class="cx"> 
</span><del>-        void tryCacheGetByID(ExecState*, CodeBlock*, Instruction* vPC, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp;);
</del><ins>+        void tryCacheGetByID(CallFrame*, CodeBlock*, Instruction*, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp;);
</ins><span class="cx">         void uncacheGetByID(CodeBlock*, Instruction* vPC);
</span><del>-        void tryCachePutByID(ExecState* exec, CodeBlock*, Instruction* vPC, JSValue* baseValue, const PutPropertySlot&amp;);
</del><ins>+        void tryCachePutByID(CallFrame*, CodeBlock*, Instruction*, JSValue* baseValue, const PutPropertySlot&amp;);
</ins><span class="cx">         void uncachePutByID(CodeBlock*, Instruction* vPC);
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CTI)
</span><del>-        void tryCTICacheGetByID(ExecState*, CodeBlock*, void* returnAddress, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp;);
-        void tryCTICachePutByID(ExecState*, CodeBlock*, void* returnAddress, JSValue* baseValue, const PutPropertySlot&amp;);
</del><ins>+        void tryCTICacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSValue* baseValue, const Identifier&amp; propertyName, const PropertySlot&amp;);
+        void tryCTICachePutByID(CallFrame*, CodeBlock*, void* returnAddress, JSValue* baseValue, const PutPropertySlot&amp;);
</ins><span class="cx"> 
</span><del>-        void* getCTIArrayLengthTrampoline(ExecState*, CodeBlock*);
-        void* getCTIStringLengthTrampoline(ExecState*, CodeBlock*);
</del><ins>+        void* getCTIArrayLengthTrampoline(CallFrame*, CodeBlock*);
+        void* getCTIStringLengthTrampoline(CallFrame*, CodeBlock*);
</ins><span class="cx"> 
</span><span class="cx">         void* m_ctiArrayLengthTrampoline;
</span><span class="cx">         void* m_ctiStringLengthTrampoline;
</span><span class="lines">@@ -309,36 +305,6 @@
</span><span class="cx"> #endif
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE void Machine::initializeCallFrame(Register* callFrame, CodeBlock* codeBlock, Instruction* vPC, ScopeChainNode* scopeChain, Register* r, int returnValueRegister, int argc, JSValue* function)
-    {
-        ASSERT(r); // use makeHostCallFramePointer(0) to create a host call frame sentinel.
-        callFrame[RegisterFile::CodeBlock] = codeBlock;
-        callFrame[RegisterFile::ScopeChain] = scopeChain;
-        callFrame[RegisterFile::CallerRegisters] = r;
-        callFrame[RegisterFile::ReturnPC] = vPC;
-        callFrame[RegisterFile::ReturnValueRegister] = returnValueRegister;
-        callFrame[RegisterFile::ArgumentCount] = argc; // original argument count (for the sake of the &quot;arguments&quot; object)
-        callFrame[RegisterFile::Callee] = function;
-        callFrame[RegisterFile::OptionalCalleeArguments] = nullJSValue;
-    }
-
-    const intptr_t HostCallFrameMask = 1;
-
-    inline Register* makeHostCallFramePointer(Register* callFrame)
-    {
-        return reinterpret_cast&lt;Register*&gt;(reinterpret_cast&lt;intptr_t&gt;(callFrame) | HostCallFrameMask);
-    }
-
-    inline bool isHostCallFrame(Register* callFrame)
-    {
-        return reinterpret_cast&lt;intptr_t&gt;(callFrame) &amp; HostCallFrameMask;
-    }
-
-    inline Register* stripHostCallFrameBit(Register* callFrame)
-    {
-        return reinterpret_cast&lt;Register*&gt;(reinterpret_cast&lt;intptr_t&gt;(callFrame) &amp; ~HostCallFrameMask);
-    }
-
</del><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span><span class="cx"> #endif // Machine_h
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMRegisterh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/Register.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/Register.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/Register.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -34,13 +34,19 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><ins>+    class Arguments;
</ins><span class="cx">     class CodeBlock;
</span><span class="cx">     class ExecState;
</span><ins>+    class JSActivation;
+    class JSFunction;
</ins><span class="cx">     class JSPropertyNameIterator;
</span><span class="cx">     class JSValue;
</span><span class="cx">     class ScopeChainNode;
</span><ins>+
</ins><span class="cx">     struct Instruction;
</span><del>-    
</del><ins>+
+    typedef ExecState CallFrame;
+
</ins><span class="cx">     static JSValue* const nullJSValue = 0;
</span><span class="cx"> 
</span><span class="cx">     class Register {
</span><span class="lines">@@ -48,94 +54,113 @@
</span><span class="cx">         Register();
</span><span class="cx">         Register(JSValue*);
</span><span class="cx"> 
</span><del>-        JSValue* jsValue(ExecState*) const;
</del><ins>+        JSValue* jsValue(CallFrame*) const;
</ins><span class="cx">         JSValue* getJSValue() const;
</span><span class="cx"> 
</span><span class="cx">         bool marked() const;
</span><span class="cx">         void mark();
</span><span class="cx">         
</span><span class="cx">     private:
</span><ins>+        friend class ExecState;
</ins><span class="cx">         friend class Machine;
</span><span class="cx"> 
</span><del>-        // Only the Machine should use these functions.
</del><ins>+        // Only CallFrame and Machine should use these functions.
</ins><span class="cx"> 
</span><ins>+        Register(intptr_t);
+
+        Register(JSActivation*);
+        Register(Arguments*);
+        Register(CallFrame*);
</ins><span class="cx">         Register(CodeBlock*);
</span><ins>+        Register(JSFunction*);
+        Register(JSPropertyNameIterator*);
</ins><span class="cx">         Register(ScopeChainNode*);
</span><del>-        Register(intptr_t);
-        Register(Register*);
</del><span class="cx">         Register(Instruction*);
</span><del>-        Register(JSPropertyNameIterator*);
-        explicit Register(void*);
</del><span class="cx"> 
</span><ins>+        intptr_t i() const;
+        void* v() const;
+
+        JSActivation* activation() const;
+        Arguments* arguments() const;
+        CallFrame* callFrame() const;
</ins><span class="cx">         CodeBlock* codeBlock() const;
</span><ins>+        JSFunction* function() const;
+        JSPropertyNameIterator* propertyNameIterator() const;
</ins><span class="cx">         ScopeChainNode* scopeChain() const;
</span><del>-        intptr_t i() const;
-        Register* r() const;
</del><span class="cx">         Instruction* vPC() const;
</span><del>-        JSPropertyNameIterator* jsPropertyNameIterator() const;
-        void* v() const;
</del><span class="cx"> 
</span><span class="cx">         union {
</span><del>-        private:
-            friend class Register;
</del><ins>+            intptr_t i;
+            void* v;
+            JSValue* value;
</ins><span class="cx"> 
</span><ins>+            JSActivation* activation;
+            Arguments* arguments;
+            CallFrame* callFrame;
</ins><span class="cx">             CodeBlock* codeBlock;
</span><ins>+            JSFunction* function;
+            JSPropertyNameIterator* propertyNameIterator;
+            ScopeChainNode* scopeChain;
</ins><span class="cx">             Instruction* vPC;
</span><del>-            JSValue* jsValue;
-            ScopeChainNode* scopeChain;
-            JSPropertyNameIterator* jsPropertyNameIterator;
-            Register* r;
-            void* v;
-            intptr_t i;
</del><span class="cx">         } u;
</span><span class="cx"> 
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx">         enum {
</span><del>-            CodeBlockType = 0, 
-            InstructionType, 
-            JSValueType, 
-            ScopeChainNodeType, 
-            JSPropertyNameIteratorType, 
-            RegisterType, 
-            IntType
</del><ins>+            EmptyType,
+
+            IntType,
+            ValueType,
+
+            ActivationType,
+            ArgumentsType,
+            CallFrameType,
+            CodeBlockType,
+            FunctionType,
+            InstructionType,
+            PropertyNameIteratorType,
+            RegisterType,
+            ScopeChainNodeType
</ins><span class="cx">         } m_type;
</span><span class="cx"> #endif
</span><del>-
-// FIXME: The commented out ASSERTs below are valid; NDEBUG CTI should set these when up to date.
-//        static inline ptrdiff_t offsetOf_type()
-//        {
-//            return OBJECT_OFFSET(Register, m_type);
-//        }
</del><span class="cx">     };
</span><span class="cx"> 
</span><ins>+#ifndef NDEBUG
+    #define SET_TYPE(type) m_type = (type)
+    // FIXME: The CTI code to put value into registers doesn't set m_type.
+    // Once it does, we can turn this assertion back on.
+    #define ASSERT_TYPE(type)
+#else
+    #define SET_TYPE(type)
+    #define ASSERT_TYPE(type)
+#endif
+
</ins><span class="cx">     ALWAYS_INLINE Register::Register()
</span><span class="cx">     {
</span><span class="cx"> #ifndef NDEBUG
</span><ins>+        SET_TYPE(EmptyType);
</ins><span class="cx">         *this = nullJSValue;
</span><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ALWAYS_INLINE Register::Register(JSValue* v)
</span><span class="cx">     {
</span><del>-#ifndef NDEBUG
-        m_type = JSValueType;
-#endif
-        u.jsValue = v;
</del><ins>+        SET_TYPE(ValueType);
+        u.value = v;
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // This function is scaffolding for legacy clients. It will eventually go away.
</span><del>-    ALWAYS_INLINE JSValue* Register::jsValue(ExecState*) const
</del><ins>+    ALWAYS_INLINE JSValue* Register::jsValue(CallFrame*) const
</ins><span class="cx">     {
</span><span class="cx">         // Once registers hold doubles, this function will allocate a JSValue*
</span><span class="cx">         // if the register doesn't hold one already. 
</span><del>-//        ASSERT(m_type == JSValueType);
-        return u.jsValue;
</del><ins>+        ASSERT_TYPE(ValueType);
+        return u.value;
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ALWAYS_INLINE JSValue* Register::getJSValue() const
</span><span class="cx">     {
</span><del>-//        ASSERT(m_type == JSValueType);
-        return u.jsValue;
</del><ins>+        ASSERT_TYPE(JSValueType);
+        return u.value;
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ALWAYS_INLINE bool Register::marked() const
</span><span class="lines">@@ -150,100 +175,122 @@
</span><span class="cx">     
</span><span class="cx">     // Machine functions
</span><span class="cx"> 
</span><ins>+    ALWAYS_INLINE Register::Register(Arguments* arguments)
+    {
+        SET_TYPE(ArgumentsType);
+        u.arguments = arguments;
+    }
+
+    ALWAYS_INLINE Register::Register(JSActivation* activation)
+    {
+        SET_TYPE(ActivationType);
+        u.activation = activation;
+    }
+
+    ALWAYS_INLINE Register::Register(CallFrame* callFrame)
+    {
+        SET_TYPE(CallFrameType);
+        u.callFrame = callFrame;
+    }
+
</ins><span class="cx">     ALWAYS_INLINE Register::Register(CodeBlock* codeBlock)
</span><span class="cx">     {
</span><del>-#ifndef NDEBUG
-        m_type = CodeBlockType;
-#endif
</del><ins>+        SET_TYPE(CodeBlockType);
</ins><span class="cx">         u.codeBlock = codeBlock;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    ALWAYS_INLINE Register::Register(JSFunction* function)
+    {
+        SET_TYPE(FunctionType);
+        u.function = function;
+    }
+
</ins><span class="cx">     ALWAYS_INLINE Register::Register(Instruction* vPC)
</span><span class="cx">     {
</span><del>-#ifndef NDEBUG
-        m_type = InstructionType;
-#endif
</del><ins>+        SET_TYPE(InstructionType);
</ins><span class="cx">         u.vPC = vPC;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ALWAYS_INLINE Register::Register(ScopeChainNode* scopeChain)
</span><span class="cx">     {
</span><del>-#ifndef NDEBUG
-        m_type = ScopeChainNodeType;
-#endif
</del><ins>+        SET_TYPE(ScopeChainNodeType);
</ins><span class="cx">         u.scopeChain = scopeChain;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE Register::Register(JSPropertyNameIterator* jsPropertyNameIterator)
</del><ins>+    ALWAYS_INLINE Register::Register(JSPropertyNameIterator* propertyNameIterator)
</ins><span class="cx">     {
</span><del>-#ifndef NDEBUG
-        m_type = JSPropertyNameIteratorType;
-#endif
-        u.jsPropertyNameIterator = jsPropertyNameIterator;
</del><ins>+        SET_TYPE(PropertyNameIteratorType);
+        u.propertyNameIterator = propertyNameIterator;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE Register::Register(Register* r)
-    {
-#ifndef NDEBUG
-        m_type = RegisterType;
-#endif
-        u.r = r;
-    }
-
</del><span class="cx">     ALWAYS_INLINE Register::Register(intptr_t i)
</span><span class="cx">     {
</span><del>-#ifndef NDEBUG
-        m_type = IntType;
-#endif
</del><ins>+        SET_TYPE(IntType);
</ins><span class="cx">         u.i = i;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE Register::Register(void* v)
</del><ins>+    ALWAYS_INLINE intptr_t Register::i() const
</ins><span class="cx">     {
</span><del>-        u.v = v;
</del><ins>+        ASSERT_TYPE(IntType);
+        return u.i;
</ins><span class="cx">     }
</span><ins>+    
+    ALWAYS_INLINE void* Register::v() const
+    {
+        return u.v;
+    }
</ins><span class="cx"> 
</span><del>-    ALWAYS_INLINE CodeBlock* Register::codeBlock() const
</del><ins>+    ALWAYS_INLINE JSActivation* Register::activation() const
</ins><span class="cx">     {
</span><del>-//        ASSERT(m_type == CodeBlockType);
-        return u.codeBlock;
</del><ins>+        ASSERT_TYPE(ActivationType);
+        return u.activation;
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE ScopeChainNode* Register::scopeChain() const
</del><ins>+    ALWAYS_INLINE Arguments* Register::arguments() const
</ins><span class="cx">     {
</span><del>-//        ASSERT(m_type == ScopeChainNodeType);
-        return u.scopeChain;
</del><ins>+        ASSERT_TYPE(ArgumentsType);
+        return u.arguments;
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE intptr_t Register::i() const
</del><ins>+    ALWAYS_INLINE CallFrame* Register::callFrame() const
</ins><span class="cx">     {
</span><del>-//        ASSERT(m_type == IntType);
-        return u.i;
</del><ins>+        ASSERT_TYPE(CallFrameType);
+        return u.callFrame;
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE Register* Register::r() const
</del><ins>+    ALWAYS_INLINE CodeBlock* Register::codeBlock() const
</ins><span class="cx">     {
</span><del>-//        ASSERT(m_type == RegisterType);
-        return u.r;
</del><ins>+        ASSERT_TYPE(CodeBlockType);
+        return u.codeBlock;
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE Instruction* Register::vPC() const
</del><ins>+    ALWAYS_INLINE JSFunction* Register::function() const
</ins><span class="cx">     {
</span><del>-//        ASSERT(m_type == InstructionType);
-        return u.vPC;
</del><ins>+        ASSERT_TYPE(FunctionType);
+        return u.function;
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE JSPropertyNameIterator* Register::jsPropertyNameIterator() const
</del><ins>+    ALWAYS_INLINE JSPropertyNameIterator* Register::propertyNameIterator() const
</ins><span class="cx">     {
</span><del>-//        ASSERT(m_type == JSPropertyNameIteratorType);
-        return u.jsPropertyNameIterator;
</del><ins>+        ASSERT_TYPE(PropertyNameIteratorType);
+        return u.propertyNameIterator;
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE void* Register::v() const
</del><ins>+    ALWAYS_INLINE ScopeChainNode* Register::scopeChain() const
</ins><span class="cx">     {
</span><del>-        return u.v;
</del><ins>+        ASSERT_TYPE(ScopeChainNodeType);
+        return u.scopeChain;
</ins><span class="cx">     }
</span><ins>+    
+    ALWAYS_INLINE Instruction* Register::vPC() const
+    {
+        ASSERT_TYPE(InstructionType);
+        return u.vPC;
+    }
</ins><span class="cx"> 
</span><ins>+    #undef SET_TYPE
+    #undef ASSERT_TYPE
+
</ins><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span><span class="cx"> namespace WTF {
</span></span></pre></div>
<a id="trunkJavaScriptCoreVMRegisterFileh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/VM/RegisterFile.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/VM/RegisterFile.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/VM/RegisterFile.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx"> 
</span><span class="cx">             CodeBlock = -8,
</span><span class="cx">             ScopeChain = -7,
</span><del>-            CallerRegisters = -6,
</del><ins>+            CallerFrame = -6,
</ins><span class="cx">             ReturnPC = -5,
</span><span class="cx">             ReturnValueRegister = -4,
</span><span class="cx">             ArgumentCount = -3,
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsArgumentsh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/Arguments.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/Arguments.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/Arguments.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx"> 
</span><span class="cx">     class Arguments : public JSObject {
</span><span class="cx">     public:
</span><del>-        Arguments(ExecState*, Register* callFrame);
</del><ins>+        Arguments(CallFrame*);
</ins><span class="cx">         virtual ~Arguments();
</span><span class="cx"> 
</span><span class="cx">         static const ClassInfo info;
</span><span class="lines">@@ -74,26 +74,26 @@
</span><span class="cx"> 
</span><span class="cx">         virtual const ClassInfo* classInfo() const { return &amp;info; }
</span><span class="cx"> 
</span><del>-        void init(ExecState*, Register* callFrame);
</del><ins>+        void init(CallFrame*);
</ins><span class="cx"> 
</span><span class="cx">         OwnPtr&lt;ArgumentsData&gt; d;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    inline Arguments::Arguments(ExecState* exec, Register* callFrame)
-        : JSObject(exec-&gt;lexicalGlobalObject()-&gt;argumentsStructure())
</del><ins>+    inline Arguments::Arguments(CallFrame* callFrame)
+        : JSObject(callFrame-&gt;lexicalGlobalObject()-&gt;argumentsStructure())
</ins><span class="cx">         , d(new ArgumentsData)
</span><span class="cx">     {
</span><span class="cx">         JSFunction* callee;
</span><span class="cx">         ptrdiff_t firstParameterIndex;
</span><span class="cx">         Register* argv;
</span><span class="cx">         int numArguments;
</span><del>-        exec-&gt;machine()-&gt;getArgumentsData(callFrame, callee, firstParameterIndex, argv, numArguments);
</del><ins>+        callFrame-&gt;machine()-&gt;getArgumentsData(callFrame, callee, firstParameterIndex, argv, numArguments);
</ins><span class="cx"> 
</span><span class="cx">         d-&gt;numParameters = callee-&gt;m_body-&gt;parameterCount();
</span><span class="cx">         d-&gt;firstParameterIndex = firstParameterIndex;
</span><span class="cx">         d-&gt;numArguments = numArguments;
</span><span class="cx"> 
</span><del>-        d-&gt;registers = callFrame;
</del><ins>+        d-&gt;registers = callFrame-&gt;registers();
</ins><span class="cx"> 
</span><span class="cx">         Register* extraArguments;
</span><span class="cx">         if (d-&gt;numArguments &lt;= d-&gt;numParameters)
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsDebuggerCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/DebuggerCallFrame.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/DebuggerCallFrame.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/DebuggerCallFrame.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -38,18 +38,18 @@
</span><span class="cx"> 
</span><span class="cx"> const UString* DebuggerCallFrame::functionName() const
</span><span class="cx"> {
</span><del>-    if (!m_codeBlock)
</del><ins>+    if (!m_callFrame-&gt;codeBlock())
</ins><span class="cx">         return 0;
</span><span class="cx"> 
</span><del>-    JSFunction* function = static_cast&lt;JSFunction*&gt;(m_registers[RegisterFile::Callee].getJSValue());
</del><ins>+    JSFunction* function = static_cast&lt;JSFunction*&gt;(m_callFrame-&gt;callee());
</ins><span class="cx">     if (!function)
</span><span class="cx">         return 0;
</span><del>-    return &amp;function-&gt;name(m_scopeChain-&gt;globalData);
</del><ins>+    return &amp;function-&gt;name(&amp;m_callFrame-&gt;globalData());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> DebuggerCallFrame::Type DebuggerCallFrame::type() const
</span><span class="cx"> {
</span><del>-    if (m_registers[RegisterFile::Callee].getJSValue())
</del><ins>+    if (m_callFrame-&gt;callee())
</ins><span class="cx">         return FunctionType;
</span><span class="cx"> 
</span><span class="cx">     return ProgramType;
</span><span class="lines">@@ -57,25 +57,26 @@
</span><span class="cx"> 
</span><span class="cx"> JSObject* DebuggerCallFrame::thisObject() const
</span><span class="cx"> {
</span><del>-    if (!m_codeBlock)
</del><ins>+    if (!m_callFrame-&gt;codeBlock())
</ins><span class="cx">         return 0;
</span><span class="cx"> 
</span><del>-    return static_cast&lt;JSObject*&gt;(m_registers[m_codeBlock-&gt;thisRegister].getJSValue());
</del><ins>+    // FIXME: Why is it safe to cast this to JSObject?
+    return static_cast&lt;JSObject*&gt;(m_callFrame-&gt;thisValue());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue* DebuggerCallFrame::evaluate(const UString&amp; script, JSValue*&amp; exception) const
</span><span class="cx"> {
</span><del>-    if (!m_codeBlock)
</del><ins>+    if (!m_callFrame-&gt;codeBlock())
</ins><span class="cx">         return 0;
</span><span class="cx"> 
</span><span class="cx">     int errLine;
</span><span class="cx">     UString errMsg;
</span><span class="cx">     SourceCode source = makeSource(script);
</span><del>-    RefPtr&lt;EvalNode&gt; evalNode = m_scopeChain-&gt;globalData-&gt;parser-&gt;parse&lt;EvalNode&gt;(CallFrame::create(m_registers), source, &amp;errLine, &amp;errMsg);
</del><ins>+    RefPtr&lt;EvalNode&gt; evalNode = m_callFrame-&gt;scopeChain()-&gt;globalData-&gt;parser-&gt;parse&lt;EvalNode&gt;(m_callFrame, source, &amp;errLine, &amp;errMsg);
</ins><span class="cx">     if (!evalNode)
</span><del>-        return Error::create(CallFrame::create(m_registers), SyntaxError, errMsg, errLine, source.provider()-&gt;asID(), source.provider()-&gt;url());
</del><ins>+        return Error::create(m_callFrame, SyntaxError, errMsg, errLine, source.provider()-&gt;asID(), source.provider()-&gt;url());
</ins><span class="cx"> 
</span><del>-    return m_scopeChain-&gt;globalData-&gt;machine-&gt;execute(evalNode.get(), CallFrame::create(m_registers), thisObject(), m_scopeChain, &amp;exception);
</del><ins>+    return m_callFrame-&gt;scopeChain()-&gt;globalData-&gt;machine-&gt;execute(evalNode.get(), m_callFrame, thisObject(), m_callFrame-&gt;scopeChain(), &amp;exception);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsDebuggerCallFrameh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/DebuggerCallFrame.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/DebuggerCallFrame.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/DebuggerCallFrame.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -29,36 +29,22 @@
</span><span class="cx"> #ifndef DebuggerCallFrame_h
</span><span class="cx"> #define DebuggerCallFrame_h
</span><span class="cx"> 
</span><ins>+#include &quot;ExecState.h&quot;
+
</ins><span class="cx"> namespace JSC {
</span><span class="cx">     
</span><del>-    class CodeBlock;
-    class ExecState;
-    class JSGlobalObject;
-    class JSObject;
-    class JSValue;
-    class Machine;
-    class UString;
-    class Register;
-    class ScopeChainNode;
-    
</del><span class="cx">     class DebuggerCallFrame {
</span><span class="cx">     public:
</span><del>-        enum Type {
-            ProgramType,
-            FunctionType
-        };
</del><ins>+        enum Type { ProgramType, FunctionType };
</ins><span class="cx"> 
</span><del>-        DebuggerCallFrame(JSGlobalObject* dynamicGlobalObject, const CodeBlock* codeBlock, ScopeChainNode* scopeChain, Register* r, JSValue* exception)
-            : m_dynamicGlobalObject(dynamicGlobalObject)
-            , m_codeBlock(codeBlock)
-            , m_scopeChain(scopeChain)
-            , m_registers(r)
</del><ins>+        DebuggerCallFrame(CallFrame* callFrame, JSValue* exception)
+            : m_callFrame(callFrame)
</ins><span class="cx">             , m_exception(exception)
</span><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        JSGlobalObject* dynamicGlobalObject() const { return m_dynamicGlobalObject; }
-        const ScopeChainNode* scopeChain() const { return m_scopeChain; }
</del><ins>+        JSGlobalObject* dynamicGlobalObject() const { return m_callFrame-&gt;dynamicGlobalObject(); }
+        const ScopeChainNode* scopeChain() const { return m_callFrame-&gt;scopeChain(); }
</ins><span class="cx">         const UString* functionName() const;
</span><span class="cx">         Type type() const;
</span><span class="cx">         JSObject* thisObject() const;
</span><span class="lines">@@ -66,10 +52,7 @@
</span><span class="cx">         JSValue* exception() const { return m_exception; }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        JSGlobalObject* m_dynamicGlobalObject;
-        const CodeBlock* m_codeBlock;
-        ScopeChainNode* m_scopeChain;
-        Register* m_registers;
</del><ins>+        CallFrame* m_callFrame;
</ins><span class="cx">         JSValue* m_exception;
</span><span class="cx">     };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsExecStatecpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/ExecState.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/ExecState.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/ExecState.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -1 +1,38 @@
</span><del>-/* delete me */
</del><ins>+/*
+ * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include &quot;config.h&quot;
+#include &quot;ExecState.h&quot;
+
+#include &quot;CodeBlock.h&quot;
+
+namespace JSC {
+
+JSValue* CallFrame::thisValue()
+{
+    return this[codeBlock()-&gt;thisRegister].jsValue(this);
+}
+
+}
</ins></span></pre></div>
<a id="trunkJavaScriptCorekjsExecStateh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/ExecState.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/ExecState.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/ExecState.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -23,60 +23,65 @@
</span><span class="cx"> #ifndef ExecState_h
</span><span class="cx"> #define ExecState_h
</span><span class="cx"> 
</span><ins>+// FIXME: Rename this file to CallFrame.h.
+
</ins><span class="cx"> #include &quot;JSGlobalData.h&quot;
</span><span class="cx"> #include &quot;Machine.h&quot;
</span><span class="cx"> #include &quot;ScopeChain.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC  {
</span><span class="cx"> 
</span><del>-    class ExecState;
-    class JSValue;
-    class Register;
</del><ins>+    class Arguments;
+    class JSActivation;
</ins><span class="cx"> 
</span><del>-    typedef ExecState CallFrame;
-
</del><span class="cx">     // Represents the current state of script execution.
</span><span class="cx">     // Passed as the first argument to most functions.
</span><del>-    class ExecState : private Register, Noncopyable {
</del><ins>+    class ExecState : private Register {
</ins><span class="cx">     public:
</span><del>-        static CallFrame* create(Register* callFrameBase) { return static_cast&lt;CallFrame*&gt;(callFrameBase); }
-        Register* registers() { return this; }
</del><ins>+        JSFunction* callee() const { return this[RegisterFile::Callee].function(); }
+        CodeBlock* codeBlock() const { return this[RegisterFile::CodeBlock].Register::codeBlock(); }
+        ScopeChainNode* scopeChain() const { return this[RegisterFile::ScopeChain].Register::scopeChain(); }
</ins><span class="cx"> 
</span><ins>+        JSValue* thisValue();
+
</ins><span class="cx">         // Global object in which execution began.
</span><span class="cx">         JSGlobalObject* dynamicGlobalObject();
</span><span class="cx"> 
</span><span class="cx">         // Global object in which the currently executing code was defined.
</span><span class="cx">         // Differs from dynamicGlobalObject() during function calls across web browser frames.
</span><del>-        JSGlobalObject* lexicalGlobalObject()
</del><ins>+        JSGlobalObject* lexicalGlobalObject() const
</ins><span class="cx">         {
</span><del>-            return Machine::scopeChain(this)-&gt;globalObject();
</del><ins>+            return scopeChain()-&gt;globalObject();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Differs from lexicalGlobalObject because this will have DOM window shell rather than
</span><del>-        // the actual DOM window.
-        JSObject* globalThisValue()
</del><ins>+        // the actual DOM window, which can't be &quot;this&quot; for security reasons.
+        JSObject* globalThisValue() const
</ins><span class="cx">         {
</span><del>-            return Machine::scopeChain(this)-&gt;globalThisObject();
</del><ins>+            return scopeChain()-&gt;globalThisObject();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        JSGlobalData&amp; globalData()
</del><ins>+        // FIXME: Elsewhere, we use JSGlobalData* rather than JSGlobalData&amp;.
+        // We should make this more uniform and either use a reference everywhere
+        // or a pointer everywhere.
+        JSGlobalData&amp; globalData() const
</ins><span class="cx">         {
</span><del>-            return *Machine::scopeChain(this)-&gt;globalData;
</del><ins>+            return *scopeChain()-&gt;globalData;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Convenience functions for access to global data.
</span><ins>+        // It takes a few memory references to get from a call frame to the global data
+        // pointer, so these are inefficient, and should be used sparingly in new code.
+        // But they're used in many places in legacy code, so they're not going away any time soon.
</ins><span class="cx"> 
</span><span class="cx">         void setException(JSValue* exception) { globalData().exception = exception; }
</span><span class="cx">         void clearException() { globalData().exception = 0; }
</span><del>-        JSValue* exception() { return globalData().exception; }
</del><ins>+        JSValue* exception() const { return globalData().exception; }
</ins><span class="cx">         JSValue** exceptionSlot() { return &amp;globalData().exception; }
</span><del>-        bool hadException() { return !!globalData().exception; }
</del><ins>+        bool hadException() const { return !!globalData().exception; }
</ins><span class="cx"> 
</span><del>-        IdentifierTable* identifierTable() { return globalData().identifierTable; }
-        const CommonIdentifiers&amp; propertyNames() { return *globalData().propertyNames; }
-        const ArgList&amp; emptyList() { return *globalData().emptyList; }
-        Lexer* lexer() { return globalData().lexer; }
-        Parser* parser() { return globalData().parser; }
</del><ins>+        const CommonIdentifiers&amp; propertyNames() const { return *globalData().propertyNames; }
+        const ArgList&amp; emptyList() const { return *globalData().emptyList; }
</ins><span class="cx">         Machine* machine() { return globalData().machine; }
</span><span class="cx">         Heap* heap() { return &amp;globalData().heap; }
</span><span class="cx"> 
</span><span class="lines">@@ -89,6 +94,51 @@
</span><span class="cx">         static const HashTable* stringTable(CallFrame* callFrame) { return callFrame-&gt;globalData().stringTable; }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><ins>+        friend class Arguments;
+        friend class JSActivation;
+        friend class JSGlobalObject;
+        friend class Machine;
+
+        static CallFrame* create(Register* callFrameBase) { return static_cast&lt;CallFrame*&gt;(callFrameBase); }
+        Register* registers() { return this; }
+
+        CallFrame&amp; operator=(const Register&amp; r) { *static_cast&lt;Register*&gt;(this) = r; return *this; }
+
+        int argumentCount() const { return this[RegisterFile::ArgumentCount].i(); }
+        CallFrame* callerFrame() const { return this[RegisterFile::CallerFrame].callFrame(); }
+        Arguments* optionalCalleeArguments() const { return this[RegisterFile::OptionalCalleeArguments].arguments(); }
+        Instruction* returnPC() const { return this[RegisterFile::ReturnPC].vPC(); }
+        int returnValueRegister() const { return this[RegisterFile::ReturnValueRegister].i(); }
+
+        void setArgumentCount(int count) { this[RegisterFile::ArgumentCount] = count; }
+        void setCallee(JSFunction* callee) { this[RegisterFile::Callee] = callee; }
+        void setCalleeArguments(Arguments* arguments) { this[RegisterFile::OptionalCalleeArguments] = arguments; }
+        void setCallerFrame(CallFrame* callerFrame) { this[RegisterFile::CallerFrame] = callerFrame; }
+        void setCodeBlock(CodeBlock* codeBlock) { this[RegisterFile::CodeBlock] = codeBlock; }
+        void setScopeChain(ScopeChainNode* scopeChain) { this[RegisterFile::ScopeChain] = scopeChain; }
+
+        ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, ScopeChainNode* scopeChain,
+            CallFrame* callerFrame, int returnValueRegister, int argc, JSFunction* function)
+        {
+            ASSERT(callerFrame); // Use noCaller() rather than 0 for the outer host call frame caller.
+
+            setCodeBlock(codeBlock);
+            setScopeChain(scopeChain);
+            setCallerFrame(callerFrame);
+            this[RegisterFile::ReturnPC] = vPC;
+            this[RegisterFile::ReturnValueRegister] = returnValueRegister;
+            setArgumentCount(argc); // original argument count (for the sake of the &quot;arguments&quot; object)
+            setCallee(function);
+            setCalleeArguments(0);
+        }
+
+        static const intptr_t HostCallFrameFlag = 1;
+
+        static CallFrame* noCaller() { return reinterpret_cast&lt;CallFrame*&gt;(HostCallFrameFlag); }
+        bool hasHostCallFrameFlag() const { return reinterpret_cast&lt;intptr_t&gt;(this) &amp; HostCallFrameFlag; }
+        CallFrame* addHostCallFrameFlag() const { return reinterpret_cast&lt;CallFrame*&gt;(reinterpret_cast&lt;intptr_t&gt;(this) | HostCallFrameFlag); }
+        CallFrame* removeHostCallFrameFlag() { return reinterpret_cast&lt;CallFrame*&gt;(reinterpret_cast&lt;intptr_t&gt;(this) &amp; ~HostCallFrameFlag); }
+
</ins><span class="cx">         ExecState();
</span><span class="cx">         ~ExecState();
</span><span class="cx">     };
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsFunctionConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/FunctionConstructor.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/FunctionConstructor.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/FunctionConstructor.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">     int errLine;
</span><span class="cx">     UString errMsg;
</span><span class="cx">     SourceCode source = makeSource(body, sourceURL, lineNumber);
</span><del>-    RefPtr&lt;FunctionBodyNode&gt; functionBody = exec-&gt;parser()-&gt;parse&lt;FunctionBodyNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</del><ins>+    RefPtr&lt;FunctionBodyNode&gt; functionBody = exec-&gt;globalData().parser-&gt;parse&lt;FunctionBodyNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</ins><span class="cx"> 
</span><span class="cx">     // No program node == syntax error - throw a syntax error
</span><span class="cx">     if (!functionBody)
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsJSActivationcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/JSActivation.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/JSActivation.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/JSActivation.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -39,8 +39,8 @@
</span><span class="cx"> 
</span><span class="cx"> const ClassInfo JSActivation::info = { &quot;JSActivation&quot;, 0, 0, 0 };
</span><span class="cx"> 
</span><del>-JSActivation::JSActivation(ExecState* exec, PassRefPtr&lt;FunctionBodyNode&gt; functionBody, Register* registers)
-    : Base(exec-&gt;globalData().activationStructureID, new JSActivationData(functionBody, registers))
</del><ins>+JSActivation::JSActivation(CallFrame* callFrame, PassRefPtr&lt;FunctionBodyNode&gt; functionBody)
+    : Base(callFrame-&gt;globalData().activationStructureID, new JSActivationData(functionBody, callFrame))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -153,19 +153,20 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue* JSActivation::argumentsGetter(ExecState* exec, const Identifier&amp;, const PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    JSActivation* thisObj = static_cast&lt;JSActivation*&gt;(slot.slotBase());
</del><ins>+    JSActivation* activation = static_cast&lt;JSActivation*&gt;(slot.slotBase());
</ins><span class="cx"> 
</span><del>-    if (thisObj-&gt;d()-&gt;functionBody-&gt;usesArguments()) {
</del><ins>+    if (activation-&gt;d()-&gt;functionBody-&gt;usesArguments()) {
</ins><span class="cx">         PropertySlot slot;
</span><del>-        thisObj-&gt;symbolTableGet(exec-&gt;propertyNames().arguments, slot);
</del><ins>+        activation-&gt;symbolTableGet(exec-&gt;propertyNames().arguments, slot);
</ins><span class="cx">         return slot.getValue(exec, exec-&gt;propertyNames().arguments);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Arguments* arguments = static_cast&lt;Arguments*&gt;(thisObj-&gt;d()-&gt;registers[RegisterFile::OptionalCalleeArguments].getJSValue());
</del><ins>+    CallFrame* callFrame = CallFrame::create(activation-&gt;d()-&gt;registers);
+    Arguments* arguments = callFrame-&gt;optionalCalleeArguments();
</ins><span class="cx">     if (!arguments) {
</span><del>-        arguments = new (exec) Arguments(exec, &amp;thisObj-&gt;registerAt(0));
</del><ins>+        arguments = new (callFrame) Arguments(callFrame);
</ins><span class="cx">         arguments-&gt;copyRegisters();
</span><del>-        thisObj-&gt;d()-&gt;registers[RegisterFile::OptionalCalleeArguments] = arguments;
</del><ins>+        callFrame-&gt;setCalleeArguments(arguments);
</ins><span class="cx">     }
</span><span class="cx">     ASSERT(arguments-&gt;isObject(&amp;Arguments::info));
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsJSActivationh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/JSActivation.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/JSActivation.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/JSActivation.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">     class JSActivation : public JSVariableObject {
</span><span class="cx">         typedef JSVariableObject Base;
</span><span class="cx">     public:
</span><del>-        JSActivation(ExecState*, PassRefPtr&lt;FunctionBodyNode&gt;, Register*);
</del><ins>+        JSActivation(CallFrame*, PassRefPtr&lt;FunctionBodyNode&gt;);
</ins><span class="cx">         virtual ~JSActivation();
</span><span class="cx"> 
</span><span class="cx">         virtual void mark();
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/JSGlobalObject.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/JSGlobalObject.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/JSGlobalObject.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -129,7 +129,7 @@
</span><span class="cx">     d()-&gt;globalData = Heap::heap(this)-&gt;globalData();
</span><span class="cx">     d()-&gt;globalScopeChain = ScopeChain(this, d()-&gt;globalData.get(), thisValue);
</span><span class="cx"> 
</span><del>-    Machine::initializeCallFrame(d()-&gt;globalCallFrame + RegisterFile::CallFrameHeaderSize, 0, 0, d()-&gt;globalScopeChain.node(), makeHostCallFramePointer(0), 0, 0, 0);
</del><ins>+    JSGlobalObject::globalExec()-&gt;init(0, 0, d()-&gt;globalScopeChain.node(), CallFrame::noCaller(), 0, 0, 0);
</ins><span class="cx"> 
</span><span class="cx">     if (JSGlobalObject*&amp; headObject = head()) {
</span><span class="cx">         d()-&gt;prev = headObject;
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsJSGlobalObjectFunctionscpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/JSGlobalObjectFunctions.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/JSGlobalObjectFunctions.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/JSGlobalObjectFunctions.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -286,7 +286,7 @@
</span><span class="cx">     UString errMsg;
</span><span class="cx"> 
</span><span class="cx">     SourceCode source = makeSource(s);
</span><del>-    RefPtr&lt;EvalNode&gt; evalNode = exec-&gt;parser()-&gt;parse&lt;EvalNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</del><ins>+    RefPtr&lt;EvalNode&gt; evalNode = exec-&gt;globalData().parser-&gt;parse&lt;EvalNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</ins><span class="cx"> 
</span><span class="cx">     if (!evalNode)
</span><span class="cx">         return throwError(exec, SyntaxError, errMsg, errLine, source.provider()-&gt;asID(), NULL);
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsJSVariableObjecth"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/JSVariableObject.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/JSVariableObject.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/JSVariableObject.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -61,11 +61,11 @@
</span><span class="cx">         // without increasing their own size (since there's a hard limit on the
</span><span class="cx">         // size of a JSCell).
</span><span class="cx">         struct JSVariableObjectData {
</span><del>-            JSVariableObjectData(SymbolTable* symbolTable_, Register* registers_)
-                : symbolTable(symbolTable_)
-                , registers(registers_)
</del><ins>+            JSVariableObjectData(SymbolTable* symbolTable, Register* registers)
+                : symbolTable(symbolTable)
+                , registers(registers)
</ins><span class="cx">             {
</span><del>-                ASSERT(symbolTable_);
</del><ins>+                ASSERT(symbolTable);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             SymbolTable* symbolTable; // Maps name -&gt; offset from &quot;r&quot; in register file.
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/Parser.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/Parser.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/Parser.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     *errLine = -1;
</span><span class="cx">     *errMsg = 0;
</span><span class="cx"> 
</span><del>-    Lexer&amp; lexer = *exec-&gt;lexer();
</del><ins>+    Lexer&amp; lexer = *exec-&gt;globalData().lexer;
</ins><span class="cx">     lexer.setCode(*m_source);
</span><span class="cx"> 
</span><span class="cx">     int parseError = kjsyyparse(&amp;exec-&gt;globalData());
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsRegExpConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/RegExpConstructor.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/RegExpConstructor.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/RegExpConstructor.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -331,7 +331,7 @@
</span><span class="cx">     UString pattern = arg0-&gt;isUndefined() ? UString(&quot;&quot;) : arg0-&gt;toString(exec);
</span><span class="cx">     UString flags = arg1-&gt;isUndefined() ? UString(&quot;&quot;) : arg1-&gt;toString(exec);
</span><span class="cx"> 
</span><del>-    RefPtr&lt;RegExp&gt; regExp = RegExp::create(exec, pattern, flags);
</del><ins>+    RefPtr&lt;RegExp&gt; regExp = RegExp::create(&amp;exec-&gt;globalData(), pattern, flags);
</ins><span class="cx">     if (!regExp-&gt;isValid())
</span><span class="cx">         return throwError(exec, SyntaxError, UString(&quot;Invalid regular expression: &quot;).append(regExp-&gt;errorMessage()));
</span><span class="cx">     return new (exec) RegExpObject(exec-&gt;lexicalGlobalObject()-&gt;regExpStructure(), regExp.release());
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsRegExpPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/RegExpPrototype.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/RegExpPrototype.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/RegExpPrototype.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     } else {
</span><span class="cx">         UString pattern = args.isEmpty() ? UString(&quot;&quot;) : arg0-&gt;toString(exec);
</span><span class="cx">         UString flags = arg1-&gt;isUndefined() ? UString(&quot;&quot;) : arg1-&gt;toString(exec);
</span><del>-        regExp = RegExp::create(exec, pattern, flags);
</del><ins>+        regExp = RegExp::create(&amp;exec-&gt;globalData(), pattern, flags);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!regExp-&gt;isValid())
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsShellcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/Shell.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/Shell.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/Shell.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -305,7 +305,7 @@
</span><span class="cx"> {
</span><span class="cx">     int errLine = 0;
</span><span class="cx">     UString errMsg;
</span><del>-    RefPtr&lt;ProgramNode&gt; programNode = exec-&gt;parser()-&gt;parse&lt;ProgramNode&gt;(exec, makeSource(script.data(), fileName), &amp;errLine, &amp;errMsg);
</del><ins>+    RefPtr&lt;ProgramNode&gt; programNode = exec-&gt;globalData().parser-&gt;parse&lt;ProgramNode&gt;(exec, makeSource(script.data(), fileName), &amp;errLine, &amp;errMsg);
</ins><span class="cx">     if (!programNode) {
</span><span class="cx">         fprintf(stderr, &quot;%s:%d: %s.\n&quot;, fileName.UTF8String().c_str(), errLine, errMsg.UTF8String().c_str());
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsStringPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/StringPrototype.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/StringPrototype.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/StringPrototype.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -412,7 +412,7 @@
</span><span class="cx">          *  If regexp is not an object whose [[Class]] property is &quot;RegExp&quot;, it is
</span><span class="cx">          *  replaced with the result of the expression new RegExp(regexp).
</span><span class="cx">          */
</span><del>-        reg = RegExp::create(exec, a0-&gt;toString(exec));
</del><ins>+        reg = RegExp::create(&amp;exec-&gt;globalData(), a0-&gt;toString(exec));
</ins><span class="cx">     }
</span><span class="cx">     RegExpConstructor* regExpObj = exec-&gt;lexicalGlobalObject()-&gt;regExpConstructor();
</span><span class="cx">     int pos;
</span><span class="lines">@@ -462,7 +462,7 @@
</span><span class="cx">          *  If regexp is not an object whose [[Class]] property is &quot;RegExp&quot;, it is
</span><span class="cx">          *  replaced with the result of the expression new RegExp(regexp).
</span><span class="cx">          */
</span><del>-        reg = RegExp::create(exec, a0-&gt;toString(exec));
</del><ins>+        reg = RegExp::create(&amp;exec-&gt;globalData(), a0-&gt;toString(exec));
</ins><span class="cx">     }
</span><span class="cx">     RegExpConstructor* regExpObj = exec-&gt;lexicalGlobalObject()-&gt;regExpConstructor();
</span><span class="cx">     int pos;
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsidentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/identifier.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/identifier.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/identifier.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -240,7 +240,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Identifier::checkSameIdentifierTable(ExecState* exec, UString::Rep* rep)
</span><span class="cx"> {
</span><del>-    ASSERT(rep-&gt;identifierTable() == exec-&gt;identifierTable());
</del><ins>+    ASSERT(rep-&gt;identifierTable() == exec-&gt;globalData().identifierTable);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Identifier::checkSameIdentifierTable(JSGlobalData* globalData, UString::Rep* rep)
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsinterpretercpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/interpreter.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/interpreter.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/interpreter.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">     int errLine;
</span><span class="cx">     UString errMsg;
</span><span class="cx"> 
</span><del>-    RefPtr&lt;ProgramNode&gt; progNode = exec-&gt;parser()-&gt;parse&lt;ProgramNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</del><ins>+    RefPtr&lt;ProgramNode&gt; progNode = exec-&gt;globalData().parser-&gt;parse&lt;ProgramNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</ins><span class="cx">     if (!progNode)
</span><span class="cx">         return Completion(Throw, Error::create(exec, SyntaxError, errMsg, errLine, source.provider()-&gt;asID(), source.provider()-&gt;url()));
</span><span class="cx">     return Completion(Normal);
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">     
</span><span class="cx">     int errLine;
</span><span class="cx">     UString errMsg;
</span><del>-    RefPtr&lt;ProgramNode&gt; programNode = exec-&gt;parser()-&gt;parse&lt;ProgramNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</del><ins>+    RefPtr&lt;ProgramNode&gt; programNode = exec-&gt;globalData().parser-&gt;parse&lt;ProgramNode&gt;(exec, source, &amp;errLine, &amp;errMsg);
</ins><span class="cx"> 
</span><span class="cx">     if (!programNode)
</span><span class="cx">         return Completion(Throw, Error::create(exec, SyntaxError, errMsg, errLine, source.provider()-&gt;asID(), source.provider()-&gt;url()));
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsnodescpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/nodes.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/nodes.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/nodes.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -159,7 +159,7 @@
</span><span class="cx"> RegisterID* ThrowableExpressionData::emitThrowError(CodeGenerator&amp; generator, ErrorType e, const char* msg)
</span><span class="cx"> {
</span><span class="cx">     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
</span><del>-    RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalExec(), msg));
</del><ins>+    RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalData(), msg));
</ins><span class="cx">     generator.emitThrow(exception);
</span><span class="cx">     return exception;
</span><span class="cx"> }
</span><span class="lines">@@ -169,7 +169,7 @@
</span><span class="cx">     UString message = msg;
</span><span class="cx">     substitute(message, label.ustring());
</span><span class="cx">     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
</span><del>-    RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalExec(), message));
</del><ins>+    RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalData(), message));
</ins><span class="cx">     generator.emitThrow(exception);
</span><span class="cx">     return exception;
</span><span class="cx"> }
</span><span class="lines">@@ -238,7 +238,7 @@
</span><span class="cx"> 
</span><span class="cx"> RegisterID* RegExpNode::emitCode(CodeGenerator&amp; generator, RegisterID* dst)
</span><span class="cx"> {
</span><del>-    RefPtr&lt;RegExp&gt; regExp = RegExp::create(generator.globalExec(), m_pattern, m_flags);
</del><ins>+    RefPtr&lt;RegExp&gt; regExp = RegExp::create(generator.globalData(), m_pattern, m_flags);
</ins><span class="cx">     if (!regExp-&gt;isValid())
</span><span class="cx">         return emitThrowError(generator, SyntaxError, (&quot;Invalid regular expression: &quot; + UString(regExp-&gt;errorMessage())).UTF8String().c_str());
</span><span class="cx">     if (dst == ignoredResult())
</span><span class="lines">@@ -300,7 +300,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_elision) {
</span><del>-        RegisterID* value = generator.emitLoad(0, jsNumber(generator.globalExec(), m_elision + length));
</del><ins>+        RegisterID* value = generator.emitLoad(0, jsNumber(generator.globalData(), m_elision + length));
</ins><span class="cx">         generator.emitPutById(array.get(), generator.propertyNames().length, value);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -775,7 +775,7 @@
</span><span class="cx">     RefPtr&lt;RegisterID&gt; src2 = generator.emitNode(m_expr2.get());
</span><span class="cx"> 
</span><span class="cx">     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
</span><del>-    RegisterID* src2Prototype = generator.emitGetById(generator.newTemporary(), src2.get(), generator.globalExec()-&gt;propertyNames().prototype);
</del><ins>+    RegisterID* src2Prototype = generator.emitGetById(generator.newTemporary(), src2.get(), generator.globalData()-&gt;propertyNames-&gt;prototype);
</ins><span class="cx"> 
</span><span class="cx">     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
</span><span class="cx">     return generator.emitInstanceOf(generator.finalDestination(dst, src1.get()), src1.get(), src2.get(), src2Prototype);
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsnodesh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/nodes.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/nodes.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/nodes.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -116,26 +116,13 @@
</span><span class="cx">         PrecExpression
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    struct DeclarationStacks {
</del><ins>+    namespace DeclarationStacks {
</ins><span class="cx">         typedef Vector&lt;Node*, 16&gt; NodeStack;
</span><del>-        enum { IsConstant = 1, HasInitializer = 2 } VarAttrs;
</del><ins>+        enum VarAttrs { IsConstant = 1, HasInitializer = 2 };
</ins><span class="cx">         typedef Vector&lt;std::pair&lt;Identifier, unsigned&gt;, 16&gt; VarStack;
</span><span class="cx">         typedef Vector&lt;RefPtr&lt;FuncDeclNode&gt;, 16&gt; FunctionStack;
</span><ins>+    }
</ins><span class="cx"> 
</span><del>-        DeclarationStacks(ExecState* e, NodeStack&amp; n, VarStack&amp; v, FunctionStack&amp; f)
-            : exec(e)
-            , nodeStack(n)
-            , varStack(v)
-            , functionStack(f)
-        {
-        }
-
-        ExecState* exec;
-        NodeStack&amp; nodeStack;
-        VarStack&amp; varStack;
-        FunctionStack&amp; functionStack;
-    };
-
</del><span class="cx">     struct SwitchInfo {
</span><span class="cx">         enum SwitchType { SwitchNone, SwitchImmediate, SwitchCharacter, SwitchString };
</span><span class="cx">         uint32_t opcodeOffset;
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsregexpcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/regexp.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/regexp.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/regexp.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -32,9 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-
-
-inline RegExp::RegExp(ExecState* exec, const UString&amp; pattern)
</del><ins>+inline RegExp::RegExp(JSGlobalData* globalData, const UString&amp; pattern)
</ins><span class="cx">     : m_pattern(pattern)
</span><span class="cx">     , m_flagBits(0)
</span><span class="cx">     , m_regExp(0)
</span><span class="lines">@@ -42,22 +40,23 @@
</span><span class="cx">     , m_numSubpatterns(0)
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(WREC)
</span><del>-    if (!(m_wrecFunction = (WRECFunction)CTI::compileRegExp(exec, pattern, &amp;m_numSubpatterns, &amp;m_constructionError)))
</del><ins>+    m_wrecFunction = reinterpret_cast&lt;WRECFunction&gt;(CTI::compileRegExp(globalData-&gt;machine, pattern, &amp;m_numSubpatterns, &amp;m_constructionError));
+    if (m_wrecFunction)
+        return;
+    // Fall through to non-WREC case.
</ins><span class="cx"> #else
</span><del>-    UNUSED_PARAM(exec);
</del><ins>+    UNUSED_PARAM(globalData);
</ins><span class="cx"> #endif
</span><del>-    {
-        m_regExp = jsRegExpCompile(reinterpret_cast&lt;const UChar*&gt;(pattern.data()), pattern.size(),
-            JSRegExpDoNotIgnoreCase, JSRegExpSingleLine, &amp;m_numSubpatterns, &amp;m_constructionError);
-    }
</del><ins>+    m_regExp = jsRegExpCompile(reinterpret_cast&lt;const UChar*&gt;(pattern.data()), pattern.size(),
+        JSRegExpDoNotIgnoreCase, JSRegExpSingleLine, &amp;m_numSubpatterns, &amp;m_constructionError);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RegExp&gt; RegExp::create(ExecState* exec, const UString&amp; pattern)
</del><ins>+PassRefPtr&lt;RegExp&gt; RegExp::create(JSGlobalData* globalData, const UString&amp; pattern)
</ins><span class="cx"> {
</span><del>-    return adoptRef(new RegExp(exec, pattern));
</del><ins>+    return adoptRef(new RegExp(globalData, pattern));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline RegExp::RegExp(ExecState* exec, const UString&amp; pattern, const UString&amp; flags)
</del><ins>+inline RegExp::RegExp(JSGlobalData* globalData, const UString&amp; pattern, const UString&amp; flags)
</ins><span class="cx">     : m_pattern(pattern)
</span><span class="cx">     , m_flags(flags)
</span><span class="cx">     , m_flagBits(0)
</span><span class="lines">@@ -84,19 +83,20 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WREC)
</span><del>-    if (!(m_wrecFunction = (WRECFunction)CTI::compileRegExp(exec, pattern, &amp;m_numSubpatterns, &amp;m_constructionError, (m_flagBits &amp; IgnoreCase), (m_flagBits &amp; Multiline))))
</del><ins>+    m_wrecFunction = reinterpret_cast&lt;WRECFunction&gt;(CTI::compileRegExp(globalData-&gt;machine, pattern, &amp;m_numSubpatterns, &amp;m_constructionError, (m_flagBits &amp; IgnoreCase), (m_flagBits &amp; Multiline)));
+    if (m_wrecFunction)
+        return;
+    // Fall through to non-WREC case.
</ins><span class="cx"> #else
</span><del>-    UNUSED_PARAM(exec);
</del><ins>+    UNUSED_PARAM(globalData);
</ins><span class="cx"> #endif
</span><del>-    {
-        m_regExp = jsRegExpCompile(reinterpret_cast&lt;const UChar*&gt;(pattern.data()), pattern.size(),
-            ignoreCaseOption, multilineOption, &amp;m_numSubpatterns, &amp;m_constructionError);
-    }
</del><ins>+    m_regExp = jsRegExpCompile(reinterpret_cast&lt;const UChar*&gt;(pattern.data()), pattern.size(),
+        ignoreCaseOption, multilineOption, &amp;m_numSubpatterns, &amp;m_constructionError);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RegExp&gt; RegExp::create(ExecState* exec, const UString&amp; pattern, const UString&amp; flags)
</del><ins>+PassRefPtr&lt;RegExp&gt; RegExp::create(JSGlobalData* globalData, const UString&amp; pattern, const UString&amp; flags)
</ins><span class="cx"> {
</span><del>-    return adoptRef(new RegExp(exec, pattern, flags));
</del><ins>+    return adoptRef(new RegExp(globalData, pattern, flags));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RegExp::~RegExp()
</span></span></pre></div>
<a id="trunkJavaScriptCorekjsregexph"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/kjs/regexp.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/kjs/regexp.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/kjs/regexp.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -22,7 +22,6 @@
</span><span class="cx"> #define KJS_REGEXP_H
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ustring.h&quot;
</span><del>-#include &quot;ExecState.h&quot;
</del><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wrec/WREC.h&gt;
</span><span class="lines">@@ -31,10 +30,12 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><ins>+    class JSGlobalData;
+
</ins><span class="cx">     class RegExp : public RefCounted&lt;RegExp&gt; {
</span><span class="cx">     public:
</span><del>-        static PassRefPtr&lt;RegExp&gt; create(ExecState*, const UString&amp; pattern);
-        static PassRefPtr&lt;RegExp&gt; create(ExecState*, const UString&amp; pattern, const UString&amp; flags);
</del><ins>+        static PassRefPtr&lt;RegExp&gt; create(JSGlobalData*, const UString&amp; pattern);
+        static PassRefPtr&lt;RegExp&gt; create(JSGlobalData*, const UString&amp; pattern, const UString&amp; flags);
</ins><span class="cx">         ~RegExp();
</span><span class="cx"> 
</span><span class="cx">         bool global() const { return m_flagBits &amp; Global; }
</span><span class="lines">@@ -51,8 +52,8 @@
</span><span class="cx">         unsigned numSubpatterns() const { return m_numSubpatterns; }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        RegExp(ExecState*, const UString&amp; pattern);
-        RegExp(ExecState*, const UString&amp; pattern, const UString&amp; flags);
</del><ins>+        RegExp(JSGlobalData*, const UString&amp; pattern);
+        RegExp(JSGlobalData*, const UString&amp; pattern, const UString&amp; flags);
</ins><span class="cx"> 
</span><span class="cx">         void compile();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkJavaScriptCoreprofilerHeavyProfileh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/profiler/HeavyProfile.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/profiler/HeavyProfile.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/profiler/HeavyProfile.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-    class ExecState;
</del><span class="cx">     class UString;
</span><span class="cx"> 
</span><span class="cx">     class HeavyProfile : public Profile {
</span></span></pre></div>
<a id="trunkJavaScriptCoreprofilerProfileh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/profiler/Profile.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/profiler/Profile.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/profiler/Profile.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -33,8 +33,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-    class ExecState;
-
</del><span class="cx">     class Profile : public RefCounted&lt;Profile&gt; {
</span><span class="cx">     public:
</span><span class="cx">         static PassRefPtr&lt;Profile&gt; create(const UString&amp; title, unsigned uid);
</span></span></pre></div>
<a id="trunkJavaScriptCorewrecWRECcpp"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/wrec/WREC.cpp (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/wrec/WREC.cpp        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/wrec/WREC.cpp        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #if ENABLE(WREC)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CharacterClassConstructor.h&quot;
</span><del>-#include &quot;ExecState.h&quot;
</del><span class="cx"> #include &quot;Machine.h&quot;
</span><span class="cx"> #include &quot;pcre_internal.h&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkJavaScriptCorewrecWRECh"></a>
<div class="modfile"><h4>Modified: trunk/JavaScriptCore/wrec/WREC.h (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JavaScriptCore/wrec/WREC.h        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/JavaScriptCore/wrec/WREC.h        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> 
</span><span class="cx">     typedef int (*WRECFunction)(const UChar* input, unsigned start, unsigned length, int* output) WREC_CALL;
</span><span class="cx"> 
</span><del>-    class ExecState;
</del><span class="cx">     class GenerateAtomFunctor;
</span><span class="cx">     struct CharacterClassRange;
</span><span class="cx">     struct CharacterClass;
</span></span></pre></div>
<a id="trunkWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/ChangeLog (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/ChangeLog        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/WebKit/mac/ChangeLog        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2008-10-08  Darin Adler  &lt;darin@apple.com&gt;
+
+        Reviewed by Cameron Zwarich.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=21403
+          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation
+
+        * WebView/WebScriptDebugger.mm:
+        (WebScriptDebugger::WebScriptDebugger): Update since DebuggerCallFrame is simpler now.
+
</ins><span class="cx"> 2008-10-08  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Roll out r37427 because it causes an infinite recursion loading about:blank.
</span></span></pre></div>
<a id="trunkWebKitmacWebViewWebScriptDebuggermm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/WebView/WebScriptDebugger.mm (37432 => 37433)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/WebView/WebScriptDebugger.mm        2008-10-09 00:14:50 UTC (rev 37432)
+++ trunk/WebKit/mac/WebView/WebScriptDebugger.mm        2008-10-09 00:40:43 UTC (rev 37433)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     : m_callingDelegate(false)
</span><span class="cx"> {
</span><span class="cx">     attach(globalObject);
</span><del>-    DebuggerCallFrame globalCallFrame(globalObject, 0, globalObject-&gt;globalScopeChain().node(), 0, 0);
</del><ins>+    DebuggerCallFrame globalCallFrame(globalObject-&gt;globalExec(), 0);
</ins><span class="cx">     callEvent(globalCallFrame, 0, -1);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>