JavaScriptCore:

2008-10-08  Darin Adler  <darin@apple.com>

        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  <darin@apple.com>

        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.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37433 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/VM/CTI.h b/JavaScriptCore/VM/CTI.h
index d27a88e..165b468 100644
--- a/JavaScriptCore/VM/CTI.h
+++ b/JavaScriptCore/VM/CTI.h
@@ -47,19 +47,17 @@
 
 #define CTI_ARGS_code 0x0C
 #define CTI_ARGS_registerFile 0x0D
-#define CTI_ARGS_r 0x0E
+#define CTI_ARGS_callFrame 0x0E
 #define CTI_ARGS_exception 0x0F
 #define CTI_ARGS_profilerReference 0x10
 #define CTI_ARGS_globalData 0x11
 #define ARG_registerFile ((RegisterFile*)(ARGS)[CTI_ARGS_registerFile])
-#define ARG_r ((Register*)(ARGS)[CTI_ARGS_r])
+#define ARG_callFrame ((CallFrame*)(ARGS)[CTI_ARGS_callFrame])
 #define ARG_exception ((JSValue**)(ARGS)[CTI_ARGS_exception])
 #define ARG_profilerReference ((Profiler**)(ARGS)[CTI_ARGS_profilerReference])
 #define ARG_globalData ((JSGlobalData*)(ARGS)[CTI_ARGS_globalData])
 
-#define ARG_exec CallFrame::create(ARG_r)
-
-#define ARG_setR(newR) (*(Register**)&(ARGS)[CTI_ARGS_r] = newR)
+#define ARG_setCallFrame(newCallFrame) (*(CallFrame**)&(ARGS)[CTI_ARGS_callFrame] = (newCallFrame))
 
 #define ARG_src1 ((JSValue*)((ARGS)[1]))
 #define ARG_src2 ((JSValue*)((ARGS)[2]))
@@ -92,7 +90,6 @@
 namespace JSC {
 
     class CodeBlock;
-    class ExecState;
     class JSPropertyNameIterator;
     class JSValue;
     class Machine;
@@ -249,7 +246,7 @@
     };
 
     extern "C" {
-        JSValue* ctiTrampoline(void* code, RegisterFile*, Register* callFrame, JSValue** exception, Profiler**, JSGlobalData*);
+        JSValue* ctiTrampoline(void* code, RegisterFile*, CallFrame*, JSValue** exception, Profiler**, JSGlobalData*);
         void ctiVMThrowTrampoline();
     };
 
@@ -283,77 +280,77 @@
 #endif
 
     public:
-        static void compile(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
+        static void compile(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             cti.privateCompile();
         }
 
 #if ENABLE(WREC)
-        static void* compileRegExp(ExecState* exec, const UString& pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase = false, bool multiline = false);
+        static void* compileRegExp(Machine*, const UString& pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase = false, bool multiline = false);
 #endif
 
-        static void compileGetByIdSelf(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
+        static void compileGetByIdSelf(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             cti.privateCompileGetByIdSelf(structureID, cachedOffset, returnAddress);
         }
 
-        static void compileGetByIdProto(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, StructureID* prototypeStructureID, size_t cachedOffset, void* returnAddress)
+        static void compileGetByIdProto(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, StructureID* prototypeStructureID, size_t cachedOffset, void* returnAddress)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             cti.privateCompileGetByIdProto(structureID, prototypeStructureID, cachedOffset, returnAddress);
         }
 
-        static void compileGetByIdChain(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, StructureIDChain* chain, size_t count, size_t cachedOffset, void* returnAddress)
+        static void compileGetByIdChain(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, StructureIDChain* chain, size_t count, size_t cachedOffset, void* returnAddress)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             cti.privateCompileGetByIdChain(structureID, chain, count, cachedOffset, returnAddress);
         }
 
-        static void compilePutByIdReplace(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
+        static void compilePutByIdReplace(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             cti.privateCompilePutByIdReplace(structureID, cachedOffset, returnAddress);
         }
         
-        static void compilePutByIdTransition(Machine* machine, ExecState* exec, CodeBlock* codeBlock, StructureID* oldStructureID, StructureID* newStructureID, size_t cachedOffset, StructureIDChain* sIDC, void* returnAddress)
+        static void compilePutByIdTransition(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, StructureID* oldStructureID, StructureID* newStructureID, size_t cachedOffset, StructureIDChain* sIDC, void* returnAddress)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             cti.privateCompilePutByIdTransition(oldStructureID, newStructureID, cachedOffset, sIDC, returnAddress);
         }
 
-        static void* compileArrayLengthTrampoline(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
+        static void* compileArrayLengthTrampoline(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             return cti.privateCompileArrayLengthTrampoline();
         }
 
-        static void* compileStringLengthTrampoline(Machine* machine, ExecState* exec, CodeBlock* codeBlock)
+        static void* compileStringLengthTrampoline(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             return cti.privateCompileStringLengthTrampoline();
         }
 
         static void patchGetByIdSelf(CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress);
         static void patchPutByIdReplace(CodeBlock* codeBlock, StructureID* structureID, size_t cachedOffset, void* returnAddress);
 
-        static void compilePatchGetArrayLength(Machine* machine, ExecState* exec, CodeBlock* codeBlock, void* returnAddress)
+        static void compilePatchGetArrayLength(Machine* machine, CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress)
         {
-            CTI cti(machine, exec, codeBlock);
+            CTI cti(machine, callFrame, codeBlock);
             return cti.privateCompilePatchGetArrayLength(returnAddress);
         }
 
-        inline static JSValue* execute(void* code, RegisterFile* registerFile, Register* r, JSGlobalData* globalData, JSValue** exception)
+        inline static JSValue* execute(void* code, RegisterFile* registerFile, CallFrame* callFrame, JSGlobalData* globalData, JSValue** exception)
         {
-            return ctiTrampoline(code, registerFile, r, exception, Profiler::enabledProfilerReference(), globalData);
+            return ctiTrampoline(code, registerFile, callFrame, exception, Profiler::enabledProfilerReference(), globalData);
         }
 
     private:
-        CTI(Machine*, ExecState*, CodeBlock*);
+        CTI(Machine*, CallFrame*, CodeBlock*);
         
         bool isConstant(int src);
-        JSValue* getConstant(ExecState*, int src);
+        JSValue* getConstant(CallFrame*, int src);
 
         void privateCompileMainPass();
         void privateCompileLinkPass();
@@ -429,7 +426,7 @@
 
         X86Assembler m_jit;
         Machine* m_machine;
-        ExecState* m_exec;
+        CallFrame* m_callFrame;
         CodeBlock* m_codeBlock;
 
         Vector<CallRecord> m_calls;