summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/JavaScriptCore/runtime
diff options
context:
space:
mode:
authorJanne Anttila <janne.anttila@digia.com>2009-09-07 09:55:37 (GMT)
committerJanne Anttila <janne.anttila@digia.com>2009-09-07 09:55:37 (GMT)
commitf27ed1a26d0b68594f13f79be4806b40e489ce14 (patch)
tree1c58a8a813c9f398a36098b6517eadbe2f47498c /src/3rdparty/webkit/JavaScriptCore/runtime
parent1cac9a68bab207cab3fd3790baec4569a0acd385 (diff)
parent6b7330ee075a62138f005492a6448059106554af (diff)
downloadQt-f27ed1a26d0b68594f13f79be4806b40e489ce14.zip
Qt-f27ed1a26d0b68594f13f79be4806b40e489ce14.tar.gz
Qt-f27ed1a26d0b68594f13f79be4806b40e489ce14.tar.bz2
Merge branch '4.6' of git@scm.dev.troll.no:qt/qt into 4.6
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/runtime')
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp57
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Protect.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp8
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Structure.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp6
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h2
8 files changed, 72 insertions, 7 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
index dddd83d..1268d3d 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
@@ -506,6 +506,49 @@ static void* getStackBase(void* previousFrame)
}
}
#endif
+#if PLATFORM(HPUX)
+struct hpux_get_stack_base_data
+{
+ pthread_t thread;
+ _pthread_stack_info info;
+};
+
+static void *hpux_get_stack_base_internal(void *d)
+{
+ hpux_get_stack_base_data *data = static_cast<hpux_get_stack_base_data *>(d);
+
+ // _pthread_stack_info_np requires the target thread to be suspended
+ // in order to get information about it
+ pthread_suspend(data->thread);
+
+ // _pthread_stack_info_np returns an errno code in case of failure
+ // or zero on success
+ if (_pthread_stack_info_np(data->thread, &data->info)) {
+ // failed
+ return 0;
+ }
+
+ pthread_continue(data->thread);
+ return data;
+}
+
+static void *hpux_get_stack_base()
+{
+ hpux_get_stack_base_data data;
+ data.thread = pthread_self();
+
+ // We cannot get the stack information for the current thread
+ // So we start a new thread to get that information and return it to us
+ pthread_t other;
+ pthread_create(&other, 0, hpux_get_stack_base_internal, &data);
+
+ void *result;
+ pthread_join(other, &result);
+ if (result)
+ return data.info.stk_stack_base;
+ return 0;
+}
+#endif
static inline void* currentThreadStackBase()
{
@@ -532,10 +575,24 @@ static inline void* currentThreadStackBase()
: "=r" (pTib)
);
return static_cast<void*>(pTib->StackBase);
+#elif PLATFORM(HPUX)
+ return hpux_get_stack_base();
#elif PLATFORM(SOLARIS)
stack_t s;
thr_stksegment(&s);
return s.ss_sp;
+#elif PLATFORM(AIX)
+ pthread_t thread = pthread_self();
+ struct __pthrdsinfo threadinfo;
+ char regbuf[256];
+ int regbufsize = sizeof regbuf;
+
+ if (pthread_getthrds_np(&thread, PTHRDSINFO_QUERY_ALL,
+ &threadinfo, sizeof threadinfo,
+ &regbuf, &regbufsize) == 0)
+ return threadinfo.__pi_stackaddr;
+
+ return 0;
#elif PLATFORM(OPENBSD)
pthread_t thread = pthread_self();
stack_t stack;
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h
index dc11fee..98e9b68 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h
@@ -27,6 +27,7 @@
#include "NativeFunctionWrapper.h"
#include "NumberPrototype.h"
#include "StringPrototype.h"
+#include "StructureChain.h"
#include <wtf/HashSet.h>
#include <wtf/OwnPtr.h>
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.h b/src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.h
index b4382f4..67ee9c8 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.h
@@ -24,6 +24,7 @@
#include "CallFrame.h"
#include "Identifier.h"
#include "Structure.h"
+#include "StructureChain.h"
#include <wtf/HashSet.h>
#include <wtf/Vector.h>
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Protect.h b/src/3rdparty/webkit/JavaScriptCore/runtime/Protect.h
index 224164d..6e7984c 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Protect.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Protect.h
@@ -98,7 +98,7 @@ namespace JSC {
JSValue get() const { return m_value; }
operator JSValue() const { return m_value; }
- JSValue operator->() const { return m_value; }
+ //JSValue operator->() const { return m_value; }
operator bool() const { return m_value; }
bool operator!() const { return !m_value; }
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
index 9f6b0c3..38c086e 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
@@ -160,7 +160,7 @@ Structure::~Structure()
m_previous->m_transitions.singleTransition = 0;
} else {
ASSERT(m_previous->m_transitions.table->contains(make_pair(m_nameInPrevious.get(), make_pair(m_attributesInPrevious, m_specificValueInPrevious))));
- m_previous->m_transitions.table->remove(make_pair(m_nameInPrevious.get(), make_pair(m_attributesInPrevious, m_specificValueInPrevious)));
+ m_previous->m_transitions.table->remove(make_pair<RefPtr<UString::Rep>, std::pair<unsigned,JSCell*> >(m_nameInPrevious.get(), make_pair(m_attributesInPrevious, m_specificValueInPrevious)));
}
}
@@ -394,7 +394,7 @@ PassRefPtr<Structure> Structure::addPropertyTransitionToExistingStructure(Struct
return existingTransition;
}
} else {
- if (Structure* existingTransition = structure->m_transitions.table->get(make_pair(propertyName.ustring().rep(), make_pair(attributes, specificValue)))) {
+ if (Structure* existingTransition = structure->m_transitions.table->get(make_pair<RefPtr<UString::Rep>, std::pair<unsigned, JSCell*> >(propertyName.ustring().rep(), make_pair(attributes, specificValue)))) {
ASSERT(existingTransition->m_offset != noOffset);
offset = existingTransition->m_offset;
return existingTransition;
@@ -459,9 +459,9 @@ PassRefPtr<Structure> Structure::addPropertyTransition(Structure* structure, con
structure->m_usingSingleTransitionSlot = false;
StructureTransitionTable* transitionTable = new StructureTransitionTable;
structure->m_transitions.table = transitionTable;
- transitionTable->add(make_pair(existingTransition->m_nameInPrevious.get(), make_pair(existingTransition->m_attributesInPrevious, existingTransition->m_specificValueInPrevious)), existingTransition);
+ transitionTable->add(make_pair<RefPtr<UString::Rep>, std::pair<unsigned, JSCell*> >(existingTransition->m_nameInPrevious.get(), make_pair(existingTransition->m_attributesInPrevious, existingTransition->m_specificValueInPrevious)), existingTransition);
}
- structure->m_transitions.table->add(make_pair(propertyName.ustring().rep(), make_pair(attributes, specificValue)), transition.get());
+ structure->m_transitions.table->add(make_pair<RefPtr<UString::Rep>, std::pair<unsigned, JSCell*> >(propertyName.ustring().rep(), make_pair(attributes, specificValue)), transition.get());
return transition.release();
}
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.h b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.h
index 0de03a3..dcd4e50 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.h
@@ -30,7 +30,6 @@
#include "JSType.h"
#include "JSValue.h"
#include "PropertyMapHashTable.h"
-#include "StructureChain.h"
#include "StructureTransitionTable.h"
#include "TypeInfo.h"
#include "UString.h"
@@ -47,6 +46,7 @@ namespace JSC {
class PropertyNameArray;
class PropertyNameArrayData;
+ class StructureChain;
class Structure : public RefCounted<Structure> {
public:
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp
index 85049b1..acebc86 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp
@@ -25,6 +25,7 @@
#include "config.h"
#include "StructureChain.h"
+#include "Structure.h"
#include "JSObject.h"
#include "Structure.h"
@@ -46,6 +47,11 @@ StructureChain::StructureChain(Structure* head)
m_vector[i] = 0;
}
+PassRefPtr<StructureChain> StructureChain::create(Structure* head)
+{
+ return adoptRef(new StructureChain(head));
+}
+
bool StructureChain::isCacheable() const
{
uint32_t i = 0;
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h
index c48749d..5990e17 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h
@@ -37,7 +37,7 @@ namespace JSC {
class StructureChain : public RefCounted<StructureChain> {
public:
- static PassRefPtr<StructureChain> create(Structure* head) { return adoptRef(new StructureChain(head)); }
+ static PassRefPtr<StructureChain> create(Structure* head);
RefPtr<Structure>* head() { return m_vector.get(); }
bool isCacheable() const;