Skip to content

Commit 65f2500

Browse files
committed
Virgin JSC+WTF from Safari 6.0.2 Release
0 parents  commit 65f2500

File tree

2,282 files changed

+711829
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,282 files changed

+711829
-0
lines changed

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Xcode
2+
.DS_Store
3+
build/
4+
*.pbxuser
5+
!default.pbxuser
6+
*.mode1v3
7+
!default.mode1v3
8+
*.mode2v3
9+
!default.mode2v3
10+
*.perspectivev3
11+
!default.perspectivev3
12+
*.xcworkspace
13+
!default.xcworkspace
14+
xcuserdata
15+
profile
16+
*.moved-aside
17+
DerivedData
18+
.idea/
19+
.svn*

JavaScriptCore/API/APICast.h

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/*
2+
* Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
* 1. Redistributions of source code must retain the above copyright
8+
* notice, this list of conditions and the following disclaimer.
9+
* 2. Redistributions in binary form must reproduce the above copyright
10+
* notice, this list of conditions and the following disclaimer in the
11+
* documentation and/or other materials provided with the distribution.
12+
*
13+
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21+
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24+
*/
25+
26+
#ifndef APICast_h
27+
#define APICast_h
28+
29+
#include "JSAPIValueWrapper.h"
30+
#include "JSGlobalObject.h"
31+
#include "JSValue.h"
32+
#include <wtf/UnusedParam.h>
33+
34+
namespace JSC {
35+
class ExecState;
36+
class PropertyNameArray;
37+
class JSGlobalData;
38+
class JSObject;
39+
class JSValue;
40+
}
41+
42+
typedef const struct OpaqueJSContextGroup* JSContextGroupRef;
43+
typedef const struct OpaqueJSContext* JSContextRef;
44+
typedef struct OpaqueJSContext* JSGlobalContextRef;
45+
typedef struct OpaqueJSPropertyNameAccumulator* JSPropertyNameAccumulatorRef;
46+
typedef const struct OpaqueJSValue* JSValueRef;
47+
typedef struct OpaqueJSValue* JSObjectRef;
48+
49+
/* Opaque typing convenience methods */
50+
51+
inline JSC::ExecState* toJS(JSContextRef c)
52+
{
53+
ASSERT(c);
54+
return reinterpret_cast<JSC::ExecState*>(const_cast<OpaqueJSContext*>(c));
55+
}
56+
57+
inline JSC::ExecState* toJS(JSGlobalContextRef c)
58+
{
59+
ASSERT(c);
60+
return reinterpret_cast<JSC::ExecState*>(c);
61+
}
62+
63+
inline JSC::JSValue toJS(JSC::ExecState* exec, JSValueRef v)
64+
{
65+
ASSERT_UNUSED(exec, exec);
66+
ASSERT(v);
67+
#if USE(JSVALUE32_64)
68+
JSC::JSCell* jsCell = reinterpret_cast<JSC::JSCell*>(const_cast<OpaqueJSValue*>(v));
69+
if (!jsCell)
70+
return JSC::JSValue();
71+
if (jsCell->isAPIValueWrapper())
72+
return JSC::jsCast<JSC::JSAPIValueWrapper*>(jsCell)->value();
73+
return jsCell;
74+
#else
75+
return JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(const_cast<OpaqueJSValue*>(v)));
76+
#endif
77+
}
78+
79+
inline JSC::JSValue toJSForGC(JSC::ExecState* exec, JSValueRef v)
80+
{
81+
ASSERT_UNUSED(exec, exec);
82+
ASSERT(v);
83+
#if USE(JSVALUE32_64)
84+
JSC::JSCell* jsCell = reinterpret_cast<JSC::JSCell*>(const_cast<OpaqueJSValue*>(v));
85+
if (!jsCell)
86+
return JSC::JSValue();
87+
return jsCell;
88+
#else
89+
return JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(const_cast<OpaqueJSValue*>(v)));
90+
#endif
91+
}
92+
93+
inline JSC::JSObject* toJS(JSObjectRef o)
94+
{
95+
return reinterpret_cast<JSC::JSObject*>(o);
96+
}
97+
98+
inline JSC::PropertyNameArray* toJS(JSPropertyNameAccumulatorRef a)
99+
{
100+
return reinterpret_cast<JSC::PropertyNameArray*>(a);
101+
}
102+
103+
inline JSC::JSGlobalData* toJS(JSContextGroupRef g)
104+
{
105+
return reinterpret_cast<JSC::JSGlobalData*>(const_cast<OpaqueJSContextGroup*>(g));
106+
}
107+
108+
inline JSValueRef toRef(JSC::ExecState* exec, JSC::JSValue v)
109+
{
110+
#if USE(JSVALUE32_64)
111+
if (!v)
112+
return 0;
113+
if (!v.isCell())
114+
return reinterpret_cast<JSValueRef>(JSC::jsAPIValueWrapper(exec, v).asCell());
115+
return reinterpret_cast<JSValueRef>(v.asCell());
116+
#else
117+
UNUSED_PARAM(exec);
118+
return reinterpret_cast<JSValueRef>(JSC::JSValue::encode(v));
119+
#endif
120+
}
121+
122+
inline JSObjectRef toRef(JSC::JSObject* o)
123+
{
124+
return reinterpret_cast<JSObjectRef>(o);
125+
}
126+
127+
inline JSObjectRef toRef(const JSC::JSObject* o)
128+
{
129+
return reinterpret_cast<JSObjectRef>(const_cast<JSC::JSObject*>(o));
130+
}
131+
132+
inline JSContextRef toRef(JSC::ExecState* e)
133+
{
134+
return reinterpret_cast<JSContextRef>(e);
135+
}
136+
137+
inline JSGlobalContextRef toGlobalRef(JSC::ExecState* e)
138+
{
139+
ASSERT(e == e->lexicalGlobalObject()->globalExec());
140+
return reinterpret_cast<JSGlobalContextRef>(e);
141+
}
142+
143+
inline JSPropertyNameAccumulatorRef toRef(JSC::PropertyNameArray* l)
144+
{
145+
return reinterpret_cast<JSPropertyNameAccumulatorRef>(l);
146+
}
147+
148+
inline JSContextGroupRef toRef(JSC::JSGlobalData* g)
149+
{
150+
return reinterpret_cast<JSContextGroupRef>(g);
151+
}
152+
153+
#endif // APICast_h

