source: webkit/trunk/JavaScriptCore/API/JSCallbackObject.h@ 28907

Last change on this file since 28907 was 28468, checked in by [email protected], 17 years ago

JavaScriptCore:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and
functions accessing data members from Interpreter to JSGlobalObject.
Changed Interpreter member functions to static functions.


This resolves a bug in global object bootstrapping, where the global
ExecState could be used when uninitialized.


This is a big change, but it's mostly code motion and renaming.


Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
a .7% regression, but Shark sees no difference related to this patch,
and SunSpider reported a .7% speedup from an earlier step in this
refactoring, so I think it's fair to call that a wash.

JavaScriptGlue:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject. Replaced JSInterpreter
subclass with JSGlobalObject subclass.


  • JSRun.cpp: (JSRun::JSRun): (JSRun::Evaluate): (JSRun::CheckSyntax):
  • JSRun.h: (JSGlueGlobalObject::JSGlueGlobalObject):
  • JSUtils.cpp: (KJSValueToCFTypeInternal):
  • JSValueWrapper.cpp: (getThreadGlobalExecState):

WebCore:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject. Changed Interpreter
member functions to static functions. Same for the subclass,
ScriptInterpreter.


This is a big change, but it's mostly code motion and renaming.

WebKit/mac:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject.


  • WebView/WebFrame.mm: (-[WebFrame _attachScriptDebugger]):

WebKit/win:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject.


  • WebFrame.cpp: (WebFrame::globalContext): (WebFrame::attachScriptDebugger): (WebFrame::windowObjectCleared):
  • WebScriptDebugger.cpp: (WebScriptDebugger::WebScriptDebugger):
File size: 3.6 KB
Line 
1// -*- mode: c++; c-basic-offset: 4 -*-
2/*
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 * Copyright (C) 2007 Eric Seidel <[email protected]>
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
Note: See TracBrowser for help on using the repository browser.