]> git.saurik.com Git - apple/javascriptcore.git/blame - API/JSCallbackObject.h
JavaScriptCore-461.tar.gz
[apple/javascriptcore.git] / API / JSCallbackObject.h
CommitLineData
b37bf2e1
A
1// -*- mode: c++; c-basic-offset: 4 -*-
2/*
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef JSCallbackObject_h
29#define JSCallbackObject_h
30
31#include "JSObjectRef.h"
32#include "JSValueRef.h"
33#include "object.h"
34
35namespace KJS {
36
37template <class Base>
38class JSCallbackObject : public Base
39{
40public:
41 JSCallbackObject(ExecState*, JSClassRef, JSValue* prototype, void* data);
42 JSCallbackObject(JSClassRef);
43 virtual ~JSCallbackObject();
44
45 virtual UString className() const;
46
47 virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
48 virtual bool getOwnPropertySlot(ExecState*, unsigned, PropertySlot&);
49
50 virtual void put(ExecState*, const Identifier&, JSValue*, int attr);
51 virtual void put(ExecState*, unsigned, JSValue*, int attr);
52
53 virtual bool deleteProperty(ExecState*, const Identifier&);
54 virtual bool deleteProperty(ExecState*, unsigned);
55
56 virtual bool implementsConstruct() const;
57 virtual JSObject* construct(ExecState*, const List& args);
58
59 virtual bool implementsHasInstance() const;
60 virtual bool hasInstance(ExecState *exec, JSValue *value);
61
62 virtual bool implementsCall() const;
63 virtual JSValue* callAsFunction(ExecState*, JSObject* thisObj, const List &args);
64
65 virtual void getPropertyNames(ExecState*, PropertyNameArray&);
66
67 virtual double toNumber(ExecState*) const;
68 virtual UString toString(ExecState*) const;
69
70 void setPrivate(void* data);
71 void* getPrivate();
72
73 virtual const ClassInfo *classInfo() const { return &info; }
74 static const ClassInfo info;
75
76 bool inherits(JSClassRef) const;
77
78private:
79 void init(ExecState*);
80
81 static JSValue* cachedValueGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
82 static JSValue* staticValueGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot& slot);
83 static JSValue* staticFunctionGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot& slot);
84 static JSValue* callbackGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
85
86 void* m_privateData;
87 JSClassRef m_class;
88};
89
90} // namespace KJS
91
92// include the actual template class implementation
93#include "JSCallbackObjectFunctions.h"
94
95#endif // JSCallbackObject_h