JavaScriptCore/API/APIShims.h

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
/*
2+
* Copyright (C) 2009 Apple Inc. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
* 1. Redistributions of source code must retain the above copyright
8+
* notice, this list of conditions and the following disclaimer.
9+
* 2. Redistributions in binary form must reproduce the above copyright
10+
* notice, this list of conditions and the following disclaimer in the
11+
* documentation and/or other materials provided with the distribution.
12+
*
13+
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21+
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24+
*/
25+
26+
#ifndef APIShims_h
27+
#define APIShims_h
28+
29+
#include "CallFrame.h"
30+
#include "GCActivityCallback.h"
31+
#include "JSLock.h"
32+
#include <wtf/WTFThreadData.h>
33+
34+
namespace JSC {
35+
36+
class APIEntryShimWithoutLock {
37+
public:
38+
enum RefGlobalDataTag { DontRefGlobalData = 0, RefGlobalData };
39+
40+
protected:
41+
APIEntryShimWithoutLock(JSGlobalData* globalData, bool registerThread, RefGlobalDataTag shouldRefGlobalData)
42+
: m_shouldRefGlobalData(shouldRefGlobalData)
43+
, m_globalData(globalData)
44+
, m_entryIdentifierTable(wtfThreadData().setCurrentIdentifierTable(globalData->identifierTable))
45+
{
46+
if (shouldRefGlobalData)
47+
m_globalData->ref();
48+
UNUSED_PARAM(registerThread);
49+
if (registerThread)
50+
globalData->heap.machineThreads().addCurrentThread();
51+
m_globalData->heap.activityCallback()->synchronize();
52+
}
53+
54+
~APIEntryShimWithoutLock()
55+
{
56+
wtfThreadData().setCurrentIdentifierTable(m_entryIdentifierTable);
57+
if (m_shouldRefGlobalData)
58+
m_globalData->deref();
59+
}
60+
61+
protected:
62+
RefGlobalDataTag m_shouldRefGlobalData;
63+
JSGlobalData* m_globalData;
64+
IdentifierTable* m_entryIdentifierTable;
65+
};
66+
67+
class APIEntryShim : public APIEntryShimWithoutLock {
68+
public:
69+
// Normal API entry
70+
APIEntryShim(ExecState* exec, bool registerThread = true)
71+
: APIEntryShimWithoutLock(&exec->globalData(), registerThread, RefGlobalData)
72+
{
73+
init();
74+
}
75+
76+
// This constructor is necessary for HeapTimer to prevent it from accidentally resurrecting
77+
// the ref count of a "dead" JSGlobalData.
78+
APIEntryShim(JSGlobalData* globalData, RefGlobalDataTag refGlobalData, bool registerThread = true)
79+
: APIEntryShimWithoutLock(globalData, registerThread, refGlobalData)
80+
{
81+
init();
82+
}
83+
84+
// JSPropertyNameAccumulator only has a globalData.
85+
APIEntryShim(JSGlobalData* globalData, bool registerThread = true)
86+
: APIEntryShimWithoutLock(globalData, registerThread, RefGlobalData)
87+
{
88+
init();
89+
}
90+
91+
~APIEntryShim()
92+
{
93+
m_globalData->timeoutChecker.stop();
94+
m_globalData->apiLock().unlock();
95+
}
96+
97+
private:
98+
void init()
99+
{
100+
m_globalData->apiLock().lock();
101+
m_globalData->timeoutChecker.start();
102+
}
103+
};
104+
105+
class APICallbackShim {
106+
public:
107+
APICallbackShim(ExecState* exec)
108+
: m_dropAllLocks(exec)
109+
, m_globalData(&exec->globalData())
110+
{
111+
wtfThreadData().resetCurrentIdentifierTable();
112+
}
113+
114+
~APICallbackShim()
115+
{
116+
wtfThreadData().setCurrentIdentifierTable(m_globalData->identifierTable);
117+
}
118+
119+
private:
120+
JSLock::DropAllLocks m_dropAllLocks;
121+
JSGlobalData* m_globalData;
122+
};
123+
124+
}
125+
126+
#endif

0 commit comments

Comments
 (0)