Changeset 60117 in webkit for trunk/JavaScriptCore/runtime


Ignore:
Timestamp:
May 24, 2010, 8:04:43 PM (15 years ago)
Author:
[email protected]
Message:

Relanding r60075.

Reviewed by Sam Weinig.

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::dump):
(JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):

  • bytecode/CodeBlock.h:
  • bytecode/Opcode.h:
  • bytecompiler/BytecodeGenerator.cpp:

(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::emitConstruct):

  • bytecompiler/BytecodeGenerator.h:

(JSC::BytecodeGenerator::emitGetByIdExceptionInfo):

  • interpreter/Interpreter.cpp:

(JSC::Interpreter::privateExecute):

  • jit/JIT.cpp:

(JSC::JIT::privateCompileMainPass):

  • jit/JIT.h:
  • jit/JITCall.cpp:

(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):

  • jit/JITCall32_64.cpp:

(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):

  • jit/JITOpcodes.cpp:

(JSC::JIT::privateCompileCTIMachineTrampolines):
(JSC::JIT::privateCompileCTINativeCall):
(JSC::JIT::emit_op_neq_null):
(JSC::JIT::emit_op_convert_this):
(JSC::JIT::emit_op_get_callee):
(JSC::JIT::emit_op_create_this):

  • jit/JITOpcodes32_64.cpp:

(JSC::JIT::privateCompileCTIMachineTrampolines):
(JSC::JIT::privateCompileCTINativeCall):
(JSC::JIT::emit_op_get_callee):
(JSC::JIT::emit_op_create_this):

  • jit/JITStubs.cpp:

(JSC::DEFINE_STUB_FUNCTION):
(JSC::JITThunks::hostFunctionStub):

  • jit/JITStubs.h:

(JSC::JITThunks::ctiNativeConstruct):
(JSC::):

  • runtime/ExceptionHelpers.cpp:

(JSC::createNotAnObjectError):

  • runtime/Executable.h:

(JSC::NativeExecutable::create):
(JSC::NativeExecutable::NativeExecutable):

  • runtime/JSFunction.cpp:

(JSC::callHostFunctionAsConstructor):

  • runtime/JSFunction.h:
  • wtf/Platform.h:
Location:
trunk/JavaScriptCore/runtime
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/ExceptionHelpers.cpp

    r60105 r60117  
    183183JSObject* createNotAnObjectError(ExecState* exec, JSNotAnObjectErrorStub* error, unsigned bytecodeOffset, CodeBlock* codeBlock)
    184184{
    185     // Both op_construct and op_instanceof require a use of op_get_by_id to get
     185    // Both op_create_this and op_instanceof require a use of op_get_by_id to get
    186186    // the prototype property from an object. The exception messages for exceptions
    187187    // thrown by these instances op_get_by_id need to reflect this.
    188188    OpcodeID followingOpcodeID;
    189189    if (codeBlock->getByIdExceptionInfoForBytecodeOffset(exec, bytecodeOffset, followingOpcodeID)) {
    190         ASSERT(followingOpcodeID == op_construct || followingOpcodeID == op_instanceof);
    191         if (followingOpcodeID == op_construct)
     190        ASSERT(followingOpcodeID == op_create_this || followingOpcodeID == op_instanceof);
     191        if (followingOpcodeID == op_create_this)
    192192            return createNotAConstructorError(exec, error->isNull() ? jsNull() : jsUndefined(), bytecodeOffset, codeBlock);
    193193        return createInvalidParamError(exec, "instanceof", error->isNull() ? jsNull() : jsUndefined(), bytecodeOffset, codeBlock);
  • trunk/JavaScriptCore/runtime/Executable.h

    r60105 r60117  
    9494        friend class JIT;
    9595    public:
    96         static PassRefPtr<NativeExecutable> create(MacroAssemblerCodePtr thunk, NativeFunction function)
    97         {
    98             return adoptRef(new NativeExecutable(JITCode::HostFunction(thunk), function));
     96        static PassRefPtr<NativeExecutable> create(MacroAssemblerCodePtr callThunk, NativeFunction function, MacroAssemblerCodePtr constructThunk, NativeFunction constructor)
     97        {
     98            return adoptRef(new NativeExecutable(JITCode::HostFunction(callThunk), function, JITCode::HostFunction(constructThunk), constructor));
    9999        }
    100100
     
    104104
    105105    private:
    106         NativeExecutable(JITCode thunk, NativeFunction function)
     106        NativeExecutable(JITCode callThunk, NativeFunction function, JITCode constructThunk, NativeFunction constructor)
    107107            : ExecutableBase(NUM_PARAMETERS_IS_HOST)
    108108            , m_function(function)
    109         {
    110             m_jitCodeForCall = thunk;
    111             m_jitCodeForConstruct = thunk;
     109            , m_constructor(constructor)
     110        {
     111            m_jitCodeForCall = callThunk;
     112            m_jitCodeForConstruct = constructThunk;
    112113        }
    113114
    114115        NativeFunction m_function;
     116        // Probably should be a NativeConstructor, but this will currently require rewriting the JIT
     117        // trampoline. It may be easier to make NativeFunction be passed 'this' as a part of the ArgList.
     118        NativeFunction m_constructor;
    115119    };
    116120#endif
  • trunk/JavaScriptCore/runtime/JSFunction.cpp

    r60105 r60117  
    2929#include "CommonIdentifiers.h"
    3030#include "CallFrame.h"
     31#include "ExceptionHelpers.h"
    3132#include "FunctionPrototype.h"
    3233#include "JSGlobalObject.h"
     
    4142
    4243namespace JSC {
     44
     45JSValue JSC_HOST_CALL callHostFunctionAsConstructor(ExecState* exec, JSObject* constructor, JSValue, const ArgList&)
     46{
     47    CodeBlock* codeBlock = exec->callerFrame()->codeBlock();
     48    unsigned vPCIndex = codeBlock->bytecodeOffset(exec, exec->returnPC());
     49    exec->setException(createNotAConstructorError(exec, constructor, vPCIndex, codeBlock));
     50    return JSValue();
     51}
    4352
    4453ASSERT_CLASS_FITS_IN_CELL(JSFunction);
  • trunk/JavaScriptCore/runtime/JSFunction.h

    r60105 r60117  
    3535    class JSGlobalObject;
    3636    class NativeExecutable;
     37
     38    JSValue JSC_HOST_CALL callHostFunctionAsConstructor(ExecState*, JSObject*, JSValue, const ArgList&);
    3739
    3840    class JSFunction : public JSObjectWithGlobalObject {
Note: See TracChangeset for help on using the changeset viewer.