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;