1 // -*- mode: c++; c-basic-offset: 4 -*- 
   3  * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 
   5  * Redistribution and use in source and binary forms, with or without 
   6  * modification, are permitted provided that the following conditions 
   8  * 1. Redistributions of source code must retain the above copyright 
   9  *    notice, this list of conditions and the following disclaimer. 
  10  * 2. Redistributions in binary form must reproduce the above copyright 
  11  *    notice, this list of conditions and the following disclaimer in the 
  12  *    documentation and/or other materials provided with the distribution. 
  14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 
  15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR 
  18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
  22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
  24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
  28 #include "JSCallbackConstructor.h" 
  31 #include <kjs/JSGlobalObject.h> 
  32 #include <kjs/object_object.h> 
  33 #include <wtf/Vector.h> 
  37 const ClassInfo 
JSCallbackConstructor::info 
= { "CallbackConstructor", 0, 0}; 
  39 JSCallbackConstructor::JSCallbackConstructor(ExecState
* exec
, JSClassRef jsClass
, JSObjectCallAsConstructorCallback callback
) 
  40     : JSObject(exec
->lexicalGlobalObject()->objectPrototype()) 
  42     , m_callback(callback
) 
  45         JSClassRetain(jsClass
); 
  48 JSCallbackConstructor::~JSCallbackConstructor() 
  51         JSClassRelease(m_class
); 
  54 bool JSCallbackConstructor::implementsHasInstance() const 
  59 bool JSCallbackConstructor::implementsConstruct() const 
  64 JSObject
* JSCallbackConstructor::construct(ExecState
* exec
, const List 
&args
) 
  66     JSContextRef ctx 
= toRef(exec
); 
  67     JSObjectRef thisRef 
= toRef(this); 
  70         int argumentCount 
= static_cast<int>(args
.size()); 
  71         Vector
<JSValueRef
, 16> arguments(argumentCount
); 
  72         for (int i 
= 0; i 
< argumentCount
; i
++) 
  73             arguments
[i
] = toRef(args
[i
]); 
  75         JSLock::DropAllLocks dropAllLocks
; 
  76         return toJS(m_callback(ctx
, thisRef
, argumentCount
, arguments
.data(), toRef(exec
->exceptionSlot()))); 
  79     return toJS(JSObjectMake(ctx
, m_class
, 0));