summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-05 14:36:32 +0100
committerBen Murdoch <benm@google.com>2011-05-10 15:38:30 +0100
commitf05b935882198ccf7d81675736e3aeb089c5113a (patch)
tree4ea0ca838d9ef1b15cf17ddb3928efb427c7e5a1 /JavaScriptCore
parent60fbdcc62bced8db2cb1fd233cc4d1e4ea17db1b (diff)
downloadexternal_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.zip
external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.gz
external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.bz2
Merge WebKit at r74534: Initial merge by git.
Change-Id: I6ccd1154fa1b19c2ec2a66878eb675738735f1eb
Diffstat (limited to 'JavaScriptCore')
-rw-r--r--JavaScriptCore/API/APIShims.h3
-rw-r--r--JavaScriptCore/Android.mk6
-rw-r--r--JavaScriptCore/Android.v8.wtf.mk1
-rw-r--r--JavaScriptCore/CMakeLists.txt3
-rw-r--r--JavaScriptCore/CMakeListsEfl.txt1
-rw-r--r--JavaScriptCore/CMakeListsWinCE.txt5
-rw-r--r--JavaScriptCore/ChangeLog2062
-rw-r--r--JavaScriptCore/Configurations/Version.xcconfig2
-rw-r--r--JavaScriptCore/GNUmakefile.am15
-rw-r--r--JavaScriptCore/JavaScriptCore.exp15
-rw-r--r--JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp14
-rw-r--r--JavaScriptCore/JavaScriptCore.gypi10
-rw-r--r--JavaScriptCore/JavaScriptCore.pri2
-rw-r--r--JavaScriptCore/JavaScriptCore.pro9
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make2
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.sln190
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def9
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj3949
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops22
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops22
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops52
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make2
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj182
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops30
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd1
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd8
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd9
-rwxr-xr-xJavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh2
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py26
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln166
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj1805
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops48
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd1
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd6
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj825
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops52
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPostBuild.cmd25
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreBuild.cmd6
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreLink.cmd9
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj897
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiCommon.vsprops52
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd3
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd6
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreLink.cmd9
-rw-r--r--JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj83
-rw-r--r--JavaScriptCore/assembler/ARMAssembler.h1
-rw-r--r--JavaScriptCore/assembler/ARMv7Assembler.h3
-rw-r--r--JavaScriptCore/assembler/AbstractMacroAssembler.h8
-rw-r--r--JavaScriptCore/assembler/LinkBuffer.h2
-rw-r--r--JavaScriptCore/assembler/MIPSAssembler.h1
-rw-r--r--JavaScriptCore/assembler/MacroAssembler.h2
-rw-r--r--JavaScriptCore/assembler/MacroAssemblerARM.h22
-rw-r--r--JavaScriptCore/assembler/MacroAssemblerARMv7.h24
-rw-r--r--JavaScriptCore/assembler/MacroAssemblerMIPS.h18
-rw-r--r--JavaScriptCore/assembler/MacroAssemblerX86Common.h14
-rw-r--r--JavaScriptCore/assembler/X86Assembler.h1
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.cpp10
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.h23
-rw-r--r--JavaScriptCore/create_regex_tables4
-rw-r--r--JavaScriptCore/debugger/Debugger.cpp2
-rw-r--r--JavaScriptCore/interpreter/Interpreter.cpp6
-rw-r--r--JavaScriptCore/interpreter/RegisterFile.h22
-rw-r--r--JavaScriptCore/jit/ExecutableAllocator.cpp9
-rw-r--r--JavaScriptCore/jit/ExecutableAllocator.h13
-rw-r--r--JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp37
-rw-r--r--JavaScriptCore/jit/JITOpcodes.cpp12
-rw-r--r--JavaScriptCore/jit/JITOpcodes32_64.cpp20
-rw-r--r--JavaScriptCore/jit/JITStubs.cpp20
-rw-r--r--JavaScriptCore/jsc.cpp14
-rw-r--r--JavaScriptCore/jsc.pro2
-rw-r--r--JavaScriptCore/parser/ASTBuilder.h6
-rw-r--r--JavaScriptCore/parser/JSParser.cpp106
-rw-r--r--JavaScriptCore/parser/JSParser.h4
-rw-r--r--JavaScriptCore/parser/Nodes.h7
-rw-r--r--JavaScriptCore/parser/Parser.cpp10
-rw-r--r--JavaScriptCore/parser/Parser.h4
-rw-r--r--JavaScriptCore/parser/SyntaxChecker.h6
-rw-r--r--JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp2
-rw-r--r--JavaScriptCore/runtime/AlignedMemoryAllocator.h239
-rw-r--r--JavaScriptCore/runtime/Collector.cpp235
-rw-r--r--JavaScriptCore/runtime/Collector.h21
-rw-r--r--JavaScriptCore/runtime/Executable.cpp2
-rw-r--r--JavaScriptCore/runtime/Executable.h2
-rw-r--r--JavaScriptCore/runtime/GCActivityCallback.cpp4
-rw-r--r--JavaScriptCore/runtime/GCActivityCallback.h2
-rw-r--r--JavaScriptCore/runtime/GCActivityCallbackCF.cpp19
-rw-r--r--JavaScriptCore/runtime/GCHandle.cpp5
-rw-r--r--JavaScriptCore/runtime/GCHandle.h6
-rw-r--r--JavaScriptCore/runtime/JSArray.cpp19
-rw-r--r--JavaScriptCore/runtime/JSArray.h7
-rw-r--r--JavaScriptCore/runtime/JSGlobalData.cpp20
-rw-r--r--JavaScriptCore/runtime/JSGlobalData.h12
-rw-r--r--JavaScriptCore/runtime/JSGlobalObject.cpp18
-rw-r--r--JavaScriptCore/runtime/JSGlobalObject.h13
-rw-r--r--JavaScriptCore/runtime/JSString.cpp56
-rw-r--r--JavaScriptCore/runtime/JSString.h15
-rw-r--r--JavaScriptCore/runtime/JSValue.h3
-rw-r--r--JavaScriptCore/runtime/MarkStack.h11
-rw-r--r--JavaScriptCore/runtime/MarkStackPosix.cpp9
-rw-r--r--JavaScriptCore/runtime/MarkStackSymbian.cpp10
-rw-r--r--JavaScriptCore/runtime/MarkStackWin.cpp11
-rw-r--r--JavaScriptCore/runtime/RegExp.cpp55
-rw-r--r--JavaScriptCore/runtime/RegExp.h13
-rw-r--r--JavaScriptCore/runtime/RegExpCache.h7
-rw-r--r--JavaScriptCore/runtime/StringPrototype.cpp36
-rw-r--r--JavaScriptCore/runtime/Structure.cpp1
-rw-r--r--JavaScriptCore/shell/CMakeLists.txt2
-rw-r--r--JavaScriptCore/shell/CMakeListsWinCE.txt3
-rw-r--r--JavaScriptCore/wtf/ASCIICType.h14
-rw-r--r--JavaScriptCore/wtf/BumpPointerAllocator.h5
-rw-r--r--JavaScriptCore/wtf/CMakeLists.txt1
-rw-r--r--JavaScriptCore/wtf/CMakeListsWinCE.txt20
-rw-r--r--JavaScriptCore/wtf/Complex.h3
-rw-r--r--JavaScriptCore/wtf/DateMath.cpp6
-rw-r--r--JavaScriptCore/wtf/DateMath.h34
-rw-r--r--JavaScriptCore/wtf/MathExtras.h7
-rw-r--r--JavaScriptCore/wtf/OSAllocator.h100
-rw-r--r--JavaScriptCore/wtf/OSAllocatorPosix.cpp121
-rw-r--r--JavaScriptCore/wtf/OSAllocatorSymbian.cpp56
-rw-r--r--JavaScriptCore/wtf/OSAllocatorWin.cpp80
-rw-r--r--JavaScriptCore/wtf/PageAllocation.h281
-rw-r--r--JavaScriptCore/wtf/PageAllocationAligned.cpp87
-rw-r--r--JavaScriptCore/wtf/PageAllocationAligned.h70
-rw-r--r--JavaScriptCore/wtf/PageBlock.cpp84
-rw-r--r--JavaScriptCore/wtf/PageBlock.h83
-rw-r--r--JavaScriptCore/wtf/PageReservation.h193
-rw-r--r--JavaScriptCore/wtf/Platform.h14
-rw-r--r--JavaScriptCore/wtf/PlatformRefPtr.h7
-rw-r--r--JavaScriptCore/wtf/RandomNumberSeed.h2
-rw-r--r--JavaScriptCore/wtf/StackBounds.cpp283
-rw-r--r--JavaScriptCore/wtf/StackBounds.h114
-rw-r--r--JavaScriptCore/wtf/Vector3.h138
-rw-r--r--JavaScriptCore/wtf/WTFThreadData.cpp3
-rw-r--r--JavaScriptCore/wtf/WTFThreadData.h7
-rw-r--r--JavaScriptCore/wtf/brew/StringBrew.cpp (renamed from JavaScriptCore/wtf/PageAllocation.cpp)35
-rw-r--r--JavaScriptCore/wtf/gobject/GTypedefs.h3
-rw-r--r--JavaScriptCore/wtf/haiku/StringHaiku.cpp (renamed from JavaScriptCore/runtime/MarkStackNone.cpp)34
-rw-r--r--JavaScriptCore/wtf/text/AtomicString.cpp82
-rw-r--r--JavaScriptCore/wtf/text/AtomicString.h5
-rw-r--r--JavaScriptCore/wtf/text/CString.cpp7
-rw-r--r--JavaScriptCore/wtf/text/StringConcatenate.h58
-rw-r--r--JavaScriptCore/wtf/text/StringImpl.h2
-rw-r--r--JavaScriptCore/wtf/text/WTFString.h9
-rw-r--r--JavaScriptCore/wtf/unicode/UTF8.cpp169
-rw-r--r--JavaScriptCore/wtf/unicode/UTF8.h11
-rw-r--r--JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h31
-rw-r--r--JavaScriptCore/wtf/wtf.pri7
-rw-r--r--JavaScriptCore/wtf/wx/StringWx.cpp75
-rw-r--r--JavaScriptCore/yarr/RegexCompiler.cpp23
-rw-r--r--JavaScriptCore/yarr/RegexInterpreter.cpp79
-rw-r--r--JavaScriptCore/yarr/RegexInterpreter.h30
-rw-r--r--JavaScriptCore/yarr/RegexJIT.cpp1071
-rw-r--r--JavaScriptCore/yarr/RegexJIT.h22
-rw-r--r--JavaScriptCore/yarr/RegexParser.h151
-rw-r--r--JavaScriptCore/yarr/RegexPattern.h29
155 files changed, 9644 insertions, 6040 deletions
diff --git a/JavaScriptCore/API/APIShims.h b/JavaScriptCore/API/APIShims.h
index 892068d..0b49d70 100644
--- a/JavaScriptCore/API/APIShims.h
+++ b/JavaScriptCore/API/APIShims.h
@@ -27,6 +27,7 @@
#define APIShims_h
#include "CallFrame.h"
+#include "GCActivityCallback.h"
#include "JSLock.h"
#include <wtf/WTFThreadData.h>
@@ -40,6 +41,7 @@ protected:
{
if (registerThread)
globalData->heap.registerThread();
+ m_globalData->heap.activityCallback()->synchronize();
m_globalData->timeoutChecker.start();
}
@@ -85,6 +87,7 @@ public:
~APICallbackShim()
{
+ m_globalData->heap.activityCallback()->synchronize();
wtfThreadData().setCurrentIdentifierTable(m_globalData->identifierTable);
}
diff --git a/JavaScriptCore/Android.mk b/JavaScriptCore/Android.mk
index 128d70b..98f22df 100644
--- a/JavaScriptCore/Android.mk
+++ b/JavaScriptCore/Android.mk
@@ -172,9 +172,15 @@ LOCAL_SRC_FILES := \
wtf/HashTable.cpp \
wtf/MD5.cpp \
wtf/MainThread.cpp \
+<<<<<<< HEAD
wtf/PageAllocation.cpp \
+=======
+ wtf/PageAllocationAligned.cpp\
+ wtf/PageBlock.cpp\
+>>>>>>> webkit.org at r74534 (trunk)
wtf/RandomNumber.cpp \
wtf/RefCountedLeakCounter.cpp \
+ wtf/StackBounds.cpp \
wtf/TCSystemAlloc.cpp \
wtf/ThreadIdentifierDataPthreads.cpp \
wtf/Threading.cpp \
diff --git a/JavaScriptCore/Android.v8.wtf.mk b/JavaScriptCore/Android.v8.wtf.mk
index 958c4d1..d92dbb6 100644
--- a/JavaScriptCore/Android.v8.wtf.mk
+++ b/JavaScriptCore/Android.v8.wtf.mk
@@ -43,6 +43,7 @@ LOCAL_SRC_FILES := \
wtf/MainThread.cpp \
wtf/RandomNumber.cpp \
wtf/RefCountedLeakCounter.cpp \
+ wtf/StackBounds.cpp \
wtf/TCSystemAlloc.cpp \
wtf/ThreadIdentifierDataPthreads.cpp \
wtf/Threading.cpp \
diff --git a/JavaScriptCore/CMakeLists.txt b/JavaScriptCore/CMakeLists.txt
index 90067a4..e275db8 100644
--- a/JavaScriptCore/CMakeLists.txt
+++ b/JavaScriptCore/CMakeLists.txt
@@ -171,7 +171,8 @@ SET(JavaScriptCore_SOURCES
yarr/RegexJIT.cpp
wtf/DateMath.cpp
- wtf/PageAllocation.cpp
+ wtf/PageAllocationAligned.cpp
+ wtf/PageBlock.cpp
)
SET(JavaScriptCore_HEADERS )
diff --git a/JavaScriptCore/CMakeListsEfl.txt b/JavaScriptCore/CMakeListsEfl.txt
index 90ee22b..9d3c71e 100644
--- a/JavaScriptCore/CMakeListsEfl.txt
+++ b/JavaScriptCore/CMakeListsEfl.txt
@@ -2,6 +2,7 @@ LIST(APPEND JavaScriptCore_SOURCES
jit/ExecutableAllocatorFixedVMPool.cpp
jit/ExecutableAllocator.cpp
runtime/MarkStackPosix.cpp
+ wtf/OSAllocatorPosix.cpp
)
LIST(APPEND JavaScriptCore_LIBRARIES
diff --git a/JavaScriptCore/CMakeListsWinCE.txt b/JavaScriptCore/CMakeListsWinCE.txt
new file mode 100644
index 0000000..666b1c7
--- /dev/null
+++ b/JavaScriptCore/CMakeListsWinCE.txt
@@ -0,0 +1,5 @@
+LIST(APPEND JavaScriptCore_SOURCES
+ jit/ExecutableAllocator.cpp
+
+ runtime/MarkStackWin.cpp
+)
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index f5176f2..69b6d3b 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,19 +1,2073 @@
+2010-12-22 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed build fix.
+
+ [Symbian] Make sure OSAllocatorSymbian builds
+
+ This patch only addresses the build problem.
+
+ https://bugs.webkit.org/show_bug.cgi?id=51128 tracks the full
+ (re)implementation of the Symbian allocator.
+
+ * wtf/OSAllocatorSymbian.cpp:
+ (WTF::OSAllocator::reserveUncommitted):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit):
+
+2010-12-22 Dan Bernstein <mitz@apple.com>
+
+ Changed WebKitTools to Tools.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.sln:
+
+2010-12-22 Dan Bernstein <mitz@apple.com>
+
+ Rubber-stamped by Mark Rowe.
+
+ Changed WebKitTools to Tools in script build phases.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-12-22 Andrei Popescu <andreip@google.com>
+
+ Unreviewed build fix.
+
+ Fix Chromium Linux shared library build.
+ [Chromium] r74431 broke the Chromium Linux shared library build
+ https://bugs.webkit.org/show_bug.cgi?id=51462
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+ * JavaScriptCore.gypi:
+
+2010-12-21 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r74462.
+ http://trac.webkit.org/changeset/74462
+ https://bugs.webkit.org/show_bug.cgi?id=51449
+
+ broke chromium win (Requested by tonyg-cr on #webkit).
+
+ * JavaScriptCore.gypi:
+
+2010-12-21 Tony Gentilcore <tonyg@chromium.org>
+
+ Unreviewed build fix.
+
+ [chromium] Build fix after r74431
+ https://bugs.webkit.org/show_bug.cgi?id=51447
+
+ * JavaScriptCore.gypi:
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Speculative build fix.
+
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutableAllocator::underMemoryPressure):
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 26276 - Need a mechanism to determine stack extent
+
+ This patch adds accurate stack size calculation for:
+ DARWIN, QNX, UNIX
+ We still need to fix:
+ WINDOWS, SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE
+
+ * wtf/StackBounds.cpp:
+ (WTF::StackBounds::initialize):
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ <rdar://problem/8765333> CRASH running out of executable memory, loading io9.com
+ https://bugs.webkit.org/show_bug.cgi?id=51443
+
+ The problem here is that each page uses a reasonable amount of memory, (~4Mb),
+ and that when miultiple pages are open we keep all JIT code for all functions
+ in all pages alive.
+
+ Add a check to detect high memory pressure situations in the executable allocator
+ (>50% of available memory allocated), and upon a top level entry into JSC (no code
+ running on the stack) in this situation throw away all JIT code.
+
+ * JavaScriptCore.exp:
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions): stop passing exec to recompile.
+ * jit/ExecutableAllocator.h:
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::ExecutablePool::systemAlloc): Count allocations.
+ (JSC::ExecutablePool::systemRelease): Count deallocations.
+ (JSC::ExecutablePool::underMemoryPressure): Check memory pressure.
+ * jit/ExecutableAllocatorPosix.cpp:
+ (JSC::ExecutablePool::underMemoryPressure): Stub out; only meaningful with FixedVMPool.
+ * jit/ExecutableAllocatorWin.cpp:
+ (JSC::ExecutablePool::underMemoryPressure): Stub out; only meaningful with FixedVMPool.
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::recompile): Remove ExecState argument to recompile.
+ * runtime/Executable.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::recompileAllJSFunctions): throws away all JIT code.
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.h:
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): add check / call to throw away.
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ <rdar://problem/8241425> JIT executable memory excessive usage due to regex caching
+ https://bugs.webkit.org/show_bug.cgi?id=51434
+
+ Reduce the amount of memory the RegExpCache can hold on to on iOS.
+ Currently the RegExpCache can hold 256 RegExp objects. If each falls into a separate
+ ExecutablePool, with a common size of 16Kb, this means we end up holding onto 4Mb of
+ memory. Firstly, we can reduce this by simply reducing the size of the cache to 32
+ entries. Secondly, we can use a separate set of ExecutablePools for JIT code generated
+ from RegExp objects. This helps in two ways (1) it increases the probability that
+ RegExps in the cache share the same pool, and (2) it means that a RegExp can't end
+ up holding on to a large ExecutablePool containing a translation of JS code.
+ (A RegExp could end up keeping a larger RegExp alive that happened to be sharing the
+ same pool, but large RegExp patterns are less common).
+
+ * runtime/JSGlobalData.h:
+ * runtime/RegExpCache.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::compile):
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Eeeep! build fix!
+
+ * wtf/OSAllocator.h:
+ (WTF::OSAllocator::decommitAndRelease):
+
+2010-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Ooops, fixed typo in comment.
+
+ * wtf/OSAllocator.h:
+
+2010-12-21 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough & Oliver Hunt.
+
+ Added PageAllocationAligned, a cross-platform abstraction for memory allocations with arbitrary alignment requirements
+ https://bugs.webkit.org/show_bug.cgi?id=51359
+
+ I think this patch fixes <rdar://problem/8107952> [5.0.1] WER crash in
+ Heap::allocateBlock (1902752929), and some other leaks and crashes as well.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Updated build files.
+
+ * runtime/AlignedMemoryAllocator.h: Removed. Supplanted by
+ PageAllocationAligned.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy):
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlock):
+ (JSC::Heap::addWeakGCHandle):
+ * runtime/Collector.h: Switched from AlignedMemoryAllocator to
+ PageAllocationAligned.
+
+ * runtime/GCHandle.cpp:
+ * runtime/GCHandle.h: Ditto.
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::PageAllocation): Removed aligned memory allocation
+ functions. Supplanted by PageAllocationAligned.
+
+ * wtf/PageAllocationAligned.cpp: Added.
+ (WTF::PageAllocationAligned::allocate):
+ (WTF::PageAllocationAligned::deallocate):
+ * wtf/PageAllocationAligned.h: Added.
+ (WTF::PageAllocationAligned::PageAllocationAligned): New cross-platform
+ class for doing aligned memory allocation. This class properly matches
+ allocation and deallocation library calls, fixing a long-standing bug
+ in PageAllocation.
+
+ * wtf/Platform.h: Removed some defunction VM platform defines.
+
+ * wtf/wtf.pri: Updated build files.
+
+2010-12-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ ASSERTION FAILED: base->index() == m_codeBlock->argumentsRegister() while loading taobao.com
+ https://bugs.webkit.org/show_bug.cgi?id=49006
+
+ This problem was caused by having a parameter named 'arguments'.
+ The fix is to treat parameters named 'arguments' as shadowing
+ the actual arguments property, and so logically turn the function
+ into one that doesn't "use" arguments.
+
+ This required a bit of fiddling in the parser to ensure we correctly
+ propagate the 'feature' of shadowing is set correctly.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::createArgumentsIfNecessary):
+ Change assertion to an early return as we may now reference
+ a property named 'arguments' without being in a function that
+ has the ArgumentsFeature
+ * parser/JSParser.cpp:
+ (JSC::JSParser::Scope::Scope):
+ (JSC::JSParser::Scope::declareParameter):
+ (JSC::JSParser::Scope::shadowsArguments):
+ (JSC::JSParser::parseProgram):
+ (JSC::JSParser::parseFormalParameters):
+ (JSC::JSParser::parseFunctionInfo):
+ * parser/Nodes.h:
+ (JSC::ScopeNode::usesArguments):
+
+2010-12-21 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Eric Seidel and Darin Adler.
+
+ Deallocate GregorianDateTime.timeZone (if allocated) when copying so that we don't leak memory.
+ https://bugs.webkit.org/show_bug.cgi?id=51367
+
+ Inspired by a patch by George Staikos.
+
+ * wtf/DateMath.cpp:
+ (JSC::msToGregorianDateTime): Modified to set timeZone to nullptr since timeZone is now
+ of type OwnPtrArray<char>.
+ * wtf/DateMath.h: Change timeZone to type OwnArrayPtr<char>; Removed destructor since it is no longer needed.
+ (JSC::GregorianDateTime::GregorianDateTime): Modified to use OwnPtrArray semantics for timeZone.
+ (JSC::GregorianDateTime::operator tm): Ditto.
+ (JSC::GregorianDateTime::copyFrom): Ditto.
+
+2010-12-21 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r74402.
+ http://trac.webkit.org/changeset/74402
+ https://bugs.webkit.org/show_bug.cgi?id=51402
+
+ This patch broke the Windows 7 Release Layout Tests (Requested
+ by jessieberlin on #webkit).
+
+ * wtf/StackBounds.cpp:
+ (WTF::estimateStackBound):
+ (WTF::StackBounds::initialize):
+
+2010-12-21 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Unify the name of parentheses in YARR: rename parenthesis to
+ parentheses.
+
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd):
+
+2010-12-21 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Set BUILDING_QT__ consistently
+ https://bugs.webkit.org/show_bug.cgi?id=51341
+
+ * JavaScriptCore.pri: Remove the definition of BUILDING_QT__ as it
+ is already defined in WebKit.pri.
+
+2010-12-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 26276 - Need a mechanism to determine stack extent
+
+ This patch adds accurate stack size calculation for:
+ DARWIN, WINDOWS, QNX, UNIX
+ We still need to fix:
+ SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE
+
+ * wtf/StackBounds.cpp:
+ (WTF::StackBounds::initialize):
+
+2010-12-20 Gavin Barraclough <barraclough@apple.com>
+
+ PPC build fix; stop using std::swap on PageAllocation/PageReservation,
+ this was failing on some compilers since the lack of default construction
+ for the m_executable/m_writable fields meant the value being swapped may
+ not have been fully initialized.
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::deallocate):
+ * wtf/PageBlock.h:
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::deallocate):
+
+2010-12-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ |delete name| in strict mode code should be an early error
+ https://bugs.webkit.org/show_bug.cgi?id=50431
+
+ Disallow the |delete IDENTIFIER| production in strict mode, and removed
+ a bunch of now unnecessary code.
+
+ * parser/JSParser.cpp:
+ (JSC::JSParser::Scope::collectFreeVariables):
+ (JSC::jsParse):
+ (JSC::JSParser::parseProgram):
+ (JSC::JSParser::parseUnaryExpression):
+ * parser/JSParser.h:
+ * parser/Parser.cpp:
+ (JSC::Parser::parse):
+ * parser/Parser.h:
+ (JSC::Parser::parse):
+
+2010-12-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Olver Hunt.
+
+ Bug 51358 - Should check stack depth rather than using recursion limits in byte compilation
+
+ The current implementation of recursion limit checking is not safe on smaller stacks.
+ Switch to using a common mechanism, shared with the parser, to check recursion limits.
+
+ Make bytecompiler use StackBounds. Empirical testing shows emitStrcat to have the largest
+ footprint on the stack, at just under 1k on x86-64. Given this, the default recursion
+ check (requiring 4k of available space to recurse) seems reasonable.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNode):
+ (JSC::BytecodeGenerator::emitNodeInConditionContext):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BinaryOpNode::emitStrcat):
+
+2010-12-20 Tony Gentilcore <tonyg@chromium.org>
+
+ Unreviewed build fix.
+
+ Include pthread to fix chromium mac build (broken by r74360)
+ https://bugs.webkit.org/show_bug.cgi?id=51356
+
+ * wtf/StackBounds.cpp:
+
+2010-12-20 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ * GNUmakefile.am: add missing files.
+
+2010-12-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 26276 - Need a mechanism to determine stack extent
+
+ This patch adds a class 'StackBounds', to hold information about the machine stack.
+ The implementation of this class broadly adheres to the current implmentation of
+ stack limit checking, and as such does not solve the problem of determining stack
+ extent, but gives us a common place to do so.
+
+ Currently two mechanism are provided to determine the stack origin (the point the
+ stack is growing away from). currentThreadStackBase() in Collector provides a
+ more accurate determination of the stack origin, so use this to calculate
+ StackBounds::m_origin; WTFThreadData::approximatedStackStart is less accurate, and
+ as such can be removed. Cache the StackBounds on WTFThreadData such that they
+ need only be determined once per thread, and for non-API contexts cache this
+ information in JSGlobalData, to save a thread-specific access.
+
+ For the time being retain the estimate of stack size used by JSC's parser
+ (128 * sizeof(void*) * 1024), with a view to replacing this with something more
+ accurate in the near future.
+
+ * parser/JSParser.cpp:
+ (JSC::JSParser::canRecurse):
+ (JSC::JSParser::JSParser):
+ Change to use StackBounds.
+ * runtime/Collector.cpp:
+ (JSC::Heap::registerThread):
+ (JSC::Heap::markCurrentThreadConservativelyInternal):
+ Change to use StackBounds, cached on JSGlobalData.
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSC::JSGlobalData::stack):
+ Add a cached copy of StackBounds.
+ * wtf/StackBounds.cpp: Copied from JavaScriptCore/runtime/Collector.cpp.
+ (WTF::estimateStackBound):
+ (WTF::StackBounds::initialize):
+ (WTF::getStackMax):
+ Copy code from Collector.cpp to determine stack origin.
+ * wtf/StackBounds.h: Added.
+ (WTF::StackBounds::StackBounds):
+ No argument constructor; returns a null StackBounds.
+ (WTF::StackBounds::currentThreadStackBounds):
+ Returns a StackBounds object representing the stack limits
+ of the current thread.
+ (WTF::StackBounds::origin):
+ Returns to stack origin (the point the stack is growing away
+ from; the highest extent of the stack on machines where the
+ stack grows downwards.
+ (WTF::StackBounds::recursionLimit):
+ Returns a limit value that is 'a comfortable distance from
+ the end of the stack'. Our concept of this is currently 1 page
+ away from the end, however the default value may be tuned in
+ the future, and clients may override passing a larger delta;
+ should only be called on StackBounds object representing the
+ stack of the thread this method is called on (checked by
+ checkConsistency).
+ (WTF::StackBounds::recursionCheck):
+ Checks whether we are currently 'a comfortable distance from
+ the end of the stack'. Our concept of this is currently 1 page
+ away from the end, however the default value may be tuned in
+ the future, and clients may override passing a larger delta
+ to apply when checking, if they wish to do so. This method
+ should only be called on StackBounds object representing the
+ stack of the thread this method is called on (checked by
+ checkConsistency).
+ (WTF::StackBounds::current):
+ Approximate current stack position. On machines where the stack
+ is growing downwards this is the lowest address that might need
+ conservative collection.
+ (WTF::StackBounds::isGrowingDownward):
+ True for all platforms other than WINCE, which has to check.
+ (WTF::StackBounds::checkConsistency):
+ This is called in methods that shoulds only be operating on a
+ valid set of bounds; as such we expect m_origin != m_bounds
+ (i.e. stack size != zero) - we're really testing that this
+ object is not null (the constructor initializes both fields
+ to zero). Also checks that current() is within the stack's
+ bounds.
+ * wtf/WTFThreadData.cpp:
+ (WTF::WTFThreadData::WTFThreadData):
+ * wtf/WTFThreadData.h:
+ (WTF::WTFThreadData::stack):
+ Add the StackBounds member variable.
+
+2010-12-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Factored common page set management into a new PageBlock base class
+ https://bugs.webkit.org/show_bug.cgi?id=51285
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::RegisterFile):
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutableAllocator::intializePageSize):
+ * wtf/PageAllocation.cpp: Removed.
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::deallocate):
+ (WTF::PageAllocation::PageAllocation):
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::commit):
+ (WTF::PageReservation::decommit):
+ (WTF::PageReservation::deallocate):
+ (WTF::PageReservation::PageReservation):
+ * wtf/wtf.pri:
+
+2010-12-17 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ RegExp Jit'ed expression crashes clicking link on yelp.com
+ https://bugs.webkit.org/show_bug.cgi?id=51284
+
+ When transitioning between an non-repeating beginning of line
+ anchored expression and the remaining refactored repeating
+ expression, we should not clear any residual datalabel in
+ state's m_backtrack. It will be resolved and cleared in subsequent
+ code when linkAlternativeBacktracks() is called for the repeating
+ alternative(s).
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::clear):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::clearBacktrack):
+
+2010-12-17 Dan Bernstein <mitz@apple.com>
+
+ Rubber-stamped by Mark Rowe.
+
+ Updated for the renaming of WebKitTools to Tools
+
+ * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
+
+2010-12-17 Ariya Hidayat <ariya@sencha.com>
+
+ Reviewed by Oliver Hunt.
+
+ [JSC] parseAssignmentExpression should use TreeBuilder::CreatesAST
+ https://bugs.webkit.org/show_bug.cgi?id=51268
+
+ * parser/JSParser.cpp:
+ (JSC::JSParser::parseAssignmentExpression):
+
+2010-12-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Removed RChunk from PageAllocation/PageReservation, since it's now unused.
+ https://bugs.webkit.org/show_bug.cgi?id=51276
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::PageAllocation):
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::PageReservation):
+
+2010-12-17 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Incorrect encoding of some constants in ARMv7 JIT
+ https://bugs.webkit.org/show_bug.cgi?id=51273
+ <rdar://problem/8650210>
+
+ When using immediate encoding 3 we need to write the byte
+ that holds a duplicated value.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMThumbImmediate::makeEncodedImm):
+
+2010-12-16 Evan Martin <evan@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] useless warnings when building on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=50985
+
+ Disable some compiler warnings that aren't indicative of real problems.
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2010-12-16 Pratik Solanki <psolanki@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=51166
+ ExecutableAllocator::cacheFlush should call sys_cache_control
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush): Use the more correct and forward looking API -
+ sys_cache_control(kCacheFunctionPrepareForExecution,...).
+
+2010-12-16 Ariya Hidayat <ariya@sencha.com>
+
+ Reviewed by Andreas Kling.
+
+ [JSC] Const correctness in ASTBuilder and SyntaxChecker
+ https://bugs.webkit.org/show_bug.cgi?id=51141
+
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::getName):
+ (JSC::ASTBuilder::getType):
+ (JSC::ASTBuilder::isResolve):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::operatorStackPop):
+
+2010-12-15 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Web Audio API: port FFTFrame to MKL
+ https://bugs.webkit.org/show_bug.cgi?id=50986
+
+ Fixed bug in log2 emulation function provided for Windows port of
+ Web Audio API.
+
+ * wtf/MathExtras.h:
+ (log2):
+
+2010-12-14 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <http://webkit.org/b/51064> Reproducible crash inside WebCore::MediaPlayerPrivateQTKit::createQTMovie when loading <video>
+
+ * wtf/text/WTFString.h: Prevent String from being implicitly convertable to bool.
+ It was previously implicitly convertible to bool on Mac via operator NSString*,
+ but since that always has a non-zero return value it would give unexpected results.
+
+2010-12-14 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] [Symbian] Do not use pkg-config on Symbian as it is not supported
+ https://bugs.webkit.org/show_bug.cgi?id=50231
+
+ Guard CONFIG+=link_pkgconfig with !symbian.
+
+ * jsc.pro:
+
+2010-12-14 Cameron Zwarich <zwarich@apple.com>
+
+ Not reviewed.
+
+ Revert accidental change disabling the JIT for most platforms.
+
+ * wtf/Platform.h:
+
+2010-12-13 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Clang fails to build the JSC interpreter
+ https://bugs.webkit.org/show_bug.cgi?id=51016
+
+ Clang does not allow indirect gotos out of scopes with cleanup. GCC 4.2 allows
+ them, but it does not correctly generate the cleanup, causing a leak if the
+ cleanup decrements a reference count.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute): Put an Identifier into its own scope.
+
+2010-12-14 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Simplify context-menu handling code
+ https://bugs.webkit.org/show_bug.cgi?id=49658
+
+ * wtf/PlatformRefPtr.h: Add leakRef()
+
+2010-12-13 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ JavaScriptCore should not use "asm volatile" outside of a function
+ https://bugs.webkit.org/show_bug.cgi?id=50991
+
+ * jit/JITStubs.cpp: Remove the volatile keyword from asm statements.
+
+2010-12-13 Steve Falkenburg <sfalken@apple.com>
+
+ Windows production build fix.
+ Try copying ICU 4.6 in addition to 4.4 and 4.2.
+
+ * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd:
+
+2010-12-13 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ REGRESSION: mobileme mail viewing is broken
+ https://bugs.webkit.org/show_bug.cgi?id=50884
+
+ Fixed problem where simple parenthesis (those without capture and
+ with a fixed count) where not propagating backtrack to labels for
+ nested parentheses. Also added the nesting level for the parentheses
+ state created in that case as well.
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::copyBacktrackToLabel):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
+ (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
+
+2010-12-13 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Reduce the size of the RegexStackSpaceForBackTrackInfoParentheses in YARR
+ https://bugs.webkit.org/show_bug.cgi?id=49385
+
+ Remove the BackTrackInfoParentheses struct prevBegin and prevEnd members.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::matchParentheses):
+ (JSC::Yarr::Interpreter::backtrackParentheses):
+ * yarr/RegexPattern.h:
+
+2010-12-10 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION Hang inside Yarr::RegexCodeBlock::execute when visiting
+ bugs.webkit.org
+ https://bugs.webkit.org/show_bug.cgi?id=50816
+
+ First nested parentheses of the second or greater alternative
+ where backtracking to the prior parentheses. Changed the default
+ handling of initial parentheses for all alternatives to go back
+ to the immediate outer paren.
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::GenerationState::addParenthesesTail):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::getTermIndex):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::setParenthesesTail):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::getParenthesesTail):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::ParenthesesTail):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::processBacktracks):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
+ (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
+
+2010-12-11 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Add an overload to makeString for Vector<char>
+ https://bugs.webkit.org/show_bug.cgi?id=50123
+
+ Also cleanup StringTypeAdapter.
+
+ * wtf/text/StringConcatenate.h:
+
+2010-12-10 Siddharth Mathur <siddharth.mathur@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] Build fix for Symbian: don't compile POSIX memory management implementation
+ https://bugs.webkit.org/show_bug.cgi?id=50707
+
+ * wtf/wtf.pri:
+
+2010-12-10 Steve Falkenburg <sfalken@apple.com>
+
+ Windows production build fix.
+
+ Don't stop if react-to-vsprops-changes.py exits with an error,
+ since this will occur in production builds.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+
+2010-12-10 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Turn on USE(CROSS_PLATFORM_CONTEXT_MENUS) for Windows.
+
+ * wtf/Platform.h:
+
+2010-12-10 Martin Robinson <mrobinson@igalia.com>
+
+ Unreviewed, rolling out r73703.
+ http://trac.webkit.org/changeset/73703
+ https://bugs.webkit.org/show_bug.cgi?id=49658
+
+ This patch is causing crashes on the GTK+ bots.
+
+ * wtf/PlatformRefPtr.h:
+
+2010-12-10 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Cleanup StringWx.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=50525
+
+ Use StringImpl::createUninitialized to avoid memcpy and fix style issues.
+
+ * wtf/wx/StringWx.cpp:
+ (WTF::String::String):
+
+2010-12-10 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Simplify context-menu handling code
+ https://bugs.webkit.org/show_bug.cgi?id=49658
+
+ * wtf/PlatformRefPtr.h:
+
+2010-12-09 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION (r73065?): A regex no longer works
+ https://bugs.webkit.org/show_bug.cgi?id=50570
+
+ Changed the handling of adjacent parentheses backtracks in two ways.
+ First, only outer most paren backtracks default to back tracking
+ to the "next character" looping code. Second, added a jump around
+ backtracks that fall through to the next backtrack where the
+ second backtrack has some greedy processing before the backtracking
+ from outside the parentheses code.
+ Also cleaned up extraneous white spce, removing white space at the
+ end of or that makes up a whole line.
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::GenerationState::GenerationState):
+ (JSC::Yarr::RegexGenerator::GenerationState::incrementParenNestingLevel):
+ (JSC::Yarr::RegexGenerator::GenerationState::decrementParenNestingLevel):
+ (JSC::Yarr::RegexGenerator::GenerationState::addParenthesesTail):
+ (JSC::Yarr::RegexGenerator::GenerationState::emitParenthesesTail):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::ParenthesesTail):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::setNextIteration):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
+ (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
+
+2010-12-09 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Addressed the "FIXME" issues in array sort for toString() methods that
+ mutate the array in either size or contents. The change is to mark
+ the temporary array contents so that they are not garbage collected
+ and to make sure the array is large enough to hold the contents
+ of the sorted temporary vector.
+ https://bugs.webkit.org/show_bug.cgi?id=50718
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::addTempSortVector):
+ (JSC::Heap::removeTempSortVector):
+ (JSC::Heap::markTempSortVectors):
+ (JSC::Heap::markRoots):
+ * runtime/Collector.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::sort):
+ * runtime/JSValue.h:
+
+2010-12-09 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Changed setting of backtrack labels to not overwrite a prior
+ label. Where losing prior labe which then reverted back to
+ next character label.
+ https://bugs.webkit.org/show_bug.cgi?id=50579
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackToLabel):
+
+2010-12-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Permit Character Class Escape in CharacterRange in Character Class.
+ https://bugs.webkit.org/show_bug.cgi?id=50483
+ https://bugs.webkit.org/show_bug.cgi?id=50538
+ https://bugs.webkit.org/show_bug.cgi?id=50654
+ https://bugs.webkit.org/show_bug.cgi?id=50646
+
+ We recently tightened up our spec conformance in generating syntax
+ error in these cases, however testing in the wild has shown this
+ to be problematic. This reverts the previous change in allowing
+ class escapes (e.g. \d) in ranges in character classes ([]), but
+ does retain some closer conformance to the spec in only allowing
+ ranges that would be permitted per the grammar rules in the spec
+ (e.g. in /[\d-a-z]/ "a-z" cannot be considered as a range).
+
+ * yarr/RegexParser.h:
+ (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
+ (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass):
+ (JSC::Yarr::Parser::parse):
+
+2010-12-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Try to fix crash-on-launch seen on Windows builder.
+
+ * wtf/OSAllocatorWin.cpp:
+ (WTF::OSAllocator::release): Disabled an ASSERT, because it checks for
+ a bug that hasn't been fixed yet.
+
+2010-12-08 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated .def file.
+
+2010-12-08 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated .def
+ file to remove a symbol -- the next build failure will say which symbol
+ to add back.
+
+2010-12-08 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated .def file.
+
+2010-12-08 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix GTK Linux build.
+
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutablePool::systemAlloc):
+ * runtime/AlignedMemoryAllocator.h:
+ (JSC::::AlignedMemoryAllocator): Updated for Usage enum moving to OSAllocator.
+
+2010-12-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Migrated OS-specific allocation code from PageReservation and PageAllocation to OSAllocator
+ https://bugs.webkit.org/show_bug.cgi?id=50653
+
+ * JavaScriptCore.exp: Updated for new function signature.
+
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::RegisterFile):
+ (JSC::RegisterFile::grow):
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolAllocator::reuse):
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): Removed checkAllocatedOkay.
+ OSAllocator is now the central location for verifying that allocation succeeds.
+ This allowed me to remove some complicating cross-platform cruft.
+
+ * runtime/AlignedMemoryAllocator.h:
+ (JSC::::allocate): Updated for code motion.
+
+ * wtf/OSAllocator.h: Added Usage, writable, and executable parameters, to
+ support VM features required by clients of PageAllocation and PageReservation.
+
+ * wtf/OSAllocatorPosix.cpp:
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit): Moved PageAllocation support for randomizing
+ executable memory here.
+
+ * wtf/OSAllocatorSymbian.cpp:
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit): Updated for new function signatures.
+
+ * wtf/OSAllocatorWin.cpp:
+ (WTF::protection):
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit):
+ (WTF::OSAllocator::release): Updated for new function signatures. Moved
+ some protection-related and WINCE-related code from PageAllocation here.
+
+ * wtf/PageAllocation.cpp: Nixed cross-platform lastError abstraction, since
+ it was only used by checkAllocatedOkay, which is now gone.
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::allocate):
+ (WTF::PageAllocation::allocateAligned):
+ (WTF::PageAllocation::deallocate):
+ (WTF::PageAllocation::isPowerOfTwo):
+ (WTF::PageAllocation::systemAllocateAligned): Removed system* functions,
+ and replaced calls to them with calls to OSAllocator.
+
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::commit):
+ (WTF::PageReservation::decommit):
+ (WTF::PageReservation::reserve):
+ (WTF::PageReservation::deallocate):
+ (WTF::PageReservation::PageReservation): Ditto. Added m_writable and
+ m_executable because these flags are now required when committing memory.
+
+2010-12-08 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Add web audio files to mac port Xcode projects
+ https://bugs.webkit.org/show_bug.cgi?id=50721
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-12-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Marking the active global object re-enters through markConservatively
+ https://bugs.webkit.org/show_bug.cgi?id=50711
+
+ draining of the MarkStack is not allowed to be re-entrant, we got away
+ with this simply due to the logic in MarkStack::drain implicitly handling
+ changes that could be triggered by the re-entry.
+
+ Just to be safe this patch removes the re-entry through markConservatively
+ so we don't accidentally introduce such an issue in future. I've also
+ added an assertion to catch such errors.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::markConservatively):
+ (JSC::Heap::markCurrentThreadConservativelyInternal):
+ (JSC::Heap::markOtherThreadConservatively):
+ * runtime/JSArray.h:
+ (JSC::MarkStack::drain):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStack):
+
+2010-12-08 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
+ https://bugs.webkit.org/show_bug.cgi?id=49388
+
+ Added a WTF_PLATFORM_CA flag. Set when platform is MAC or IOS or (WINDOWS AND CG)
+ which was decided was the best way to identify a build with CoreAnimation
+
+ * wtf/Platform.h:
+
+2010-12-07 Anders Carlsson <andersca@apple.com>
+
+ Build fix follow up build fix.
+
+ * pcre/pcre_ucp_searchfuncs.cpp:
+ (jsc_pcre_ucp_othercase):
+
+2010-12-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix clang++ build
+ https://bugs.webkit.org/show_bug.cgi?id=50645
+
+ Explicitly cast offset to int.
+
+ * pcre/pcre_ucp_searchfuncs.cpp:
+ (jsc_pcre_ucp_othercase):
+
+2010-12-07 Kenneth Russell <kbr@google.com>
+
+ Reviewed by David Levin.
+
+ Fix compilation of core web audio files on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=50603
+
+ Added log2 definition to MathExtras.h on Windows platform.
+
+ * wtf/MathExtras.h:
+ (log2):
+
+2010-12-07 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ https://bugs.webkit.org/show_bug.cgi?id=50412
+ http://www.wunderground.com/US/CA/Hayward.html causes big memory spike during page loading
+
+ Creating a substring caused the original string be flattened if it was in the rope form. This could use
+ significant amount of memory by reducing buffer sharing between strings.
+
+ Add a rope specific substring function that constructs the substring by reusing the rope fibers
+ instead of flattening the rope.
+
+ No change observed in SunSpider.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::substringFromRope):
+ * runtime/JSString.h:
+ (JSC::jsSubstring):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncSubstr):
+ (JSC::stringProtoFuncSubstring):
+
+2010-12-06 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Simplified some ASLR-related code in PageAllocation/Reservation
+ https://bugs.webkit.org/show_bug.cgi?id=50599
+
+ Removed reserveAt, allocateAt, and friends, since they all existed to
+ serve one feature: ASLR for executable memory on x86_64 on Mac. Moved
+ ASLR code down into systemAllocate -- now, any time you allocate
+ executable memory on a supporting platform, the memory's location is
+ randomized.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): No need for the caller
+ to randomize anything.
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::systemAllocate): Removed some *At() functions, and
+ beefed up executable allocation with randomization.
+
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::systemReserve): Removed some *At() functions.
+
+2010-12-06 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ reserveAndCommit doesn't commit on MADVISE_FREE_REUSE systems
+ https://bugs.webkit.org/show_bug.cgi?id=50588
+
+ * wtf/OSAllocatorPosix.cpp:
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit): Tightened up some comments. Changed
+ reserveAndCommit to actually commit on MADVISE_FREE_REUSE systems.
+
+2010-12-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [WINCE] Add build system
+ https://bugs.webkit.org/show_bug.cgi?id=50522
+
+ * CMakeListsWinCE.txt: Added.
+ * shell/CMakeListsWinCE.txt: Added.
+ * wtf/CMakeListsWinCE.txt: Added.
+
+2010-12-06 John Tantalo <john.tantalo@gmail.com>
+
+ Reviewed by Geoffrey Garen.
+
+ jsc does not ignore shebang
+ https://bugs.webkit.org/show_bug.cgi?id=49576
+
+ * jsc.cpp:
+ (fillBufferWithContentsOfFile):
+ - translate shebang into a valid JavaScript comment so the lexer ignores it
+
+2010-12-05 Adam Roben <aroben@apple.com>
+
+ Windows production build fix
+
+ Put spaces after trailing backslashes when setting
+ %WebKitVSPropsRedirectionDir%. According to MSDN
+ <http://msdn.microsoft.com/en-us/library/2kzfk8c7(v=VS.80).aspx>:
+
+ A backslash ( \ ) followed by a newline character is interpreted as
+ a space in the command; use a backslash at the end of a line to
+ continue a command onto the next line. NMAKE interprets the
+ backslash literally if any other character, including a space or
+ tab, follows the backslash.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.make:
+
+2010-12-04 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed, build fix after r69132.
+
+ * shell/CMakeLists.txt: Fix directory name (jsc -> shell).
+
+2010-12-04 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Drop GdkDrawable usage, it's deprecated in GTK+3.x and we can use GdkWindow
+ https://bugs.webkit.org/show_bug.cgi?id=50451
+
+ * wtf/gobject/GTypedefs.h: add GdkWindow defines.
+
+2010-12-03 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Oliver Hunt.
+
+ Bug 50509 - set* methods on MacroAssembler are awfully named.
+
+ Methods set32 and setTest32 compare 32-bit operands, and set a 32-bit results based on the comparison.
+ set8 compares 32-bit operands, and sets an 8-bit result based on the comparison.
+ setTest8 compares 8-bit operands, and sets a 32-bit result based on the comparison.
+
+ Rename to clarify.
+
+ set32 -> set32Compare32
+ setTest32 -> set32Test32
+ set8 -> set8Compare32
+ setTest8 -> set32Test8
+
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::setPtr):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::set32Compare32):
+ (JSC::MacroAssemblerARM::set8Compare32):
+ (JSC::MacroAssemblerARM::set32Test32):
+ (JSC::MacroAssemblerARM::set32Test8):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::set32Compare32):
+ (JSC::MacroAssemblerARMv7::set8Compare32):
+ (JSC::MacroAssemblerARMv7::set32Test32):
+ (JSC::MacroAssemblerARMv7::set32Test8):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::set8Compare32):
+ (JSC::MacroAssemblerMIPS::set32Compare32):
+ (JSC::MacroAssemblerMIPS::set32Test8):
+ (JSC::MacroAssemblerMIPS::set32Test32):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::set8Compare32):
+ (JSC::MacroAssemblerX86Common::set32Compare32):
+ (JSC::MacroAssemblerX86Common::set32Test8):
+ (JSC::MacroAssemblerX86Common::set32Test32):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+
+2010-12-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Incorrect logic for returning memory at the end of linking.
+ Reviewed by Geoff Garen.
+
+ At the end of linking we return any space at the end of the
+ allocated executable region that was saved due to branch
+ compaction. This is currently by done by subtracting the
+ different from the m_freePtr in the allocation pool. This
+ can be incorrect if your allocation was made from a new
+ page that was not selected for subsequent allocations.
+
+ This patch corrects this behaviour by verifying that the
+ memory being returned actually comes from the current
+ allocation pool.
+
+ * assembler/LinkBuffer.h:
+ (JSC::LinkBuffer::linkCode):
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutablePool::tryShrink):
+
+2010-12-03 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Gavin Barraclough
+
+ Changes to significantly reduce branches to branches in JIT'ed
+ parentheses backtrack processing. The changes include the following:
+ - Taking the backtracking processing out of line and adding it as
+ code at the end of the JIT'ed routine.
+ - Allow backtracks to be direct via an indirect branch for an address
+ pushed onto the stack. If the use of an indirect branch is from a
+ conditional jump, then we emit a trampoline at the end of the
+ routine.
+ - Propogate backtracks instead of adding trampolines. Backtracks are
+ propogated to where they are used. This change also eliminated
+ trampoline branch code that aren't used.
+ - Added global expression state to keep track of parentheses tail
+ code and indirect branches.
+ Other changes made to support these changes.
+ - Split invertOrCapture flag on Patterns to two separate flags. Added
+ getters for these flags. Rippled these changes to both the JIT
+ and interpreter code.
+ - Split BacktrackDestination out off TermGenerationState struct.
+ This is done to hold references to a backtrack for later code
+ generation.
+ https://bugs.webkit.org/show_bug.cgi?id=50295
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::JmpDst::isSet):
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::JmpDst::isSet):
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Label::isSet):
+ (JSC::AbstractMacroAssembler::DataLabelPtr::isUsed):
+ (JSC::AbstractMacroAssembler::DataLabelPtr::used):
+ (JSC::AbstractMacroAssembler::JumpList::clear):
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::JmpDst::isSet):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::JmpDst::isSet):
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin):
+ (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin):
+ (JSC::Yarr::RegexPatternConstructor::atomBackReference):
+ (JSC::Yarr::RegexPatternConstructor::setupAlternativeBeginTerms):
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::ByteCompiler::atomParenthesesOnceBegin):
+ (JSC::Yarr::ByteCompiler::atomParenthesesTerminalBegin):
+ (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
+ (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
+ (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
+ (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
+ (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
+ (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
+ (JSC::Yarr::ByteCompiler::emitDisjunction):
+ * yarr/RegexInterpreter.h:
+ (JSC::Yarr::ByteTerm::ByteTerm):
+ (JSC::Yarr::ByteTerm::BackReference):
+ (JSC::Yarr::ByteTerm::invert):
+ (JSC::Yarr::ByteTerm::capture):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::IndirectJumpEntry::IndirectJumpEntry):
+ (JSC::Yarr::RegexGenerator::IndirectJumpEntry::addJump):
+ (JSC::Yarr::RegexGenerator::GenerationState::GenerationState):
+ (JSC::Yarr::RegexGenerator::GenerationState::addIndirectJumpEntry):
+ (JSC::Yarr::RegexGenerator::GenerationState::emitIndirectJumpTable):
+ (JSC::Yarr::RegexGenerator::GenerationState::addParenthesesTail):
+ (JSC::Yarr::RegexGenerator::GenerationState::emitParenthesesTail):
+ (JSC::Yarr::RegexGenerator::GenerationState::addJumpToNextInteration):
+ (JSC::Yarr::RegexGenerator::GenerationState::addJumpsToNextInteration):
+ (JSC::Yarr::RegexGenerator::GenerationState::addDataLabelToNextIteration):
+ (JSC::Yarr::RegexGenerator::GenerationState::linkToNextIteration):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::BacktrackDestination):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::clear):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::clearDataLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::haveDestination):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::isStackOffset):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::isLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::isJumpList):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::haveDataLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::copyTarget):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::copyTo):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::addBacktrackJump):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setStackOffset):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setNextBacktrackLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackToLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackJumpList):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackSourceLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setDataLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::setSubDataLabelPtr):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::linkToNextBacktrack):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::getStackOffset):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::getLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::getBacktrackJumps):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::getDataLabel):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::jumpToBacktrack):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::linkDataLabelToHereIfExists):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::plantJumpToBacktrackIfExists):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::linkAlternativeBacktracks):
+ (JSC::Yarr::RegexGenerator::BacktrackDestination::linkAlternativeBacktracksTo):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isLastAlternative):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::clearBacktrack):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::setDataLabelPtr):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::setBackTrackStackOffset):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackLabel):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackLink):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::chainBacktracks):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::chainBacktrackJumps):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::getBacktrackDestination):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::ParenthesesTail):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::processBacktracks):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::setNextIteration):
+ (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
+ (JSC::Yarr::RegexGenerator::generateAssertionBOL):
+ (JSC::Yarr::RegexGenerator::generateAssertionEOL):
+ (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterPair):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassSingle):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassFixed):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy):
+ (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction):
+ (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
+ (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
+ (JSC::Yarr::RegexGenerator::generateParentheticalAssertion):
+ (JSC::Yarr::RegexGenerator::generateDisjunction):
+ (JSC::Yarr::RegexGenerator::compile):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::PatternTerm::PatternTerm):
+ (JSC::Yarr::PatternTerm::invert):
+ (JSC::Yarr::PatternTerm::capture):
+
+2010-12-03 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ First steps to adding web audio files to build systems
+ https://bugs.webkit.org/show_bug.cgi?id=49952
+
+ * wtf/Complex.h:
+
+2010-12-03 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Move StringWx.cpp into wtf directory
+ https://bugs.webkit.org/show_bug.cgi?id=50060
+
+ * wtf/wx/StringWx.cpp: Renamed from WebCore/platform/text/wx/StringWx.cpp.
+ (WTF::String::String):
+
+2010-12-03 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Move StringBrew.cpp into wtf directory
+ https://bugs.webkit.org/show_bug.cgi?id=50058
+
+ * wtf/brew/StringBrew.cpp: Renamed from WebCore/platform/text/brew/StringBrew.cpp.
+ (WTF::String::String):
+
+2010-12-03 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Move StringHaiku.cpp into wtf directory
+ https://bugs.webkit.org/show_bug.cgi?id=50057
+
+ * wtf/haiku/StringHaiku.cpp: Renamed from WebCore/platform/text/haiku/StringHaiku.cpp.
+ (WTF::String::String):
+ (WTF::String::operator BString):
+
+2010-12-02 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix Windows build.
+
+ * runtime/GCActivityCallback.cpp:
+ (JSC::DefaultGCActivityCallback::synchronize): Added a non-CF implementation.
+
+2010-12-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fixed <rdar://problem/8310571> CrashTracer: 60 crashes in Photo Booth at
+ com.apple.JavaScriptCore: JSC::Heap::markRoots + 746
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock): Call our new
+ synchronize() function.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::activityCallback):
+ * runtime/Collector.h: Added an activityCallback() accessor, for the
+ call above.
+
+ * runtime/GCActivityCallback.h:
+ (JSC::GCActivityCallback::synchronize):
+ * runtime/GCActivityCallbackCF.cpp:
+ (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
+ (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
+ (JSC::DefaultGCActivityCallback::operator()):
+ (JSC::DefaultGCActivityCallback::synchronize): Track the run loop we're
+ scheduled in. If we begin/resume execution within a new run loop, reschedule
+ on it. This prevents a crash when using a lockless context group on
+ multiple threads -- the crash would happen if the GC timer scheduled on
+ thread A, then you continued execution on thread B, then the thread A
+ timer fired.
+
+2010-12-02 Darin Adler <darin@apple.com>
+
+ * wtf/ASCIICType.h: Fix wrong type from last check-in.
+
+2010-12-02 Darin Adler <darin@apple.com>
+
+ Try to fix certain builds (Qt Windows).
+
+ * wtf/ASCIICType.h: Added an overload for unsigned because in obsolete
+ versions of ICU, UChar32 can be a typedef for unsigned. Adding this
+ overload should make us compatible with these old ICUs.
+
+2010-12-02 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Add AtomicString::fromUTF8
+ https://bugs.webkit.org/show_bug.cgi?id=45594
+
+ Unicode::calculateStringHashFromUTF8 creates a StringHash out of UTF8 input data and
+ calculates the required length for the UTF16 conversation in one step.
+ This is then used in a specialized translator for the string table of AtomicString.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/text/AtomicString.cpp:
+ (WTF::CStringTranslator::equal):
+ (WTF::HashAndUTF8CharactersTranslator::hash):
+ (WTF::HashAndUTF8CharactersTranslator::equal):
+ (WTF::HashAndUTF8CharactersTranslator::translate):
+ (WTF::AtomicString::add):
+ (WTF::AtomicString::addSlowCase):
+ (WTF::AtomicString::find):
+ (WTF::AtomicString::fromUTF8):
+ * wtf/text/AtomicString.h:
+ * wtf/text/StringImpl.h:
+ * wtf/text/WTFString.h:
+ * wtf/unicode/UTF8.cpp:
+ (WTF::Unicode::readUTF8Sequence):
+ (WTF::Unicode::convertUTF8ToUTF16):
+ (WTF::Unicode::calculateStringHashFromUTF8):
+ (WTF::Unicode::equalUTF16WithUTF8):
+ * wtf/unicode/UTF8.h:
+
+2010-12-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added a little hardening to OSAllocator.
+
+ * wtf/OSAllocatorPosix.cpp:
+ (WTF::OSAllocator::release):
+ * wtf/OSAllocatorWin.cpp:
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit):
+ (WTF::OSAllocator::decommit):
+ (WTF::OSAllocator::release): CRASH() if the OS's virtual memory system
+ reports an error.
+
+2010-12-02 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ [Qt] Make platform managing of OSAllocator better than r73106
+ https://bugs.webkit.org/show_bug.cgi?id=50385
+
+ * wtf/OSAllocatorPosix.cpp: Remove platform specific guard.
+ * wtf/OSAllocatorSymbian.cpp: Remove platform specific guard.
+ * wtf/OSAllocatorWin.cpp: Remove platform specific guard.
+ * wtf/wtf.pri: Add the correct platform specific source file instead of all of them.
+
+2010-12-02 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [WINCE] Use GetTickCount() for srand()
+ https://bugs.webkit.org/show_bug.cgi?id=50338
+
+ time() is not a native function on WinCE, so use GetTickCount() instead.
+
+ * wtf/RandomNumberSeed.h:
+ (WTF::initializeRandomNumberGenerator):
+
+2010-12-02 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] [Symbian] Reintroduce compiler optimizations for JSC
+ https://bugs.webkit.org/show_bug.cgi?id=50270
+
+ Add compiler optimization (symbian ARM target) which was lost after split from WebCore.
+ Tested via Sunspider and V8 - both of which show significant performance improvement.
+
+ * JavaScriptCore.pro:
+
+2010-12-02 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Move regex parsing and fallback handling to runtime/RegExp.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=50015
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::RegExp):
+ (JSC::RegExp::create):
+ (JSC::RegExp::compile):
+ (JSC::RegExp::match):
+ (JSC::RegExp::printTraceData):
+ * runtime/RegExp.h:
+ (JSC::RegExp::pattern):
+ * yarr/RegexInterpreter.cpp:
+ * yarr/RegexInterpreter.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::compile):
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexJIT.h:
+ (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
+ (JSC::Yarr::RegexCodeBlock::setFallBack):
+ (JSC::Yarr::RegexCodeBlock::isFallBack):
+ (JSC::Yarr::executeRegex):
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the GTK build.
+
+ * GNUmakefile.am: Use a full path to OSAllocator*.cpp.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the EFL Linux build.
+
+ * CMakeListsEfl.txt: Added OSAllocator to the project.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Qt build: Include all OS files for Qt's sake, and then
+ use #ifdefs in the files to exclude things based on OS.
+
+ This is a pretty bad way to manage platforms -- hopefully we can
+ fix the Qt build system and move away from this in the future.
+
+ * wtf/OSAllocatorPosix.cpp:
+ * wtf/OSAllocatorSymbian.cpp:
+ * wtf/OSAllocatorWin.cpp:
+ * wtf/wtf.pri:
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Chromium build.
+
+ * JavaScriptCore.gypi: This is a Windows build file, so use OSAllocatorWin.cpp.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the GTK build.
+
+ * GNUmakefile.am: Added OSAllocator to another project.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the GTK Linux build.
+
+ * JavaScriptCore.gypi: Added OSAllocator to the project.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Qt Linux build.
+
+ * wtf/OSAllocatorPosix.cpp: Use the right errno.h.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix Windows build: export some more symbols.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Qt Linux build.
+
+ * wtf/wtf.pri: Use the POSIX OSAllocator for Qt Linux.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: commit doesn't have a return value.
+
+ * wtf/OSAllocatorWin.cpp:
+ (WTF::OSAllocator::commit):
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: Export some symbols.
+
+ * JavaScriptCore.exp:
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Export OSAllocator.h as private
+ so other projects can see it.
+
+ * wtf/OSAllocatorPosix.cpp: #include UnusedParam.h for UNUSED_PARAM.
+
+2010-12-01 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Baby step toward a cross-platform virtual memory abstraction: created
+ an all-static OSAllocator class and changed MarkStack to use it.
+
+ * JavaScriptCore.exp: These functions are inlined now.
+
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added OSAllocatorWin.cpp.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Added OSAllocatorPosix.cpp.
+
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::allocateStack):
+ (JSC::MarkStack::releaseStack): Use OSAllocator instead of rolling our
+ own platform-specific code.
+
+ * runtime/MarkStackNone.cpp: Removed. Nothing used this.
+
+ * runtime/MarkStackPosix.cpp:
+ * runtime/MarkStackSymbian.cpp:
+ * runtime/MarkStackWin.cpp: Removed custom platform-specific code, since
+ we use the OSAllocator abstraction now.
+
+ * wtf/OSAllocator.h: Added.
+ * wtf/OSAllocatorPosix.cpp: Added.
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit):
+ (WTF::OSAllocator::decommit):
+ (WTF::OSAllocator::release):
+ * wtf/OSAllocatorSymbian.cpp: Added.
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit):
+ (WTF::OSAllocator::decommit):
+ (WTF::OSAllocator::release):
+ * wtf/OSAllocatorWin.cpp: Added.
+ (WTF::OSAllocator::reserve):
+ (WTF::OSAllocator::reserveAndCommit):
+ (WTF::OSAllocator::commit):
+ (WTF::OSAllocator::decommit):
+ (WTF::OSAllocator::release): The new OSAllocator abstraction.
+
+ * wtf/wtf.pri: Added OSAllocatorSymbian.cpp.
+
+2010-12-01 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WinCairo build should not use link-time code generation (LTCG)
+ https://bugs.webkit.org/show_bug.cgi?id=50353
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj:
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+
+010-12-01 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ vcproj changes can't be applied cleanly by the Windows EWS bot
+ https://bugs.webkit.org/show_bug.cgi?id=50328
+
+ * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added property svn:eol-style.
+
+2010-12-01 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 50298 - /()()()()()()()()()(?:(\10a|b)(X|Y))+/.exec("bXXaYYaY") ASSERTs
+
+ For unmatched subpattens we previously used to set the subpattern end to -1,
+ but now we only set the start value. E.g. consider the following:
+ /a(b)?c/.exec("ac");
+ Previously we would generate an internal results array of:
+ [ 0, 2, -1, -1 ]
+ Since fairly recently we have generated results of:
+ [ 0, 2, -1, ??? ]
+ (With the end index of the subpattern uninitialized).
+
+ Update these ASSERTs to account for this.
+
+ Also, when stripping out self-referencing backreferences, (e.g. /(\1)/) we
+ were checking the wrong property on the pattern term. We should have been
+ looking at term.parentheses.subpatternId, but instead were checking
+ term.subpatternId. The latter is actually only the subpatternId for
+ back reference terms. Rename this to backReferenceSubpatternId.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::matchBackReference):
+ (JSC::Yarr::Interpreter::backtrackBackReference):
+
+2010-11-30 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Sam Weinig.
+
+ Bug 50297 - \s in YARR should match BOMs.
+
+ From section 15.10.2.12 CharacterClassEscape contains:
+
+ The production CharacterClassEscape :: s evaluates by returning the set of characters containing the
+ characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions.
+
+ Table 2 in section 7.2 contains:
+
+ \uFEFF Byte Order Mark <BOM>
+
+ * create_regex_tables:
+ Add BOM to spaces table.
+
+2010-11-30 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fixed review comments following bug #48101.
+ Mostly typos, plus gave quantifyInfinite a symbolic name.
+
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
+ (JSC::Yarr::RegexPatternConstructor::checkForTerminalParentheses):
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
+ (JSC::Yarr::Interpreter::matchParenthesesTerminalBegin):
+ (JSC::Yarr::Interpreter::backtrackParenthesesTerminalBegin):
+ (JSC::Yarr::Interpreter::backtrackParenthesesTerminalEnd):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
+ * yarr/RegexParser.h:
+ (JSC::Yarr::Parser::parseTokens):
+ (JSC::Yarr::parse):
+
+2010-11-30 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Darin Adler.
+
+ WTF project missing build-stopping code from its pre-build event
+ https://bugs.webkit.org/show_bug.cgi?id=50281
+
+ * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd:
+
+2010-11-30 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Cleanup UTF8.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=49581
+
+ Use macros and functions instead of range values directly.
+
+ * wtf/unicode/UTF8.cpp:
+ (WTF::Unicode::inlineUTF8SequenceLength):
+ (WTF::Unicode::UTF8SequenceLength):
+ (WTF::Unicode::convertUTF16ToUTF8):
+ (WTF::Unicode::readUTF8Sequence):
+ (WTF::Unicode::convertUTF8ToUTF16):
+ * wtf/unicode/UnicodeMacrosFromICU.h: Added U_IS_SUPPLEMENTARY macro.
+
+2010-11-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fixed a crash seen when using a PageAllocation to store itself.
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::systemDeallocate): Zero out m_base before unmapping
+ it, in case unmapping m_base unmaps the PageAllocation.
+
+ * wtf/BumpPointerAllocator.h:
+ (WTF::BumpPointerPool::destroy): Now this work-around isn't needed!
+
+2010-11-30 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Darin Adler.
+
+ m_hasNonEnumerableProperties is never initialized in Structure
+ https://bugs.webkit.org/show_bug.cgi?id=50266
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure): initialize member variable.
+
+2010-11-29 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix (part 1). Use correct environment variable syntax in cmd files.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd:
+ * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd:
+ * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd:
+ * JavaScriptCore.vcproj/jsc/jscPreBuild.cmd:
+ * JavaScriptCore.vcproj/jsc/jscPreLink.cmd:
+ * JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd:
+ * JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd:
+ * JavaScriptCore.vcproj/testapi/testapiPreLink.cmd:
+
+2010-11-29 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ WTF support for <rdar://problem/8650085> adding word-prefix search options to the text search API.
+ https://bugs.webkit.org/show_bug.cgi?id=50038
+
+ * wtf/unicode/UnicodeMacrosFromICU.h: Copied additional macros from icu/unicode/utf16.h.
+
+2010-11-29 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Darin Adler.
+
+ JavaScriptCore projects on Windows should use cmd files for build events
+ https://bugs.webkit.org/show_bug.cgi?id=50193
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd: Added.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd: Added.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd: Added.
+ * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd: Added.
+ * JavaScriptCore.vcproj/jsc/jscPreBuild.cmd: Added.
+ * JavaScriptCore.vcproj/jsc/jscPreLink.cmd: Added.
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
+ * JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd: Added.
+ * JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd: Added.
+ * JavaScriptCore.vcproj/testapi/testapiPreLink.cmd: Added.
+
+2010-11-29 Dai Mikurube <dmikurube@google.com>
+
+ Reviewed by Kent Tamura.
+
+ when empty, clicking "down" on outer-spin-button returns "max value"
+ https://bugs.webkit.org/show_bug.cgi?id=45491
+
+ It is required to calculate UTC/DST offsets to retrieve the current local milliseconds for
+ date/time type inputs. WTF::currentTimeMS() returns a UTC time, and WTF::getLocalTime()
+ returns a struct tm, not milliseconds.
+
+ Calculating milliseconds from a struct tm is not simple since timegm() cannot be used in all
+ environments. This calculation is already done in calculateUTCOffset(), and complicated.
+ Duplicating this complicated calculation is unreasonable because of maintainability.
+ To achieve this without duplication, we must call calculate{UTC|DST}Offset in some way.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/DateMath.cpp: Changed calculateUTCOffset() and calculateDSTOffset() to external functions.
+ (WTF::calculateUTCOffset):
+ (WTF::calculateDSTOffset):
+ * wtf/DateMath.h:
+
+2010-11-29 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Switch web audio code to use FloatPoint3D instead of Vector3
+ https://bugs.webkit.org/show_bug.cgi?id=50186
+
+ * wtf/Vector3.h: Removed.
+
+2010-11-29 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add a mechanism for Windows pre-build/pre-link/post-build events to be separated into individual cmd files
+ https://bugs.webkit.org/show_bug.cgi?id=49858
+
+ We're migrating our prebuild/prelink/postbuild steps out of vcproj and vsprops files:
+ - To simplify editing (editing vsprops build steps is confusing).
+ - For more readable diffs.
+
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Added.
+ * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Added.
+
+2010-11-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Improved accuracy of command-line SunSpider.
+
+ * jsc.cpp:
+ (functionRun): Changed the "run" function to run a given test in
+ its own global object. Previously, all tests ran in the same global
+ object, which created name conflicts, and made globals from previous
+ tests artificially survive into later tests.
+
+ Also changed "run" to return the elapsed milliseconds when running a
+ given test, for slightly more accurate numbers.
+
+ (functionCheckSyntax): Ditto on returning elapsed milliseconds.
+
+2010-11-29 Darin Adler <darin@apple.com>
+
+ Reviewed by Andreas Kling.
+
+ Remove a couple unneeded overflow checks
+ https://bugs.webkit.org/show_bug.cgi?id=49816
+
+ * wtf/text/CString.cpp:
+ (WTF::CString::init): Use an ASSERT instead of
+ an overflow check with CRASH.
+
+2010-11-29 Adam Roben <aroben@apple.com>
+
+ Robustify react-to-vsprops-changes.py against changes to its location
+ or the location of the .vsprops files
+
+ Suggested by John Sullivan.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
+ Removed file_modification_times.
+ (main): Use glob.glob to find the .vsprops files and assert that we found some.
+
+2010-11-29 Adam Roben <aroben@apple.com>
+
+ Touch wtf/Platform.h whenever any .vsprops file changes
+
+ This will cause all files to be recompiled, which will make changes to
+ preprocessor macros (e.g., ENABLE_*) actually take effect.
+
+ Fixes <http://webkit.org/b/50167> Windows build fails when ENABLE_*
+ macros are changed (because not enough files are rebuilt)
+
+ Reviewed by John Sullivan.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
+ (main): Touch wtf/Platform.h if it's older than any .vsprops file. Also
+ added some comments and logging to make it clearer what the script is
+ doing and why.
+
+2010-11-29 Adam Roben <aroben@apple.com>
+
+ Update react-to-vsprops-changes.py after r72555
+
+ .vsprops files are no longer accessed relative to $WebKitLibrariesDir.
+
+ Fixes <http://webkit.org/b/50166> REGRESSION (r72555):
+ react-to-vsprops-changes.py no longer works for people with a
+ non-default $WebKitLibrariesDir
+
+ Reviewed by John Sullivan.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
+ (main): Always look in WebKitLibraries/win for .vsprops files, not in
+ $WebKitLibrariesDir.
+
+2010-11-28 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 48100 - YARR allows what seems like a bogus character-class range
+
+ Per ECMA-262 character classes containing character ranges containing
+ character classes are invalid, eg:
+ /[\d-x]/
+ /[x-\d]/
+ /[\d-\d]/
+ These should throw a syntax error.
+
+ * yarr/RegexParser.h:
+
2010-11-27 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
Bug 48101 - Yarr gives different results for /(?:a*?){2,}/
- The test cases in the linked mozilla bug demostrate a couple of
+ The test cases in the linked mozilla bug demonstrate a couple of
problems in subpattern matching. These bugs lie in the optimized
cases - for matching parentheses with a quantity count of 1, and
for matching greedy quantified parentheses at the end of a regex
(which do not backtrack).
In both of these cases we are failing to correctly handle empty
- matches. In the case of parenthese-single matches (quantity count
+ matches. In the case of parentheses-single matches (quantity count
one) we are failing to test for empty matches at all. In the case
- of terminal subpattern matches we do currenty check, however there
+ of terminal subpattern matches we do currently check, however there
is a subtler bug here too. In the case of an empty match we will
presently immediately fall through to the next alternative (or
complete the regex match), whereas upon a failed match we should
@@ -25,7 +2079,7 @@
which point the non-greedy a?? will match, and as such the result
should be "ab", not "a").
- Terminal sunpattern matching contains a second bug, too. The frame
+ Terminal subpattern matching contains a second bug, too. The frame
location values in the subpattern should be being allocated with
the outer disjunction's frame (as we do for the parentheses-single
optimization). Consider the following three regexes:
diff --git a/JavaScriptCore/Configurations/Version.xcconfig b/JavaScriptCore/Configurations/Version.xcconfig
index d4cb8e7..4b884e2 100644
--- a/JavaScriptCore/Configurations/Version.xcconfig
+++ b/JavaScriptCore/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 13;
+MINOR_VERSION = 16;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
index f7806b4..a4de3c6 100644
--- a/JavaScriptCore/GNUmakefile.am
+++ b/JavaScriptCore/GNUmakefile.am
@@ -216,7 +216,6 @@ javascriptcore_sources += \
JavaScriptCore/profiler/ProfileNode.h \
JavaScriptCore/profiler/Profiler.cpp \
JavaScriptCore/profiler/Profiler.h \
- JavaScriptCore/runtime/AlignedMemoryAllocator.h \
JavaScriptCore/runtime/ArgList.cpp \
JavaScriptCore/runtime/ArgList.h \
JavaScriptCore/runtime/Arguments.cpp \
@@ -470,14 +469,18 @@ javascriptcore_sources += \
JavaScriptCore/wtf/Noncopyable.h \
JavaScriptCore/wtf/NotFound.h \
JavaScriptCore/wtf/NullPtr.h \
+ JavaScriptCore/wtf/OSAllocator.h \
JavaScriptCore/wtf/OwnArrayPtr.h \
JavaScriptCore/wtf/OwnFastMallocPtr.h \
JavaScriptCore/wtf/OwnArrayPtrCommon.h \
JavaScriptCore/wtf/OwnPtrCommon.h \
JavaScriptCore/wtf/OwnPtr.h \
- JavaScriptCore/wtf/PageAllocation.cpp \
JavaScriptCore/wtf/PageAllocation.h \
+ JavaScriptCore/wtf/PageAllocationAligned.cpp \
+ JavaScriptCore/wtf/PageAllocationAligned.h \
JavaScriptCore/wtf/PageReservation.h \
+ JavaScriptCore/wtf/PageBlock.cpp \
+ JavaScriptCore/wtf/PageBlock.h \
JavaScriptCore/wtf/PassOwnArrayPtr.h \
JavaScriptCore/wtf/PassOwnPtr.h \
JavaScriptCore/wtf/PassRefPtr.h \
@@ -494,6 +497,8 @@ javascriptcore_sources += \
JavaScriptCore/wtf/RefPtrHashMap.h \
JavaScriptCore/wtf/RetainPtr.h \
JavaScriptCore/wtf/SegmentedVector.h \
+ JavaScriptCore/wtf/StackBounds.cpp \
+ JavaScriptCore/wtf/StackBounds.h \
JavaScriptCore/wtf/StaticConstructors.h \
JavaScriptCore/wtf/StdLibExtras.h \
JavaScriptCore/wtf/StringExtras.h \
@@ -554,11 +559,13 @@ javascriptcore_sources += \
if TARGET_WIN32
javascriptcore_sources += \
- JavaScriptCore/runtime/MarkStackWin.cpp
+ JavaScriptCore/runtime/MarkStackWin.cpp \
+ JavaScriptCore/wtf/OSAllocatorWin.cpp
else
javascriptcore_sources += \
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp \
- JavaScriptCore/runtime/MarkStackPosix.cpp
+ JavaScriptCore/runtime/MarkStackPosix.cpp \
+ JavaScriptCore/wtf/OSAllocatorPosix.cpp
endif
# ----
diff --git a/JavaScriptCore/JavaScriptCore.exp b/JavaScriptCore/JavaScriptCore.exp
index ac5d0d7..2e999ef 100644
--- a/JavaScriptCore/JavaScriptCore.exp
+++ b/JavaScriptCore/JavaScriptCore.exp
@@ -200,6 +200,7 @@ __ZN3JSC22globalMemoryStatisticsEv
__ZN3JSC23AbstractSamplingCounter4dumpEv
__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateE
__ZN3JSC23setUpStaticFunctionSlotEPNS_9ExecStateEPKNS_9HashEntryEPNS_8JSObjectERKNS_10IdentifierERNS_12PropertySlotE
+__ZN3JSC24DynamicGlobalObjectScopeC1EPNS_9ExecStateEPNS_14JSGlobalObjectE
__ZN3JSC24JSObjectWithGlobalObjectC2EPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEE
__ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE
__ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE
@@ -306,8 +307,6 @@ __ZN3JSC8evaluateEPNS_9ExecStateERNS_10ScopeChainERKNS_10SourceCodeENS_7JSValueE
__ZN3JSC9CodeBlockD1Ev
__ZN3JSC9CodeBlockD2Ev
__ZN3JSC9MarkStack10s_pageSizeE
-__ZN3JSC9MarkStack12releaseStackEPvm
-__ZN3JSC9MarkStack13allocateStackEm
__ZN3JSC9MarkStack18initializePagesizeEv
__ZN3JSC9Structure13hasTransitionEPN3WTF10StringImplEj
__ZN3JSC9Structure17stopIgnoringLeaksEv
@@ -361,8 +360,12 @@ __ZN3WTF10StringImplD1Ev
__ZN3WTF10fastCallocEmm
__ZN3WTF10fastMallocEm
__ZN3WTF10fastStrDupEPKc
+__ZN3WTF11OSAllocator16reserveAndCommitEmNS0_5UsageEbb
+__ZN3WTF11OSAllocator18releaseDecommittedEPvm
__ZN3WTF11commentAtomE
__ZN3WTF11currentTimeEv
+__ZN3WTF11dtoaRoundDPEPcdiRbRiRj
+__ZN3WTF11dtoaRoundSFEPcdiRbRiRj
__ZN3WTF11fastReallocEPvm
__ZN3WTF12AtomicString11addSlowCaseEPNS_10StringImplE
__ZN3WTF12AtomicString3addEPKc
@@ -371,6 +374,8 @@ __ZN3WTF12AtomicString3addEPKtj
__ZN3WTF12AtomicString3addEPKtjj
__ZN3WTF12AtomicString4findEPKtjj
__ZN3WTF12AtomicString4initEv
+__ZN3WTF12AtomicString8fromUTF8EPKc
+__ZN3WTF12AtomicString8fromUTF8EPKcm
__ZN3WTF12createThreadEPFPvS0_ES0_
__ZN3WTF12createThreadEPFPvS0_ES0_PKc
__ZN3WTF12detachThreadEj
@@ -404,6 +409,8 @@ __ZN3WTF17charactersToFloatEPKtmPb
__ZN3WTF17equalIgnoringCaseEPKtPKcj
__ZN3WTF17equalIgnoringCaseEPNS_10StringImplEPKc
__ZN3WTF17equalIgnoringCaseEPNS_10StringImplES1_
+__ZN3WTF18calculateDSTOffsetEdd
+__ZN3WTF18calculateUTCOffsetEv
__ZN3WTF18charactersToDoubleEPKtmPb
__ZN3WTF18dateToDaysFrom1970Eiii
__ZN3WTF18monthFromDayInYearEib
@@ -431,6 +438,7 @@ __ZN3WTF39initializeMainThreadToProcessMainThreadEv
__ZN3WTF3MD58addBytesEPKhm
__ZN3WTF3MD58checksumERNS_6VectorIhLm16EEE
__ZN3WTF3MD5C1Ev
+__ZN3WTF4dtoaEPcdRbRiRj
__ZN3WTF5Mutex4lockEv
__ZN3WTF5Mutex6unlockEv
__ZN3WTF5Mutex7tryLockEv
@@ -545,9 +553,6 @@ __ZNK3JSC8JSObject9toBooleanEPNS_9ExecStateE
__ZNK3JSC8JSString11resolveRopeEPNS_9ExecStateE
__ZNK3JSC9HashTable11createTableEPNS_12JSGlobalDataE
__ZNK3JSC9HashTable11deleteTableEv
-__ZN3WTF11dtoaRoundSFEPcdiRbRiRj
-__ZN3WTF11dtoaRoundDPEPcdiRbRiRj
-__ZN3WTF4dtoaEPcdRbRiRj
__ZNK3WTF12AtomicString5lowerEv
__ZNK3WTF13DecimalNumber15toStringDecimalEPtj
__ZNK3WTF13DecimalNumber28bufferLengthForStringDecimalEv
diff --git a/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp b/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp
index 32270e8..ff7f0de 100644
--- a/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp
+++ b/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp
@@ -125,6 +125,16 @@
'../',
'../wtf',
],
+ # Some warnings occur in JSC headers, so they must also be disabled
+ # in targets that use JSC.
+ 'msvs_disabled_warnings': [
+ # Don't complain about calling specific versions of templatized
+ # functions (e.g. in RefPtrHashMap.h).
+ 4344,
+ # Don't complain about using "this" in an initializer list
+ # (e.g. in StringImpl.h).
+ 4355,
+ ],
},
'export_dependent_settings': [
'wtf_config',
@@ -137,7 +147,9 @@
'sources/': [
['exclude', 'ThreadIdentifierDataPthreads\\.(h|cpp)$'],
['exclude', 'ThreadingPthreads\\.cpp$'],
- ['include', 'Thread(ing|Specific)Win\\.cpp$']
+ ['include', 'Thread(ing|Specific)Win\\.cpp$'],
+ ['exclude', 'OSAllocatorPosix\\.cpp$'],
+ ['include', 'OSAllocatorWin\\.cpp$']
],
'include_dirs!': [
'<(SHARED_INTERMEDIATE_DIR)/webkit',
diff --git a/JavaScriptCore/JavaScriptCore.gypi b/JavaScriptCore/JavaScriptCore.gypi
index deb36fb..6b04168 100644
--- a/JavaScriptCore/JavaScriptCore.gypi
+++ b/JavaScriptCore/JavaScriptCore.gypi
@@ -164,7 +164,6 @@
'profiler/Profiler.cpp',
'profiler/Profiler.h',
'profiler/ProfilerServer.h',
- 'runtime/AlignedMemoryAllocator.h',
'runtime/ArgList.cpp',
'runtime/ArgList.h',
'runtime/Arguments.cpp',
@@ -400,12 +399,17 @@
'wtf/NonCopyingSort.h',
'wtf/Noncopyable.h',
'wtf/NotFound.h',
+ 'wtf/OSAllocatorPosix.cpp',
+ 'wtf/OSAllocatorWin.cpp',
+ 'wtf/OSAllocator.h',
'wtf/OwnArrayPtr.h',
'wtf/OwnFastMallocPtr.h',
'wtf/OwnPtr.h',
'wtf/OwnPtrCommon.h',
- 'wtf/PageAllocation.cpp',
+ 'wtf/PageBlock.cpp',
'wtf/PageAllocation.h',
+ 'wtf/PageAllocationAligned.cpp',
+ 'wtf/PageAllocationAligned.h',
'wtf/PageReservation',
'wtf/PassOwnPtr.h',
'wtf/PassRefPtr.h',
@@ -422,6 +426,8 @@
'wtf/RetainPtr.h',
'wtf/SegmentedVector.h',
'wtf/SizeLimits.cpp',
+ 'wtf/StackBounds.cpp',
+ 'wtf/StackBounds.h',
'wtf/StaticConstructors.h',
'wtf/StdLibExtras.h',
'wtf/StringExtras.h',
diff --git a/JavaScriptCore/JavaScriptCore.pri b/JavaScriptCore/JavaScriptCore.pri
index 0590b94..7f553b9 100644
--- a/JavaScriptCore/JavaScriptCore.pri
+++ b/JavaScriptCore/JavaScriptCore.pri
@@ -53,7 +53,7 @@ INCLUDEPATH = \
win32-*: DEFINES += _HAS_TR1=0
-DEFINES += BUILDING_QT__ BUILDING_JavaScriptCore BUILDING_WTF
+DEFINES += BUILDING_JavaScriptCore BUILDING_WTF
# CONFIG += text_breaking_with_icu
diff --git a/JavaScriptCore/JavaScriptCore.pro b/JavaScriptCore/JavaScriptCore.pro
index 531b22c..d3a1e87 100644
--- a/JavaScriptCore/JavaScriptCore.pro
+++ b/JavaScriptCore/JavaScriptCore.pro
@@ -213,5 +213,14 @@ SOURCES += \
# Generated files, simply list them for JavaScriptCore
+symbian: {
+ symbian-abld|symbian-sbsv2 {
+ MMP_RULES += ALWAYS_BUILD_AS_ARM
+ } else {
+ QMAKE_CFLAGS -= --thumb
+ QMAKE_CXXFLAGS -= --thumb
+ }
+ QMAKE_CXXFLAGS.ARMCC += -OTime -O3
+}
# Disable C++0x mode in JSC for those who enabled it in their Qt's mkspec
*-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make
index d7e2826..579e675 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make
@@ -8,7 +8,7 @@ install:
set PRODUCTION=1
set WebKitLibrariesDir=$(SRCROOT)\AppleInternal
set WebKitOutputDir=$(OBJROOT)
- set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\
+ set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\
!IF "$(BUILDSTYLE)"=="Release"
devenv "JavaScriptCoreSubmit.sln" /rebuild Release_PGOInstrument
set PATH=$(SYSTEMDRIVE)\cygwin\bin;$(PATH)
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.sln b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.sln
index 47371c5..0e07daf 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.sln
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.sln
@@ -1,95 +1,95 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore", "JavaScriptCore\JavaScriptCore.vcproj", "{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
- ProjectSection(ProjectDependencies) = postProject
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsc", "jsc\jsc.vcproj", "{C59E5129-B453-49B7-A52B-1E104715F76E}"
- ProjectSection(ProjectDependencies) = postProject
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {011D10F1-B656-4A1B-A0C3-3842F02122C5} = {011D10F1-B656-4A1B-A0C3-3842F02122C5}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WTF", "WTF\WTF.vcproj", "{AA8A5A85-592B-4357-BC60-E0E91E026AF6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FindSafari", "..\..\WebKitTools\FindSafari\FindSafari.vcproj", "{DA31DA52-6675-48D4-89E0-333A7144397C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCoreGenerated", "JavaScriptCore\JavaScriptCoreGenerated.vcproj", "{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug_All|Win32 = Debug_All|Win32
- Debug|Win32 = Debug|Win32
- Release_LTCG|Win32 = Release_LTCG|Win32
- Release_PGOInstrument|Win32 = Release_PGOInstrument|Win32
- Release_PGOOptimize|Win32 = Release_PGOOptimize|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.ActiveCfg = Debug|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.Build.0 = Debug|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.ActiveCfg = Release_PGOInstrument|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.Build.0 = Release_PGOInstrument|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.ActiveCfg = Release_PGOOptimize|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.Build.0 = Release_PGOOptimize|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.ActiveCfg = Release|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.ActiveCfg = Debug|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.Build.0 = Debug|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.ActiveCfg = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug|Win32.ActiveCfg = Debug|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug|Win32.Build.0 = Debug|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release|Win32.ActiveCfg = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Release|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.ActiveCfg = Debug|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.Build.0 = Debug|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.ActiveCfg = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore", "JavaScriptCore\JavaScriptCore.vcproj", "{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsc", "jsc\jsc.vcproj", "{C59E5129-B453-49B7-A52B-1E104715F76E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5} = {011D10F1-B656-4A1B-A0C3-3842F02122C5}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WTF", "WTF\WTF.vcproj", "{AA8A5A85-592B-4357-BC60-E0E91E026AF6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FindSafari", "..\..\Tools\FindSafari\FindSafari.vcproj", "{DA31DA52-6675-48D4-89E0-333A7144397C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCoreGenerated", "JavaScriptCore\JavaScriptCoreGenerated.vcproj", "{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug_All|Win32 = Debug_All|Win32
+ Debug|Win32 = Debug|Win32
+ Release_LTCG|Win32 = Release_LTCG|Win32
+ Release_PGOInstrument|Win32 = Release_PGOInstrument|Win32
+ Release_PGOOptimize|Win32 = Release_PGOOptimize|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.Build.0 = Debug|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.ActiveCfg = Release_PGOInstrument|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.Build.0 = Release_PGOInstrument|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.ActiveCfg = Release_PGOOptimize|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.Build.0 = Release_PGOOptimize|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.ActiveCfg = Release|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.Build.0 = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.Build.0 = Debug|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.ActiveCfg = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug|Win32.Build.0 = Debug|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release|Win32.ActiveCfg = Release|Win32
+ {DA31DA52-6675-48D4-89E0-333A7144397C}.Release|Win32.Build.0 = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.Build.0 = Debug|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.ActiveCfg = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
index 449c0bb..4ddad24 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
@@ -7,6 +7,7 @@ EXPORTS
??0DateInstance@JSC@@QAE@PAVExecState@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@N@Z
??0DefaultGCActivityCallback@JSC@@QAE@PAVHeap@1@@Z
??0DropAllLocks@JSLock@JSC@@QAE@W4JSLockBehavior@2@@Z
+ ??0DynamicGlobalObjectScope@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@@Z
??0InternalFunction@JSC@@IAE@PAVJSGlobalData@1@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVIdentifier@1@@Z
??0JSArray@JSC@@QAE@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@@Z
??0JSArray@JSC@@QAE@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVArgList@1@@Z
@@ -58,6 +59,9 @@ EXPORTS
?attach@Debugger@JSC@@QAEXPAVJSGlobalObject@2@@Z
?broadcast@ThreadCondition@WTF@@QAEXXZ
?bufferLengthForStringDecimal@DecimalNumber@WTF@@QBEIXZ
+ ?calculateDSTOffset@WTF@@YANNN@Z
+ ?calculateStringHashFromUTF8@Unicode@WTF@@YAIPBD0AAI@Z
+ ?calculateUTCOffset@WTF@@YAHXZ
?calculatedFunctionName@DebuggerCallFrame@JSC@@QBE?AVUString@2@XZ
?call@JSC@@YA?AVJSValue@1@PAVExecState@1@V21@W4CallType@1@ABTCallData@1@1ABVArgList@1@@Z
?callOnMainThread@WTF@@YAXP6AXPAX@Z0@Z
@@ -137,6 +141,7 @@ EXPORTS
?empty@StringImpl@WTF@@SAPAV12@XZ
?enumerable@PropertyDescriptor@JSC@@QBE_NXZ
?equal@Identifier@JSC@@SA_NPBVStringImpl@WTF@@PBD@Z
+ ?equalUTF16WithUTF8@Unicode@WTF@@YA_NPB_W0PBD1@Z
?evaluate@DebuggerCallFrame@JSC@@QBE?AVJSValue@2@ABVUString@2@AAV32@@Z
?evaluate@JSC@@YA?AVCompletion@1@PAVExecState@1@AAVScopeChain@1@ABVSourceCode@1@VJSValue@1@@Z
?exclude@Profile@JSC@@QAEXPBVProfileNode@2@@Z
@@ -261,7 +266,9 @@ EXPORTS
?recompileAllJSFunctions@Debugger@JSC@@QAEXPAVJSGlobalData@2@@Z
?recordExtraCost@Heap@JSC@@AAEXI@Z
?reifyString@StringBuilder@WTF@@AAEXXZ
+ ?releaseDecommitted@OSAllocator@WTF@@SAXPAXI@Z
?releaseStack@MarkStack@JSC@@CAXPAXI@Z
+ ?reserveAndCommit@OSAllocator@WTF@@SAPAXIW4Usage@12@_N1@Z
?reset@ParserArena@JSC@@QAEXXZ
?reset@TimeoutChecker@JSC@@QAEXXZ
?resetDateCache@JSGlobalData@JSC@@QAEXXZ
@@ -322,10 +329,10 @@ EXPORTS
?toPrimitive@JSCell@JSC@@UBE?AVJSValue@2@PAVExecState@2@W4PreferredPrimitiveType@2@@Z
?toPrimitive@JSString@JSC@@EBE?AVJSValue@2@PAVExecState@2@W4PreferredPrimitiveType@2@@Z
?toStrictThisObject@JSObject@JSC@@UBE?AVJSValue@2@PAVExecState@2@@Z
- ?toStringDecimal@DecimalNumber@WTF@@QBEIPA_WI@Z
?toString@JSCell@JSC@@UBE?AVUString@2@PAVExecState@2@@Z
?toString@JSObject@JSC@@UBE?AVUString@2@PAVExecState@2@@Z
?toString@JSString@JSC@@EBE?AVUString@2@PAVExecState@2@@Z
+ ?toStringDecimal@DecimalNumber@WTF@@QBEIPA_WI@Z
?toThisObject@JSCell@JSC@@UBEPAVJSObject@2@PAVExecState@2@@Z
?toThisObject@JSObject@JSC@@UBEPAV12@PAVExecState@2@@Z
?toThisObject@JSString@JSC@@EBEPAVJSObject@2@PAVExecState@2@@Z
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
index 7ecd766..202742d 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
@@ -1,1975 +1,1974 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="JavaScriptCore"
- ProjectGUID="{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
- RootNamespace="JavaScriptCore"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_PGOInstrument|Win32"
- IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\Release"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_PGOOptimize|Win32"
- IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\Release"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_Cairo_CFLite|Win32"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCFLite.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_Cairo_CFLite|Win32"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCFLite.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_All|Win32"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_LTCG|Win32"
- ConfigurationType="2"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="runtime"
- >
- <File
- RelativePath="..\..\runtime\ArgList.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ArgList.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Arguments.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Arguments.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ArrayConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ArrayConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ArrayPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ArrayPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BatchedTransitionOptimizer.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BooleanConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BooleanConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BooleanObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BooleanObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BooleanPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\BooleanPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\CallData.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\CallData.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ClassInfo.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Collector.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Collector.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\CollectorHeapIntrospector.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\CommonIdentifiers.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\CommonIdentifiers.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Completion.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Completion.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ConstructData.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ConstructData.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateConversion.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateConversion.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateInstance.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateInstance.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DateInstanceCache.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\DateMath.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\DateMath.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DatePrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\DatePrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Error.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Error.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ErrorConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ErrorConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ErrorInstance.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ErrorInstance.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ErrorPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ErrorPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ExceptionHelpers.cpp"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\ExceptionHelpers.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Executable.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Executable.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\FunctionConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\FunctionConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\FunctionPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\FunctionPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GCActivityCallback.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GCActivityCallback.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GCHandle.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GCHandle.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GetterSetter.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GetterSetter.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GlobalEvalFunction.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\GlobalEvalFunction.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Identifier.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Identifier.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\InitializeThreading.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\InitializeThreading.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\InternalFunction.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\InternalFunction.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSActivation.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSActivation.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSArray.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSArray.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSByteArray.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSByteArray.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSCell.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSCell.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSFunction.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSFunction.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSGlobalData.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSGlobalData.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSGlobalObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSGlobalObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSGlobalObjectFunctions.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSGlobalObjectFunctions.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSImmediate.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSImmediate.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSLock.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSLock.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSNotAnObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSNotAnObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSNumberCell.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSNumberCell.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSObjectWithGlobalObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSObjectWithGlobalObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSONObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSONObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSPropertyNameIterator.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSPropertyNameIterator.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSStaticScopeObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSStaticScopeObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSString.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSType.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSTypeInfo.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSValue.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSValue.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSVariableObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSVariableObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSWrapperObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSWrapperObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSZombie.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSZombie.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\LiteralParser.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\LiteralParser.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Lookup.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Lookup.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\MarkStack.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\MarkStack.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\MarkStackWin.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\MathObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\MathObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NativeErrorConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NativeErrorConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NativeErrorPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NativeErrorPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NativeFunctionWrapper.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumberConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumberConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumberObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumberObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumberPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumberPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\NumericStrings.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ObjectConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ObjectConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ObjectPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ObjectPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Operations.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Operations.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertyDescriptor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertyDescriptor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertyMapHashTable.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertyNameArray.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertyNameArray.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertySlot.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PropertySlot.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Protect.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PrototypeFunction.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\PrototypeFunction.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExp.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExp.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpCache.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpCache.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpKey.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpMatchesArray.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RegExpPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RopeImpl.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\RopeImpl.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ScopeChain.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ScopeChain.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\ScopeChainMark.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\SmallStrings.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\SmallStrings.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StrictEvalActivation.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StrictEvalActivation.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringObject.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringObjectThatMasqueradesAsUndefined.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringPrototype.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StringPrototype.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Structure.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Structure.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StructureChain.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StructureChain.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\StructureTransitionTable.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\SymbolTable.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\Terminator.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\TimeoutChecker.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\TimeoutChecker.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\UString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\UString.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\UStringBuilder.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\UStringConcatenate.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\UStringImpl.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\WeakGCMap.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\WeakGCPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\WeakRandom.h"
- >
- </File>
- </Filter>
- <Filter
- Name="pcre"
- >
- <File
- RelativePath="..\..\pcre\pcre.h"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_compile.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_exec.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_internal.h"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_tables.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_ucp_searchfuncs.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_xclass.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\ucpinternal.h"
- >
- </File>
- </Filter>
- <Filter
- Name="API"
- >
- <File
- RelativePath="..\..\API\APICast.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JavaScript.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JavaScriptCore.h"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSAPIValueWrapper.cpp"
- >
- </File>
- <File
- RelativePath="..\..\runtime\JSAPIValueWrapper.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSBase.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSBase.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSBasePrivate.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackConstructor.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackConstructor.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackFunction.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackFunction.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackObject.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackObject.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSCallbackObjectFunctions.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSClassRef.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSClassRef.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSContextRef.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSContextRef.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSContextRefPrivate.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSObjectRef.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSObjectRef.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSRetainPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSStringRef.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSStringRef.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSStringRefBSTR.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSStringRefBSTR.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSStringRefCF.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSStringRefCF.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSValueRef.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSValueRef.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSWeakObjectMapRefInternal.h"
- >
- </File>
- <File
- RelativePath="..\..\API\JSWeakObjectMapRefPrivate.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\JSWeakObjectMapRefPrivate.h"
- >
- </File>
- <File
- RelativePath="..\..\API\OpaqueJSString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\API\OpaqueJSString.h"
- >
- </File>
- <File
- RelativePath="..\..\API\WebKitAvailability.h"
- >
- </File>
- </Filter>
- <Filter
- Name="profiler"
- >
- <File
- RelativePath="..\..\profiler\CallIdentifier.h"
- >
- </File>
- <File
- RelativePath="..\..\profiler\Profile.cpp"
- >
- </File>
- <File
- RelativePath="..\..\profiler\Profile.h"
- >
- </File>
- <File
- RelativePath="..\..\profiler\ProfileGenerator.cpp"
- >
- </File>
- <File
- RelativePath="..\..\profiler\ProfileGenerator.h"
- >
- </File>
- <File
- RelativePath="..\..\profiler\ProfileNode.cpp"
- >
- </File>
- <File
- RelativePath="..\..\profiler\ProfileNode.h"
- >
- </File>
- <File
- RelativePath="..\..\profiler\Profiler.cpp"
- >
- </File>
- <File
- RelativePath="..\..\profiler\Profiler.h"
- >
- </File>
- </Filter>
- <Filter
- Name="bytecode"
- >
- <File
- RelativePath="..\..\bytecode\CodeBlock.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\CodeBlock.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\EvalCodeCache.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\Instruction.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\JumpTable.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\JumpTable.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\Opcode.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\Opcode.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\SamplingTool.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\SamplingTool.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\StructureStubInfo.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecode\StructureStubInfo.h"
- >
- </File>
- </Filter>
- <Filter
- Name="debugger"
- >
- <File
- RelativePath="..\..\debugger\Debugger.cpp"
- >
- </File>
- <File
- RelativePath="..\..\debugger\Debugger.h"
- >
- </File>
- <File
- RelativePath="..\..\debugger\DebuggerActivation.cpp"
- >
- </File>
- <File
- RelativePath="..\..\debugger\DebuggerActivation.h"
- >
- </File>
- <File
- RelativePath="..\..\debugger\DebuggerCallFrame.cpp"
- >
- </File>
- <File
- RelativePath="..\..\debugger\DebuggerCallFrame.h"
- >
- </File>
- </Filter>
- <Filter
- Name="assembler"
- >
- <File
- RelativePath="..\..\assembler\AbstractMacroAssembler.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\AssemblerBuffer.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\CodeLocation.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\LinkBuffer.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\MacroAssembler.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\MacroAssemblerX86.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\MacroAssemblerX86Common.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\RepatchBuffer.h"
- >
- </File>
- <File
- RelativePath="..\..\assembler\X86Assembler.h"
- >
- </File>
- </Filter>
- <Filter
- Name="yarr"
- >
- <File
- RelativePath="..\..\yarr\RegexCompiler.cpp"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexCompiler.h"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexInterpreter.cpp"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexInterpreter.h"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexJIT.cpp"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexJIT.h"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexParser.h"
- >
- </File>
- <File
- RelativePath="..\..\yarr\RegexPattern.h"
- >
- </File>
- </Filter>
- <Filter
- Name="jit"
- >
- <File
- RelativePath="..\..\jit\ExecutableAllocator.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\ExecutableAllocator.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\JIT.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JIT.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITArithmetic.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITArithmetic32_64.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITCall.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITCall32_64.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITCode.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITInlineMethods.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITOpcodes.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITOpcodes32_64.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITPropertyAccess.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITPropertyAccess32_64.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITStubCall.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITStubs.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\JITStubs.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\JSInterfaceJIT.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\SpecializedThunkJIT.h"
- >
- </File>
- <File
- RelativePath="..\..\jit\ThunkGenerators.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jit\ThunkGenerators.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resources"
- >
- <File
- RelativePath=".\JavaScriptCore.rc"
- >
- </File>
- </Filter>
- <Filter
- Name="interpreter"
- >
- <File
- RelativePath="..\..\interpreter\CachedCall.h"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\CallFrame.cpp"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\CallFrame.h"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\CallFrameClosure.h"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\Interpreter.cpp"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\Interpreter.h"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\Register.h"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\RegisterFile.cpp"
- >
- </File>
- <File
- RelativePath="..\..\interpreter\RegisterFile.h"
- >
- </File>
- </Filter>
- <Filter
- Name="bytecompiler"
- >
- <File
- RelativePath="..\..\bytecompiler\BytecodeGenerator.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecompiler\BytecodeGenerator.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecompiler\Label.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecompiler\LabelScope.h"
- >
- </File>
- <File
- RelativePath="..\..\bytecompiler\NodesCodegen.cpp"
- >
- </File>
- <File
- RelativePath="..\..\bytecompiler\RegisterID.h"
- >
- </File>
- </Filter>
- <Filter
- Name="parser"
- >
- <File
- RelativePath="..\..\parser\ASTBuilder.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\JSParser.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser\JSParser.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\Lexer.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser\Lexer.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\NodeConstructors.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\NodeInfo.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\Nodes.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser\Nodes.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\Parser.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser\Parser.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\ParserArena.cpp"
- >
- </File>
- <File
- RelativePath="..\..\parser\ParserArena.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\ResultType.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\SourceCode.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\SourceProvider.h"
- >
- </File>
- <File
- RelativePath="..\..\parser\SyntaxChecker.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Derived Sources"
- >
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\ArrayPrototype.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\DatePrototype.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\lexer.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathObject.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\NumberConstructor.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RegExpConstructor.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RegExpObject.lut.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\StringPrototype.lut.h"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\..\config.h"
- >
- </File>
- <File
- RelativePath=".\JavaScriptCore.def"
- >
- </File>
- <File
- RelativePath=".\JavaScriptCore_debug.def"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="JavaScriptCore"
+ ProjectGUID="{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
+ RootNamespace="JavaScriptCore"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_PGOInstrument|Win32"
+ IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\Release"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_PGOOptimize|Win32"
+ IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\Release"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="4"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_Cairo_CFLite|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCFLite.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_Cairo_CFLite|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCFLite.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_All|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="runtime"
+ >
+ <File
+ RelativePath="..\..\runtime\ArgList.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ArgList.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Arguments.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Arguments.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ArrayConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ArrayConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ArrayPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ArrayPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BatchedTransitionOptimizer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BooleanConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BooleanConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BooleanObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BooleanObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BooleanPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\BooleanPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\CallData.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\CallData.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ClassInfo.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Collector.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Collector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\CollectorHeapIntrospector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\CommonIdentifiers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\CommonIdentifiers.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Completion.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Completion.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ConstructData.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ConstructData.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateConversion.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateConversion.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateInstance.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateInstance.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DateInstanceCache.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\DateMath.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\DateMath.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DatePrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\DatePrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Error.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Error.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ErrorConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ErrorConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ErrorInstance.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ErrorInstance.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ErrorPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ErrorPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ExceptionHelpers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\ExceptionHelpers.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Executable.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Executable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\FunctionConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\FunctionConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\FunctionPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\FunctionPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GCActivityCallback.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GCActivityCallback.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GCHandle.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GCHandle.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GetterSetter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GetterSetter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GlobalEvalFunction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\GlobalEvalFunction.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Identifier.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Identifier.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\InitializeThreading.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\InitializeThreading.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\InternalFunction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\InternalFunction.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSActivation.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSActivation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSArray.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSArray.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSByteArray.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSByteArray.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSCell.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSCell.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSFunction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSFunction.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSGlobalData.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSGlobalData.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSGlobalObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSGlobalObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSGlobalObjectFunctions.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSGlobalObjectFunctions.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSImmediate.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSImmediate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSLock.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSLock.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSNotAnObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSNotAnObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSNumberCell.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSNumberCell.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSObjectWithGlobalObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSObjectWithGlobalObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSONObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSONObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSPropertyNameIterator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSPropertyNameIterator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSStaticScopeObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSStaticScopeObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSString.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSType.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSTypeInfo.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSValue.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSValue.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSVariableObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSVariableObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSWrapperObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSWrapperObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSZombie.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSZombie.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\LiteralParser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\LiteralParser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Lookup.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Lookup.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MarkStack.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MarkStack.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MarkStackWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MathObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MathObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NativeErrorConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NativeErrorConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NativeErrorPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NativeErrorPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NativeFunctionWrapper.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumberConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumberConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumberObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumberObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumberPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumberPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\NumericStrings.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ObjectConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ObjectConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ObjectPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ObjectPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Operations.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Operations.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertyDescriptor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertyDescriptor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertyMapHashTable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertyNameArray.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertyNameArray.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertySlot.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PropertySlot.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Protect.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PrototypeFunction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\PrototypeFunction.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExp.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpCache.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpCache.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpKey.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpMatchesArray.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RegExpPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RopeImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\RopeImpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ScopeChain.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ScopeChain.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ScopeChainMark.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\SmallStrings.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\SmallStrings.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StrictEvalActivation.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StrictEvalActivation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringObjectThatMasqueradesAsUndefined.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringPrototype.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StringPrototype.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Structure.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Structure.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StructureChain.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StructureChain.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\StructureTransitionTable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\SymbolTable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\Terminator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\TimeoutChecker.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\TimeoutChecker.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\UString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\UString.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\UStringBuilder.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\UStringConcatenate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\UStringImpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\WeakGCMap.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\WeakGCPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\WeakRandom.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="pcre"
+ >
+ <File
+ RelativePath="..\..\pcre\pcre.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\pcre_compile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\pcre_exec.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\pcre_internal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\pcre_tables.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\pcre_ucp_searchfuncs.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\pcre_xclass.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\pcre\ucpinternal.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="API"
+ >
+ <File
+ RelativePath="..\..\API\APICast.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JavaScript.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JavaScriptCore.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSAPIValueWrapper.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\JSAPIValueWrapper.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSBase.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSBase.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSBasePrivate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackConstructor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackConstructor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackFunction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackFunction.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackObject.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackObject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSCallbackObjectFunctions.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSClassRef.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSClassRef.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSContextRef.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSContextRef.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSContextRefPrivate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSObjectRef.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSObjectRef.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSRetainPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSStringRef.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSStringRef.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSStringRefBSTR.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSStringRefBSTR.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSStringRefCF.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSStringRefCF.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSValueRef.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSValueRef.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSWeakObjectMapRefInternal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSWeakObjectMapRefPrivate.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\JSWeakObjectMapRefPrivate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\OpaqueJSString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\OpaqueJSString.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\API\WebKitAvailability.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="profiler"
+ >
+ <File
+ RelativePath="..\..\profiler\CallIdentifier.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\Profile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\Profile.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\ProfileGenerator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\ProfileGenerator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\ProfileNode.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\ProfileNode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\Profiler.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\profiler\Profiler.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="bytecode"
+ >
+ <File
+ RelativePath="..\..\bytecode\CodeBlock.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\CodeBlock.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\EvalCodeCache.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\Instruction.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\JumpTable.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\JumpTable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\Opcode.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\Opcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\SamplingTool.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\SamplingTool.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\StructureStubInfo.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecode\StructureStubInfo.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="debugger"
+ >
+ <File
+ RelativePath="..\..\debugger\Debugger.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\debugger\Debugger.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\debugger\DebuggerActivation.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\debugger\DebuggerActivation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\debugger\DebuggerCallFrame.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\debugger\DebuggerCallFrame.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="assembler"
+ >
+ <File
+ RelativePath="..\..\assembler\AbstractMacroAssembler.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\AssemblerBuffer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\CodeLocation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\LinkBuffer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\MacroAssembler.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\MacroAssemblerX86.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\MacroAssemblerX86Common.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\RepatchBuffer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\assembler\X86Assembler.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="yarr"
+ >
+ <File
+ RelativePath="..\..\yarr\RegexCompiler.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexCompiler.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexInterpreter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexInterpreter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexJIT.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexJIT.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexParser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\yarr\RegexPattern.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="jit"
+ >
+ <File
+ RelativePath="..\..\jit\ExecutableAllocator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\ExecutableAllocator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JIT.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JIT.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITArithmetic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITArithmetic32_64.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITCall.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITCall32_64.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITCode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITInlineMethods.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITOpcodes.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITOpcodes32_64.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITPropertyAccess.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITPropertyAccess32_64.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITStubCall.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITStubs.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JITStubs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\JSInterfaceJIT.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\SpecializedThunkJIT.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\ThunkGenerators.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jit\ThunkGenerators.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resources"
+ >
+ <File
+ RelativePath=".\JavaScriptCore.rc"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="interpreter"
+ >
+ <File
+ RelativePath="..\..\interpreter\CachedCall.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\CallFrame.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\CallFrame.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\CallFrameClosure.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\Interpreter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\Interpreter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\Register.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\RegisterFile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\interpreter\RegisterFile.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="bytecompiler"
+ >
+ <File
+ RelativePath="..\..\bytecompiler\BytecodeGenerator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecompiler\BytecodeGenerator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecompiler\Label.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecompiler\LabelScope.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecompiler\NodesCodegen.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\bytecompiler\RegisterID.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="parser"
+ >
+ <File
+ RelativePath="..\..\parser\ASTBuilder.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\JSParser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\JSParser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\Lexer.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\Lexer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\NodeConstructors.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\NodeInfo.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\Nodes.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\Nodes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\Parser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\Parser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\ParserArena.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\ParserArena.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\ResultType.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\SourceCode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\SourceProvider.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\SyntaxChecker.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Derived Sources"
+ >
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\ArrayPrototype.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\DatePrototype.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\lexer.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathObject.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\NumberConstructor.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RegExpConstructor.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RegExpObject.lut.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\StringPrototype.lut.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\..\config.h"
+ >
+ </File>
+ <File
+ RelativePath=".\JavaScriptCore.def"
+ >
+ </File>
+ <File
+ RelativePath=".\JavaScriptCore_debug.def"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops
index fe884aa..61e10b4 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="JavaScriptCoreCF"
- >
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="CoreFoundation$(LibraryConfigSuffix).lib"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="JavaScriptCoreCF"
+ >
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="CoreFoundation$(LibraryConfigSuffix).lib"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops
index 8c9e31f..1e7aed7 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="JavaScriptCoreCFLite"
- >
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="CFLite$(WebKitConfigSuffix).lib"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="JavaScriptCoreCFLite"
+ >
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="CFLite$(WebKitConfigSuffix).lib"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
index 6929c8a..f0b759f 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="JavaScriptCoreCommon"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../parser/;../../bytecompiler/;../../jit/;../../runtime/;../../bytecode/;../../interpreter/;../../wtf/;../../profiler;../../assembler/;../../debugger/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
- PreprocessorDefinitions="__STD_C"
- ForcedIncludeFiles="ICUVersion.h"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="gdi32.lib oleaut32.lib winmm.lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib WTF$(WebKitConfigSuffix).lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
- ModuleDefinitionFile="JavaScriptCore.def"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
- />
- <Tool
- Name="VCPreBuildEventTool"
- CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
- />
- <Tool
- Name="VCPreLinkEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\icuuc$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\icuuc$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\icuin$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\icuin$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;cmd /c&#x0D;&#x0A;"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="JavaScriptCoreCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../parser/;../../bytecompiler/;../../jit/;../../runtime/;../../bytecode/;../../interpreter/;../../wtf/;../../profiler;../../assembler/;../../debugger/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
+ PreprocessorDefinitions="__STD_C"
+ ForcedIncludeFiles="ICUVersion.h"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="gdi32.lib oleaut32.lib winmm.lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib WTF$(WebKitConfigSuffix).lib"
+ OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
+ AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
+ ModuleDefinitionFile="JavaScriptCore.def"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make
index 1a4e7b3..f05cc8e 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make
@@ -1,7 +1,7 @@
all:
touch "$(WEBKITOUTPUTDIR)\buildfailed"
bash build-generated-files.sh "$(WEBKITOUTPUTDIR)" "$(WEBKITLIBRARIESDIR)"
- bash -c "python react-to-vsprops-changes.py"
+ -bash -c "python react-to-vsprops-changes.py"
-mkdir 2>NUL "$(WEBKITOUTPUTDIR)\include\JavaScriptCore"
xcopy /y /d "..\..\API\APICast.h" "$(WEBKITOUTPUTDIR)\include\JavaScriptCore"
xcopy /y /d "..\..\API\JavaScript.h" "$(WEBKITOUTPUTDIR)\include\JavaScriptCore"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj
index b7a7320..6dad054 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj
@@ -1,91 +1,91 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="JavaScriptCoreGenerated"
- ProjectGUID="{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}"
- RootNamespace="JavaScriptCoreGenerated"
- Keyword="MakeFileProj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="0"
- InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_All|Win32"
- ConfigurationType="0"
- InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="0"
- InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- />
- </Configuration>
- <Configuration
- Name="Release_LTCG|Win32"
- ConfigurationType="0"
- InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- />
- </Configuration>
- <Configuration
- Name="Release_Cairo_CFLite|Win32"
- ConfigurationType="0"
- InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_Cairo_CFLite|Win32"
- ConfigurationType="0"
- InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath=".\build-generated-files.sh"
- >
- </File>
- <File
- RelativePath=".\JavaScriptCoreGenerated.make"
- >
- </File>
- <File
- RelativePath=".\react-to-vsprops-changes.py"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="JavaScriptCoreGenerated"
+ ProjectGUID="{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}"
+ RootNamespace="JavaScriptCoreGenerated"
+ Keyword="MakeFileProj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="0"
+ InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_All|Win32"
+ ConfigurationType="0"
+ InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="0"
+ InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="0"
+ InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_Cairo_CFLite|Win32"
+ ConfigurationType="0"
+ InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_Cairo_CFLite|Win32"
+ ConfigurationType="0"
+ InheritedPropertySheets=".\JavaScriptCoreGeneratedCommon.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\build-generated-files.sh"
+ >
+ </File>
+ <File
+ RelativePath=".\JavaScriptCoreGenerated.make"
+ >
+ </File>
+ <File
+ RelativePath=".\react-to-vsprops-changes.py"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops
index 44ae1d9..786be86 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="JavaScriptCoreGeneratedCommon"
- OutputDirectory="$(WebKitOutputDir)\lib"
- IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\$(ConfigurationName)"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;nmake /nologo -f JavaScriptCoreGenerated.make"
- ReBuildCommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;nmake /nologo -f JavaScriptCoreGenerated.make clean&#x0D;&#x0A;nmake -f JavaScriptCoreGenerated.make"
- CleanCommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;nmake /nologo -f JavaScriptCoreGenerated.make clean"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="JavaScriptCoreGeneratedCommon"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\$(ConfigurationName)"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;nmake /nologo -f JavaScriptCoreGenerated.make"
+ ReBuildCommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;nmake /nologo -f JavaScriptCoreGenerated.make clean&#x0D;&#x0A;nmake -f JavaScriptCoreGenerated.make"
+ CleanCommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;nmake /nologo -f JavaScriptCoreGenerated.make clean"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd
new file mode 100644
index 0000000..f011495
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd
@@ -0,0 +1 @@
+if exist "%WEBKITOUTPUTDIR%\buildfailed" del "%WEBKITOUTPUTDIR%\buildfailed"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd
new file mode 100644
index 0000000..cdacbf1
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd
@@ -0,0 +1,8 @@
+%SystemDrive%\cygwin\bin\which.exe bash
+if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%
+cmd /c
+if exist "%WEBKITOUTPUTDIR%\buildfailed" grep XX%PROJECTNAME%XX "%WEBKITOUTPUTDIR%\buildfailed"
+if errorlevel 1 exit 1
+echo XX%PROJECTNAME%XX > "%WEBKITOUTPUTDIR%\buildfailed"
+
+bash "%WEBKITLIBRARIESDIR%\tools\scripts\auto-version.sh" "%INTDIR%"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd
new file mode 100644
index 0000000..3ff5069
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd
@@ -0,0 +1,9 @@
+mkdir 2>NUL "%IntDir%\lib"
+
+if exist "%WebKitLibrariesDir%\lib\icuuc%LibraryConfigSuffix%.lib" copy /y "%WebKitLibrariesDir%\lib\icuuc%LibraryConfigSuffix%.lib" "%IntDir%\lib\libicuuc%LibraryConfigSuffix%.lib"
+if exist "%WebKitLibrariesDir%\lib\icuin%LibraryConfigSuffix%.lib" copy /y "%WebKitLibrariesDir%\lib\icuin%LibraryConfigSuffix%.lib" "%IntDir%\lib\libicuin%LibraryConfigSuffix%.lib"
+
+if exist "%WebKitLibrariesDir%\lib\libicuuc%LibraryConfigSuffix%.lib" copy /y "%WebKitLibrariesDir%\lib\libicuuc%LibraryConfigSuffix%.lib" "%IntDir%\lib"
+if exist "%WebKitLibrariesDir%\lib\libicuin%LibraryConfigSuffix%.lib" copy /y "%WebKitLibrariesDir%\lib\libicuin%LibraryConfigSuffix%.lib" "%IntDir%\lib"
+
+cmd /c
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh
index fafe5c8..8d510de 100755
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh
@@ -10,7 +10,7 @@ then
echo "#define U_DISABLE_RENAMING $?" > "${ICUVERSION_H_PATH}"
fi
-NUMCPUS=`../../../WebKitTools/Scripts/num-cpus`
+NUMCPUS=`../../../Tools/Scripts/num-cpus`
XSRCROOT="`pwd`/../.."
XSRCROOT=`realpath "$XSRCROOT"`
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py
index a2a0543..0d5d6fb 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py
@@ -6,22 +6,32 @@ import re
import sys
-def file_modification_times(directory):
- for dirpath, dirnames, filenames in os.walk(directory):
- for filename in filenames:
- yield os.path.getmtime(os.path.join(dirpath, filename))
-
-
def main():
- vsprops_directory = os.path.join(os.environ['WEBKITLIBRARIESDIR'], 'tools', 'vsprops')
- newest_vsprops_time = max(file_modification_times(vsprops_directory))
+ # It's a little unfortunate that we're relying on the location of this
+ # script to find the top-level source directory.
+ top_level_directory = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
+ vsprops_directory = os.path.join(top_level_directory, 'WebKitLibraries', 'win', 'tools', 'vsprops')
+ vsprops_files = glob.glob(os.path.join(vsprops_directory, '*.vsprops'))
+ assert len(vsprops_files), "Couldn't find any .vsprops files in %s" % vsprops_directory
+ newest_vsprops_time = max(map(os.path.getmtime, vsprops_files))
+
+ # Delete any manifest-related files because Visual Studio isn't smart
+ # enough to figure out that it might need to rebuild them.
obj_directory = os.path.join(os.environ['WEBKITOUTPUTDIR'], 'obj')
for manifest_file in glob.iglob(os.path.join(obj_directory, '*', '*', '*.manifest*')):
manifest_time = os.path.getmtime(manifest_file)
if manifest_time < newest_vsprops_time:
+ print 'Deleting %s' % manifest_file
os.remove(manifest_file)
+ # Touch wtf/Platform.h so all files will be recompiled. This is necessary
+ # to pick up changes to preprocessor macros (e.g., ENABLE_*).
+ wtf_platform_h = os.path.join(top_level_directory, 'JavaScriptCore', 'wtf', 'Platform.h')
+ if os.path.getmtime(wtf_platform_h) < newest_vsprops_time:
+ print 'Touching wtf/Platform.h'
+ os.utime(wtf_platform_h, None)
+
if __name__ == '__main__':
sys.exit(main())
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln
index e85ff9d..f55e7d6 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln
@@ -1,83 +1,83 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore", "JavaScriptCore\JavaScriptCore.vcproj", "{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
- ProjectSection(ProjectDependencies) = postProject
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WTF", "WTF\WTF.vcproj", "{AA8A5A85-592B-4357-BC60-E0E91E026AF6}"
- ProjectSection(ProjectDependencies) = postProject
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCoreGenerated", "JavaScriptCore\JavaScriptCoreGenerated.vcproj", "{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsc", "jsc\jsc.vcproj", "{C59E5129-B453-49B7-A52B-1E104715F76E}"
- ProjectSection(ProjectDependencies) = postProject
- {011D10F1-B656-4A1B-A0C3-3842F02122C5} = {011D10F1-B656-4A1B-A0C3-3842F02122C5}
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug_All|Win32 = Debug_All|Win32
- Debug|Win32 = Debug|Win32
- Release_LTCG|Win32 = Release_LTCG|Win32
- Release_PGOInstrument|Win32 = Release_PGOInstrument|Win32
- Release_PGOOptimize|Win32 = Release_PGOOptimize|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.ActiveCfg = Debug|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.Build.0 = Debug|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.ActiveCfg = Release_PGOInstrument|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.Build.0 = Release_PGOInstrument|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.ActiveCfg = Release_PGOOptimize|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.Build.0 = Release_PGOOptimize|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.ActiveCfg = Release|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.ActiveCfg = Debug|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.Build.0 = Debug|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.ActiveCfg = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.Build.0 = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.ActiveCfg = Debug|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.Build.0 = Debug|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.ActiveCfg = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore", "JavaScriptCore\JavaScriptCore.vcproj", "{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WTF", "WTF\WTF.vcproj", "{AA8A5A85-592B-4357-BC60-E0E91E026AF6}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCoreGenerated", "JavaScriptCore\JavaScriptCoreGenerated.vcproj", "{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsc", "jsc\jsc.vcproj", "{C59E5129-B453-49B7-A52B-1E104715F76E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5} = {011D10F1-B656-4A1B-A0C3-3842F02122C5}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug_All|Win32 = Debug_All|Win32
+ Debug|Win32 = Debug|Win32
+ Release_LTCG|Win32 = Release_LTCG|Win32
+ Release_PGOInstrument|Win32 = Release_PGOInstrument|Win32
+ Release_PGOOptimize|Win32 = Release_PGOOptimize|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.Build.0 = Debug|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.ActiveCfg = Release_PGOInstrument|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOInstrument|Win32.Build.0 = Release_PGOInstrument|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.ActiveCfg = Release_PGOOptimize|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_PGOOptimize|Win32.Build.0 = Release_PGOOptimize|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.ActiveCfg = Release|Win32
+ {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.Build.0 = Debug|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.ActiveCfg = Release|Win32
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.Build.0 = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.Build.0 = Debug|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.ActiveCfg = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOInstrument|Win32.Build.0 = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.ActiveCfg = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release_PGOOptimize|Win32.Build.0 = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.ActiveCfg = Release|Win32
+ {C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
index 3609939..e232683 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
@@ -1,891 +1,914 @@
-<?xml version="1.0" encoding="windows-1251"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="WTF"
- ProjectGUID="{AA8A5A85-592B-4357-BC60-E0E91E026AF6}"
- RootNamespace="WTF"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="4"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\WTFCommon.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="4"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\WTFCommon.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_All|Win32"
- ConfigurationType="4"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\WTFCommon.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_LTCG|Win32"
- ConfigurationType="4"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\WTFCommon.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_Cairo_CFLite|Win32"
- ConfigurationType="4"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\WTFCommon.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_Cairo_CFLite|Win32"
- ConfigurationType="4"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\WTFCommon.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="win"
- >
- <File
- RelativePath="..\..\wtf\win\MainThreadWin.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\win\OwnPtrWin.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="unicode"
- >
- <File
- RelativePath="..\..\wtf\unicode\Collator.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\unicode\Unicode.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\unicode\UnicodeMacrosFromICU.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\unicode\UTF8.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\unicode\UTF8.h"
- >
- </File>
- <Filter
- Name="icu"
- >
- <File
- RelativePath="..\..\wtf\unicode\icu\CollatorICU.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\unicode\icu\UnicodeIcu.h"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="text"
- >
- <File
- RelativePath="..\..\wtf\text\AtomicString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\AtomicString.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\AtomicStringHash.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\AtomicStringImpl.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\CString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\CString.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringBuffer.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringBuilder.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringBuilder.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringConcatenate.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringHash.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringImpl.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringImpl.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringImplBase.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\StringStatics.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\WTFString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\text\WTFString.h"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\..\wtf\AlwaysInline.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ASCIICType.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Assertions.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Assertions.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Atomics.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\AVLTree.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Bitmap.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\BumpPointerAllocator.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ByteArray.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ByteArray.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Complex.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\CrossThreadRefCounted.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\CurrentTime.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\CurrentTime.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\DecimalNumber.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\DecimalNumber.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Deque.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\DisallowCType.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\dtoa.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\dtoa.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\FastAllocBase.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\FastMalloc.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- DisableSpecificWarnings="4702"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release_LTCG|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- DisableSpecificWarnings="4702"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release_Cairo_CFLite|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- DisableSpecificWarnings="4702"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\wtf\FastMalloc.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\FixedArray.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Forward.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\GetPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashCountedSet.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashFunctions.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashIterators.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashMap.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashSet.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashTable.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashTable.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\HashTraits.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ListHashSet.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ListRefPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Locker.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MainThread.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MainThread.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MallocZoneSupport.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MathExtras.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MD5.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MD5.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\MessageQueue.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Noncopyable.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\NonCopyingSort.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\NotFound.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\NullPtr.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\NullPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\OwnArrayPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\OwnArrayPtrCommon.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\OwnFastMallocPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\OwnPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\OwnPtrCommon.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PageAllocation.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PageAllocation.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PageReservation.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PassOwnArrayPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PassOwnPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PassRefPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Platform.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PlatformRefPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\PossiblyNull.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RandomNumber.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RandomNumber.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RandomNumberSeed.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RefCounted.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RefCountedLeakCounter.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RefCountedLeakCounter.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RefPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RefPtrHashMap.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\RetainPtr.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\SegmentedVector.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\SizeLimits.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\StaticConstructors.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\StdLibExtras.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\StringExtras.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\StringExtras.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\StringHasher.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TCPackedCache.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TCPageMap.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TCSpinLock.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TCSystemAlloc.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TCSystemAlloc.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Threading.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Threading.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ThreadingNone.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ThreadingPrimitives.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ThreadingWin.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ThreadSafeShared.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ThreadSpecific.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ThreadSpecificWin.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TypeTraits.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\TypeTraits.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\UnusedParam.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\ValueCheck.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Vector.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\Vector3.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\VectorTraits.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\VMTags.h"
- >
- </File>
- <File
- RelativePath="..\..\wtf\WTFThreadData.cpp"
- >
- </File>
- <File
- RelativePath="..\..\wtf\WTFThreadData.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WTF"
+ ProjectGUID="{AA8A5A85-592B-4357-BC60-E0E91E026AF6}"
+ RootNamespace="WTF"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\WTFCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\WTFCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_All|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\WTFCommon.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\WTFCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_Cairo_CFLite|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\WTFCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_Cairo_CFLite|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\WTFCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="win"
+ >
+ <File
+ RelativePath="..\..\wtf\win\MainThreadWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\win\OwnPtrWin.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="unicode"
+ >
+ <File
+ RelativePath="..\..\wtf\unicode\Collator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\unicode\Unicode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\unicode\UnicodeMacrosFromICU.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\unicode\UTF8.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\unicode\UTF8.h"
+ >
+ </File>
+ <Filter
+ Name="icu"
+ >
+ <File
+ RelativePath="..\..\wtf\unicode\icu\CollatorICU.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\unicode\icu\UnicodeIcu.h"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="text"
+ >
+ <File
+ RelativePath="..\..\wtf\text\AtomicString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\AtomicString.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\AtomicStringHash.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\AtomicStringImpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\CString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\CString.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringBuffer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringBuilder.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringBuilder.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringConcatenate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringHash.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringImpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringImplBase.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\StringStatics.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\WTFString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\text\WTFString.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\..\wtf\AlwaysInline.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ASCIICType.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Assertions.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Assertions.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Atomics.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\AVLTree.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Bitmap.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\BumpPointerAllocator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ByteArray.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ByteArray.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Complex.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\CrossThreadRefCounted.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\CurrentTime.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\CurrentTime.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\DecimalNumber.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\DecimalNumber.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Deque.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\DisallowCType.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\dtoa.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\dtoa.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\FastAllocBase.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\FastMalloc.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableSpecificWarnings="4702"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableSpecificWarnings="4702"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableSpecificWarnings="4702"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\wtf\FastMalloc.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\FixedArray.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Forward.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\GetPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashCountedSet.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashFunctions.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashIterators.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashMap.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashSet.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashTable.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashTable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\HashTraits.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ListHashSet.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ListRefPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Locker.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MainThread.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MainThread.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MallocZoneSupport.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MathExtras.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MD5.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MD5.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\MessageQueue.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Noncopyable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\NonCopyingSort.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\NotFound.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\NullPtr.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\NullPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OSAllocatorWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OwnArrayPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OwnArrayPtrCommon.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OwnFastMallocPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OwnPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OwnPtrCommon.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PageBlock.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PageBlock.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PageAllocation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PageAllocationAligned.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PageAllocationAligned.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PageReservation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PassOwnArrayPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PassOwnPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PassRefPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Platform.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PlatformRefPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\PossiblyNull.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RandomNumber.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RandomNumber.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RandomNumberSeed.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RefCounted.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RefCountedLeakCounter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RefCountedLeakCounter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RefPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RefPtrHashMap.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\RetainPtr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\SegmentedVector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\SizeLimits.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StackBounds.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StackBounds.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StaticConstructors.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StdLibExtras.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StringExtras.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StringExtras.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\StringHasher.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TCPackedCache.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TCPageMap.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TCSpinLock.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TCSystemAlloc.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TCSystemAlloc.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Threading.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Threading.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ThreadingNone.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ThreadingPrimitives.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ThreadingWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ThreadSafeShared.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ThreadSpecific.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ThreadSpecificWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TypeTraits.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\TypeTraits.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\UnusedParam.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\ValueCheck.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Vector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\Vector3.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\VectorTraits.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\VMTags.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\WTFThreadData.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\WTFThreadData.h"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops
index d81a604..07f679f 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops
@@ -1,28 +1,20 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="WTFCommon"
- OutputDirectory="$(WebKitOutputDir)\lib"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\$(ConfigurationName)\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../pcre/;../../parser/;../../wtf/;../../wtf/unicode/;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;../../../icu/include;../../bindings;../../bindings/c;../../bindings/jni;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
- PreprocessorDefinitions="__STD_C"
- ForcedIncludeFiles="ICUVersion.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- />
- <Tool
- Name="VCLibrarianTool"
- AdditionalDependencies="user32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).lib"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
- />
- <Tool
- Name="VCPreBuildEventTool"
- CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WTFCommon"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\$(ConfigurationName)\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../pcre/;../../parser/;../../wtf/;../../wtf/unicode/;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;../../../icu/include;../../bindings;../../bindings/c;../../bindings/jni;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
+ PreprocessorDefinitions="__STD_C"
+ ForcedIncludeFiles="ICUVersion.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalDependencies="user32.lib"
+ OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).lib"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd
new file mode 100644
index 0000000..f011495
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd
@@ -0,0 +1 @@
+if exist "%WEBKITOUTPUTDIR%\buildfailed" del "%WEBKITOUTPUTDIR%\buildfailed"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd
new file mode 100644
index 0000000..3a84c26
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd
@@ -0,0 +1,6 @@
+%SystemDrive%\cygwin\bin\which.exe bash
+if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%
+cmd /c
+if exist "%WEBKITOUTPUTDIR%\buildfailed" grep XX%PROJECTNAME%XX "%WEBKITOUTPUTDIR%\buildfailed"
+if errorlevel 1 exit 1
+echo XX%PROJECTNAME%XX > "%WEBKITOUTPUTDIR%\buildfailed"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
index ef5e114..a6b59d3 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
@@ -1,413 +1,412 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="jsc"
- ProjectGUID="{C59E5129-B453-49B7-A52B-1E104715F76E}"
- RootNamespace="jsc"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\jscCommon.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\jscCommon.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_Cairo_CFLite|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\jscCommon.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_All|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\jscCommon.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_LTCG|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\jscCommon.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_Cairo_CFLite|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\jscCommon.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\AtomicString.cpp"
- >
- </File>
- <File
- RelativePath="..\..\jsc.cpp"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\StringBuilder.cpp"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\StringImpl.cpp"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\WTFString.cpp"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="jsc"
+ ProjectGUID="{C59E5129-B453-49B7-A52B-1E104715F76E}"
+ RootNamespace="jsc"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\jscCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\jscCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_Cairo_CFLite|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\jscCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_All|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\jscCommon.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\jscCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_Cairo_CFLite|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\jscCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\AtomicString.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\jsc.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\StringBuilder.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\StringImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\include\private\JavaScriptCore\WTFString.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops
index b63729c..fed83cd 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="jscCommon"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\obj\JavaScriptCore\$(ConfigurationName)\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../pcre/;../../assembler/;../../API/;../../parser/;../../runtime/;../../VM/;../../bytecode/;../../interpreter/;../../wtf/;../../debugger/;../../bytecompiler/;../../profiler;../../jit/;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
- PreprocessorDefinitions="__STD_C"
- ForcedIncludeFiles="ICUVersion.h"
- ForcedUsingFiles=""
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib user32.lib"
- AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
- SubSystem="1"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt44.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt44.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt44$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt44$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\libicuin$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libicuin$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\libicuuc$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libicuuc$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\objc$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\objc$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\ASL$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\ASL$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\libdispatch$(LibraryConfigSuffix).dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libdispatch$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;cmd /c&#x0D;&#x0A;"
- />
- <Tool
- Name="VCPreBuildEventTool"
- CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
- />
- <Tool
- Name="VCPreLinkEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\icuuc$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\icuuc$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\icuin$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\icuin$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;cmd /c&#x0D;&#x0A;"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="jscCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\obj\JavaScriptCore\$(ConfigurationName)\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../pcre/;../../assembler/;../../API/;../../parser/;../../runtime/;../../VM/;../../bytecode/;../../interpreter/;../../wtf/;../../debugger/;../../bytecompiler/;../../profiler;../../jit/;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
+ PreprocessorDefinitions="__STD_C"
+ ForcedIncludeFiles="ICUVersion.h"
+ ForcedUsingFiles=""
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib user32.lib"
+ AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
+ SubSystem="1"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPostBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPostBuild.cmd
new file mode 100644
index 0000000..396e6ce
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPostBuild.cmd
@@ -0,0 +1,25 @@
+if exist "%WEBKITOUTPUTDIR%\buildfailed" del "%WEBKITOUTPUTDIR%\buildfailed"
+
+mkdir 2>NUL "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt46.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt46.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt46%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt46%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt44.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt44.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt44%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt44%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\libicuin%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\libicuin%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\libicuuc%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\libicuuc%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt40.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt40.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt40%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt40%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icuin40%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuin40%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icuuc40%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuuc40%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt42.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt42.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icudt42%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icudt42%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icuin42%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuin42%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\icuuc42%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\icuuc42%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\CoreFoundation%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\CoreFoundation%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\CoreFoundation.resources" xcopy /y /d /e /i "%WEBKITLIBRARIESDIR%\bin\CoreFoundation.resources" "%WEBKITOUTPUTDIR%\bin\CoreFoundation.resources"
+if exist "%WEBKITLIBRARIESDIR%\bin\pthreadVC2%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\pthreadVC2%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\objc%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\objc%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\ASL%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\ASL%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+if exist "%WEBKITLIBRARIESDIR%\bin\libdispatch%LIBRARYCONFIGSUFFIX%.dll" xcopy /y /d "%WEBKITLIBRARIESDIR%\bin\libdispatch%LIBRARYCONFIGSUFFIX%.dll" "%WEBKITOUTPUTDIR%\bin"
+
+cmd /c
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreBuild.cmd
new file mode 100644
index 0000000..3a84c26
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreBuild.cmd
@@ -0,0 +1,6 @@
+%SystemDrive%\cygwin\bin\which.exe bash
+if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%
+cmd /c
+if exist "%WEBKITOUTPUTDIR%\buildfailed" grep XX%PROJECTNAME%XX "%WEBKITOUTPUTDIR%\buildfailed"
+if errorlevel 1 exit 1
+echo XX%PROJECTNAME%XX > "%WEBKITOUTPUTDIR%\buildfailed"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreLink.cmd b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreLink.cmd
new file mode 100644
index 0000000..8523026
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscPreLink.cmd
@@ -0,0 +1,9 @@
+mkdir 2>NUL "%INTDIR%\lib"
+
+if exist "%WEBKITLIBRARIESDIR%\lib\icuuc%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\icuuc%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib\libicuuc%LIBRARYCONFIGSUFFIX%.lib"
+if exist "%WEBKITLIBRARIESDIR%\lib\icuin%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\icuin%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib\libicuin%LIBRARYCONFIGSUFFIX%.lib"
+
+if exist "%WEBKITLIBRARIESDIR%\lib\libicuuc%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\libicuuc%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib"
+if exist "%WEBKITLIBRARIESDIR%\lib\libicuin%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\libicuin%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib"
+
+cmd /c
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj
index 17f8312..e0011e3 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj
@@ -1,449 +1,448 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="testapi"
- ProjectGUID="{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}"
- RootNamespace="testapi"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_Cairo_CFLite|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCFLite.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_Cairo_CFLite|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCFLite.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug_All|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release_LTCG|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\..\API\tests\testapi.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_Cairo_CFLite|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release_Cairo_CFLite|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_All|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release_LTCG|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\API\tests\testapi.js"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="testapi"
+ ProjectGUID="{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}"
+ RootNamespace="testapi"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_Cairo_CFLite|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCFLite.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_Cairo_CFLite|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCFLite.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_All|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\..\API\tests\testapi.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\API\tests\testapi.js"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiCommon.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiCommon.vsprops
index a1a7267..d0fea83 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiCommon.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiCommon.vsprops
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="testapiCommon"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\API&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
- WarningLevel="4"
- Detect64BitPortabilityProblems="true"
- ForcedIncludeFiles="ICUVersion.h"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WTF$(WebKitConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib"
- AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
- SubSystem="1"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\API\tests\testapi.js&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
- />
- <Tool
- Name="VCPreBuildEventTool"
- CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
- />
- <Tool
- Name="VCPreLinkEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\icuuc$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\icuuc$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\icuin$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\icuin$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\libicuuc$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot; copy /y &quot;$(WebKitLibrariesDir)\lib\libicuin$(LibraryConfigSuffix).lib&quot; &quot;$(IntDir)\lib&quot;&#x0D;&#x0A;&#x0D;&#x0A;cmd /c&#x0D;&#x0A;"
- />
-</VisualStudioPropertySheet>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="testapiCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\API&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="true"
+ ForcedIncludeFiles="ICUVersion.h"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WTF$(WebKitConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib"
+ AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
+ SubSystem="1"
+ />
+</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd
new file mode 100644
index 0000000..af5c949
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd
@@ -0,0 +1,3 @@
+if exist "%WEBKITOUTPUTDIR%\buildfailed" del "%WEBKITOUTPUTDIR%\buildfailed"
+
+xcopy /y /d "%PROJECTDIR%\..\..\API\tests\testapi.js" "%OUTDIR%"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd
new file mode 100644
index 0000000..3a84c26
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd
@@ -0,0 +1,6 @@
+%SystemDrive%\cygwin\bin\which.exe bash
+if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%
+cmd /c
+if exist "%WEBKITOUTPUTDIR%\buildfailed" grep XX%PROJECTNAME%XX "%WEBKITOUTPUTDIR%\buildfailed"
+if errorlevel 1 exit 1
+echo XX%PROJECTNAME%XX > "%WEBKITOUTPUTDIR%\buildfailed"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreLink.cmd b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreLink.cmd
new file mode 100644
index 0000000..8523026
--- /dev/null
+++ b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiPreLink.cmd
@@ -0,0 +1,9 @@
+mkdir 2>NUL "%INTDIR%\lib"
+
+if exist "%WEBKITLIBRARIESDIR%\lib\icuuc%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\icuuc%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib\libicuuc%LIBRARYCONFIGSUFFIX%.lib"
+if exist "%WEBKITLIBRARIESDIR%\lib\icuin%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\icuin%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib\libicuin%LIBRARYCONFIGSUFFIX%.lib"
+
+if exist "%WEBKITLIBRARIESDIR%\lib\libicuuc%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\libicuuc%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib"
+if exist "%WEBKITLIBRARIESDIR%\lib\libicuin%LIBRARYCONFIGSUFFIX%.lib" copy /y "%WEBKITLIBRARIESDIR%\lib\libicuin%LIBRARYCONFIGSUFFIX%.lib" "%INTDIR%\lib"
+
+cmd /c
diff --git a/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
index a1e1c5c..5440075 100644
--- a/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+++ b/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
@@ -48,6 +48,8 @@
0BDFFAE10FC6193100D69EF4 /* OwnFastMallocPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BDFFAD10FC616EC00D69EF4 /* OwnFastMallocPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
0BF28A2911A33DC300638F84 /* SizeLimits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF28A2811A33DC300638F84 /* SizeLimits.cpp */; };
0F29479C126E698C00B3ABF5 /* DecimalNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F29479B126E698C00B3ABF5 /* DecimalNumber.cpp */; };
+ 1400067712A6F7830064D123 /* OSAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1400067612A6F7830064D123 /* OSAllocator.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1400069312A6F9E10064D123 /* OSAllocatorPosix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1400069212A6F9E10064D123 /* OSAllocatorPosix.cpp */; };
14035DB110DBFB2A00FFFFE7 /* WeakGCPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 14035DB010DBFB2A00FFFFE7 /* WeakGCPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
140566C4107EC255005DBC8D /* JSAPIValueWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC0894D50FAFBA2D00001865 /* JSAPIValueWrapper.cpp */; };
140566D1107EC267005DBC8D /* JSStaticScopeObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7E42C190E3938830065A544 /* JSStaticScopeObject.cpp */; };
@@ -159,6 +161,8 @@
14A42E3F0F4F60EE00599099 /* TimeoutChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14A42E3D0F4F60EE00599099 /* TimeoutChecker.cpp */; };
14A42E400F4F60EE00599099 /* TimeoutChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A42E3E0F4F60EE00599099 /* TimeoutChecker.h */; settings = {ATTRIBUTES = (Private, ); }; };
14ABDF600A437FEF00ECCA01 /* JSCallbackObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14ABDF5E0A437FEF00ECCA01 /* JSCallbackObject.cpp */; };
+ 14B3EF0512BC24DD00D29EFF /* PageBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B3EF0312BC24DD00D29EFF /* PageBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 14B3EF0612BC24DD00D29EFF /* PageBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14B3EF0412BC24DD00D29EFF /* PageBlock.cpp */; };
14B8EC720A5652090062BE54 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6560A4CF04B3B3E7008AE952 /* CoreFoundation.framework */; };
14BD59C50A3E8F9F00BAF59C /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 932F5BD90822A1C700736975 /* JavaScriptCore.framework */; };
14BD5A300A3E91F600BAF59C /* JSContextRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14BD5A290A3E91F600BAF59C /* JSContextRef.cpp */; };
@@ -170,6 +174,8 @@
14F8BA3E107EC886009892DC /* FastMalloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65E217B908E7EECC0023E5F6 /* FastMalloc.cpp */; };
14F8BA43107EC88C009892DC /* TCSystemAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6541BD7008E80A17002CBEE7 /* TCSystemAlloc.cpp */; };
14F8BA4F107EC899009892DC /* Collector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A8520255597D01FF60F7 /* Collector.cpp */; };
+ 14FFF98C12BFFF7500795BB8 /* PageAllocationAligned.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14FFF98A12BFFF7500795BB8 /* PageAllocationAligned.cpp */; };
+ 14FFF98D12BFFF7500795BB8 /* PageAllocationAligned.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FFF98B12BFFF7500795BB8 /* PageAllocationAligned.h */; settings = {ATTRIBUTES = (Private, ); }; };
180B9B080F16D94F009BDBC5 /* CurrentTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 180B9AF00F16C569009BDBC5 /* CurrentTime.h */; settings = {ATTRIBUTES = (Private, ); }; };
180B9BFE0F16E94D009BDBC5 /* CurrentTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */; };
18BAB55310DAE054000D945B /* ThreadIdentifierDataPthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18BAB52710DADFCD000D945B /* ThreadIdentifierDataPthreads.cpp */; };
@@ -203,7 +209,6 @@
860161E50F3A83C100F84710 /* MacroAssemblerX86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = 860161E10F3A83C100F84710 /* MacroAssemblerX86_64.h */; };
860161E60F3A83C100F84710 /* MacroAssemblerX86Common.h in Headers */ = {isa = PBXBuildFile; fileRef = 860161E20F3A83C100F84710 /* MacroAssemblerX86Common.h */; };
8626BECF11928E3900782FAB /* StringStatics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8626BECE11928E3900782FAB /* StringStatics.cpp */; };
- 8627E5EB11F1281900A313B5 /* PageAllocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8627E5E911F1281900A313B5 /* PageAllocation.cpp */; };
8627E5EC11F1281900A313B5 /* PageAllocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8627E5EA11F1281900A313B5 /* PageAllocation.h */; settings = {ATTRIBUTES = (Private, ); }; };
862AF4B612239C7B0024E5B8 /* DecimalNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 862AF4B512239C7B0024E5B8 /* DecimalNumber.h */; settings = {ATTRIBUTES = (Private, ); }; };
863B23E00FC6118900703AA4 /* MacroAssemblerCodeRef.h in Headers */ = {isa = PBXBuildFile; fileRef = 863B23DF0FC60E6200703AA4 /* MacroAssemblerCodeRef.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -249,6 +254,8 @@
86D3B2C610156BDE002865E7 /* MacroAssemblerARM.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D3B2C210156BDE002865E7 /* MacroAssemblerARM.h */; };
86D3B3C310159D7F002865E7 /* LinkBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D3B3C110159D7F002865E7 /* LinkBuffer.h */; };
86D3B3C410159D7F002865E7 /* RepatchBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D3B3C210159D7F002865E7 /* RepatchBuffer.h */; };
+ 86D87DAE12BCA7D1008E73A1 /* StackBounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86D87DA512BC4B14008E73A1 /* StackBounds.cpp */; };
+ 86D87DDB12BCAF94008E73A1 /* StackBounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D87DA612BC4B14008E73A1 /* StackBounds.h */; settings = {ATTRIBUTES = (Private, ); }; };
86DB64640F95C6FC00D7D921 /* ExecutableAllocatorFixedVMPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86DB64630F95C6FC00D7D921 /* ExecutableAllocatorFixedVMPool.cpp */; };
86E116B10FE75AC800B512BC /* CodeLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 86E116B00FE75AC800B512BC /* CodeLocation.h */; };
86E85539111B9968001AF51E /* JSStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 86E85538111B9968001AF51E /* JSStringBuilder.h */; };
@@ -534,8 +541,6 @@
BCFD8C920EEB2EE700283848 /* JumpTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCFD8C900EEB2EE700283848 /* JumpTable.cpp */; };
BCFD8C930EEB2EE700283848 /* JumpTable.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFD8C910EEB2EE700283848 /* JumpTable.h */; };
C0A272630E50A06300E96E15 /* NotFound.h in Headers */ = {isa = PBXBuildFile; fileRef = C0A2723F0E509F1E00E96E15 /* NotFound.h */; settings = {ATTRIBUTES = (Private, ); }; };
- DD2724681208D1FF00F9ABE7 /* AlignedMemoryAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2724671208D1FF00F9ABE7 /* AlignedMemoryAllocator.h */; };
- DD2724691208D1FF00F9ABE7 /* AlignedMemoryAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2724671208D1FF00F9ABE7 /* AlignedMemoryAllocator.h */; settings = {ATTRIBUTES = (Private, ); }; };
DD377CBC12072C18006A2517 /* Bitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = DD377CBB12072C18006A2517 /* Bitmap.h */; settings = {ATTRIBUTES = (Private, ); }; };
DDE82AD31209D955005C1756 /* GCHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE82AD11209D955005C1756 /* GCHandle.cpp */; };
DDE82AD41209D955005C1756 /* GCHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE82AD11209D955005C1756 /* GCHandle.cpp */; };
@@ -556,6 +561,7 @@
E1EF79AA0CE97BA60088D500 /* UTF8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EF79A80CE97BA60088D500 /* UTF8.cpp */; };
E48E0F2D0F82151700A8CA37 /* FastAllocBase.h in Headers */ = {isa = PBXBuildFile; fileRef = E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
F3BD31ED126735770065467F /* TextPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = F3BD31D0126730180065467F /* TextPosition.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ FDA15C1E12B0305C003A583A /* Complex.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA15C1612B03028003A583A /* Complex.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE1B447A0ECCD73B004F4DD1 /* StdLibExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */; settings = {ATTRIBUTES = (Private, ); }; };
/* End PBXBuildFile section */
@@ -649,6 +655,8 @@
0BDFFAD40FC6171000D69EF4 /* CrossThreadRefCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadRefCounted.h; sourceTree = "<group>"; };
0BF28A2811A33DC300638F84 /* SizeLimits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SizeLimits.cpp; sourceTree = "<group>"; };
0F29479B126E698C00B3ABF5 /* DecimalNumber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DecimalNumber.cpp; sourceTree = "<group>"; };
+ 1400067612A6F7830064D123 /* OSAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSAllocator.h; sourceTree = "<group>"; };
+ 1400069212A6F9E10064D123 /* OSAllocatorPosix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OSAllocatorPosix.cpp; sourceTree = "<group>"; };
14035DB010DBFB2A00FFFFE7 /* WeakGCPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakGCPtr.h; sourceTree = "<group>"; };
140D17D60E8AD4A9000CD17D /* JSBasePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBasePrivate.h; sourceTree = "<group>"; };
141211020A48780900480255 /* minidom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = minidom.c; path = tests/minidom.c; sourceTree = "<group>"; };
@@ -713,6 +721,8 @@
14ABB454099C2A0F00E2A24F /* JSType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSType.h; sourceTree = "<group>"; };
14ABDF5D0A437FEF00ECCA01 /* JSCallbackObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCallbackObject.h; sourceTree = "<group>"; };
14ABDF5E0A437FEF00ECCA01 /* JSCallbackObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCallbackObject.cpp; sourceTree = "<group>"; };
+ 14B3EF0312BC24DD00D29EFF /* PageBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageBlock.h; sourceTree = "<group>"; };
+ 14B3EF0412BC24DD00D29EFF /* PageBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageBlock.cpp; sourceTree = "<group>"; };
14B8ECA60A5653980062BE54 /* JavaScriptCore.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = JavaScriptCore.exp; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
14BD59BF0A3E8F9000BAF59C /* testapi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testapi; sourceTree = BUILT_PRODUCTS_DIR; };
14BD5A290A3E91F600BAF59C /* JSContextRef.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSContextRef.cpp; sourceTree = "<group>"; };
@@ -727,6 +737,8 @@
14DE0D680D02431400AACCA2 /* JSGlobalObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSGlobalObject.cpp; sourceTree = "<group>"; };
14F252560D08DD8D004ECFFF /* JSVariableObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSVariableObject.h; sourceTree = "<group>"; };
14F3488E0E95EF8A003648BC /* CollectorHeapIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectorHeapIterator.h; sourceTree = "<group>"; };
+ 14FFF98A12BFFF7500795BB8 /* PageAllocationAligned.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageAllocationAligned.cpp; sourceTree = "<group>"; };
+ 14FFF98B12BFFF7500795BB8 /* PageAllocationAligned.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageAllocationAligned.h; sourceTree = "<group>"; };
180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CurrentTime.cpp; sourceTree = "<group>"; };
180B9AF00F16C569009BDBC5 /* CurrentTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CurrentTime.h; sourceTree = "<group>"; };
18BAB52710DADFCD000D945B /* ThreadIdentifierDataPthreads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadIdentifierDataPthreads.cpp; sourceTree = "<group>"; };
@@ -813,7 +825,6 @@
860161E10F3A83C100F84710 /* MacroAssemblerX86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerX86_64.h; sourceTree = "<group>"; };
860161E20F3A83C100F84710 /* MacroAssemblerX86Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerX86Common.h; sourceTree = "<group>"; };
8626BECE11928E3900782FAB /* StringStatics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StringStatics.cpp; path = text/StringStatics.cpp; sourceTree = "<group>"; };
- 8627E5E911F1281900A313B5 /* PageAllocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageAllocation.cpp; sourceTree = "<group>"; };
8627E5EA11F1281900A313B5 /* PageAllocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageAllocation.h; sourceTree = "<group>"; };
862AF4B512239C7B0024E5B8 /* DecimalNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DecimalNumber.h; sourceTree = "<group>"; };
863B23DF0FC60E6200703AA4 /* MacroAssemblerCodeRef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerCodeRef.h; sourceTree = "<group>"; };
@@ -862,6 +873,8 @@
86D3B2C210156BDE002865E7 /* MacroAssemblerARM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerARM.h; sourceTree = "<group>"; };
86D3B3C110159D7F002865E7 /* LinkBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkBuffer.h; sourceTree = "<group>"; };
86D3B3C210159D7F002865E7 /* RepatchBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RepatchBuffer.h; sourceTree = "<group>"; };
+ 86D87DA512BC4B14008E73A1 /* StackBounds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StackBounds.cpp; sourceTree = "<group>"; };
+ 86D87DA612BC4B14008E73A1 /* StackBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StackBounds.h; sourceTree = "<group>"; };
86DB64630F95C6FC00D7D921 /* ExecutableAllocatorFixedVMPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutableAllocatorFixedVMPool.cpp; sourceTree = "<group>"; };
86E116B00FE75AC800B512BC /* CodeLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeLocation.h; sourceTree = "<group>"; };
86E85538111B9968001AF51E /* JSStringBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStringBuilder.h; sourceTree = "<group>"; };
@@ -1117,7 +1130,6 @@
C0A2723F0E509F1E00E96E15 /* NotFound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotFound.h; sourceTree = "<group>"; };
D21202280AD4310C00ED79B6 /* DateConversion.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DateConversion.cpp; sourceTree = "<group>"; };
D21202290AD4310C00ED79B6 /* DateConversion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DateConversion.h; sourceTree = "<group>"; };
- DD2724671208D1FF00F9ABE7 /* AlignedMemoryAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlignedMemoryAllocator.h; sourceTree = "<group>"; };
DD377CBB12072C18006A2517 /* Bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bitmap.h; sourceTree = "<group>"; };
DDE82AD11209D955005C1756 /* GCHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GCHandle.cpp; sourceTree = "<group>"; };
DDE82AD21209D955005C1756 /* GCHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCHandle.h; sourceTree = "<group>"; };
@@ -1181,6 +1193,7 @@
F692A8850255597D01FF60F7 /* UString.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UString.cpp; sourceTree = "<group>"; tabWidth = 8; };
F692A8860255597D01FF60F7 /* UString.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = UString.h; sourceTree = "<group>"; tabWidth = 8; };
F692A8870255597D01FF60F7 /* JSValue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSValue.cpp; sourceTree = "<group>"; tabWidth = 8; };
+ FDA15C1612B03028003A583A /* Complex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Complex.h; sourceTree = "<group>"; };
FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StdLibExtras.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -1472,10 +1485,6 @@
65162EF108E6A21C007556CD /* wtf */ = {
isa = PBXGroup;
children = (
- 9714AF2F122F27C60092D9F5 /* url */,
- 06D358A00DAAD9C4003B174E /* mac */,
- 8656573E115BE35200291F40 /* text */,
- E195678D09E7CF1200B89D13 /* unicode */,
93AA4F770957251F0084B3A7 /* AlwaysInline.h */,
938C4F690CA06BC700D9310A /* ASCIICType.h */,
65E217B808E7EECC0023E5F6 /* Assertions.cpp */,
@@ -1486,13 +1495,14 @@
86676D4D11FED55D004B6863 /* BumpPointerAllocator.h */,
A7A1F7AA0F252B3C00E184E2 /* ByteArray.cpp */,
A7A1F7AB0F252B3C00E184E2 /* ByteArray.h */,
+ FDA15C1612B03028003A583A /* Complex.h */,
0BDFFAD40FC6171000D69EF4 /* CrossThreadRefCounted.h */,
180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */,
180B9AF00F16C569009BDBC5 /* CurrentTime.h */,
41359CF40FDD89CB00206180 /* DateMath.cpp */,
41359CF50FDD89CB00206180 /* DateMath.h */,
- 862AF4B512239C7B0024E5B8 /* DecimalNumber.h */,
0F29479B126E698C00B3ABF5 /* DecimalNumber.cpp */,
+ 862AF4B512239C7B0024E5B8 /* DecimalNumber.h */,
5186111D0CC824830081412B /* Deque.h */,
938C4F6B0CA06BCE00D9310A /* DisallowCType.h */,
651F6412039D5B5F0078395C /* dtoa.cpp */,
@@ -1514,6 +1524,7 @@
657EB7450B708F540063461B /* ListHashSet.h */,
148A1626095D16BB00666D0D /* ListRefPtr.h */,
E1EE79270D6C964500FEA3BA /* Locker.h */,
+ 06D358A00DAAD9C4003B174E /* mac */,
06D358A20DAAD9C4003B174E /* MainThread.cpp */,
06D358A30DAAD9C4003B174E /* MainThread.h */,
5DBD18AF0C5401A700C15EAE /* MallocZoneSupport.h */,
@@ -1521,17 +1532,22 @@
511FC4C7117EE23D00425272 /* MD5.cpp */,
511FC4CA117EE2A800425272 /* MD5.h */,
E1EE798B0D6CA53D00FEA3BA /* MessageQueue.h */,
- 65E1A2F4122B880D00B26097 /* NonCopyingSort.h */,
9303F5690991190000AD71B8 /* Noncopyable.h */,
+ 65E1A2F4122B880D00B26097 /* NonCopyingSort.h */,
C0A2723F0E509F1E00E96E15 /* NotFound.h */,
933F5CDB126922690049191E /* NullPtr.h */,
+ 1400067612A6F7830064D123 /* OSAllocator.h */,
+ 1400069212A6F9E10064D123 /* OSAllocatorPosix.cpp */,
9303F5A409911A5800AD71B8 /* OwnArrayPtr.h */,
BCFBE697122561D200309E9D /* OwnArrayPtrCommon.h */,
0BDFFAD10FC616EC00D69EF4 /* OwnFastMallocPtr.h */,
9303F567099118FA00AD71B8 /* OwnPtr.h */,
440B7AED0FAF7FCB0073323E /* OwnPtrCommon.h */,
- 8627E5E911F1281900A313B5 /* PageAllocation.cpp */,
8627E5EA11F1281900A313B5 /* PageAllocation.h */,
+ 14FFF98A12BFFF7500795BB8 /* PageAllocationAligned.cpp */,
+ 14FFF98B12BFFF7500795BB8 /* PageAllocationAligned.h */,
+ 14B3EF0412BC24DD00D29EFF /* PageBlock.cpp */,
+ 14B3EF0312BC24DD00D29EFF /* PageBlock.h */,
8690231412092D5C00630AF9 /* PageReservation.h */,
BCFBE695122560E800309E9D /* PassOwnArrayPtr.h */,
44DD48520FAEA85000D6B4EB /* PassOwnPtr.h */,
@@ -1549,6 +1565,8 @@
51F648D60BB4E2CA0033D760 /* RetainPtr.h */,
969A07290ED1CE6900F1F681 /* SegmentedVector.h */,
0BF28A2811A33DC300638F84 /* SizeLimits.cpp */,
+ 86D87DA512BC4B14008E73A1 /* StackBounds.cpp */,
+ 86D87DA612BC4B14008E73A1 /* StackBounds.h */,
868BFA5F117D048200B908B1 /* StaticConstructors.h */,
FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */,
E11D51750B2E798D0056C188 /* StringExtras.h */,
@@ -1558,6 +1576,7 @@
6541BD6F08E80A17002CBEE7 /* TCSpinLock.h */,
6541BD7008E80A17002CBEE7 /* TCSystemAlloc.cpp */,
6541BD7108E80A17002CBEE7 /* TCSystemAlloc.h */,
+ 8656573E115BE35200291F40 /* text */,
18BAB52710DADFCD000D945B /* ThreadIdentifierDataPthreads.cpp */,
18BAB52810DADFCD000D945B /* ThreadIdentifierDataPthreads.h */,
5D6A566A0F05995500266145 /* Threading.cpp */,
@@ -1568,7 +1587,9 @@
E1B7C8BD0DA3A3360074B0DC /* ThreadSpecific.h */,
0B330C260F38C62300692DE3 /* TypeTraits.cpp */,
0B4D7E620F319AC800AD7E58 /* TypeTraits.h */,
+ E195678D09E7CF1200B89D13 /* unicode */,
935AF46B09E9D9DB00ACD1D8 /* UnusedParam.h */,
+ 9714AF2F122F27C60092D9F5 /* url */,
E17FF770112131D200076A19 /* ValueCheck.h */,
6592C316098B7DE10003D4F6 /* Vector.h */,
6592C317098B7DE10003D4F6 /* VectorTraits.h */,
@@ -1639,7 +1660,6 @@
7EF6E0BB0EB7A1EC0079AFAF /* runtime */ = {
isa = PBXGroup;
children = (
- DD2724671208D1FF00F9ABE7 /* AlignedMemoryAllocator.h */,
DDF7ABD211F60ED200108E36 /* GCActivityCallback.h */,
DDF7ABD311F60ED200108E36 /* GCActivityCallbackCF.cpp */,
BCF605110E203EF800B9A64D /* ArgList.cpp */,
@@ -2031,7 +2051,6 @@
144007570A5370D20005F061 /* JSNodeList.h in Headers */,
144005CC0A5338F80005F061 /* Node.h in Headers */,
1440074A0A536CC20005F061 /* NodeList.h in Headers */,
- DD2724681208D1FF00F9ABE7 /* AlignedMemoryAllocator.h in Headers */,
DDE82AD61209D955005C1756 /* GCHandle.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -2066,6 +2085,7 @@
86676D5211FED9BC004B6863 /* BumpPointerAllocator.h in Headers */,
A7A1F7AD0F252B3C00E184E2 /* ByteArray.h in Headers */,
969A07230ED1CE3300F1F681 /* BytecodeGenerator.h in Headers */,
+ FDA15C1E12B0305C003A583A /* Complex.h in Headers */,
869D04AF1193B54D00803475 /* CachedTranscendentalFunction.h in Headers */,
BC18C3ED0E16F5CD00B34460 /* CallData.h in Headers */,
1429D8DE0ED2205B00B89619 /* CallFrame.h in Headers */,
@@ -2282,6 +2302,7 @@
BC18C4640E16F5CD00B34460 /* SourceCode.h in Headers */,
BC18C4630E16F5CD00B34460 /* SourceProvider.h in Headers */,
A7386554118697B400540279 /* SpecializedThunkJIT.h in Headers */,
+ 86D87DDB12BCAF94008E73A1 /* StackBounds.h in Headers */,
868BFA60117D048200B908B1 /* StaticConstructors.h in Headers */,
FE1B447A0ECCD73B004F4DD1 /* StdLibExtras.h in Headers */,
86B99AE3117E578100DF5A90 /* StringBuffer.h in Headers */,
@@ -2336,7 +2357,6 @@
86D08D5411793613006E5ED0 /* WTFThreadData.h in Headers */,
9688CB160ED12B4E001D649F /* X86Assembler.h in Headers */,
DDF7ABD411F60ED200108E36 /* GCActivityCallback.h in Headers */,
- DD2724691208D1FF00F9ABE7 /* AlignedMemoryAllocator.h in Headers */,
DDE82AD81209D955005C1756 /* GCHandle.h in Headers */,
86F38859121130CA007A7CE3 /* AtomicStringHash.h in Headers */,
862AF4B612239C7B0024E5B8 /* DecimalNumber.h in Headers */,
@@ -2353,6 +2373,9 @@
A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */,
933F5CDC1269229B0049191E /* NullPtr.h in Headers */,
F3BD31ED126735770065467F /* TextPosition.h in Headers */,
+ 1400067712A6F7830064D123 /* OSAllocator.h in Headers */,
+ 14B3EF0512BC24DD00D29EFF /* PageBlock.h in Headers */,
+ 14FFF98D12BFFF7500795BB8 /* PageAllocationAligned.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2446,6 +2469,7 @@
isa = PBXProject;
buildConfigurationList = 149C277108902AFE008A9EFC /* Build configuration list for PBXProject "JavaScriptCore" */;
compatibilityVersion = "Xcode 2.4";
+ developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
@@ -2508,7 +2532,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../WebKitTools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../WebKitTools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
+ shellScript = "if [ -f ../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
};
5D2F7CF90C6875BB00B5B72B /* Update Info.plist with version information */ = {
isa = PBXShellScriptBuildPhase;
@@ -2584,7 +2608,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../WebKitTools/Scripts/check-for-global-initializers ]; then\n ../WebKitTools/Scripts/check-for-global-initializers || exit $?\nfi";
+ shellScript = "if [ -f ../Tools/Scripts/check-for-global-initializers ]; then\n ../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
};
933457200EBFDC3F00B80894 /* Check For Exit Time Destructors */ = {
isa = PBXShellScriptBuildPhase;
@@ -2599,7 +2623,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../WebKitTools/Scripts/check-for-exit-time-destructors ]; then\n ../WebKitTools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
+ shellScript = "if [ -f ../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
};
/* End PBXShellScriptBuildPhase section */
@@ -2633,6 +2657,7 @@
147F39BD107EC37600427A48 /* ArgList.cpp in Sources */,
147F39BE107EC37600427A48 /* Arguments.cpp in Sources */,
86D3B2C310156BDE002865E7 /* ARMAssembler.cpp in Sources */,
+ A74DE1D0120B875600D40D5B /* ARMv7Assembler.cpp in Sources */,
147F39BF107EC37600427A48 /* ArrayConstructor.cpp in Sources */,
147F39C0107EC37600427A48 /* ArrayPrototype.cpp in Sources */,
65FDE49C0BDD1D4A00E80111 /* Assertions.cpp in Sources */,
@@ -2661,6 +2686,7 @@
14280823107EC02C0013E7B2 /* Debugger.cpp in Sources */,
BC3135650F302FA3003DFD3A /* DebuggerActivation.cpp in Sources */,
149559EE0DDCDDF700648087 /* DebuggerCallFrame.cpp in Sources */,
+ 0F29479C126E698C00B3ABF5 /* DecimalNumber.cpp in Sources */,
14469DD7107EC79E00650446 /* dtoa.cpp in Sources */,
147F39C7107EC37600427A48 /* Error.cpp in Sources */,
147F39C8107EC37600427A48 /* ErrorConstructor.cpp in Sources */,
@@ -2673,6 +2699,8 @@
14F8BA3E107EC886009892DC /* FastMalloc.cpp in Sources */,
147F39CB107EC37600427A48 /* FunctionConstructor.cpp in Sources */,
147F39CC107EC37600427A48 /* FunctionPrototype.cpp in Sources */,
+ DDF7ABD511F60ED200108E36 /* GCActivityCallbackCF.cpp in Sources */,
+ DDE82AD71209D955005C1756 /* GCHandle.cpp in Sources */,
14280855107EC0E70013E7B2 /* GetterSetter.cpp in Sources */,
147F39CD107EC37600427A48 /* GlobalEvalFunction.cpp in Sources */,
65DFC93308EA173A00F7300B /* HashTable.cpp in Sources */,
@@ -2737,6 +2765,7 @@
A7C530E4102A3813005BC741 /* MarkStackPosix.cpp in Sources */,
14469DDF107EC7E700650446 /* MathObject.cpp in Sources */,
511FC4C9117EE28700425272 /* MD5.cpp in Sources */,
+ 90213E3D123A40C200D422F3 /* MemoryStatistics.cpp in Sources */,
14469DE0107EC7E700650446 /* NativeErrorConstructor.cpp in Sources */,
14469DE1107EC7E700650446 /* NativeErrorPrototype.cpp in Sources */,
148F21B7107EC5470042EC2C /* Nodes.cpp in Sources */,
@@ -2749,6 +2778,10 @@
E124A8F80E555775003091F1 /* OpaqueJSString.cpp in Sources */,
969A079A0ED1D3AE00F1F681 /* Opcode.cpp in Sources */,
14280850107EC0D70013E7B2 /* Operations.cpp in Sources */,
+ 1400069312A6F9E10064D123 /* OSAllocatorPosix.cpp in Sources */,
+ 14FFF98C12BFFF7500795BB8 /* PageAllocationAligned.cpp in Sources */,
+ 14B3EF0612BC24DD00D29EFF /* PageBlock.cpp in Sources */,
+ 9714AF5E122F32070092D9F5 /* ParsedURL.cpp in Sources */,
148F21BC107EC54D0042EC2C /* Parser.cpp in Sources */,
93052C340FB792190048FDC3 /* ParserArena.cpp in Sources */,
930754C108B0F68000AB3056 /* pcre_compile.cpp in Sources */,
@@ -2781,6 +2814,9 @@
14469DEA107EC7E700650446 /* ScopeChain.cpp in Sources */,
0BF28A2911A33DC300638F84 /* SizeLimits.cpp in Sources */,
9330402C0E6A764000786E6A /* SmallStrings.cpp in Sources */,
+ A730B6131250068F009D25B1 /* StrictEvalActivation.cpp in Sources */,
+ 86438FC41265503E00E0DFCA /* StringBuilder.cpp in Sources */,
+ 86D87DAE12BCA7D1008E73A1 /* StackBounds.cpp in Sources */,
14469DEB107EC7E700650446 /* StringConstructor.cpp in Sources */,
868BFA0E117CEFD100B908B1 /* StringImpl.cpp in Sources */,
14469DEC107EC7E700650446 /* StringObject.cpp in Sources */,
@@ -2796,20 +2832,11 @@
A7386555118697B400540279 /* ThunkGenerators.cpp in Sources */,
14A42E3F0F4F60EE00599099 /* TimeoutChecker.cpp in Sources */,
0B330C270F38C62300692DE3 /* TypeTraits.cpp in Sources */,
+ 9714AF46122F28850092D9F5 /* URLSegments.cpp in Sources */,
14469DEE107EC7E700650446 /* UString.cpp in Sources */,
E1EF79AA0CE97BA60088D500 /* UTF8.cpp in Sources */,
868BFA17117CF19900B908B1 /* WTFString.cpp in Sources */,
86D08D5311793613006E5ED0 /* WTFThreadData.cpp in Sources */,
- DDF7ABD511F60ED200108E36 /* GCActivityCallbackCF.cpp in Sources */,
- 8627E5EB11F1281900A313B5 /* PageAllocation.cpp in Sources */,
- DDE82AD71209D955005C1756 /* GCHandle.cpp in Sources */,
- A74DE1D0120B875600D40D5B /* ARMv7Assembler.cpp in Sources */,
- 9714AF46122F28850092D9F5 /* URLSegments.cpp in Sources */,
- 9714AF5E122F32070092D9F5 /* ParsedURL.cpp in Sources */,
- 90213E3D123A40C200D422F3 /* MemoryStatistics.cpp in Sources */,
- A730B6131250068F009D25B1 /* StrictEvalActivation.cpp in Sources */,
- 86438FC41265503E00E0DFCA /* StringBuilder.cpp in Sources */,
- 0F29479C126E698C00B3ABF5 /* DecimalNumber.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/JavaScriptCore/assembler/ARMAssembler.h b/JavaScriptCore/assembler/ARMAssembler.h
index 1d24dd3..77ec60f 100644
--- a/JavaScriptCore/assembler/ARMAssembler.h
+++ b/JavaScriptCore/assembler/ARMAssembler.h
@@ -240,6 +240,7 @@ namespace JSC {
}
bool isUsed() const { return m_used; }
+ bool isSet() const { return (m_offset != -1); }
void used() { m_used = true; }
private:
JmpDst(int offset)
diff --git a/JavaScriptCore/assembler/ARMv7Assembler.h b/JavaScriptCore/assembler/ARMv7Assembler.h
index a40208a..b0fcd06 100644
--- a/JavaScriptCore/assembler/ARMv7Assembler.h
+++ b/JavaScriptCore/assembler/ARMv7Assembler.h
@@ -304,7 +304,7 @@ public:
}
if ((bytes.byte1 == bytes.byte3) && !(bytes.byte0 | bytes.byte2)) {
- encoding.immediate = bytes.byte0;
+ encoding.immediate = bytes.byte1;
encoding.pattern = 2;
return ARMThumbImmediate(TypeEncoded, encoding);
}
@@ -553,6 +553,7 @@ public:
}
bool isUsed() const { return m_used; }
+ bool isSet() const { return (m_offset != -1); }
void used() { m_used = true; }
private:
JmpDst(int offset)
diff --git a/JavaScriptCore/assembler/AbstractMacroAssembler.h b/JavaScriptCore/assembler/AbstractMacroAssembler.h
index 1fa5ec7..07bd702 100644
--- a/JavaScriptCore/assembler/AbstractMacroAssembler.h
+++ b/JavaScriptCore/assembler/AbstractMacroAssembler.h
@@ -241,6 +241,7 @@ public:
}
bool isUsed() const { return m_label.isUsed(); }
+ bool isSet() const { return m_label.isSet(); }
void used() { m_label.used(); }
private:
JmpDst m_label;
@@ -264,6 +265,8 @@ public:
{
}
+ bool isSet() const { return m_label.isSet(); }
+
private:
JmpDst m_label;
};
@@ -410,6 +413,11 @@ public:
return !m_jumps.size();
}
+ void clear()
+ {
+ m_jumps.clear();
+ }
+
const JumpVector& jumps() { return m_jumps; }
private:
diff --git a/JavaScriptCore/assembler/LinkBuffer.h b/JavaScriptCore/assembler/LinkBuffer.h
index e1dca0b..e38b9d4 100644
--- a/JavaScriptCore/assembler/LinkBuffer.h
+++ b/JavaScriptCore/assembler/LinkBuffer.h
@@ -265,7 +265,7 @@ private:
jumpsToLink.clear();
m_size = writePtr + m_assembler->size() - readPtr;
- m_executablePool->returnLastBytes(initialSize - m_size);
+ m_executablePool->tryShrink(m_code, initialSize, m_size);
#if DUMP_LINK_STATISTICS
dumpLinkStatistics(m_code, initialSize, m_size);
diff --git a/JavaScriptCore/assembler/MIPSAssembler.h b/JavaScriptCore/assembler/MIPSAssembler.h
index f9e40c4..f7bea6c 100644
--- a/JavaScriptCore/assembler/MIPSAssembler.h
+++ b/JavaScriptCore/assembler/MIPSAssembler.h
@@ -193,6 +193,7 @@ public:
}
bool isUsed() const { return m_used; }
+ bool isSet() const { return (m_offset != -1); }
void used() { m_used = true; }
private:
JmpDst(int offset)
diff --git a/JavaScriptCore/assembler/MacroAssembler.h b/JavaScriptCore/assembler/MacroAssembler.h
index ce1be78..fa165de 100644
--- a/JavaScriptCore/assembler/MacroAssembler.h
+++ b/JavaScriptCore/assembler/MacroAssembler.h
@@ -232,7 +232,7 @@ public:
void setPtr(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
void storePtr(RegisterID src, ImplicitAddress address)
diff --git a/JavaScriptCore/assembler/MacroAssemblerARM.h b/JavaScriptCore/assembler/MacroAssemblerARM.h
index c51686a..73390f8 100644
--- a/JavaScriptCore/assembler/MacroAssemblerARM.h
+++ b/JavaScriptCore/assembler/MacroAssemblerARM.h
@@ -628,40 +628,40 @@ public:
m_assembler.bx(linkRegister);
}
- void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
m_assembler.cmp_r(left, right);
m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
}
- void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARMRegisters::S0));
m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
}
- void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
// ARM doesn't have byte registers
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
- void set8(Condition cond, Address left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, Address left, RegisterID right, RegisterID dest)
{
// ARM doesn't have byte registers
load32(left, ARMRegisters::S1);
- set32(cond, ARMRegisters::S1, right, dest);
+ set32Compare32(cond, ARMRegisters::S1, right, dest);
}
- void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
// ARM doesn't have byte registers
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
- void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
load32(address, ARMRegisters::S1);
if (mask.m_value == -1)
@@ -672,10 +672,10 @@ public:
m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
}
- void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test8(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
// ARM doesn't have byte registers
- setTest32(cond, address, mask, dest);
+ set32Test32(cond, address, mask, dest);
}
void add32(Imm32 imm, RegisterID src, RegisterID dest)
diff --git a/JavaScriptCore/assembler/MacroAssemblerARMv7.h b/JavaScriptCore/assembler/MacroAssemblerARMv7.h
index d5b4ce7..5980de0 100644
--- a/JavaScriptCore/assembler/MacroAssemblerARMv7.h
+++ b/JavaScriptCore/assembler/MacroAssemblerARMv7.h
@@ -1127,7 +1127,7 @@ public:
m_assembler.bx(linkRegister, ARMv7Assembler::JumpFixed);
}
- void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
m_assembler.cmp(left, right);
m_assembler.it(armV7Condition(cond), false);
@@ -1135,13 +1135,13 @@ public:
m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0));
}
- void set32(Condition cond, Address left, RegisterID right, RegisterID dest)
+ void set32Compare32(Condition cond, Address left, RegisterID right, RegisterID dest)
{
load32(left, dataTempRegister);
- set32(cond, dataTempRegister, right, dest);
+ set32Compare32(cond, dataTempRegister, right, dest);
}
- void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
compare32(left, right);
m_assembler.it(armV7Condition(cond), false);
@@ -1149,26 +1149,26 @@ public:
m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0));
}
- void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
- void set8(Condition cond, Address left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, Address left, RegisterID right, RegisterID dest)
{
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
- void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
// FIXME:
// The mask should be optional... paerhaps the argument order should be
// dest-src, operations always have a dest? ... possibly not true, considering
// asm ops like test, or pseudo ops like pop().
- void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
load32(address, dataTempRegister);
test32(dataTempRegister, mask);
@@ -1177,7 +1177,7 @@ public:
m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0));
}
- void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test8(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
load8(address, dataTempRegister);
test32(dataTempRegister, mask);
diff --git a/JavaScriptCore/assembler/MacroAssemblerMIPS.h b/JavaScriptCore/assembler/MacroAssemblerMIPS.h
index 3fb2549..41f0152 100644
--- a/JavaScriptCore/assembler/MacroAssemblerMIPS.h
+++ b/JavaScriptCore/assembler/MacroAssemblerMIPS.h
@@ -1372,18 +1372,18 @@ public:
m_assembler.nop();
}
- void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
- set32(cond, left, right, dest);
+ set32Compare32(cond, left, right, dest);
}
- void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
move(right, immTempRegister);
- set32(cond, left, immTempRegister, dest);
+ set32Compare32(cond, left, immTempRegister, dest);
}
- void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
if (cond == Equal || cond == Zero) {
m_assembler.xorInsn(dest, left, right);
@@ -1434,13 +1434,13 @@ public:
}
}
- void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
move(right, immTempRegister);
- set32(cond, left, immTempRegister, dest);
+ set32Compare32(cond, left, immTempRegister, dest);
}
- void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test8(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
ASSERT((cond == Zero) || (cond == NonZero));
load8(address, dataTempRegister);
@@ -1460,7 +1460,7 @@ public:
}
}
- void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
ASSERT((cond == Zero) || (cond == NonZero));
load32(address, dataTempRegister);
diff --git a/JavaScriptCore/assembler/MacroAssemblerX86Common.h b/JavaScriptCore/assembler/MacroAssemblerX86Common.h
index cb86da7..b6f0b0c 100644
--- a/JavaScriptCore/assembler/MacroAssemblerX86Common.h
+++ b/JavaScriptCore/assembler/MacroAssemblerX86Common.h
@@ -939,19 +939,19 @@ public:
m_assembler.ret();
}
- void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
m_assembler.cmpl_rr(right, left);
m_assembler.setCC_r(x86Condition(cond), dest);
}
- void set8(Condition cond, Address left, RegisterID right, RegisterID dest)
+ void set8Compare32(Condition cond, Address left, RegisterID right, RegisterID dest)
{
m_assembler.cmpl_mr(left.offset, left.base, right);
m_assembler.setCC_r(x86Condition(cond), dest);
}
- void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set8Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
if (((cond == Equal) || (cond == NotEqual)) && !right.m_value)
m_assembler.testl_rr(left, left);
@@ -960,14 +960,14 @@ public:
m_assembler.setCC_r(x86Condition(cond), dest);
}
- void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
{
m_assembler.cmpl_rr(right, left);
m_assembler.setCC_r(x86Condition(cond), dest);
m_assembler.movzbl_rr(dest, dest);
}
- void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
+ void set32Compare32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
{
if (((cond == Equal) || (cond == NotEqual)) && !right.m_value)
m_assembler.testl_rr(left, left);
@@ -982,7 +982,7 @@ public:
// dest-src, operations always have a dest? ... possibly not true, considering
// asm ops like test, or pseudo ops like pop().
- void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test8(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
if (mask.m_value == -1)
m_assembler.cmpb_im(0, address.offset, address.base);
@@ -992,7 +992,7 @@ public:
m_assembler.movzbl_rr(dest, dest);
}
- void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
if (mask.m_value == -1)
m_assembler.cmpl_im(0, address.offset, address.base);
diff --git a/JavaScriptCore/assembler/X86Assembler.h b/JavaScriptCore/assembler/X86Assembler.h
index 20d72f5..b352ad4 100644
--- a/JavaScriptCore/assembler/X86Assembler.h
+++ b/JavaScriptCore/assembler/X86Assembler.h
@@ -248,6 +248,7 @@ public:
}
bool isUsed() const { return m_used; }
+ bool isSet() const { return (m_offset != -1); }
void used() { m_used = true; }
private:
JmpDst(int offset)
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index 26de0a1..3a99957 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -218,7 +218,7 @@ BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const ScopeChain&
#ifndef NDEBUG
, m_lastOpcodePosition(0)
#endif
- , m_emitNodeDepth(0)
+ , m_stack(m_globalData->stack())
, m_usesExceptions(false)
, m_regeneratingForExceptionInfo(false)
, m_codeBlockBeingRegeneratedFrom(0)
@@ -312,7 +312,7 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Scope
#ifndef NDEBUG
, m_lastOpcodePosition(0)
#endif
- , m_emitNodeDepth(0)
+ , m_stack(m_globalData->stack())
, m_usesExceptions(false)
, m_regeneratingForExceptionInfo(false)
, m_codeBlockBeingRegeneratedFrom(0)
@@ -477,7 +477,7 @@ BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, const ScopeChain& scope
#ifndef NDEBUG
, m_lastOpcodePosition(0)
#endif
- , m_emitNodeDepth(0)
+ , m_stack(m_globalData->stack())
, m_usesExceptions(false)
, m_regeneratingForExceptionInfo(false)
, m_codeBlockBeingRegeneratedFrom(0)
@@ -1599,7 +1599,9 @@ void BytecodeGenerator::createArgumentsIfNecessary()
{
if (m_codeType != FunctionCode)
return;
- ASSERT(m_codeBlock->usesArguments());
+
+ if (!m_codeBlock->usesArguments())
+ return;
// If we're in strict mode we tear off the arguments on function
// entry, so there's no need to check if we need to create them
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
index a90f756..37756fa 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.h
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
@@ -208,13 +208,9 @@ namespace JSC {
// Node::emitCode assumes that dst, if provided, is either a local or a referenced temporary.
ASSERT(!dst || dst == ignoredResult() || !dst->isTemporary() || dst->refCount());
addLineInfo(n->lineNo());
-
- if (m_emitNodeDepth >= s_maxEmitNodeDepth)
- return emitThrowExpressionTooDeepException();
- ++m_emitNodeDepth;
- RegisterID* r = n->emitBytecode(*this, dst);
- --m_emitNodeDepth;
- return r;
+ return m_stack.recursionCheck()
+ ? n->emitBytecode(*this, dst)
+ : emitThrowExpressionTooDeepException();
}
RegisterID* emitNode(Node* n)
@@ -225,13 +221,10 @@ namespace JSC {
void emitNodeInConditionContext(ExpressionNode* n, Label* trueTarget, Label* falseTarget, bool fallThroughMeansTrue)
{
addLineInfo(n->lineNo());
- if (m_emitNodeDepth >= s_maxEmitNodeDepth) {
+ if (m_stack.recursionCheck())
+ n->emitBytecodeInConditionContext(*this, trueTarget, falseTarget, fallThroughMeansTrue);
+ else
emitThrowExpressionTooDeepException();
- return;
- }
- ++m_emitNodeDepth;
- n->emitBytecodeInConditionContext(*this, trueTarget, falseTarget, fallThroughMeansTrue);
- --m_emitNodeDepth;
}
void emitExpressionInfo(unsigned divot, unsigned startOffset, unsigned endOffset)
@@ -583,13 +576,11 @@ namespace JSC {
size_t m_lastOpcodePosition;
#endif
- unsigned m_emitNodeDepth;
+ StackBounds m_stack;
bool m_usesExceptions;
bool m_regeneratingForExceptionInfo;
CodeBlock* m_codeBlockBeingRegeneratedFrom;
-
- static const unsigned s_maxEmitNodeDepth = 5000;
};
}
diff --git a/JavaScriptCore/create_regex_tables b/JavaScriptCore/create_regex_tables
index b436eee..d1cc1c2 100644
--- a/JavaScriptCore/create_regex_tables
+++ b/JavaScriptCore/create_regex_tables
@@ -25,8 +25,8 @@ types = {
"wordchar": { "UseTable" : True, "data": ['_', ('0','9'), ('A', 'Z'), ('a','z')]},
"nonwordchar": { "UseTable" : True, "Inverse": "wordchar", "data": ['`', (0, ord('0') - 1), (ord('9') + 1, ord('A') - 1), (ord('Z') + 1, ord('_') - 1), (ord('z') + 1, 0xffff)]},
"newline": { "UseTable" : False, "data": ['\n', '\r', 0x2028, 0x2029]},
- "spaces": { "UseTable" : True, "data": [' ', ('\t', '\r'), 0xa0, 0x1680, 0x180e, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, (0x2000, 0x200a)]},
- "nonspaces": { "UseTable" : True, "Inverse": "spaces", "data": [(0, ord('\t') - 1), (ord('\r') + 1, ord(' ') - 1), (ord(' ') + 1, 0x009f), (0x00a1, 0x167f), (0x1681, 0x180d), (0x180f, 0x1fff), (0x200b, 0x2027), (0x202a, 0x202e), (0x2030, 0x205e), (0x2060, 0x2fff), (0x3001, 0xffff)]},
+ "spaces": { "UseTable" : True, "data": [' ', ('\t', '\r'), 0xa0, 0x1680, 0x180e, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, (0x2000, 0x200a), 0xfeff]},
+ "nonspaces": { "UseTable" : True, "Inverse": "spaces", "data": [(0, ord('\t') - 1), (ord('\r') + 1, ord(' ') - 1), (ord(' ') + 1, 0x009f), (0x00a1, 0x167f), (0x1681, 0x180d), (0x180f, 0x1fff), (0x200b, 0x2027), (0x202a, 0x202e), (0x2030, 0x205e), (0x2060, 0x2fff), (0x3001, 0xfefe), (0xff00, 0xffff)]},
"digits": { "UseTable" : False, "data": [('0', '9')]},
"nondigits": { "UseTable" : False, "Inverse": "digits", "data": [(0, ord('0') - 1), (ord('9') + 1, 0xffff)] }
}
diff --git a/JavaScriptCore/debugger/Debugger.cpp b/JavaScriptCore/debugger/Debugger.cpp
index 472a03a..6b24c5a 100644
--- a/JavaScriptCore/debugger/Debugger.cpp
+++ b/JavaScriptCore/debugger/Debugger.cpp
@@ -85,7 +85,7 @@ void Debugger::recompileAllJSFunctions(JSGlobalData* globalData)
continue;
ExecState* exec = function->scope().globalObject()->JSGlobalObject::globalExec();
- executable->recompile(exec);
+ executable->discardCode();
if (function->scope().globalObject()->debugger() == this)
sourceProviders.add(executable->source().provider(), exec);
}
diff --git a/JavaScriptCore/interpreter/Interpreter.cpp b/JavaScriptCore/interpreter/Interpreter.cpp
index febdb71..57c068a 100644
--- a/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/JavaScriptCore/interpreter/Interpreter.cpp
@@ -3196,8 +3196,10 @@ skip_id_custom_self:
vPC += OPCODE_LENGTH(op_get_by_pname);
NEXT_INSTRUCTION();
}
- Identifier propertyName(callFrame, subscript.toString(callFrame));
- result = baseValue.get(callFrame, propertyName);
+ {
+ Identifier propertyName(callFrame, subscript.toString(callFrame));
+ result = baseValue.get(callFrame, propertyName);
+ }
CHECK_FOR_EXCEPTION();
callFrame->uncheckedR(dst) = result;
vPC += OPCODE_LENGTH(op_get_by_pname);
diff --git a/JavaScriptCore/interpreter/RegisterFile.h b/JavaScriptCore/interpreter/RegisterFile.h
index d9f6a2b..51a5bdf 100644
--- a/JavaScriptCore/interpreter/RegisterFile.h
+++ b/JavaScriptCore/interpreter/RegisterFile.h
@@ -138,7 +138,6 @@ namespace JSC {
static void initializeThreading();
private:
- void checkAllocatedOkay(bool okay);
void releaseExcessCapacity();
void addToCommittedByteCount(long);
size_t m_numGlobals;
@@ -160,15 +159,14 @@ namespace JSC {
, m_end(0)
, m_max(0)
{
- ASSERT(maxGlobals && PageAllocation::isPageAligned(maxGlobals));
- ASSERT(capacity && PageAllocation::isPageAligned(capacity));
+ ASSERT(maxGlobals && isPageAligned(maxGlobals));
+ ASSERT(capacity && isPageAligned(capacity));
size_t bufferLength = (capacity + maxGlobals) * sizeof(Register);
- m_reservation = PageReservation::reserve(roundUpAllocationSize(bufferLength, commitSize), PageAllocation::JSVMStackPages);
+ m_reservation = PageReservation::reserve(roundUpAllocationSize(bufferLength, commitSize), OSAllocator::JSVMStackPages);
void* base = m_reservation.base();
- checkAllocatedOkay(base);
size_t committedSize = roundUpAllocationSize(maxGlobals * sizeof(Register), commitSize);
- checkAllocatedOkay(m_reservation.commit(base, committedSize));
+ m_reservation.commit(base, committedSize);
addToCommittedByteCount(static_cast<long>(committedSize));
m_commitEnd = reinterpret_cast_ptr<Register*>(reinterpret_cast<char*>(base) + committedSize);
m_start = static_cast<Register*>(base) + maxGlobals;
@@ -196,7 +194,7 @@ namespace JSC {
if (newEnd > m_commitEnd) {
size_t size = roundUpAllocationSize(reinterpret_cast<char*>(newEnd) - reinterpret_cast<char*>(m_commitEnd), commitSize);
- checkAllocatedOkay(m_reservation.commit(m_commitEnd, size));
+ m_reservation.commit(m_commitEnd, size);
addToCommittedByteCount(static_cast<long>(size));
m_commitEnd = reinterpret_cast_ptr<Register*>(reinterpret_cast<char*>(m_commitEnd) + size);
}
@@ -208,16 +206,6 @@ namespace JSC {
return true;
}
- inline void RegisterFile::checkAllocatedOkay(bool okay)
- {
- if (!okay) {
-#ifndef NDEBUG
- fprintf(stderr, "Could not allocate register file: %d\n", PageReservation::lastError());
-#endif
- CRASH();
- }
- }
-
} // namespace JSC
#endif // RegisterFile_h
diff --git a/JavaScriptCore/jit/ExecutableAllocator.cpp b/JavaScriptCore/jit/ExecutableAllocator.cpp
index 8742eda..4530b38 100644
--- a/JavaScriptCore/jit/ExecutableAllocator.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocator.cpp
@@ -45,13 +45,13 @@ void ExecutableAllocator::intializePageSize()
// for moving memory model limitation
ExecutableAllocator::pageSize = 256 * 1024;
#else
- ExecutableAllocator::pageSize = PageAllocation::pageSize();
+ ExecutableAllocator::pageSize = WTF::pageSize();
#endif
}
ExecutablePool::Allocation ExecutablePool::systemAlloc(size_t size)
{
- PageAllocation allocation = PageAllocation::allocate(size, PageAllocation::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
+ PageAllocation allocation = PageAllocation::allocate(size, OSAllocator::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
if (!allocation)
CRASH();
return allocation;
@@ -67,6 +67,11 @@ bool ExecutableAllocator::isValid() const
return true;
}
+bool ExecutableAllocator::underMemoryPressure()
+{
+ return false;
+}
+
size_t ExecutableAllocator::committedByteCount()
{
return 0;
diff --git a/JavaScriptCore/jit/ExecutableAllocator.h b/JavaScriptCore/jit/ExecutableAllocator.h
index f362605..4580a67 100644
--- a/JavaScriptCore/jit/ExecutableAllocator.h
+++ b/JavaScriptCore/jit/ExecutableAllocator.h
@@ -137,9 +137,11 @@ public:
return poolAllocate(n);
}
- void returnLastBytes(size_t count)
+ void tryShrink(void* allocation, size_t oldSize, size_t newSize)
{
- m_freePtr -= count;
+ if (static_cast<char*>(allocation) + oldSize != m_freePtr)
+ return;
+ m_freePtr = static_cast<char*>(allocation) + roundUpAllocationSize(newSize, sizeof(void*));
}
~ExecutablePool()
@@ -182,7 +184,9 @@ public:
}
bool isValid() const;
-
+
+ static bool underMemoryPressure();
+
PassRefPtr<ExecutablePool> poolForSize(size_t n)
{
// Try to fit in the existing small allocator
@@ -253,8 +257,7 @@ public:
#elif CPU(ARM_THUMB2) && OS(IOS)
static void cacheFlush(void* code, size_t size)
{
- sys_dcache_flush(code, size);
- sys_icache_invalidate(code, size);
+ sys_cache_control(kCacheFunctionPrepareForExecution, code, size);
}
#elif CPU(ARM_THUMB2) && OS(LINUX)
static void cacheFlush(void* code, size_t size)
diff --git a/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp b/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
index 15247c2..e280b2d 100644
--- a/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
@@ -48,9 +48,6 @@
#define COALESCE_LIMIT (4u * 1024u * 1024u) // 4Mb
#endif
-// ASLR currently only works on darwin (due to arc4random) & 64-bit (due to address space size).
-#define VM_POOL_ASLR (OS(DARWIN) && CPU(X86_64))
-
using namespace WTF;
namespace JSC {
@@ -136,8 +133,7 @@ class FixedVMPoolAllocator
void reuse(void* position, size_t size)
{
- bool okay = m_allocation.commit(position, size);
- ASSERT_UNUSED(okay, okay);
+ m_allocation.commit(position, size);
addToCommittedByteCount(static_cast<long>(size));
}
@@ -282,24 +278,7 @@ public:
: m_commonSize(commonSize)
, m_countFreedSinceLastCoalesce(0)
{
- // Cook up an address to allocate at, using the following recipe:
- // 17 bits of zero, stay in userspace kids.
- // 26 bits of randomness for ASLR.
- // 21 bits of zero, at least stay aligned within one level of the pagetables.
- //
- // But! - as a temporary workaround for some plugin problems (rdar://problem/6812854),
- // for now instead of 2^26 bits of ASLR lets stick with 25 bits of randomization plus
- // 2^24, which should put up somewhere in the middle of userspace (in the address range
- // 0x200000000000 .. 0x5fffffffffff).
-#if VM_POOL_ASLR
- intptr_t randomLocation = 0;
- randomLocation = arc4random() & ((1 << 25) - 1);
- randomLocation += (1 << 24);
- randomLocation <<= 21;
- m_allocation = PageReservation::reserveAt(reinterpret_cast<void*>(randomLocation), false, totalHeapSize, PageAllocation::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
-#else
- m_allocation = PageReservation::reserve(totalHeapSize, PageAllocation::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
-#endif
+ m_allocation = PageReservation::reserve(totalHeapSize, OSAllocator::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
if (!!m_allocation)
m_freeList.insert(new FreeListEntry(m_allocation.base(), m_allocation.size()));
@@ -452,7 +431,8 @@ void ExecutableAllocator::intializePageSize()
}
static FixedVMPoolAllocator* allocator = 0;
-
+static size_t allocatedCount = 0;
+
bool ExecutableAllocator::isValid() const
{
SpinLockHolder lock_holder(&spinlock);
@@ -461,10 +441,18 @@ bool ExecutableAllocator::isValid() const
return allocator->isValid();
}
+bool ExecutableAllocator::underMemoryPressure()
+{
+ // Technically we should take the spin lock here, but we don't care if we get stale data.
+ // This is only really a heuristic anyway.
+ return allocatedCount > (VM_POOL_SIZE / 2);
+}
+
ExecutablePool::Allocation ExecutablePool::systemAlloc(size_t size)
{
SpinLockHolder lock_holder(&spinlock);
ASSERT(allocator);
+ allocatedCount += size;
return allocator->alloc(size);
}
@@ -472,6 +460,7 @@ void ExecutablePool::systemRelease(ExecutablePool::Allocation& allocation)
{
SpinLockHolder lock_holder(&spinlock);
ASSERT(allocator);
+ allocatedCount -= allocation.size();
allocator->free(allocation);
}
diff --git a/JavaScriptCore/jit/JITOpcodes.cpp b/JavaScriptCore/jit/JITOpcodes.cpp
index 66285ae..972b879 100644
--- a/JavaScriptCore/jit/JITOpcodes.cpp
+++ b/JavaScriptCore/jit/JITOpcodes.cpp
@@ -806,7 +806,7 @@ void JIT::emit_op_eq(Instruction* currentInstruction)
{
emitGetVirtualRegisters(currentInstruction[2].u.operand, regT0, currentInstruction[3].u.operand, regT1);
emitJumpSlowCaseIfNotImmediateIntegers(regT0, regT1, regT2);
- set32(Equal, regT1, regT0, regT0);
+ set32Compare32(Equal, regT1, regT0, regT0);
emitTagAsBoolImmediate(regT0);
emitPutVirtualRegister(currentInstruction[1].u.operand);
}
@@ -854,7 +854,7 @@ void JIT::emit_op_neq(Instruction* currentInstruction)
{
emitGetVirtualRegisters(currentInstruction[2].u.operand, regT0, currentInstruction[3].u.operand, regT1);
emitJumpSlowCaseIfNotImmediateIntegers(regT0, regT1, regT2);
- set32(NotEqual, regT1, regT0, regT0);
+ set32Compare32(NotEqual, regT1, regT0, regT0);
emitTagAsBoolImmediate(regT0);
emitPutVirtualRegister(currentInstruction[1].u.operand);
@@ -1026,9 +1026,9 @@ void JIT::compileOpStrictEq(Instruction* currentInstruction, CompileOpStrictEqTy
addSlowCase(emitJumpIfImmediateNumber(regT2));
if (type == OpStrictEq)
- set32(Equal, regT1, regT0, regT0);
+ set32Compare32(Equal, regT1, regT0, regT0);
else
- set32(NotEqual, regT1, regT0, regT0);
+ set32Compare32(NotEqual, regT1, regT0, regT0);
emitTagAsBoolImmediate(regT0);
emitPutVirtualRegister(dst);
@@ -1177,7 +1177,7 @@ void JIT::emit_op_eq_null(Instruction* currentInstruction)
Jump isImmediate = emitJumpIfNotJSCell(regT0);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2);
- setTest8(NonZero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0);
+ set32Test8(NonZero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0);
Jump wasNotImmediate = jump();
@@ -1202,7 +1202,7 @@ void JIT::emit_op_neq_null(Instruction* currentInstruction)
Jump isImmediate = emitJumpIfNotJSCell(regT0);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2);
- setTest8(Zero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0);
+ set32Test8(Zero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0);
Jump wasNotImmediate = jump();
diff --git a/JavaScriptCore/jit/JITOpcodes32_64.cpp b/JavaScriptCore/jit/JITOpcodes32_64.cpp
index a2bb159..4ad974c 100644
--- a/JavaScriptCore/jit/JITOpcodes32_64.cpp
+++ b/JavaScriptCore/jit/JITOpcodes32_64.cpp
@@ -1018,7 +1018,7 @@ void JIT::emit_op_eq(Instruction* currentInstruction)
addSlowCase(branch32(Equal, regT1, Imm32(JSValue::CellTag)));
addSlowCase(branch32(Below, regT1, Imm32(JSValue::LowestTag)));
- set8(Equal, regT0, regT2, regT0);
+ set8Compare32(Equal, regT0, regT2, regT0);
or32(Imm32(JSValue::FalseTag), regT0);
emitStoreBool(dst, regT0);
@@ -1070,7 +1070,7 @@ void JIT::emit_op_neq(Instruction* currentInstruction)
addSlowCase(branch32(Equal, regT1, Imm32(JSValue::CellTag)));
addSlowCase(branch32(Below, regT1, Imm32(JSValue::LowestTag)));
- set8(NotEqual, regT0, regT2, regT0);
+ set8Compare32(NotEqual, regT0, regT2, regT0);
or32(Imm32(JSValue::FalseTag), regT0);
emitStoreBool(dst, regT0);
@@ -1127,9 +1127,9 @@ void JIT::compileOpStrictEq(Instruction* currentInstruction, CompileOpStrictEqTy
addSlowCase(branch32(AboveOrEqual, regT2, Imm32(JSValue::CellTag)));
if (type == OpStrictEq)
- set8(Equal, regT0, regT1, regT0);
+ set8Compare32(Equal, regT0, regT1, regT0);
else
- set8(NotEqual, regT0, regT1, regT0);
+ set8Compare32(NotEqual, regT0, regT1, regT0);
or32(Imm32(JSValue::FalseTag), regT0);
@@ -1185,14 +1185,14 @@ void JIT::emit_op_eq_null(Instruction* currentInstruction)
Jump isImmediate = branch32(NotEqual, regT1, Imm32(JSValue::CellTag));
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT1);
- setTest8(NonZero, Address(regT1, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT1);
+ set32Test8(NonZero, Address(regT1, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT1);
Jump wasNotImmediate = jump();
isImmediate.link(this);
- set8(Equal, regT1, Imm32(JSValue::NullTag), regT2);
- set8(Equal, regT1, Imm32(JSValue::UndefinedTag), regT1);
+ set8Compare32(Equal, regT1, Imm32(JSValue::NullTag), regT2);
+ set8Compare32(Equal, regT1, Imm32(JSValue::UndefinedTag), regT1);
or32(regT2, regT1);
wasNotImmediate.link(this);
@@ -1211,14 +1211,14 @@ void JIT::emit_op_neq_null(Instruction* currentInstruction)
Jump isImmediate = branch32(NotEqual, regT1, Imm32(JSValue::CellTag));
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT1);
- setTest8(Zero, Address(regT1, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT1);
+ set32Test8(Zero, Address(regT1, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT1);
Jump wasNotImmediate = jump();
isImmediate.link(this);
- set8(NotEqual, regT1, Imm32(JSValue::NullTag), regT2);
- set8(NotEqual, regT1, Imm32(JSValue::UndefinedTag), regT1);
+ set8Compare32(NotEqual, regT1, Imm32(JSValue::NullTag), regT2);
+ set8Compare32(NotEqual, regT1, Imm32(JSValue::UndefinedTag), regT1);
and32(regT2, regT1);
wasNotImmediate.link(this);
diff --git a/JavaScriptCore/jit/JITStubs.cpp b/JavaScriptCore/jit/JITStubs.cpp
index 097d55b..0959a6e 100644
--- a/JavaScriptCore/jit/JITStubs.cpp
+++ b/JavaScriptCore/jit/JITStubs.cpp
@@ -546,7 +546,7 @@ extern "C" {
#endif // USE(JSVALUE32_64)
#if CPU(MIPS)
-asm volatile(
+asm (
".text" "\n"
".align 2" "\n"
".set noreorder" "\n"
@@ -585,7 +585,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
".end " SYMBOL_STRING(ctiTrampoline) "\n"
);
-asm volatile(
+asm (
".text" "\n"
".align 2" "\n"
".set noreorder" "\n"
@@ -616,7 +616,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
".end " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
);
-asm volatile(
+asm (
".text" "\n"
".align 2" "\n"
".set noreorder" "\n"
@@ -639,7 +639,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
#if COMPILER(GCC) && CPU(ARM_THUMB2)
-asm volatile(
+asm (
".text" "\n"
".align 2" "\n"
".globl " SYMBOL_STRING(ctiTrampoline) "\n"
@@ -666,7 +666,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
"bx lr" "\n"
);
-asm volatile(
+asm (
".text" "\n"
".align 2" "\n"
".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
@@ -684,7 +684,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
"bx lr" "\n"
);
-asm volatile(
+asm (
".text" "\n"
".align 2" "\n"
".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
@@ -702,7 +702,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
#elif COMPILER(GCC) && CPU(ARM_TRADITIONAL)
-asm volatile(
+asm (
".globl " SYMBOL_STRING(ctiTrampoline) "\n"
HIDE_SYMBOL(ctiTrampoline) "\n"
SYMBOL_STRING(ctiTrampoline) ":" "\n"
@@ -720,7 +720,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
"mov pc, lr" "\n"
);
-asm volatile(
+asm (
".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
@@ -1108,7 +1108,7 @@ static ExceptionHandler jitThrow(JSGlobalData* globalData, CallFrame* callFrame,
extern "C" { \
rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \
}; \
- asm volatile( \
+ asm ( \
".text" "\n" \
".align 2" "\n" \
".set noreorder" "\n" \
@@ -1138,7 +1138,7 @@ static ExceptionHandler jitThrow(JSGlobalData* globalData, CallFrame* callFrame,
extern "C" { \
rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \
}; \
- asm volatile( \
+ asm ( \
".text" "\n" \
".align 2" "\n" \
".set noreorder" "\n" \
diff --git a/JavaScriptCore/jsc.cpp b/JavaScriptCore/jsc.cpp
index 00581e5..dd4b677 100644
--- a/JavaScriptCore/jsc.cpp
+++ b/JavaScriptCore/jsc.cpp
@@ -208,14 +208,14 @@ EncodedJSValue JSC_HOST_CALL functionVersion(ExecState*)
EncodedJSValue JSC_HOST_CALL functionRun(ExecState* exec)
{
- StopWatch stopWatch;
UString fileName = exec->argument(0).toString(exec);
Vector<char> script;
if (!fillBufferWithContentsOfFile(fileName, script))
return JSValue::encode(throwError(exec, createError(exec, "Could not open file.")));
- JSGlobalObject* globalObject = exec->lexicalGlobalObject();
+ GlobalObject* globalObject = new (&exec->globalData()) GlobalObject(Vector<UString>());
+ StopWatch stopWatch;
stopWatch.start();
evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(script.data(), fileName));
stopWatch.stop();
@@ -245,10 +245,15 @@ EncodedJSValue JSC_HOST_CALL functionCheckSyntax(ExecState* exec)
return JSValue::encode(throwError(exec, createError(exec, "Could not open file.")));
JSGlobalObject* globalObject = exec->lexicalGlobalObject();
+
+ StopWatch stopWatch;
+ stopWatch.start();
Completion result = checkSyntax(globalObject->globalExec(), makeSource(script.data(), fileName));
+ stopWatch.stop();
+
if (result.complType() == Throw)
throwError(exec, result.value());
- return JSValue::encode(result.value());
+ return JSValue::encode(jsNumber(stopWatch.getElapsedMS()));
}
#if ENABLE(SAMPLING_FLAGS)
@@ -556,5 +561,8 @@ static bool fillBufferWithContentsOfFile(const UString& fileName, Vector<char>&
fclose(f);
buffer[bufferSize] = '\0';
+ if (buffer[0] == '#' && buffer[1] == '!')
+ buffer[0] = buffer[1] = '/';
+
return true;
}
diff --git a/JavaScriptCore/jsc.pro b/JavaScriptCore/jsc.pro
index 670ca61..b4db812 100644
--- a/JavaScriptCore/jsc.pro
+++ b/JavaScriptCore/jsc.pro
@@ -11,7 +11,7 @@ win32-msvc*: CONFIG += exceptions_off stl_off
isEmpty(OUTPUT_DIR): OUTPUT_DIR= ..
include($$PWD/../WebKit.pri)
-CONFIG += link_pkgconfig
+unix:!mac:!symbian:CONFIG += link_pkgconfig
QMAKE_RPATHDIR += $$OUTPUT_DIR/lib
diff --git a/JavaScriptCore/parser/ASTBuilder.h b/JavaScriptCore/parser/ASTBuilder.h
index 9a68144..04cf272 100644
--- a/JavaScriptCore/parser/ASTBuilder.h
+++ b/JavaScriptCore/parser/ASTBuilder.h
@@ -576,10 +576,10 @@ public:
return result;
}
- const Identifier& getName(Property property) { return property->name(); }
- PropertyNode::Type getType(Property property) { return property->type(); }
+ const Identifier& getName(Property property) const { return property->name(); }
+ PropertyNode::Type getType(Property property) const { return property->type(); }
- bool isResolve(ExpressionNode* expr) { return expr->isResolveNode(); }
+ bool isResolve(ExpressionNode* expr) const { return expr->isResolveNode(); }
private:
struct Scope {
diff --git a/JavaScriptCore/parser/JSParser.cpp b/JavaScriptCore/parser/JSParser.cpp
index 4b7fcb2..4201555 100644
--- a/JavaScriptCore/parser/JSParser.cpp
+++ b/JavaScriptCore/parser/JSParser.cpp
@@ -65,13 +65,10 @@ namespace JSC {
COMPILE_ASSERT(LastUntaggedToken < 64, LessThan64UntaggedTokens);
-// This matches v8
-static const ptrdiff_t kMaxParserStackUsage = 128 * sizeof(void*) * 1024;
-
class JSParser {
public:
JSParser(Lexer*, JSGlobalData*, FunctionParameters*, bool isStrictContext, bool isFunction, SourceProvider*);
- bool parseProgram(JSGlobalObject*);
+ bool parseProgram();
private:
struct AllowInOverride {
AllowInOverride(JSParser* parser)
@@ -174,7 +171,7 @@ private:
template <class TreeBuilder> ALWAYS_INLINE TreeArguments parseArguments(TreeBuilder&);
template <bool strict, class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&);
- template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&, bool& usesArguments);
+ template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseVarDeclarationList(TreeBuilder&, int& declarations, const Identifier*& lastIdent, TreeExpression& lastInitializer, int& identStart, int& initStart, int& initEnd);
template <class TreeBuilder> ALWAYS_INLINE TreeConstDeclList parseConstDeclarationList(TreeBuilder& context);
enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName };
@@ -193,9 +190,7 @@ private:
bool canRecurse()
{
- char sample = 0;
- ASSERT(m_endAddress);
- return &sample > m_endAddress;
+ return m_stack.recursionCheck();
}
int lastTokenEnd() const
@@ -205,7 +200,7 @@ private:
ParserArena m_arena;
Lexer* m_lexer;
- char* m_endAddress;
+ StackBounds m_stack;
bool m_error;
JSGlobalData* m_globalData;
JSToken m_token;
@@ -240,6 +235,7 @@ private:
struct Scope {
Scope(JSGlobalData* globalData, bool isFunction, bool strictMode)
: m_globalData(globalData)
+ , m_shadowsArguments(false)
, m_usesEval(false)
, m_needsFullActivation(false)
, m_allowsNewDecls(true)
@@ -300,22 +296,17 @@ private:
ASSERT(m_strictMode);
m_writtenVariables.add(ident->impl());
}
-
- bool deleteProperty(const Identifier* ident)
- {
- if (m_declaredVariables.contains(ident->impl()))
- return false;
- m_deletedVariables.add(ident->impl());
- return true;
- }
-
+
void preventNewDecls() { m_allowsNewDecls = false; }
bool allowsNewDecls() const { return m_allowsNewDecls; }
bool declareParameter(const Identifier* ident)
{
- bool isValidStrictMode = m_declaredVariables.add(ident->ustring().impl()).second && m_globalData->propertyNames->eval != *ident && m_globalData->propertyNames->arguments != *ident;
+ bool isArguments = m_globalData->propertyNames->arguments == *ident;
+ bool isValidStrictMode = m_declaredVariables.add(ident->ustring().impl()).second && m_globalData->propertyNames->eval != *ident && !isArguments;
m_isValidStrictMode = m_isValidStrictMode && isValidStrictMode;
+ if (isArguments)
+ m_shadowsArguments = true;
return isValidStrictMode;
}
@@ -347,16 +338,7 @@ private:
m_writtenVariables.add(*ptr);
}
}
- if (nestedScope->m_deletedVariables.size()) {
- IdentifierSet::iterator end = nestedScope->m_deletedVariables.end();
- for (IdentifierSet::iterator ptr = nestedScope->m_deletedVariables.begin(); ptr != end; ++ptr) {
- if (nestedScope->m_declaredVariables.contains(*ptr))
- return false;
- if (m_declaredVariables.contains(*ptr))
- return false;
- m_deletedVariables.add(*ptr);
- }
- }
+
return true;
}
@@ -369,17 +351,6 @@ private:
}
}
- bool getDeletedVariables(IdentifierSet& deletedVariables)
- {
- IdentifierSet::iterator end = m_deletedVariables.end();
- for (IdentifierSet::iterator ptr = m_deletedVariables.begin(); ptr != end; ++ptr) {
- if (m_declaredVariables.contains(*ptr))
- return false;
- }
- deletedVariables.swap(m_deletedVariables);
- return true;
- }
-
void getCapturedVariables(IdentifierSet& capturedVariables)
{
if (m_needsFullActivation || m_usesEval) {
@@ -395,9 +366,11 @@ private:
void setStrictMode() { m_strictMode = true; }
bool strictMode() const { return m_strictMode; }
bool isValidStrictMode() const { return m_isValidStrictMode; }
+ bool shadowsArguments() const { return m_shadowsArguments; }
private:
JSGlobalData* m_globalData;
+ bool m_shadowsArguments : 1;
bool m_usesEval : 1;
bool m_needsFullActivation : 1;
bool m_allowsNewDecls : 1;
@@ -412,7 +385,6 @@ private:
IdentifierSet m_usedVariables;
IdentifierSet m_closedVariables;
IdentifierSet m_writtenVariables;
- IdentifierSet m_deletedVariables;
};
typedef Vector<Scope, 10> ScopeStack;
@@ -473,25 +445,18 @@ private:
m_scopeStack.last().declareWrite(ident);
}
- bool deleteProperty(const Identifier* ident)
- {
- if (!m_syntaxAlreadyValidated)
- return m_scopeStack.last().deleteProperty(ident);
- return true;
- }
-
ScopeStack m_scopeStack;
};
-int jsParse(JSGlobalObject* lexicalGlobalObject, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode, const SourceCode* source)
+int jsParse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode, const SourceCode* source)
{
- JSParser parser(lexicalGlobalObject->globalData().lexer, &lexicalGlobalObject->globalData(), parameters, strictness == JSParseStrict, parserMode == JSParseFunctionCode, source->provider());
- return parser.parseProgram(lexicalGlobalObject);
+ JSParser parser(globalData->lexer, globalData, parameters, strictness == JSParseStrict, parserMode == JSParseFunctionCode, source->provider());
+ return parser.parseProgram();
}
JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, FunctionParameters* parameters, bool inStrictContext, bool isFunction, SourceProvider* provider)
: m_lexer(lexer)
- , m_endAddress(0)
+ , m_stack(globalData->stack())
, m_error(false)
, m_globalData(globalData)
, m_allowsIn(true)
@@ -505,7 +470,6 @@ JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, FunctionParameters* p
, m_nonTrivialExpressionCount(0)
, m_lastIdentifier(0)
{
- m_endAddress = wtfThreadData().approximatedStackStart() - kMaxParserStackUsage;
ScopeRef scope = pushScope();
if (isFunction)
scope->setIsFunction();
@@ -519,7 +483,7 @@ JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, FunctionParameters* p
m_lexer->setLastLineNumber(tokenLine());
}
-bool JSParser::parseProgram(JSGlobalObject* lexicalGlobalObject)
+bool JSParser::parseProgram()
{
ASTBuilder context(m_globalData, m_lexer);
if (m_lexer->isReparsing())
@@ -528,20 +492,15 @@ bool JSParser::parseProgram(JSGlobalObject* lexicalGlobalObject)
SourceElements* sourceElements = parseSourceElements<CheckForStrictMode>(context);
if (!sourceElements || !consume(EOFTOK))
return true;
- if (!m_syntaxAlreadyValidated) {
- IdentifierSet deletedVariables;
- if (!scope->getDeletedVariables(deletedVariables))
- return true;
- IdentifierSet::const_iterator end = deletedVariables.end();
- SymbolTable& globalEnvRecord = lexicalGlobalObject->symbolTable();
- for (IdentifierSet::const_iterator ptr = deletedVariables.begin(); ptr != end; ++ptr) {
- if (!globalEnvRecord.get(*ptr).isNull())
- return true;
- }
- }
IdentifierSet capturedVariables;
scope->getCapturedVariables(capturedVariables);
- m_globalData->parser->didFinishParsing(sourceElements, context.varDeclarations(), context.funcDeclarations(), context.features() | (scope->strictMode() ? StrictModeFeature : 0),
+ CodeFeatures features = context.features();
+ if (scope->strictMode())
+ features |= StrictModeFeature;
+ if (scope->shadowsArguments())
+ features |= ShadowsArgumentsFeature;
+
+ m_globalData->parser->didFinishParsing(sourceElements, context.varDeclarations(), context.funcDeclarations(), features,
m_lastLine, context.numConstants(), capturedVariables);
return false;
}
@@ -1128,10 +1087,9 @@ template <class TreeBuilder> TreeStatement JSParser::parseStatement(TreeBuilder&
}
}
-template <class TreeBuilder> TreeFormalParameterList JSParser::parseFormalParameters(TreeBuilder& context, bool& usesArguments)
+template <class TreeBuilder> TreeFormalParameterList JSParser::parseFormalParameters(TreeBuilder& context)
{
matchOrFail(IDENT);
- usesArguments = m_globalData->propertyNames->arguments == *m_token.m_data.ident;
failIfFalseIfStrict(declareParameter(m_token.m_data.ident));
TreeFormalParameterList list = context.createFormalParameterList(*m_token.m_data.ident);
TreeFormalParameterList tail = list;
@@ -1140,10 +1098,8 @@ template <class TreeBuilder> TreeFormalParameterList JSParser::parseFormalParame
next();
matchOrFail(IDENT);
const Identifier* ident = m_token.m_data.ident;
- usesArguments |= m_globalData->propertyNames->arguments == *m_token.m_data.ident;
failIfFalseIfStrict(declareParameter(ident));
next();
- usesArguments = usesArguments || m_globalData->propertyNames->arguments == *ident;
tail = context.createFormalParameterList(tail, *ident);
}
return list;
@@ -1172,9 +1128,8 @@ template <JSParser::FunctionRequirements requirements, bool nameIsInContainingSc
} else if (requirements == FunctionNeedsName)
return false;
consumeOrFail(OPENPAREN);
- bool usesArguments = false;
if (!match(CLOSEPAREN)) {
- parameters = parseFormalParameters(context, usesArguments);
+ parameters = parseFormalParameters(context);
failIfFalse(parameters);
}
consumeOrFail(CLOSEPAREN);
@@ -1186,8 +1141,6 @@ template <JSParser::FunctionRequirements requirements, bool nameIsInContainingSc
body = parseFunctionBody(context);
failIfFalse(body);
- if (usesArguments)
- context.setUsesArguments(body);
if (functionScope->strictMode() && name) {
failIfTrue(m_globalData->propertyNames->arguments == *name);
failIfTrue(m_globalData->propertyNames->eval == *name);
@@ -1404,7 +1357,7 @@ end:
if (hadAssignment)
m_nonLHSCount++;
- if (!ASTBuilder::CreatesAST)
+ if (!TreeBuilder::CreatesAST)
return lhs;
while (assignmentStack)
@@ -1938,8 +1891,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseUnaryExpression(TreeB
expr = context.createVoid(expr);
break;
case DELETETOKEN:
- if (strictMode() && context.isResolve(expr))
- failIfFalse(deleteProperty(m_lastIdentifier));
+ failIfTrueIfStrict(context.isResolve(expr));
expr = context.makeDeleteNode(expr, context.unaryTokenStackLastStart(tokenStackDepth), end, end);
break;
default:
diff --git a/JavaScriptCore/parser/JSParser.h b/JavaScriptCore/parser/JSParser.h
index 64b18e7..0676b41 100644
--- a/JavaScriptCore/parser/JSParser.h
+++ b/JavaScriptCore/parser/JSParser.h
@@ -31,7 +31,7 @@ namespace JSC {
class ExecState;
class FunctionParameters;
class Identifier;
-class JSGlobalObject;
+class JSGlobalData;
class SourceCode;
enum {
@@ -159,6 +159,6 @@ struct JSToken {
enum JSParserStrictness { JSParseNormal, JSParseStrict };
enum JSParserMode { JSParseProgramCode, JSParseFunctionCode };
-int jsParse(JSGlobalObject*, FunctionParameters*, JSParserStrictness, JSParserMode, const SourceCode*);
+int jsParse(JSGlobalData*, FunctionParameters*, JSParserStrictness, JSParserMode, const SourceCode*);
}
#endif // JSParser_h
diff --git a/JavaScriptCore/parser/Nodes.h b/JavaScriptCore/parser/Nodes.h
index 6930f63..b8e9cdf 100644
--- a/JavaScriptCore/parser/Nodes.h
+++ b/JavaScriptCore/parser/Nodes.h
@@ -58,7 +58,10 @@ namespace JSC {
const CodeFeatures CatchFeature = 1 << 5;
const CodeFeatures ThisFeature = 1 << 6;
const CodeFeatures StrictModeFeature = 1 << 7;
- const CodeFeatures AllFeatures = EvalFeature | ClosureFeature | AssignFeature | ArgumentsFeature | WithFeature | CatchFeature | ThisFeature;
+ const CodeFeatures ShadowsArgumentsFeature = 1 << 8;
+
+
+ const CodeFeatures AllFeatures = EvalFeature | ClosureFeature | AssignFeature | ArgumentsFeature | WithFeature | CatchFeature | ThisFeature | StrictModeFeature | ShadowsArgumentsFeature;
enum Operator {
OpEqual,
@@ -1409,7 +1412,7 @@ namespace JSC {
CodeFeatures features() { return m_features; }
bool usesEval() const { return m_features & EvalFeature; }
- bool usesArguments() const { return m_features & ArgumentsFeature; }
+ bool usesArguments() const { return (m_features & ArgumentsFeature) && !(m_features & ShadowsArgumentsFeature); }
bool isStrictMode() const { return m_features & StrictModeFeature; }
void setUsesArguments() { m_features |= ArgumentsFeature; }
bool usesThis() const { return m_features & ThisFeature; }
diff --git a/JavaScriptCore/parser/Parser.cpp b/JavaScriptCore/parser/Parser.cpp
index 49ce848..ffe3867 100644
--- a/JavaScriptCore/parser/Parser.cpp
+++ b/JavaScriptCore/parser/Parser.cpp
@@ -33,12 +33,16 @@
namespace JSC {
-void Parser::parse(JSGlobalObject* lexicalGlobalObject, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode mode, int* errLine, UString* errMsg)
+void Parser::parse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode mode, int* errLine, UString* errMsg)
{
+<<<<<<< HEAD
#ifdef ANDROID_INSTRUMENT
android::TimeCounter::start(android::TimeCounter::JavaScriptParseTimeCounter);
#endif
ASSERT(lexicalGlobalObject);
+=======
+ ASSERT(globalData);
+>>>>>>> webkit.org at r74534 (trunk)
m_sourceElements = 0;
int defaultErrLine;
@@ -52,10 +56,10 @@ void Parser::parse(JSGlobalObject* lexicalGlobalObject, FunctionParameters* para
*errLine = -1;
*errMsg = UString();
- Lexer& lexer = *lexicalGlobalObject->globalData().lexer;
+ Lexer& lexer = *globalData->lexer;
lexer.setCode(*m_source, m_arena);
- int parseError = jsParse(lexicalGlobalObject, parameters, strictness, mode, m_source);
+ int parseError = jsParse(globalData, parameters, strictness, mode, m_source);
int lineNumber = lexer.lineNumber();
bool lexError = lexer.sawError();
lexer.clear();
diff --git a/JavaScriptCore/parser/Parser.h b/JavaScriptCore/parser/Parser.h
index 6549067..213827b 100644
--- a/JavaScriptCore/parser/Parser.h
+++ b/JavaScriptCore/parser/Parser.h
@@ -57,7 +57,7 @@ namespace JSC {
ParserArena& arena() { return m_arena; }
private:
- void parse(JSGlobalObject* lexicalGlobalObject, FunctionParameters*, JSParserStrictness strictness, JSParserMode mode, int* errLine, UString* errMsg);
+ void parse(JSGlobalData*, FunctionParameters*, JSParserStrictness strictness, JSParserMode mode, int* errLine, UString* errMsg);
// Used to determine type of error to report.
bool isFunctionBodyNode(ScopeNode*) { return false; }
@@ -85,7 +85,7 @@ namespace JSC {
m_source = &source;
if (ParsedNode::scopeIsFunction)
lexicalGlobalObject->globalData().lexer->setIsReparsing();
- parse(lexicalGlobalObject, parameters, strictness, ParsedNode::isFunctionNode ? JSParseFunctionCode : JSParseProgramCode, &errLine, &errMsg);
+ parse(&lexicalGlobalObject->globalData(), parameters, strictness, ParsedNode::isFunctionNode ? JSParseFunctionCode : JSParseProgramCode, &errLine, &errMsg);
RefPtr<ParsedNode> result;
if (m_sourceElements) {
diff --git a/JavaScriptCore/parser/SyntaxChecker.h b/JavaScriptCore/parser/SyntaxChecker.h
index f9093a7..b00e710 100644
--- a/JavaScriptCore/parser/SyntaxChecker.h
+++ b/JavaScriptCore/parser/SyntaxChecker.h
@@ -203,9 +203,9 @@ public:
void assignmentStackAppend(int, int, int, int, int, Operator) { }
int createAssignment(int, int, int, int, int) { ASSERT_NOT_REACHED(); return 1; }
- const Identifier& getName(const Property& property) { ASSERT(property.name); return *property.name; }
- PropertyNode::Type getType(const Property& property) { return property.type; }
- bool isResolve(ExpressionType expr) { return expr == ResolveExpr || expr == ResolveEvalExpr; }
+ const Identifier& getName(const Property& property) const { ASSERT(property.name); return *property.name; }
+ PropertyNode::Type getType(const Property& property) const { return property.type; }
+ bool isResolve(ExpressionType expr) const { return expr == ResolveExpr || expr == ResolveEvalExpr; }
private:
int m_topBinaryExpr;
diff --git a/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp b/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp
index 5592865..d2052b2 100644
--- a/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp
+++ b/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp
@@ -95,5 +95,5 @@ int jsc_pcre_ucp_othercase(unsigned c)
int offset = ucp_table[mid].f1 & f1_casemask;
if (offset & f1_caseneg)
offset |= f1_caseneg;
- return !offset ? -1 : c + offset;
+ return !offset ? -1 : static_cast<int>(c + offset);
}
diff --git a/JavaScriptCore/runtime/AlignedMemoryAllocator.h b/JavaScriptCore/runtime/AlignedMemoryAllocator.h
deleted file mode 100644
index e682eb3..0000000
--- a/JavaScriptCore/runtime/AlignedMemoryAllocator.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#ifndef AlignedMemoryAllocator_h
-#define AlignedMemoryAllocator_h
-
-#include <wtf/Bitmap.h>
-#include <wtf/PageReservation.h>
-
-namespace JSC {
-
-struct AlignedMemoryAllocatorConstants {
-// Set sane defaults if -D<flagname=value> wasn't provided via compiler args
-#if defined(JSCCOLLECTOR_VIRTUALMEM_RESERVATION)
- // Keep backwards compatibility with symbian build system
- static const size_t virtualMemoryReservation = JSCCOLLECTOR_VIRTUALMEM_RESERVATION;
-#elif defined(__WINS__)
- // Emulator has limited virtual address space
- static const size_t virtualMemoryReservation = 0x400000;
-#else
- // HW has plenty of virtual addresses
- static const size_t virtualMemoryReservation = 0x8000000;
-#endif
-};
-
-template<size_t blockSize> class AlignedMemory;
-template<size_t blockSize> class AlignedMemoryAllocator;
-
-#if HAVE(PAGE_ALLOCATE_ALIGNED)
-
-template<size_t blockSize>
-class AlignedMemoryAllocator;
-
-template<size_t blockSize>
-class AlignedMemory {
-public:
- void deallocate();
- void* base();
-
-private:
- friend class AlignedMemoryAllocator<blockSize>;
-
- AlignedMemory(PageAllocation);
-
- PageAllocation m_allocation;
-};
-
-template<size_t blockSize>
-class AlignedMemoryAllocator {
-public:
- void destroy();
- AlignedMemory<blockSize> allocate();
-};
-
-template<size_t blockSize>
-inline void AlignedMemoryAllocator<blockSize>::destroy()
-{
-}
-
-template<size_t blockSize>
-inline AlignedMemory<blockSize> AlignedMemoryAllocator<blockSize>::allocate()
-{
- return AlignedMemory<blockSize>(PageAllocation::allocateAligned(blockSize, PageAllocation::JSGCHeapPages));
-}
-
-template<size_t blockSize>
-inline void AlignedMemory<blockSize>::deallocate()
-{
- m_allocation.deallocate();
-}
-
-template<size_t blockSize>
-inline void* AlignedMemory<blockSize>::base()
-{
- return m_allocation.base();
-}
-
-template<size_t blockSize>
-inline AlignedMemory<blockSize>::AlignedMemory(PageAllocation allocation)
- : m_allocation(allocation)
-{
-}
-
-#else
-
-template<size_t blockSize>
-class AlignedMemory {
-public:
- void deallocate();
- void* base();
-
-private:
- friend class AlignedMemoryAllocator<blockSize>;
-
- AlignedMemory(void* base, AlignedMemoryAllocator<blockSize>* allocator);
-
- void* m_base;
- AlignedMemoryAllocator<blockSize>* m_allocator;
-};
-
-template<size_t blockSize>
-class AlignedMemoryAllocator {
-public:
- AlignedMemoryAllocator();
- ~AlignedMemoryAllocator();
-
- void destroy();
- AlignedMemory<blockSize> allocate();
- void free(AlignedMemory<blockSize>);
-
-private:
- static const size_t reservationSize = AlignedMemoryAllocatorConstants::virtualMemoryReservation;
- static const size_t bitmapSize = reservationSize / blockSize;
-
- PageReservation m_reservation;
- size_t m_nextFree;
- uintptr_t m_reservationBase;
- WTF::Bitmap<bitmapSize> m_bitmap;
-};
-
-template<size_t blockSize>
-AlignedMemoryAllocator<blockSize>::AlignedMemoryAllocator()
- : m_reservation(PageReservation::reserve(reservationSize + blockSize, PageAllocation::JSGCHeapPages))
- , m_nextFree(0)
-{
- // check that blockSize and reservationSize are powers of two
- ASSERT(!(blockSize & (blockSize - 1)));
- ASSERT(!(reservationSize & (reservationSize - 1)));
-
- // check that blockSize is a multiple of pageSize and that
- // reservationSize is a multiple of blockSize
- ASSERT(!(blockSize & (PageAllocation::pageSize() - 1)));
- ASSERT(!(reservationSize & (blockSize - 1)));
-
- ASSERT(m_reservation);
-
- m_reservationBase = reinterpret_cast<uintptr_t>(m_reservation.base());
- m_reservationBase = (m_reservationBase + blockSize) & ~(blockSize - 1);
-}
-
-template<size_t blockSize>
-AlignedMemoryAllocator<blockSize>::~AlignedMemoryAllocator()
-{
- destroy();
- m_reservation.deallocate();
-}
-
-template<size_t blockSize>
-inline void AlignedMemoryAllocator<blockSize>::destroy()
-{
- for (unsigned i = 0; i < bitmapSize; ++i) {
- if (m_bitmap.get(i)) {
- void* blockAddress = reinterpret_cast<void*>(m_reservationBase + m_nextFree * blockSize);
- m_reservation.decommit(blockAddress, blockSize);
-
- m_bitmap.clear(i);
- }
- }
-}
-
-template<size_t blockSize>
-AlignedMemory<blockSize> AlignedMemoryAllocator<blockSize>::allocate()
-{
- while (m_nextFree < bitmapSize) {
- if (!m_bitmap.get(m_nextFree)) {
- void* blockAddress = reinterpret_cast<void*>(m_reservationBase + m_nextFree * blockSize);
- m_reservation.commit(blockAddress, blockSize);
-
- m_bitmap.set(m_nextFree);
- ++m_nextFree;
-
- return AlignedMemory<blockSize>(blockAddress, this);
- }
- m_bitmap.advanceToNextFreeBit(m_nextFree);
- }
-
- if (m_bitmap.isFull())
- return AlignedMemory<blockSize>(0, this);
-
- m_nextFree = 0;
-
- return allocate();
-}
-
-template<size_t blockSize>
-void AlignedMemoryAllocator<blockSize>::free(AlignedMemory<blockSize> allocation)
-{
- ASSERT(allocation.base());
- m_reservation.decommit(allocation.base(), blockSize);
-
- size_t diff = (reinterpret_cast<uintptr_t>(allocation.base()) - m_reservationBase);
- ASSERT(!(diff & (blockSize - 1)));
-
- size_t i = diff / blockSize;
- ASSERT(m_bitmap.get(i));
-
- m_bitmap.clear(i);
-}
-
-template<size_t blockSize>
-inline void AlignedMemory<blockSize>::deallocate()
-{
- m_allocator->free(*this);
-}
-
-template<size_t blockSize>
-inline void* AlignedMemory<blockSize>::base()
-{
- return m_base;
-}
-
-template<size_t blockSize>
-AlignedMemory<blockSize>::AlignedMemory(void* base, AlignedMemoryAllocator<blockSize>* allocator)
- : m_base(base)
- , m_allocator(allocator)
-{
-}
-
-#endif
-
-}
-
-#endif
diff --git a/JavaScriptCore/runtime/Collector.cpp b/JavaScriptCore/runtime/Collector.cpp
index 3fbd278..38845ce 100644
--- a/JavaScriptCore/runtime/Collector.cpp
+++ b/JavaScriptCore/runtime/Collector.cpp
@@ -171,9 +171,6 @@ void Heap::destroy()
freeBlocks();
- for (unsigned i = 0; i < m_weakGCHandlePools.size(); ++i)
- m_weakGCHandlePools[i].deallocate();
-
#if ENABLE(JSC_MULTIPLE_THREADS)
if (m_currentThreadRegistrar) {
int error = pthread_key_delete(m_currentThreadRegistrar);
@@ -187,13 +184,12 @@ void Heap::destroy()
t = next;
}
#endif
- m_blockallocator.destroy();
m_globalData = 0;
}
NEVER_INLINE CollectorBlock* Heap::allocateBlock()
{
- AlignedCollectorBlock allocation = m_blockallocator.allocate();
+ PageAllocationAligned allocation = PageAllocationAligned::allocate(BLOCK_SIZE, BLOCK_SIZE, OSAllocator::JSGCHeapPages);
CollectorBlock* block = static_cast<CollectorBlock*>(allocation.base());
if (!block)
CRASH();
@@ -211,12 +207,12 @@ NEVER_INLINE CollectorBlock* Heap::allocateBlock()
size_t numBlocks = m_heap.numBlocks;
if (m_heap.usedBlocks == numBlocks) {
- static const size_t maxNumBlocks = ULONG_MAX / sizeof(AlignedCollectorBlock) / GROWTH_FACTOR;
+ static const size_t maxNumBlocks = ULONG_MAX / sizeof(PageAllocationAligned) / GROWTH_FACTOR;
if (numBlocks > maxNumBlocks)
CRASH();
numBlocks = max(MIN_ARRAY_SIZE, numBlocks * GROWTH_FACTOR);
m_heap.numBlocks = numBlocks;
- m_heap.blocks = static_cast<AlignedCollectorBlock*>(fastRealloc(m_heap.blocks, numBlocks * sizeof(AlignedCollectorBlock)));
+ m_heap.blocks = static_cast<PageAllocationAligned*>(fastRealloc(m_heap.blocks, numBlocks * sizeof(PageAllocationAligned)));
}
m_heap.blocks[m_heap.usedBlocks++] = allocation;
@@ -239,7 +235,7 @@ NEVER_INLINE void Heap::freeBlock(size_t block)
if (m_heap.numBlocks > MIN_ARRAY_SIZE && m_heap.usedBlocks < m_heap.numBlocks / LOW_WATER_FACTOR) {
m_heap.numBlocks = m_heap.numBlocks / GROWTH_FACTOR;
- m_heap.blocks = static_cast<AlignedCollectorBlock*>(fastRealloc(m_heap.blocks, m_heap.numBlocks * sizeof(AlignedCollectorBlock)));
+ m_heap.blocks = static_cast<PageAllocationAligned*>(fastRealloc(m_heap.blocks, m_heap.numBlocks * sizeof(PageAllocationAligned)));
}
}
@@ -389,175 +385,6 @@ void Heap::shrinkBlocks(size_t neededBlocks)
m_heap.collectorBlock(i)->marked.set(HeapConstants::cellsPerBlock - 1);
}
-#if OS(WINCE)
-JS_EXPORTDATA void* g_stackBase = 0;
-
-inline bool isPageWritable(void* page)
-{
- MEMORY_BASIC_INFORMATION memoryInformation;
- DWORD result = VirtualQuery(page, &memoryInformation, sizeof(memoryInformation));
-
- // return false on error, including ptr outside memory
- if (result != sizeof(memoryInformation))
- return false;
-
- DWORD protect = memoryInformation.Protect & ~(PAGE_GUARD | PAGE_NOCACHE);
- return protect == PAGE_READWRITE
- || protect == PAGE_WRITECOPY
- || protect == PAGE_EXECUTE_READWRITE
- || protect == PAGE_EXECUTE_WRITECOPY;
-}
-
-static void* getStackBase(void* previousFrame)
-{
- // find the address of this stack frame by taking the address of a local variable
- bool isGrowingDownward;
- void* thisFrame = (void*)(&isGrowingDownward);
-
- isGrowingDownward = previousFrame < &thisFrame;
- static DWORD pageSize = 0;
- if (!pageSize) {
- SYSTEM_INFO systemInfo;
- GetSystemInfo(&systemInfo);
- pageSize = systemInfo.dwPageSize;
- }
-
- // scan all of memory starting from this frame, and return the last writeable page found
- register char* currentPage = (char*)((DWORD)thisFrame & ~(pageSize - 1));
- if (isGrowingDownward) {
- while (currentPage > 0) {
- // check for underflow
- if (currentPage >= (char*)pageSize)
- currentPage -= pageSize;
- else
- currentPage = 0;
- if (!isPageWritable(currentPage))
- return currentPage + pageSize;
- }
- return 0;
- } else {
- while (true) {
- // guaranteed to complete because isPageWritable returns false at end of memory
- currentPage += pageSize;
- if (!isPageWritable(currentPage))
- return currentPage;
- }
- }
-}
-#endif
-
-#if OS(QNX)
-static inline void *currentThreadStackBaseQNX()
-{
- static void* stackBase = 0;
- static size_t stackSize = 0;
- static pthread_t stackThread;
- pthread_t thread = pthread_self();
- if (stackBase == 0 || thread != stackThread) {
- struct _debug_thread_info threadInfo;
- memset(&threadInfo, 0, sizeof(threadInfo));
- threadInfo.tid = pthread_self();
- int fd = open("/proc/self", O_RDONLY);
- if (fd == -1) {
- LOG_ERROR("Unable to open /proc/self (errno: %d)", errno);
- return 0;
- }
- devctl(fd, DCMD_PROC_TIDSTATUS, &threadInfo, sizeof(threadInfo), 0);
- close(fd);
- stackBase = reinterpret_cast<void*>(threadInfo.stkbase);
- stackSize = threadInfo.stksize;
- ASSERT(stackBase);
- stackThread = thread;
- }
- return static_cast<char*>(stackBase) + stackSize;
-}
-#endif
-
-static inline void* currentThreadStackBase()
-{
-#if OS(DARWIN)
- pthread_t thread = pthread_self();
- return pthread_get_stackaddr_np(thread);
-#elif OS(WINDOWS) && CPU(X86) && COMPILER(MSVC)
- // offset 0x18 from the FS segment register gives a pointer to
- // the thread information block for the current thread
- NT_TIB* pTib;
- __asm {
- MOV EAX, FS:[18h]
- MOV pTib, EAX
- }
- return static_cast<void*>(pTib->StackBase);
-#elif OS(WINDOWS) && CPU(X86) && COMPILER(GCC)
- // offset 0x18 from the FS segment register gives a pointer to
- // the thread information block for the current thread
- NT_TIB* pTib;
- asm ( "movl %%fs:0x18, %0\n"
- : "=r" (pTib)
- );
- return static_cast<void*>(pTib->StackBase);
-#elif OS(WINDOWS) && CPU(X86_64)
- PNT_TIB64 pTib = reinterpret_cast<PNT_TIB64>(NtCurrentTeb());
- return reinterpret_cast<void*>(pTib->StackBase);
-#elif OS(QNX)
- AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
- MutexLocker locker(mutex);
- return currentThreadStackBaseQNX();
-#elif OS(SOLARIS)
- stack_t s;
- thr_stksegment(&s);
- return s.ss_sp;
-#elif OS(OPENBSD)
- pthread_t thread = pthread_self();
- stack_t stack;
- pthread_stackseg_np(thread, &stack);
- return stack.ss_sp;
-#elif OS(SYMBIAN)
- TThreadStackInfo info;
- RThread thread;
- thread.StackInfo(info);
- return (void*)info.iBase;
-#elif OS(HAIKU)
- thread_info threadInfo;
- get_thread_info(find_thread(NULL), &threadInfo);
- return threadInfo.stack_end;
-#elif OS(UNIX)
- AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
- MutexLocker locker(mutex);
- static void* stackBase = 0;
- static size_t stackSize = 0;
- static pthread_t stackThread;
- pthread_t thread = pthread_self();
- if (stackBase == 0 || thread != stackThread) {
- pthread_attr_t sattr;
- pthread_attr_init(&sattr);
-#if HAVE(PTHREAD_NP_H) || OS(NETBSD)
- // e.g. on FreeBSD 5.4, neundorf@kde.org
- pthread_attr_get_np(thread, &sattr);
-#else
- // FIXME: this function is non-portable; other POSIX systems may have different np alternatives
- pthread_getattr_np(thread, &sattr);
-#endif
- int rc = pthread_attr_getstack(&sattr, &stackBase, &stackSize);
- (void)rc; // FIXME: Deal with error code somehow? Seems fatal.
- ASSERT(stackBase);
- pthread_attr_destroy(&sattr);
- stackThread = thread;
- }
- return static_cast<char*>(stackBase) + stackSize;
-#elif OS(WINCE)
- AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
- MutexLocker locker(mutex);
- if (g_stackBase)
- return g_stackBase;
- else {
- int dummy;
- return getStackBase(&dummy);
- }
-#else
-#error Need a way to get the stack base on this platform
-#endif
-}
-
#if ENABLE(JSC_MULTIPLE_THREADS)
static inline PlatformThread getCurrentPlatformThread()
@@ -587,7 +414,7 @@ void Heap::registerThread()
return;
pthread_setspecific(m_currentThreadRegistrar, this);
- Heap::Thread* thread = new Heap::Thread(pthread_self(), getCurrentPlatformThread(), currentThreadStackBase());
+ Heap::Thread* thread = new Heap::Thread(pthread_self(), getCurrentPlatformThread(), m_globalData->stack().origin());
MutexLocker lock(m_registeredThreadsMutex);
@@ -654,11 +481,15 @@ static inline bool isPossibleCell(void* p)
void Heap::markConservatively(MarkStack& markStack, void* start, void* end)
{
+#if OS(WINCE)
if (start > end) {
void* tmp = start;
start = end;
end = tmp;
}
+#else
+ ASSERT(start <= end);
+#endif
ASSERT((static_cast<char*>(end) - static_cast<char*>(start)) < 0x1000000);
ASSERT(isPointerAligned(start));
@@ -685,7 +516,6 @@ void Heap::markConservatively(MarkStack& markStack, void* start, void* end)
if (m_heap.collectorBlock(block) != blockAddr)
continue;
markStack.append(reinterpret_cast<JSCell*>(xAsBits));
- markStack.drain();
}
}
}
@@ -693,10 +523,8 @@ void Heap::markConservatively(MarkStack& markStack, void* start, void* end)
void NEVER_INLINE Heap::markCurrentThreadConservativelyInternal(MarkStack& markStack)
{
- void* dummy;
- void* stackPointer = &dummy;
- void* stackBase = currentThreadStackBase();
- markConservatively(markStack, stackPointer, stackBase);
+ markConservatively(markStack, m_globalData->stack().current(), m_globalData->stack().origin());
+ markStack.drain();
}
#if COMPILER(GCC)
@@ -859,9 +687,11 @@ void Heap::markOtherThreadConservatively(MarkStack& markStack, Thread* thread)
// mark the thread's registers
markConservatively(markStack, static_cast<void*>(&regs), static_cast<void*>(reinterpret_cast<char*>(&regs) + regSize));
+ markStack.drain();
void* stackPointer = otherThreadStackPointer(regs);
markConservatively(markStack, stackPointer, thread->stackBase);
+ markStack.drain();
resumeThread(thread->platformThread);
}
@@ -920,10 +750,10 @@ WeakGCHandle* Heap::addWeakGCHandle(JSCell* ptr)
if (!weakGCHandlePool(i)->isFull())
return weakGCHandlePool(i)->allocate(ptr);
- AlignedMemory<WeakGCHandlePool::poolSize> allocation = m_weakGCHandlePoolAllocator.allocate();
+ PageAllocationAligned allocation = PageAllocationAligned::allocate(WeakGCHandlePool::poolSize, WeakGCHandlePool::poolSize, OSAllocator::JSGCHeapPages);
m_weakGCHandlePools.append(allocation);
- WeakGCHandlePool* pool = new (allocation) WeakGCHandlePool();
+ WeakGCHandlePool* pool = new (allocation.base()) WeakGCHandlePool();
return pool->allocate(ptr);
}
@@ -958,6 +788,33 @@ void Heap::markProtectedObjects(MarkStack& markStack)
}
}
+void Heap::pushTempSortVector(Vector<ValueStringPair>* tempVector)
+{
+ m_tempSortingVectors.append(tempVector);
+}
+
+void Heap::popTempSortVector(Vector<ValueStringPair>* tempVector)
+{
+ ASSERT_UNUSED(tempVector, tempVector == m_tempSortingVectors.last());
+ m_tempSortingVectors.removeLast();
+}
+
+void Heap::markTempSortVectors(MarkStack& markStack)
+{
+ typedef Vector<Vector<ValueStringPair>* > VectorOfValueStringVectors;
+
+ VectorOfValueStringVectors::iterator end = m_tempSortingVectors.end();
+ for (VectorOfValueStringVectors::iterator it = m_tempSortingVectors.begin(); it != end; ++it) {
+ Vector<ValueStringPair>* tempSortingVector = *it;
+
+ Vector<ValueStringPair>::iterator vectorEnd = tempSortingVector->end();
+ for (Vector<ValueStringPair>::iterator vectorIt = tempSortingVector->begin(); vectorIt != vectorEnd; ++vectorIt)
+ if (vectorIt->first)
+ markStack.append(vectorIt->first);
+ markStack.drain();
+ }
+}
+
void Heap::clearMarkBits()
{
for (size_t i = 0; i < m_heap.usedBlocks; ++i)
@@ -1045,6 +902,9 @@ void Heap::markRoots()
// Mark explicitly registered roots.
markProtectedObjects(markStack);
+
+ // Mark temporary vector for Array sorting
+ markTempSortVectors(markStack);
// Mark misc. other roots.
if (m_markListSet && m_markListSet->size())
@@ -1232,4 +1092,9 @@ void Heap::setActivityCallback(PassOwnPtr<GCActivityCallback> activityCallback)
m_activityCallback = activityCallback;
}
+GCActivityCallback* Heap::activityCallback()
+{
+ return m_activityCallback.get();
+}
+
} // namespace JSC
diff --git a/JavaScriptCore/runtime/Collector.h b/JavaScriptCore/runtime/Collector.h
index 237c139..a4e2fe1 100644
--- a/JavaScriptCore/runtime/Collector.h
+++ b/JavaScriptCore/runtime/Collector.h
@@ -22,8 +22,8 @@
#ifndef Collector_h
#define Collector_h
-#include "AlignedMemoryAllocator.h"
#include "GCHandle.h"
+#include "JSValue.h"
#include <stddef.h>
#include <string.h>
#include <wtf/Bitmap.h>
@@ -33,6 +33,7 @@
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
#include <wtf/PageAllocation.h>
+#include <wtf/PageAllocationAligned.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/StdLibExtras.h>
#include <wtf/Threading.h>
@@ -63,13 +64,10 @@ namespace JSC {
const size_t BLOCK_SIZE = 256 * 1024; // 256k
#endif
- typedef AlignedMemoryAllocator<BLOCK_SIZE> CollectorBlockAllocator;
- typedef AlignedMemory<BLOCK_SIZE> AlignedCollectorBlock;
-
struct CollectorHeap {
size_t nextBlock;
size_t nextCell;
- AlignedCollectorBlock* blocks;
+ PageAllocationAligned* blocks;
void* nextNumber;
@@ -98,6 +96,8 @@ namespace JSC {
bool isBusy(); // true if an allocation or collection is in progress
void collectAllGarbage();
+
+ GCActivityCallback* activityCallback();
void setActivityCallback(PassOwnPtr<GCActivityCallback>);
static const size_t minExtraCost = 256;
@@ -137,6 +137,9 @@ namespace JSC {
void markConservatively(MarkStack&, void* start, void* end);
+ void pushTempSortVector(WTF::Vector<ValueStringPair>*);
+ void popTempSortVector(WTF::Vector<ValueStringPair>*);
+
HashSet<MarkedArgumentBuffer*>& markListSet() { if (!m_markListSet) m_markListSet = new HashSet<MarkedArgumentBuffer*>; return *m_markListSet; }
JSGlobalData* globalData() const { return m_globalData; }
@@ -171,6 +174,7 @@ namespace JSC {
void markRoots();
void markProtectedObjects(MarkStack&);
+ void markTempSortVectors(MarkStack&);
void markCurrentThreadConservatively(MarkStack&);
void markCurrentThreadConservativelyInternal(MarkStack&);
void markOtherThreadConservatively(MarkStack&, Thread*);
@@ -184,7 +188,8 @@ namespace JSC {
CollectorHeap m_heap;
ProtectCountSet m_protectedValues;
- WTF::Vector<AlignedMemory<WeakGCHandlePool::poolSize> > m_weakGCHandlePools;
+ WTF::Vector<PageAllocationAligned> m_weakGCHandlePools;
+ WTF::Vector<WTF::Vector<ValueStringPair>* > m_tempSortingVectors;
HashSet<MarkedArgumentBuffer*>* m_markListSet;
@@ -201,10 +206,6 @@ namespace JSC {
pthread_key_t m_currentThreadRegistrar;
#endif
- // Allocates collector blocks with correct alignment
- CollectorBlockAllocator m_blockallocator;
- WeakGCHandlePool::Allocator m_weakGCHandlePoolAllocator;
-
JSGlobalData* m_globalData;
};
diff --git a/JavaScriptCore/runtime/Executable.cpp b/JavaScriptCore/runtime/Executable.cpp
index f229f96..c7262be 100644
--- a/JavaScriptCore/runtime/Executable.cpp
+++ b/JavaScriptCore/runtime/Executable.cpp
@@ -264,7 +264,7 @@ void FunctionExecutable::markAggregate(MarkStack& markStack)
m_codeBlockForConstruct->markAggregate(markStack);
}
-void FunctionExecutable::recompile(ExecState*)
+void FunctionExecutable::discardCode()
{
m_codeBlockForCall.clear();
m_codeBlockForConstruct.clear();
diff --git a/JavaScriptCore/runtime/Executable.h b/JavaScriptCore/runtime/Executable.h
index 14ed927..544e487 100644
--- a/JavaScriptCore/runtime/Executable.h
+++ b/JavaScriptCore/runtime/Executable.h
@@ -348,7 +348,7 @@ namespace JSC {
UString paramString() const;
SharedSymbolTable* symbolTable() const { return m_symbolTable; }
- void recompile(ExecState*);
+ void discardCode();
void markAggregate(MarkStack&);
static PassRefPtr<FunctionExecutable> fromGlobalCode(const Identifier&, ExecState*, Debugger*, const SourceCode&, JSObject** exception);
diff --git a/JavaScriptCore/runtime/GCActivityCallback.cpp b/JavaScriptCore/runtime/GCActivityCallback.cpp
index 2f2c079..161abfb 100644
--- a/JavaScriptCore/runtime/GCActivityCallback.cpp
+++ b/JavaScriptCore/runtime/GCActivityCallback.cpp
@@ -46,5 +46,9 @@ void DefaultGCActivityCallback::operator()()
{
}
+void DefaultGCActivityCallback::synchronize()
+{
+}
+
}
diff --git a/JavaScriptCore/runtime/GCActivityCallback.h b/JavaScriptCore/runtime/GCActivityCallback.h
index 66d56e8..862b4df 100644
--- a/JavaScriptCore/runtime/GCActivityCallback.h
+++ b/JavaScriptCore/runtime/GCActivityCallback.h
@@ -40,6 +40,7 @@ class GCActivityCallback {
public:
virtual ~GCActivityCallback() {}
virtual void operator()() {}
+ virtual void synchronize() {}
protected:
GCActivityCallback() {}
@@ -55,6 +56,7 @@ public:
~DefaultGCActivityCallback();
void operator()();
+ void synchronize();
private:
OwnPtr<DefaultGCActivityCallbackPlatformData*> d;
diff --git a/JavaScriptCore/runtime/GCActivityCallbackCF.cpp b/JavaScriptCore/runtime/GCActivityCallbackCF.cpp
index 45329ca..7168a05 100644
--- a/JavaScriptCore/runtime/GCActivityCallbackCF.cpp
+++ b/JavaScriptCore/runtime/GCActivityCallbackCF.cpp
@@ -47,10 +47,12 @@ struct DefaultGCActivityCallbackPlatformData {
static void trigger(CFRunLoopTimerRef, void *info);
RetainPtr<CFRunLoopTimerRef> timer;
+ RetainPtr<CFRunLoopRef> runLoop;
CFRunLoopTimerContext context;
};
const CFTimeInterval decade = 60 * 60 * 24 * 365 * 10;
+const CFTimeInterval triggerInterval = 2; // seconds
void DefaultGCActivityCallbackPlatformData::trigger(CFRunLoopTimerRef, void *info)
{
@@ -65,21 +67,32 @@ DefaultGCActivityCallback::DefaultGCActivityCallback(Heap* heap)
memset(&d->context, '\0', sizeof(CFRunLoopTimerContext));
d->context.info = heap;
+ d->runLoop = CFRunLoopGetCurrent();
d->timer.adoptCF(CFRunLoopTimerCreate(0, decade, decade, 0, 0, DefaultGCActivityCallbackPlatformData::trigger, &d->context));
- CFRunLoopAddTimer(CFRunLoopGetCurrent(), d->timer.get(), kCFRunLoopCommonModes);
+ CFRunLoopAddTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes);
}
DefaultGCActivityCallback::~DefaultGCActivityCallback()
{
- CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), d->timer.get(), kCFRunLoopCommonModes);
+ CFRunLoopRemoveTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes);
CFRunLoopTimerInvalidate(d->timer.get());
d->context.info = 0;
+ d->runLoop = 0;
d->timer = 0;
}
void DefaultGCActivityCallback::operator()()
{
- CFRunLoopTimerSetNextFireDate(d->timer.get(), CFAbsoluteTimeGetCurrent() + 2);
+ CFRunLoopTimerSetNextFireDate(d->timer.get(), CFAbsoluteTimeGetCurrent() + triggerInterval);
+}
+
+void DefaultGCActivityCallback::synchronize()
+{
+ if (CFRunLoopGetCurrent() == d->runLoop.get())
+ return;
+ CFRunLoopRemoveTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes);
+ d->runLoop = CFRunLoopGetCurrent();
+ CFRunLoopAddTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes);
}
}
diff --git a/JavaScriptCore/runtime/GCHandle.cpp b/JavaScriptCore/runtime/GCHandle.cpp
index 3331517..297de38 100644
--- a/JavaScriptCore/runtime/GCHandle.cpp
+++ b/JavaScriptCore/runtime/GCHandle.cpp
@@ -83,9 +83,4 @@ void WeakGCHandlePool::free(WeakGCHandle* handle)
--m_entriesSize;
}
-void* WeakGCHandlePool::operator new(size_t, AlignedMemory<WeakGCHandlePool::poolSize>& allocation)
-{
- return allocation.base();
-}
-
}
diff --git a/JavaScriptCore/runtime/GCHandle.h b/JavaScriptCore/runtime/GCHandle.h
index 38a7be9..8818f79 100644
--- a/JavaScriptCore/runtime/GCHandle.h
+++ b/JavaScriptCore/runtime/GCHandle.h
@@ -26,7 +26,7 @@
#ifndef GCHandle_h
#define GCHandle_h
-#include "AlignedMemoryAllocator.h"
+#include <wtf/Assertions.h>
namespace JSC {
@@ -91,8 +91,6 @@ public:
static const size_t poolMask = ~(poolSize - 1);
static const size_t numPoolEntries = (poolSize - sizeof(Heap*) - 3 * sizeof(unsigned)) / sizeof(WeakGCHandle);
- typedef AlignedMemoryAllocator<WeakGCHandlePool::poolSize> Allocator;
-
WeakGCHandlePool();
WeakGCHandle* allocate(JSCell* cell);
@@ -106,8 +104,6 @@ public:
void update();
- void* operator new(size_t, AlignedMemory<WeakGCHandlePool::poolSize>&);
-
private:
Heap* m_heap;
unsigned m_entriesSize;
diff --git a/JavaScriptCore/runtime/JSArray.cpp b/JavaScriptCore/runtime/JSArray.cpp
index b8b92f4..556a16e 100644
--- a/JavaScriptCore/runtime/JSArray.cpp
+++ b/JavaScriptCore/runtime/JSArray.cpp
@@ -874,8 +874,6 @@ static int compareNumbersForQSort(const void* a, const void* b)
return (da > db) - (da < db);
}
-typedef std::pair<JSValue, UString> ValueStringPair;
-
static int compareByStringPairForQSort(const void* a, const void* b)
{
const ValueStringPair* va = static_cast<const ValueStringPair*>(a);
@@ -939,6 +937,8 @@ void JSArray::sort(ExecState* exec)
throwOutOfMemoryError(exec);
return;
}
+
+ Heap::heap(this)->pushTempSortVector(&values);
for (size_t i = 0; i < lengthNotIncludingUndefined; i++) {
JSValue value = storage->m_vector[i];
@@ -946,9 +946,6 @@ void JSArray::sort(ExecState* exec)
values[i].first = value;
}
- // FIXME: While calling these toString functions, the array could be mutated.
- // In that case, objects pointed to by values in this vector might get garbage-collected!
-
// FIXME: The following loop continues to call toString on subsequent values even after
// a toString call raises an exception.
@@ -969,12 +966,18 @@ void JSArray::sort(ExecState* exec)
qsort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
#endif
- // FIXME: If the toString function changed the length of the array, this might be
- // modifying the vector incorrectly.
-
+ // If the toString function changed the length of the array or vector storage,
+ // increase the length to handle the orignal number of actual values.
+ if (m_vectorLength < lengthNotIncludingUndefined)
+ increaseVectorLength(lengthNotIncludingUndefined);
+ if (storage->m_length < lengthNotIncludingUndefined)
+ storage->m_length = lengthNotIncludingUndefined;
+
for (size_t i = 0; i < lengthNotIncludingUndefined; i++)
storage->m_vector[i] = values[i].first;
+ Heap::heap(this)->popTempSortVector(&values);
+
checkConsistency(SortConsistencyCheck);
}
diff --git a/JavaScriptCore/runtime/JSArray.h b/JavaScriptCore/runtime/JSArray.h
index 9e155d8..de28b65 100644
--- a/JavaScriptCore/runtime/JSArray.h
+++ b/JavaScriptCore/runtime/JSArray.h
@@ -222,6 +222,10 @@ namespace JSC {
inline void MarkStack::drain()
{
+#if !ASSERT_DISABLED
+ ASSERT(!m_isDraining);
+ m_isDraining = true;
+#endif
while (!m_markSets.isEmpty() || !m_values.isEmpty()) {
while (!m_markSets.isEmpty() && m_values.size() < 50) {
ASSERT(!m_markSets.isEmpty());
@@ -260,6 +264,9 @@ namespace JSC {
while (!m_values.isEmpty())
markChildren(m_values.removeLast());
}
+#if !ASSERT_DISABLED
+ m_isDraining = false;
+#endif
}
// Rule from ECMA 15.2 about what an array index is.
diff --git a/JavaScriptCore/runtime/JSGlobalData.cpp b/JavaScriptCore/runtime/JSGlobalData.cpp
index 9948877..aca995a 100644
--- a/JavaScriptCore/runtime/JSGlobalData.cpp
+++ b/JavaScriptCore/runtime/JSGlobalData.cpp
@@ -31,6 +31,7 @@
#include "ArgList.h"
#include "Collector.h"
+#include "CollectorHeapIterator.h"
#include "CommonIdentifiers.h"
#include "FunctionConstructor.h"
#include "GetterSetter.h"
@@ -153,6 +154,9 @@ JSGlobalData::JSGlobalData(GlobalDataType globalDataType, ThreadStackType thread
, exclusiveThread(0)
#endif
{
+ if (globalDataType == Default)
+ m_stack = wtfThreadData().stack();
+
#if PLATFORM(MAC)
startProfilerServerIfNeeded();
#endif
@@ -308,6 +312,22 @@ void JSGlobalData::dumpSampleData(ExecState* exec)
interpreter->dumpSampleData(exec);
}
+void JSGlobalData::recompileAllJSFunctions()
+{
+ // If JavaScript is running, it's not safe to recompile, since we'll end
+ // up throwing away code that is live on the stack.
+ ASSERT(!dynamicGlobalObject);
+
+ LiveObjectIterator it = heap.primaryHeapBegin();
+ LiveObjectIterator heapEnd = heap.primaryHeapEnd();
+ for ( ; it != heapEnd; ++it) {
+ if ((*it)->inherits(&JSFunction::info)) {
+ JSFunction* function = asFunction(*it);
+ if (!function->executable()->isHostFunction())
+ function->jsExecutable()->discardCode();
+ }
+ }
+}
#if ENABLE(REGEXP_TRACING)
void JSGlobalData::addRegExpToTrace(PassRefPtr<RegExp> regExp)
diff --git a/JavaScriptCore/runtime/JSGlobalData.h b/JavaScriptCore/runtime/JSGlobalData.h
index 1819a0c..699f975 100644
--- a/JavaScriptCore/runtime/JSGlobalData.h
+++ b/JavaScriptCore/runtime/JSGlobalData.h
@@ -46,6 +46,7 @@
#include <wtf/HashMap.h>
#include <wtf/RefCounted.h>
#include <wtf/ThreadSpecific.h>
+#include <wtf/WTFThreadData.h>
#if ENABLE(REGEXP_TRACING)
#include <wtf/ListHashSet.h>
#endif
@@ -169,6 +170,7 @@ namespace JSC {
#if ENABLE(ASSEMBLER)
ExecutableAllocator executableAllocator;
+ ExecutableAllocator regexAllocator;
#endif
#if !ENABLE(JIT)
@@ -178,6 +180,14 @@ namespace JSC {
#else
bool canUseJIT() { return m_canUseJIT; }
#endif
+
+ const StackBounds& stack()
+ {
+ return (globalDataType == Default)
+ ? m_stack
+ : wtfThreadData().stack();
+ }
+
Lexer* lexer;
Parser* parser;
Interpreter* interpreter;
@@ -238,6 +248,7 @@ namespace JSC {
void startSampling();
void stopSampling();
void dumpSampleData(ExecState* exec);
+ void recompileAllJSFunctions();
RegExpCache* regExpCache() { return m_regExpCache; }
#if ENABLE(REGEXP_TRACING)
void addRegExpToTrace(PassRefPtr<RegExp> regExp);
@@ -250,6 +261,7 @@ namespace JSC {
#if ENABLE(JIT) && ENABLE(INTERPRETER)
bool m_canUseJIT;
#endif
+ StackBounds m_stack;
};
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSGlobalObject.cpp b/JavaScriptCore/runtime/JSGlobalObject.cpp
index a8fb7bf..408aea7 100644
--- a/JavaScriptCore/runtime/JSGlobalObject.cpp
+++ b/JavaScriptCore/runtime/JSGlobalObject.cpp
@@ -455,4 +455,22 @@ void JSGlobalObject::destroyJSGlobalObjectData(void* jsGlobalObjectData)
delete static_cast<JSGlobalObjectData*>(jsGlobalObjectData);
}
+DynamicGlobalObjectScope::DynamicGlobalObjectScope(CallFrame* callFrame, JSGlobalObject* dynamicGlobalObject)
+ : m_dynamicGlobalObjectSlot(callFrame->globalData().dynamicGlobalObject)
+ , m_savedDynamicGlobalObject(m_dynamicGlobalObjectSlot)
+{
+ if (!m_dynamicGlobalObjectSlot) {
+#if ENABLE(ASSEMBLER)
+ if (ExecutableAllocator::underMemoryPressure())
+ callFrame->globalData().recompileAllJSFunctions();
+#endif
+
+ m_dynamicGlobalObjectSlot = dynamicGlobalObject;
+
+ // Reset the date cache between JS invocations to force the VM
+ // to observe time zone changes.
+ callFrame->globalData().resetDateCache();
+ }
+}
+
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSGlobalObject.h b/JavaScriptCore/runtime/JSGlobalObject.h
index 714999f..a22b0aa 100644
--- a/JavaScriptCore/runtime/JSGlobalObject.h
+++ b/JavaScriptCore/runtime/JSGlobalObject.h
@@ -467,18 +467,7 @@ namespace JSC {
class DynamicGlobalObjectScope : public Noncopyable {
public:
- DynamicGlobalObjectScope(CallFrame* callFrame, JSGlobalObject* dynamicGlobalObject)
- : m_dynamicGlobalObjectSlot(callFrame->globalData().dynamicGlobalObject)
- , m_savedDynamicGlobalObject(m_dynamicGlobalObjectSlot)
- {
- if (!m_dynamicGlobalObjectSlot) {
- m_dynamicGlobalObjectSlot = dynamicGlobalObject;
-
- // Reset the date cache between JS invocations to force the VM
- // to observe time zone changes.
- callFrame->globalData().resetDateCache();
- }
- }
+ DynamicGlobalObjectScope(CallFrame* callFrame, JSGlobalObject* dynamicGlobalObject);
~DynamicGlobalObjectScope()
{
diff --git a/JavaScriptCore/runtime/JSString.cpp b/JavaScriptCore/runtime/JSString.cpp
index 340a898..ba28139 100644
--- a/JavaScriptCore/runtime/JSString.cpp
+++ b/JavaScriptCore/runtime/JSString.cpp
@@ -31,6 +31,8 @@
#include "StringPrototype.h"
namespace JSC {
+
+static const unsigned substringFromRopeCutoff = 4;
// Overview: this methods converts a JSString from holding a string in rope form
// down to a simple UString representation. It does so by building up the string
@@ -105,6 +107,60 @@ void JSString::resolveRope(ExecState* exec) const
}
}
}
+
+// This function construsts a substring out of a rope without flattening by reusing the existing fibers.
+// This can reduce memory usage substantially. Since traversing ropes is slow the function will revert
+// back to flattening if the rope turns out to be long.
+JSString* JSString::substringFromRope(ExecState* exec, unsigned substringStart, unsigned substringLength)
+{
+ ASSERT(isRope());
+ ASSERT(substringLength);
+
+ JSGlobalData* globalData = &exec->globalData();
+
+ UString substringFibers[3];
+
+ unsigned fiberCount = 0;
+ unsigned substringFiberCount = 0;
+ unsigned substringEnd = substringStart + substringLength;
+ unsigned fiberEnd = 0;
+
+ RopeIterator end;
+ for (RopeIterator it(m_other.m_fibers.data(), m_fiberCount); it != end; ++it) {
+ ++fiberCount;
+ StringImpl* fiberString = *it;
+ unsigned fiberStart = fiberEnd;
+ fiberEnd = fiberStart + fiberString->length();
+ if (fiberEnd <= substringStart)
+ continue;
+ unsigned copyStart = std::max(substringStart, fiberStart);
+ unsigned copyEnd = std::min(substringEnd, fiberEnd);
+ if (copyStart == fiberStart && copyEnd == fiberEnd)
+ substringFibers[substringFiberCount++] = UString(fiberString);
+ else
+ substringFibers[substringFiberCount++] = UString(StringImpl::create(fiberString, copyStart - fiberStart, copyEnd - copyStart));
+ if (fiberEnd >= substringEnd)
+ break;
+ if (fiberCount > substringFromRopeCutoff || substringFiberCount >= 3) {
+ // This turned out to be a really inefficient rope. Just flatten it.
+ resolveRope(exec);
+ return jsSubstring(&exec->globalData(), m_value, substringStart, substringLength);
+ }
+ }
+ ASSERT(substringFiberCount && substringFiberCount <= 3);
+
+ if (substringLength == 1) {
+ ASSERT(substringFiberCount == 1);
+ UChar c = substringFibers[0].characters()[0];
+ if (c <= 0xFF)
+ return globalData->smallStrings.singleCharacterString(globalData, c);
+ }
+ if (substringFiberCount == 1)
+ return new (globalData) JSString(globalData, substringFibers[0]);
+ if (substringFiberCount == 2)
+ return new (globalData) JSString(globalData, substringFibers[0], substringFibers[1]);
+ return new (globalData) JSString(globalData, substringFibers[0], substringFibers[1], substringFibers[2]);
+}
JSValue JSString::replaceCharacter(ExecState* exec, UChar character, const UString& replacement)
{
diff --git a/JavaScriptCore/runtime/JSString.h b/JavaScriptCore/runtime/JSString.h
index 51b9f2d..fefffde 100644
--- a/JavaScriptCore/runtime/JSString.h
+++ b/JavaScriptCore/runtime/JSString.h
@@ -356,6 +356,7 @@ namespace JSC {
}
void resolveRope(ExecState*) const;
+ JSString* substringFromRope(ExecState*, unsigned offset, unsigned length);
void appendStringInConstruct(unsigned& index, const UString& string)
{
@@ -435,6 +436,7 @@ namespace JSC {
friend JSValue jsString(ExecState* exec, Register* strings, unsigned count);
friend JSValue jsString(ExecState* exec, JSValue thisValue);
friend JSString* jsStringWithFinalizer(ExecState*, const UString&, JSStringFinalizerCallback callback, void* context);
+ friend JSString* jsSubstring(ExecState* exec, JSString* s, unsigned offset, unsigned length);
};
JSString* asString(JSValue);
@@ -519,6 +521,19 @@ namespace JSC {
JSGlobalData* globalData = &exec->globalData();
return fixupVPtr(globalData, new (globalData) JSString(globalData, s, callback, context));
}
+
+ inline JSString* jsSubstring(ExecState* exec, JSString* s, unsigned offset, unsigned length)
+ {
+ ASSERT(offset <= static_cast<unsigned>(s->length()));
+ ASSERT(length <= static_cast<unsigned>(s->length()));
+ ASSERT(offset + length <= static_cast<unsigned>(s->length()));
+ JSGlobalData* globalData = &exec->globalData();
+ if (!length)
+ return globalData->smallStrings.emptyString(globalData);
+ if (s->isRope())
+ return s->substringFromRope(exec, offset, length);
+ return jsSubstring(globalData, s->m_value, offset, length);
+ }
inline JSString* jsSubstring(JSGlobalData* globalData, const UString& s, unsigned offset, unsigned length)
{
diff --git a/JavaScriptCore/runtime/JSValue.h b/JavaScriptCore/runtime/JSValue.h
index cad9662..dc54f40 100644
--- a/JavaScriptCore/runtime/JSValue.h
+++ b/JavaScriptCore/runtime/JSValue.h
@@ -763,7 +763,8 @@ namespace JSC {
return asValue() == jsNull();
}
#endif // USE(JSVALUE32_64)
-
+
+ typedef std::pair<JSValue, UString> ValueStringPair;
} // namespace JSC
#endif // JSValue_h
diff --git a/JavaScriptCore/runtime/MarkStack.h b/JavaScriptCore/runtime/MarkStack.h
index c551bac..7bccadf 100644
--- a/JavaScriptCore/runtime/MarkStack.h
+++ b/JavaScriptCore/runtime/MarkStack.h
@@ -28,6 +28,7 @@
#include "JSValue.h"
#include <wtf/Noncopyable.h>
+#include <wtf/OSAllocator.h>
namespace JSC {
@@ -40,8 +41,9 @@ namespace JSC {
public:
MarkStack(void* jsArrayVPtr)
: m_jsArrayVPtr(jsArrayVPtr)
-#ifndef NDEBUG
+#if !ASSERT_DISABLED
, m_isCheckingForDefaultMarkViolation(false)
+ , m_isDraining(false)
#endif
{
}
@@ -85,8 +87,8 @@ namespace JSC {
MarkSetProperties m_properties;
};
- static void* allocateStack(size_t size);
- static void releaseStack(void* addr, size_t size);
+ static void* allocateStack(size_t size) { return OSAllocator::reserveAndCommit(size); }
+ static void releaseStack(void* addr, size_t size) { OSAllocator::decommitAndRelease(addr, size); }
static void initializePagesize();
static size_t pageSize()
@@ -177,9 +179,10 @@ namespace JSC {
MarkStackArray<JSCell*> m_values;
static size_t s_pageSize;
-#ifndef NDEBUG
+#if !ASSERT_DISABLED
public:
bool m_isCheckingForDefaultMarkViolation;
+ bool m_isDraining;
#endif
};
}
diff --git a/JavaScriptCore/runtime/MarkStackPosix.cpp b/JavaScriptCore/runtime/MarkStackPosix.cpp
index c28bc0d..2a5b298 100644
--- a/JavaScriptCore/runtime/MarkStackPosix.cpp
+++ b/JavaScriptCore/runtime/MarkStackPosix.cpp
@@ -38,15 +38,6 @@ void MarkStack::initializePagesize()
MarkStack::s_pageSize = getpagesize();
}
-void* MarkStack::allocateStack(size_t size)
-{
- return mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
-}
-void MarkStack::releaseStack(void* addr, size_t size)
-{
- munmap(addr, size);
-}
-
}
#endif
diff --git a/JavaScriptCore/runtime/MarkStackSymbian.cpp b/JavaScriptCore/runtime/MarkStackSymbian.cpp
index bda14ac..a3893d7 100644
--- a/JavaScriptCore/runtime/MarkStackSymbian.cpp
+++ b/JavaScriptCore/runtime/MarkStackSymbian.cpp
@@ -33,16 +33,6 @@ void MarkStack::initializePagesize()
MarkStack::s_pageSize = page_size;
}
-void* MarkStack::allocateStack(size_t size)
-{
- return fastMalloc(size);
-}
-
-void MarkStack::releaseStack(void* addr, size_t size)
-{
- return fastFree(addr);
-}
-
}
#endif
diff --git a/JavaScriptCore/runtime/MarkStackWin.cpp b/JavaScriptCore/runtime/MarkStackWin.cpp
index a171c78..2d2a1b3 100644
--- a/JavaScriptCore/runtime/MarkStackWin.cpp
+++ b/JavaScriptCore/runtime/MarkStackWin.cpp
@@ -39,17 +39,6 @@ void MarkStack::initializePagesize()
MarkStack::s_pageSize = system_info.dwPageSize;
}
-void* MarkStack::allocateStack(size_t size)
-{
- return VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
-}
-void MarkStack::releaseStack(void* addr, size_t)
-{
- // According to http://msdn.microsoft.com/en-us/library/aa366892(VS.85).aspx,
- // dwSize must be 0 if dwFreeType is MEM_RELEASE.
- VirtualFree(addr, 0, MEM_RELEASE);
-}
-
}
#endif
diff --git a/JavaScriptCore/runtime/RegExp.cpp b/JavaScriptCore/runtime/RegExp.cpp
index a33fa91..9b2e3f3 100644
--- a/JavaScriptCore/runtime/RegExp.cpp
+++ b/JavaScriptCore/runtime/RegExp.cpp
@@ -2,6 +2,7 @@
* Copyright (C) 1999-2001, 2004 Harri Porten (porten@kde.org)
* Copyright (c) 2007, 2008 Apple Inc. All rights reserved.
* Copyright (C) 2009 Torch Mobile, Inc.
+ * Copyright (C) 2010 Peter Varga (pvarga@inf.u-szeged.hu), University of Szeged
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,24 +30,21 @@
#include <wtf/OwnArrayPtr.h>
#include "yarr/RegexCompiler.h"
-#if ENABLE(YARR_JIT)
#include "yarr/RegexJIT.h"
-#else
#include "yarr/RegexInterpreter.h"
-#endif
+#include "yarr/RegexPattern.h"
namespace JSC {
struct RegExpRepresentation {
#if ENABLE(YARR_JIT)
Yarr::RegexCodeBlock m_regExpJITCode;
-#else
- OwnPtr<Yarr::BytecodePattern> m_regExpBytecode;
#endif
+ OwnPtr<Yarr::BytecodePattern> m_regExpBytecode;
};
-inline RegExp::RegExp(JSGlobalData* globalData, const UString& pattern, const UString& flags)
- : m_pattern(pattern)
+inline RegExp::RegExp(JSGlobalData* globalData, const UString& patternString, const UString& flags)
+ : m_patternString(patternString)
, m_flagBits(0)
, m_constructionError(0)
, m_numSubpatterns(0)
@@ -66,29 +64,42 @@ inline RegExp::RegExp(JSGlobalData* globalData, const UString& pattern, const US
if (flags.find('m') != notFound)
m_flagBits |= Multiline;
}
- compile(globalData);
+
+ m_state = compile(globalData);
}
RegExp::~RegExp()
{
}
-PassRefPtr<RegExp> RegExp::create(JSGlobalData* globalData, const UString& pattern, const UString& flags)
+PassRefPtr<RegExp> RegExp::create(JSGlobalData* globalData, const UString& patternString, const UString& flags)
{
- RefPtr<RegExp> res = adoptRef(new RegExp(globalData, pattern, flags));
+ RefPtr<RegExp> res = adoptRef(new RegExp(globalData, patternString, flags));
#if ENABLE(REGEXP_TRACING)
globalData->addRegExpToTrace(res);
#endif
return res.release();
}
-void RegExp::compile(JSGlobalData* globalData)
+RegExp::RegExpState RegExp::compile(JSGlobalData* globalData)
{
+ Yarr::RegexPattern pattern(ignoreCase(), multiline());
+
+ if ((m_constructionError = Yarr::compileRegex(m_patternString, pattern)))
+ return ParseError;
+
+ m_numSubpatterns = pattern.m_numSubpatterns;
+
#if ENABLE(YARR_JIT)
- Yarr::jitCompileRegex(globalData, m_representation->m_regExpJITCode, m_pattern, m_numSubpatterns, m_constructionError, &globalData->m_regexAllocator, ignoreCase(), multiline());
-#else
- m_representation->m_regExpBytecode = Yarr::byteCompileRegex(m_pattern, m_numSubpatterns, m_constructionError, &globalData->m_regexAllocator, ignoreCase(), multiline());
+ if (!pattern.m_containsBackreferences && globalData->canUseJIT()) {
+ Yarr::jitCompileRegex(pattern, globalData, m_representation->m_regExpJITCode);
+ if (!m_representation->m_regExpJITCode.isFallBack())
+ return JITCode;
+ }
#endif
+
+ m_representation->m_regExpBytecode = Yarr::byteCompileRegex(pattern, &globalData->m_regexAllocator);
+ return ByteCode;
}
int RegExp::match(const UString& s, int startOffset, Vector<int, 32>* ovector)
@@ -103,11 +114,7 @@ int RegExp::match(const UString& s, int startOffset, Vector<int, 32>* ovector)
if (static_cast<unsigned>(startOffset) > s.length() || s.isNull())
return -1;
-#if ENABLE(YARR_JIT)
- if (!!m_representation->m_regExpJITCode) {
-#else
- if (m_representation->m_regExpBytecode) {
-#endif
+ if (m_state != ParseError) {
int offsetVectorSize = (m_numSubpatterns + 1) * 2;
int* offsetVector;
Vector<int, 32> nonReturnedOvector;
@@ -126,11 +133,13 @@ int RegExp::match(const UString& s, int startOffset, Vector<int, 32>* ovector)
for (unsigned j = 0, i = 0; i < m_numSubpatterns + 1; j += 2, i++)
offsetVector[j] = -1;
+ int result;
#if ENABLE(YARR_JIT)
- int result = Yarr::executeRegex(m_representation->m_regExpJITCode, s.characters(), startOffset, s.length(), offsetVector);
-#else
- int result = Yarr::interpretRegex(m_representation->m_regExpBytecode.get(), s.characters(), startOffset, s.length(), offsetVector);
+ if (m_state == JITCode)
+ result = Yarr::executeRegex(m_representation->m_regExpJITCode, s.characters(), startOffset, s.length(), offsetVector);
+ else
#endif
+ result = Yarr::interpretRegex(m_representation->m_regExpBytecode.get(), s.characters(), startOffset, s.length(), offsetVector);
ASSERT(result >= -1);;
@@ -162,7 +171,7 @@ int RegExp::match(const UString& s, int startOffset, Vector<int, 32>* ovector)
Yarr::RegexCodeBlock& codeBlock = m_representation->m_regExpJITCode;
char jitAddr[20];
- if (codeBlock.getFallback())
+ if (m_state == JITCode)
sprintf(jitAddr, "fallback");
else
sprintf(jitAddr, "0x%014lx", reinterpret_cast<unsigned long int>(codeBlock.getAddr()));
diff --git a/JavaScriptCore/runtime/RegExp.h b/JavaScriptCore/runtime/RegExp.h
index e6e2fbc..8f33f57 100644
--- a/JavaScriptCore/runtime/RegExp.h
+++ b/JavaScriptCore/runtime/RegExp.h
@@ -41,7 +41,7 @@ namespace JSC {
bool ignoreCase() const { return m_flagBits & IgnoreCase; }
bool multiline() const { return m_flagBits & Multiline; }
- const UString& pattern() const { return m_pattern; }
+ const UString& pattern() const { return m_patternString; }
bool isValid() const { return !m_constructionError; }
const char* errorMessage() const { return m_constructionError; }
@@ -56,11 +56,16 @@ namespace JSC {
private:
RegExp(JSGlobalData* globalData, const UString& pattern, const UString& flags);
- void compile(JSGlobalData*);
+ enum RegExpState {
+ ParseError,
+ JITCode,
+ ByteCode
+ } m_state;
- enum FlagBits { Global = 1, IgnoreCase = 2, Multiline = 4 };
+ RegExpState compile(JSGlobalData*);
- UString m_pattern; // FIXME: Just decompile m_regExp instead of storing this.
+ enum FlagBits { Global = 1, IgnoreCase = 2, Multiline = 4 };
+ UString m_patternString;
int m_flagBits;
const char* m_constructionError;
unsigned m_numSubpatterns;
diff --git a/JavaScriptCore/runtime/RegExpCache.h b/JavaScriptCore/runtime/RegExpCache.h
index e897b43..b5b637f 100644
--- a/JavaScriptCore/runtime/RegExpCache.h
+++ b/JavaScriptCore/runtime/RegExpCache.h
@@ -47,7 +47,14 @@ public:
private:
static const unsigned maxCacheablePatternLength = 256;
+
+#if PLATFORM(IOS)
+ // The RegExpCache can currently hold onto multiple Mb of memory;
+ // as a short-term fix some embedded platforms may wish to reduce the cache size.
+ static const int maxCacheableEntries = 32;
+#else
static const int maxCacheableEntries = 256;
+#endif
FixedArray<RegExpKey, maxCacheableEntries> patternKeyArray;
RegExpCacheMap m_cacheMap;
diff --git a/JavaScriptCore/runtime/StringPrototype.cpp b/JavaScriptCore/runtime/StringPrototype.cpp
index b5ea8fa..8b3d056 100644
--- a/JavaScriptCore/runtime/StringPrototype.cpp
+++ b/JavaScriptCore/runtime/StringPrototype.cpp
@@ -772,8 +772,16 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec)
JSValue thisValue = exec->hostThisValue();
if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
return throwVMTypeError(exec);
- UString s = thisValue.toThisString(exec);
- int len = s.length();
+ unsigned len;
+ JSString* jsString = 0;
+ UString uString;
+ if (thisValue.isString()) {
+ jsString = static_cast<JSString*>(thisValue.asCell());
+ len = jsString->length();
+ } else {
+ uString = thisValue.toThisObject(exec)->toString(exec);
+ len = uString.length();
+ }
JSValue a0 = exec->argument(0);
JSValue a1 = exec->argument(1);
@@ -789,7 +797,11 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec)
}
if (start + length > len)
length = len - start;
- return JSValue::encode(jsSubstring(exec, s, static_cast<unsigned>(start), static_cast<unsigned>(length)));
+ unsigned substringStart = static_cast<unsigned>(start);
+ unsigned substringLength = static_cast<unsigned>(length);
+ if (jsString)
+ return JSValue::encode(jsSubstring(exec, jsString, substringStart, substringLength));
+ return JSValue::encode(jsSubstring(exec, uString, substringStart, substringLength));
}
EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec)
@@ -797,8 +809,16 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec)
JSValue thisValue = exec->hostThisValue();
if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
return throwVMTypeError(exec);
- UString s = thisValue.toThisString(exec);
- int len = s.length();
+ int len;
+ JSString* jsString = 0;
+ UString uString;
+ if (thisValue.isString()) {
+ jsString = static_cast<JSString*>(thisValue.asCell());
+ len = jsString->length();
+ } else {
+ uString = thisValue.toThisObject(exec)->toString(exec);
+ len = uString.length();
+ }
JSValue a0 = exec->argument(0);
JSValue a1 = exec->argument(1);
@@ -823,7 +843,11 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec)
end = start;
start = temp;
}
- return JSValue::encode(jsSubstring(exec, s, static_cast<unsigned>(start), static_cast<unsigned>(end) - static_cast<unsigned>(start)));
+ unsigned substringStart = static_cast<unsigned>(start);
+ unsigned substringLength = static_cast<unsigned>(end) - substringStart;
+ if (jsString)
+ return JSValue::encode(jsSubstring(exec, jsString, substringStart, substringLength));
+ return JSValue::encode(jsSubstring(exec, uString, substringStart, substringLength));
}
EncodedJSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState* exec)
diff --git a/JavaScriptCore/runtime/Structure.cpp b/JavaScriptCore/runtime/Structure.cpp
index d06a239..0179eed 100644
--- a/JavaScriptCore/runtime/Structure.cpp
+++ b/JavaScriptCore/runtime/Structure.cpp
@@ -233,6 +233,7 @@ Structure::Structure(JSValue prototype, const TypeInfo& typeInfo, unsigned anony
, m_dictionaryKind(NoneDictionaryKind)
, m_isPinnedPropertyTable(false)
, m_hasGetterSetterProperties(false)
+ , m_hasNonEnumerableProperties(false)
, m_attributesInPrevious(0)
, m_specificFunctionThrashCount(0)
, m_anonymousSlotCount(anonymousSlotCount)
diff --git a/JavaScriptCore/shell/CMakeLists.txt b/JavaScriptCore/shell/CMakeLists.txt
index 1f529a5..a327204 100644
--- a/JavaScriptCore/shell/CMakeLists.txt
+++ b/JavaScriptCore/shell/CMakeLists.txt
@@ -9,7 +9,7 @@ SET(JSC_LIBRARIES
${JavaScriptCore_LIBRARY_NAME}
)
-INCLUDE_IF_EXISTS(${JAVASCRIPTCORE_DIR}/jsc/CMakeLists${PORT}.txt)
+INCLUDE_IF_EXISTS(${JAVASCRIPTCORE_DIR}/shell/CMakeLists${PORT}.txt)
WEBKIT_WRAP_SOURCELIST(${JSC_SOURCES})
INCLUDE_DIRECTORIES(./ ${JavaScriptCore_INCLUDE_DIRECTORIES})
diff --git a/JavaScriptCore/shell/CMakeListsWinCE.txt b/JavaScriptCore/shell/CMakeListsWinCE.txt
new file mode 100644
index 0000000..0b7a3bf
--- /dev/null
+++ b/JavaScriptCore/shell/CMakeListsWinCE.txt
@@ -0,0 +1,3 @@
+LIST(APPEND JSC_SOURCES
+ ../os-win32/WinMain.cpp
+)
diff --git a/JavaScriptCore/wtf/ASCIICType.h b/JavaScriptCore/wtf/ASCIICType.h
index b43bb37..c19b85a 100644
--- a/JavaScriptCore/wtf/ASCIICType.h
+++ b/JavaScriptCore/wtf/ASCIICType.h
@@ -49,6 +49,7 @@ namespace WTF {
inline bool isASCII(wchar_t c) { return !(c & ~0x7F); }
#endif
inline bool isASCII(int c) { return !(c & ~0x7F); }
+ inline bool isASCII(unsigned c) { return !(c & ~0x7F); }
inline bool isASCIIAlpha(char c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
inline bool isASCIIAlpha(unsigned short c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
@@ -56,6 +57,7 @@ namespace WTF {
inline bool isASCIIAlpha(wchar_t c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
#endif
inline bool isASCIIAlpha(int c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
+ inline bool isASCIIAlpha(unsigned c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
inline bool isASCIIAlphanumeric(char c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
inline bool isASCIIAlphanumeric(unsigned short c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
@@ -63,6 +65,7 @@ namespace WTF {
inline bool isASCIIAlphanumeric(wchar_t c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
#endif
inline bool isASCIIAlphanumeric(int c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
+ inline bool isASCIIAlphanumeric(unsigned c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
inline bool isASCIIDigit(char c) { return (c >= '0') & (c <= '9'); }
inline bool isASCIIDigit(unsigned short c) { return (c >= '0') & (c <= '9'); }
@@ -70,6 +73,7 @@ namespace WTF {
inline bool isASCIIDigit(wchar_t c) { return (c >= '0') & (c <= '9'); }
#endif
inline bool isASCIIDigit(int c) { return (c >= '0') & (c <= '9'); }
+ inline bool isASCIIDigit(unsigned c) { return (c >= '0') & (c <= '9'); }
inline bool isASCIIHexDigit(char c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
inline bool isASCIIHexDigit(unsigned short c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
@@ -77,6 +81,7 @@ namespace WTF {
inline bool isASCIIHexDigit(wchar_t c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
#endif
inline bool isASCIIHexDigit(int c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
+ inline bool isASCIIHexDigit(unsigned c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
inline bool isASCIIOctalDigit(char c) { return (c >= '0') & (c <= '7'); }
inline bool isASCIIOctalDigit(unsigned short c) { return (c >= '0') & (c <= '7'); }
@@ -84,6 +89,7 @@ namespace WTF {
inline bool isASCIIOctalDigit(wchar_t c) { return (c >= '0') & (c <= '7'); }
#endif
inline bool isASCIIOctalDigit(int c) { return (c >= '0') & (c <= '7'); }
+ inline bool isASCIIOctalDigit(unsigned c) { return (c >= '0') & (c <= '7'); }
inline bool isASCIILower(char c) { return c >= 'a' && c <= 'z'; }
inline bool isASCIILower(unsigned short c) { return c >= 'a' && c <= 'z'; }
@@ -91,6 +97,7 @@ namespace WTF {
inline bool isASCIILower(wchar_t c) { return c >= 'a' && c <= 'z'; }
#endif
inline bool isASCIILower(int c) { return c >= 'a' && c <= 'z'; }
+ inline bool isASCIILower(unsigned c) { return c >= 'a' && c <= 'z'; }
inline bool isASCIIUpper(char c) { return c >= 'A' && c <= 'Z'; }
inline bool isASCIIUpper(unsigned short c) { return c >= 'A' && c <= 'Z'; }
@@ -98,6 +105,7 @@ namespace WTF {
inline bool isASCIIUpper(wchar_t c) { return c >= 'A' && c <= 'Z'; }
#endif
inline bool isASCIIUpper(int c) { return c >= 'A' && c <= 'Z'; }
+ inline bool isASCIIUpper(unsigned c) { return c >= 'A' && c <= 'Z'; }
/*
Statistics from a run of Apple's page load test for callers of isASCIISpace:
@@ -118,6 +126,7 @@ namespace WTF {
inline bool isASCIISpace(wchar_t c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
#endif
inline bool isASCIISpace(int c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
+ inline bool isASCIISpace(unsigned c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
inline char toASCIILower(char c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
inline unsigned short toASCIILower(unsigned short c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
@@ -125,13 +134,16 @@ namespace WTF {
inline wchar_t toASCIILower(wchar_t c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
#endif
inline int toASCIILower(int c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
+ inline unsigned toASCIILower(unsigned c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
+ // FIXME: Why do these need static_cast?
inline char toASCIIUpper(char c) { return static_cast<char>(c & ~((c >= 'a' && c <= 'z') << 5)); }
inline unsigned short toASCIIUpper(unsigned short c) { return static_cast<unsigned short>(c & ~((c >= 'a' && c <= 'z') << 5)); }
#if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED)
inline wchar_t toASCIIUpper(wchar_t c) { return static_cast<wchar_t>(c & ~((c >= 'a' && c <= 'z') << 5)); }
#endif
inline int toASCIIUpper(int c) { return static_cast<int>(c & ~((c >= 'a' && c <= 'z') << 5)); }
+ inline unsigned toASCIIUpper(unsigned c) { return static_cast<unsigned>(c & ~((c >= 'a' && c <= 'z') << 5)); }
inline int toASCIIHexValue(char c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
inline int toASCIIHexValue(unsigned short c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
@@ -139,6 +151,7 @@ namespace WTF {
inline int toASCIIHexValue(wchar_t c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
#endif
inline int toASCIIHexValue(int c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
+ inline int toASCIIHexValue(unsigned c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
inline bool isASCIIPrintable(char c) { return c >= ' ' && c <= '~'; }
inline bool isASCIIPrintable(unsigned short c) { return c >= ' ' && c <= '~'; }
@@ -146,6 +159,7 @@ namespace WTF {
inline bool isASCIIPrintable(wchar_t c) { return c >= ' ' && c <= '~'; }
#endif
inline bool isASCIIPrintable(int c) { return c >= ' ' && c <= '~'; }
+ inline bool isASCIIPrintable(unsigned c) { return c >= ' ' && c <= '~'; }
}
using WTF::isASCII;
diff --git a/JavaScriptCore/wtf/BumpPointerAllocator.h b/JavaScriptCore/wtf/BumpPointerAllocator.h
index 3deefe6..682283c 100644
--- a/JavaScriptCore/wtf/BumpPointerAllocator.h
+++ b/JavaScriptCore/wtf/BumpPointerAllocator.h
@@ -138,10 +138,7 @@ private:
void destroy()
{
- // Don't call deallocate on allocation, because allocation is *inside* allocation,
- // and it will get deallocated before deallocate has completed!
- PageAllocation allocation = m_allocation;
- allocation.deallocate();
+ m_allocation.deallocate();
}
static BumpPointerPool* ensureCapacityCrossPool(BumpPointerPool* previousPool, size_t size)
diff --git a/JavaScriptCore/wtf/CMakeLists.txt b/JavaScriptCore/wtf/CMakeLists.txt
index 898d19b..98cd7e4 100644
--- a/JavaScriptCore/wtf/CMakeLists.txt
+++ b/JavaScriptCore/wtf/CMakeLists.txt
@@ -9,6 +9,7 @@ SET(WTF_SOURCES
MD5.cpp
RandomNumber.cpp
RefCountedLeakCounter.cpp
+ StackBounds.cpp
StringExtras.cpp
Threading.cpp
TypeTraits.cpp
diff --git a/JavaScriptCore/wtf/CMakeListsWinCE.txt b/JavaScriptCore/wtf/CMakeListsWinCE.txt
new file mode 100644
index 0000000..ed38c6f
--- /dev/null
+++ b/JavaScriptCore/wtf/CMakeListsWinCE.txt
@@ -0,0 +1,20 @@
+LIST(APPEND WTF_SOURCES
+ NullPtr.cpp
+ OSAllocatorWin.cpp
+ TCSystemAlloc.cpp
+ ThreadingWin.cpp
+ ThreadSpecificWin.cpp
+
+ unicode/CollatorDefault.cpp
+ unicode/wince/UnicodeWinCE.cpp
+
+ win/MainThreadWin.cpp
+ win/OwnPtrWin.cpp
+
+ ${3RDPARTY_DIR}/ce-compat/ce_time.c
+ ${3RDPARTY_DIR}/ce-compat/ce_unicode.cpp
+)
+
+LIST(APPEND WTF_LIBRARIES
+ mmtimer
+)
diff --git a/JavaScriptCore/wtf/Complex.h b/JavaScriptCore/wtf/Complex.h
index 7da8511..40fe56a 100644
--- a/JavaScriptCore/wtf/Complex.h
+++ b/JavaScriptCore/wtf/Complex.h
@@ -43,4 +43,7 @@ inline Complex complexFromMagnitudePhase(double magnitude, double phase)
} // namespace WTF
+using WTF::Complex;
+using WTF::complexFromMagnitudePhase;
+
#endif // WTF_Complex_h
diff --git a/JavaScriptCore/wtf/DateMath.cpp b/JavaScriptCore/wtf/DateMath.cpp
index f3627e6..8873352 100644
--- a/JavaScriptCore/wtf/DateMath.cpp
+++ b/JavaScriptCore/wtf/DateMath.cpp
@@ -379,7 +379,7 @@ int equivalentYearForDST(int year)
return year;
}
-static int32_t calculateUTCOffset()
+int32_t calculateUTCOffset()
{
#if PLATFORM(BREWMP)
time_t localTime = static_cast<time_t>(currentTime());
@@ -449,7 +449,7 @@ static double calculateDSTOffsetSimple(double localTimeSeconds, double utcOffset
}
// Get the DST offset, given a time in UTC
-static double calculateDSTOffset(double ms, double utcOffset)
+double calculateDSTOffset(double ms, double utcOffset)
{
// On Mac OS X, the call to localtime (see calculateDSTOffsetSimple) will return historically accurate
// DST information (e.g. New Zealand did not have DST from 1946 to 1974) however the JavaScript
@@ -1129,7 +1129,7 @@ void msToGregorianDateTime(ExecState* exec, double ms, bool outputIsUTC, Gregori
tm.year = year - 1900;
tm.isDST = dstOff != 0.0;
tm.utcOffset = static_cast<long>((dstOff + utcOff) / WTF::msPerSecond);
- tm.timeZone = NULL;
+ tm.timeZone = nullptr;
}
double parseDateFromNullTerminatedCharacters(ExecState* exec, const char* dateString)
diff --git a/JavaScriptCore/wtf/DateMath.h b/JavaScriptCore/wtf/DateMath.h
index be51947..8d0d932 100644
--- a/JavaScriptCore/wtf/DateMath.h
+++ b/JavaScriptCore/wtf/DateMath.h
@@ -2,6 +2,7 @@
* Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
* Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2010 Research In Motion Limited. All rights reserved.
*
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@@ -47,6 +48,8 @@
#include <time.h>
#include <wtf/CurrentTime.h>
#include <wtf/Noncopyable.h>
+#include <wtf/OwnArrayPtr.h>
+#include <wtf/PassOwnArrayPtr.h>
#include <wtf/UnusedParam.h>
namespace WTF {
@@ -84,18 +87,26 @@ int dayInYear(double ms, int year);
int monthFromDayInYear(int dayInYear, bool leapYear);
int dayInMonthFromDayInYear(int dayInYear, bool leapYear);
+// Returns offset milliseconds for UTC and DST.
+int32_t calculateUTCOffset();
+double calculateDSTOffset(double ms, double utcOffset);
+
} // namespace WTF
+using WTF::adoptArrayPtr;
using WTF::dateToDaysFrom1970;
using WTF::dayInMonthFromDayInYear;
using WTF::dayInYear;
using WTF::minutesPerHour;
using WTF::monthFromDayInYear;
using WTF::msPerDay;
+using WTF::msPerMinute;
using WTF::msPerSecond;
using WTF::msToYear;
using WTF::secondsPerMinute;
using WTF::parseDateFromNullTerminatedCharacters;
+using WTF::calculateUTCOffset;
+using WTF::calculateDSTOffset;
#if USE(JSC)
namespace JSC {
@@ -125,11 +136,6 @@ struct GregorianDateTime : Noncopyable {
{
}
- ~GregorianDateTime()
- {
- delete [] timeZone;
- }
-
GregorianDateTime(ExecState* exec, const tm& inTm)
: second(inTm.tm_sec)
, minute(inTm.tm_min)
@@ -150,10 +156,10 @@ struct GregorianDateTime : Noncopyable {
#if HAVE(TM_ZONE)
int inZoneSize = strlen(inTm.tm_zone) + 1;
- timeZone = new char[inZoneSize];
- strncpy(timeZone, inTm.tm_zone, inZoneSize);
+ timeZone = adoptArrayPtr(new char[inZoneSize]);
+ strncpy(timeZone.get(), inTm.tm_zone, inZoneSize);
#else
- timeZone = 0;
+ timeZone = nullptr;
#endif
}
@@ -176,7 +182,7 @@ struct GregorianDateTime : Noncopyable {
ret.tm_gmtoff = static_cast<long>(utcOffset);
#endif
#if HAVE(TM_ZONE)
- ret.tm_zone = timeZone;
+ ret.tm_zone = timeZone.get();
#endif
return ret;
@@ -195,11 +201,11 @@ struct GregorianDateTime : Noncopyable {
isDST = rhs.isDST;
utcOffset = rhs.utcOffset;
if (rhs.timeZone) {
- int inZoneSize = strlen(rhs.timeZone) + 1;
- timeZone = new char[inZoneSize];
- strncpy(timeZone, rhs.timeZone, inZoneSize);
+ int inZoneSize = strlen(rhs.timeZone.get()) + 1;
+ timeZone = adoptArrayPtr(new char[inZoneSize]);
+ strncpy(timeZone.get(), rhs.timeZone.get(), inZoneSize);
} else
- timeZone = 0;
+ timeZone = nullptr;
}
int second;
@@ -212,7 +218,7 @@ struct GregorianDateTime : Noncopyable {
int year;
int isDST;
int utcOffset;
- char* timeZone;
+ OwnArrayPtr<char> timeZone;
};
static inline int gmtoffset(const GregorianDateTime& t)
diff --git a/JavaScriptCore/wtf/MathExtras.h b/JavaScriptCore/wtf/MathExtras.h
index 8a8741c..095549e 100644
--- a/JavaScriptCore/wtf/MathExtras.h
+++ b/JavaScriptCore/wtf/MathExtras.h
@@ -145,6 +145,13 @@ inline float nextafterf(float x, float y) { return x > y ? x - FLT_EPSILON : x +
inline double copysign(double x, double y) { return _copysign(x, y); }
inline int isfinite(double x) { return _finite(x); }
+// MSVC's math.h does not currently supply log2.
+inline double log2(double num)
+{
+ // This constant is roughly M_LN2, which is not provided by default on Windows.
+ return log(num) / 0.693147180559945309417232121458176568;
+}
+
// Work around a bug in Win, where atan2(+-infinity, +-infinity) yields NaN instead of specific values.
inline double wtf_atan2(double x, double y)
{
diff --git a/JavaScriptCore/wtf/OSAllocator.h b/JavaScriptCore/wtf/OSAllocator.h
new file mode 100644
index 0000000..577a6b8
--- /dev/null
+++ b/JavaScriptCore/wtf/OSAllocator.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef OSAllocator_h
+#define OSAllocator_h
+
+#include <wtf/UnusedParam.h>
+#include <wtf/VMTags.h>
+#include <wtf/VMTags.h>
+
+namespace WTF {
+
+class OSAllocator {
+public:
+ enum Usage {
+ UnknownUsage = -1,
+ FastMallocPages = VM_TAG_FOR_TCMALLOC_MEMORY,
+ JSGCHeapPages = VM_TAG_FOR_COLLECTOR_MEMORY,
+ JSVMStackPages = VM_TAG_FOR_REGISTERFILE_MEMORY,
+ JSJITCodePages = VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY,
+ };
+
+ // These methods are symmetric; reserveUncommitted allocates VM in an uncommitted state,
+ // releaseDecommitted should be called on a region of VM allocated by a single reservation,
+ // the memory must all currently be in a decommitted state.
+ static void* reserveUncommitted(size_t, Usage = UnknownUsage, bool writable = true, bool executable = false);
+ static void releaseDecommitted(void*, size_t);
+
+ // These methods are symmetric; they commit or decommit a region of VM (uncommitted VM should
+ // never be accessed, since the OS may not have attached physical memory for these regions).
+ // Clients should only call commit on uncommitted regions and decommit on committed regions.
+ static void commit(void*, size_t, bool writable, bool executable);
+ static void decommit(void*, size_t);
+
+ // These methods are symmetric; reserveAndCommit allocates VM in an committed state,
+ // decommitAndRelease should be called on a region of VM allocated by a single reservation,
+ // the memory must all currently be in a committed state.
+ static void* reserveAndCommit(size_t, Usage = UnknownUsage, bool writable = true, bool executable = false);
+ static void decommitAndRelease(void* base, size_t size);
+
+ // These methods are akin to reserveAndCommit/decommitAndRelease, above - however rather than
+ // committing/decommitting the entire region additional parameters allow a subregion to be
+ // specified.
+ static void* reserveAndCommit(size_t reserveSize, size_t commitSize, Usage = UnknownUsage, bool writable = true, bool executable = false);
+ static void decommitAndRelease(void* releaseBase, size_t releaseSize, void* decommitBase, size_t decommitSize);
+};
+
+inline void* OSAllocator::reserveAndCommit(size_t reserveSize, size_t commitSize, Usage usage, bool writable, bool executable)
+{
+ void* base = reserveUncommitted(reserveSize, usage, writable, executable);
+ commit(base, commitSize, writable, executable);
+ return base;
+}
+
+inline void OSAllocator::decommitAndRelease(void* releaseBase, size_t releaseSize, void* decommitBase, size_t decommitSize)
+{
+ ASSERT(decommitBase >= releaseBase && (static_cast<char*>(decommitBase) + decommitSize) <= (static_cast<char*>(releaseBase) + releaseSize));
+#if OS(WINCE)
+ // On most platforms we can actually skip this final decommit; releasing the VM will
+ // implicitly decommit any physical memory in the region. This is not true on WINCE.
+ decommit(decommitBase, decommitSize);
+#else
+ UNUSED_PARAM(decommitBase);
+ UNUSED_PARAM(decommitSize);
+#endif
+ releaseDecommitted(releaseBase, releaseSize);
+}
+
+inline void OSAllocator::decommitAndRelease(void* base, size_t size)
+{
+ decommitAndRelease(base, size, base, size);
+}
+
+} // namespace WTF
+
+using WTF::OSAllocator;
+
+#endif // OSAllocator_h
diff --git a/JavaScriptCore/wtf/OSAllocatorPosix.cpp b/JavaScriptCore/wtf/OSAllocatorPosix.cpp
new file mode 100644
index 0000000..5546cef
--- /dev/null
+++ b/JavaScriptCore/wtf/OSAllocatorPosix.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "OSAllocator.h"
+
+#include <errno.h>
+#include <sys/mman.h>
+#include <wtf/Assertions.h>
+#include <wtf/UnusedParam.h>
+
+namespace WTF {
+
+void* OSAllocator::reserveUncommitted(size_t bytes, Usage usage, bool writable, bool executable)
+{
+ void* result = reserveAndCommit(bytes, usage, writable, executable);
+#if HAVE(MADV_FREE_REUSE)
+ // To support the "reserve then commit" model, we have to initially decommit.
+ while (madvise(result, bytes, MADV_FREE_REUSABLE) == -1 && errno == EAGAIN) { }
+#endif
+ return result;
+}
+
+void* OSAllocator::reserveAndCommit(size_t bytes, Usage usage, bool writable, bool executable)
+{
+ // All POSIX reservations start out logically committed.
+ int protection = PROT_READ;
+ if (writable)
+ protection |= PROT_WRITE;
+ if (executable)
+ protection |= PROT_EXEC;
+
+ int flags = MAP_PRIVATE | MAP_ANON;
+
+#if OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+ int fd = usage;
+#else
+ int fd = -1;
+#endif
+
+ void* result = 0;
+#if (OS(DARWIN) && CPU(X86_64))
+ if (executable) {
+ // Cook up an address to allocate at, using the following recipe:
+ // 17 bits of zero, stay in userspace kids.
+ // 26 bits of randomness for ASLR.
+ // 21 bits of zero, at least stay aligned within one level of the pagetables.
+ //
+ // But! - as a temporary workaround for some plugin problems (rdar://problem/6812854),
+ // for now instead of 2^26 bits of ASLR lets stick with 25 bits of randomization plus
+ // 2^24, which should put up somewhere in the middle of userspace (in the address range
+ // 0x200000000000 .. 0x5fffffffffff).
+ intptr_t randomLocation = 0;
+ randomLocation = arc4random() & ((1 << 25) - 1);
+ randomLocation += (1 << 24);
+ randomLocation <<= 21;
+ result = reinterpret_cast<void*>(randomLocation);
+ }
+#endif
+
+ result = mmap(result, bytes, protection, flags, fd, 0);
+ if (result == MAP_FAILED)
+ CRASH();
+ return result;
+}
+
+void OSAllocator::commit(void* address, size_t bytes, bool, bool)
+{
+#if HAVE(MADV_FREE_REUSE)
+ while (madvise(address, bytes, MADV_FREE_REUSE) == -1 && errno == EAGAIN) { }
+#else
+ // Non-MADV_FREE_REUSE reservations automatically commit on demand.
+ UNUSED_PARAM(address);
+ UNUSED_PARAM(bytes);
+#endif
+}
+
+void OSAllocator::decommit(void* address, size_t bytes)
+{
+#if HAVE(MADV_FREE_REUSE)
+ while (madvise(address, bytes, MADV_FREE_REUSABLE) == -1 && errno == EAGAIN) { }
+#elif HAVE(MADV_FREE)
+ while (madvise(address, bytes, MADV_FREE) == -1 && errno == EAGAIN) { }
+#elif HAVE(MADV_DONTNEED)
+ while (madvise(address, bytes, MADV_DONTNEED) == -1 && errno == EAGAIN) { }
+#else
+ UNUSED_PARAM(address);
+ UNUSED_PARAM(bytes);
+#endif
+}
+
+void OSAllocator::releaseDecommitted(void* address, size_t bytes)
+{
+ int result = munmap(address, bytes);
+ if (result == -1)
+ CRASH();
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/OSAllocatorSymbian.cpp b/JavaScriptCore/wtf/OSAllocatorSymbian.cpp
new file mode 100644
index 0000000..e746fde
--- /dev/null
+++ b/JavaScriptCore/wtf/OSAllocatorSymbian.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "OSAllocator.h"
+
+#include <wtf/FastMalloc.h>
+
+namespace WTF {
+
+void* OSAllocator::reserveUncommitted(size_t bytes, Usage, bool, bool)
+{
+ return fastMalloc(bytes);
+}
+
+void* OSAllocator::reserveAndCommit(size_t bytes, Usage, bool, bool)
+{
+ return fastMalloc(bytes);
+}
+
+void OSAllocator::commit(void*, size_t, bool, bool)
+{
+}
+
+void OSAllocator::decommit(void*, size_t)
+{
+}
+
+void OSAllocator::releaseDecommitted(void* address, size_t)
+{
+ fastFree(address);
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/OSAllocatorWin.cpp b/JavaScriptCore/wtf/OSAllocatorWin.cpp
new file mode 100644
index 0000000..e7beb8a
--- /dev/null
+++ b/JavaScriptCore/wtf/OSAllocatorWin.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "OSAllocator.h"
+
+#include "windows.h"
+#include <wtf/Assertions.h>
+
+namespace WTF {
+
+static inline DWORD protection(bool writable, bool executable)
+{
+ return executable ?
+ (writable ? PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ) :
+ (writable ? PAGE_READWRITE : PAGE_READONLY);
+}
+
+void* OSAllocator::reserveUncommitted(size_t bytes, Usage, bool writable, bool executable)
+{
+ void* result = VirtualAlloc(0, bytes, MEM_RESERVE, protection(writable, executable));
+ if (!result)
+ CRASH();
+ return result;
+}
+
+void* OSAllocator::reserveAndCommit(size_t bytes, Usage, bool writable, bool executable)
+{
+ void* result = VirtualAlloc(0, bytes, MEM_RESERVE | MEM_COMMIT, protection(writable, executable));
+ if (!result)
+ CRASH();
+ return result;
+}
+
+void OSAllocator::commit(void* address, size_t bytes, bool writable, bool executable)
+{
+ void* result = VirtualAlloc(address, bytes, MEM_COMMIT, protection(writable, executable));
+ if (!result)
+ CRASH();
+}
+
+void OSAllocator::decommit(void* address, size_t bytes)
+{
+ bool result = VirtualFree(address, bytes, MEM_DECOMMIT);
+ if (!result)
+ CRASH();
+}
+
+void OSAllocator::releaseDecommitted(void* address, size_t bytes)
+{
+ // According to http://msdn.microsoft.com/en-us/library/aa366892(VS.85).aspx,
+ // dwSize must be 0 if dwFreeType is MEM_RELEASE.
+ bool result = VirtualFree(address, 0, MEM_RELEASE);
+ if (!result)
+ CRASH();
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/PageAllocation.h b/JavaScriptCore/wtf/PageAllocation.h
index 26d53a5..232cd20 100644
--- a/JavaScriptCore/wtf/PageAllocation.h
+++ b/JavaScriptCore/wtf/PageAllocation.h
@@ -27,8 +27,11 @@
#define PageAllocation_h
#include <wtf/Assertions.h>
+#include <wtf/OSAllocator.h>
+#include <wtf/PageBlock.h>
#include <wtf/UnusedParam.h>
#include <wtf/VMTags.h>
+#include <algorithm>
#if OS(DARWIN)
#include <mach/mach_init.h>
@@ -74,287 +77,45 @@ namespace WTF {
Callers may also optinally provide a flag indicating the usage (for use by
system memory usage tracking tools, where implemented), and boolean values
specifying the required protection (defaulting to writable, non-executable).
-
- Where HAVE(PAGE_ALLOCATE_AT) and HAVE(PAGE_ALLOCATE_ALIGNED) are available
- memory may also be allocated at a specified address, or with a specified
- alignment respectively. PageAllocation::allocateAt take an address to try
- to allocate at, and a boolean indicating whether this behaviour is strictly
- required (if this address is unavailable, should memory at another address
- be allocated instead). PageAllocation::allocateAligned requires that the
- size is a power of two that is >= system page size.
*/
-class PageAllocation {
-public:
- enum Usage {
- UnknownUsage = -1,
- FastMallocPages = VM_TAG_FOR_TCMALLOC_MEMORY,
- JSGCHeapPages = VM_TAG_FOR_COLLECTOR_MEMORY,
- JSVMStackPages = VM_TAG_FOR_REGISTERFILE_MEMORY,
- JSJITCodePages = VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY,
- };
+class PageAllocation : private PageBlock {
+public:
PageAllocation()
- : m_base(0)
- , m_size(0)
-#if OS(SYMBIAN)
- , m_chunk(0)
-#endif
- {
- }
-
- bool operator!() const { return !m_base; }
- void* base() const { return m_base; }
- size_t size() const { return m_size; }
-
- static PageAllocation allocate(size_t size, Usage usage = UnknownUsage, bool writable = true, bool executable = false)
{
- ASSERT(isPageAligned(size));
- return systemAllocate(size, usage, writable, executable);
}
-#if HAVE(PAGE_ALLOCATE_AT)
- static PageAllocation allocateAt(void* address, bool fixed, size_t size, Usage usage = UnknownUsage, bool writable = true, bool executable = false)
- {
- ASSERT(isPageAligned(address));
- ASSERT(isPageAligned(size));
- return systemAllocateAt(address, fixed, size, usage, writable, executable);
- }
-#endif
+ using PageBlock::operator bool;
+ using PageBlock::size;
+ using PageBlock::base;
-#if HAVE(PAGE_ALLOCATE_ALIGNED)
- static PageAllocation allocateAligned(size_t size, Usage usage = UnknownUsage)
+ static PageAllocation allocate(size_t size, OSAllocator::Usage usage = OSAllocator::UnknownUsage, bool writable = true, bool executable = false)
{
ASSERT(isPageAligned(size));
- ASSERT(isPowerOfTwo(size));
- return systemAllocateAligned(size, usage);
+ return PageAllocation(OSAllocator::reserveAndCommit(size, usage, writable, executable), size);
}
-#endif
void deallocate()
{
- ASSERT(m_base);
- systemDeallocate(true);
- }
-
- static size_t pageSize()
- {
- if (!s_pageSize)
- s_pageSize = systemPageSize();
- ASSERT(isPowerOfTwo(s_pageSize));
- return s_pageSize;
- }
+ // Clear base & size before calling release; if this is *inside* allocation
+ // then we won't be able to clear then after deallocating the memory.
+ PageAllocation tmp;
+ std::swap(tmp, *this);
-#ifndef NDEBUG
- static bool isPageAligned(void* address) { return !(reinterpret_cast<intptr_t>(address) & (pageSize() - 1)); }
- static bool isPageAligned(size_t size) { return !(size & (pageSize() - 1)); }
- static bool isPowerOfTwo(size_t size) { return !(size & (size - 1)); }
- static int lastError();
-#endif
+ ASSERT(tmp);
+ ASSERT(!*this);
-protected:
-#if OS(SYMBIAN)
- PageAllocation(void* base, size_t size, RChunk* chunk)
- : m_base(base)
- , m_size(size)
- , m_chunk(chunk)
- {
+ OSAllocator::decommitAndRelease(tmp.base(), tmp.size());
}
-#else
+
+private:
PageAllocation(void* base, size_t size)
- : m_base(base)
- , m_size(size)
+ : PageBlock(base, size)
{
}
-#endif
-
- static PageAllocation systemAllocate(size_t, Usage, bool, bool);
-#if HAVE(PAGE_ALLOCATE_AT)
- static PageAllocation systemAllocateAt(void*, bool, size_t, Usage, bool, bool);
-#endif
-#if HAVE(PAGE_ALLOCATE_ALIGNED)
- static PageAllocation systemAllocateAligned(size_t, Usage);
-#endif
- // systemDeallocate takes a parameter indicating whether memory is currently committed
- // (this should always be true for PageAllocation, false for PageReservation).
- void systemDeallocate(bool committed);
- static size_t systemPageSize();
-
- void* m_base;
- size_t m_size;
-#if OS(SYMBIAN)
- RChunk* m_chunk;
-#endif
-
- static JS_EXPORTDATA size_t s_pageSize;
};
-
-#if HAVE(MMAP)
-
-
-inline PageAllocation PageAllocation::systemAllocate(size_t size, Usage usage, bool writable, bool executable)
-{
- return systemAllocateAt(0, false, size, usage, writable, executable);
-}
-
-inline PageAllocation PageAllocation::systemAllocateAt(void* address, bool fixed, size_t size, Usage usage, bool writable, bool executable)
-{
- int protection = PROT_READ;
- if (writable)
- protection |= PROT_WRITE;
- if (executable)
- protection |= PROT_EXEC;
-
- int flags = MAP_PRIVATE | MAP_ANON;
- if (fixed)
- flags |= MAP_FIXED;
-
-#if OS(DARWIN) && !defined(BUILDING_ON_TIGER)
- int fd = usage;
-#else
- int fd = -1;
-#endif
-
- void* base = mmap(address, size, protection, flags, fd, 0);
- if (base == MAP_FAILED)
- base = 0;
- return PageAllocation(base, size);
-}
-
-inline PageAllocation PageAllocation::systemAllocateAligned(size_t size, Usage usage)
-{
-#if OS(DARWIN)
- vm_address_t address = 0;
- int flags = VM_FLAGS_ANYWHERE;
- if (usage != -1)
- flags |= usage;
- vm_map(current_task(), &address, size, (size - 1), flags, MEMORY_OBJECT_NULL, 0, FALSE, PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE | PROT_EXEC, VM_INHERIT_DEFAULT);
- return PageAllocation(reinterpret_cast<void*>(address), size);
-#elif HAVE(POSIX_MEMALIGN)
- void* address;
- posix_memalign(&address, size, size);
- return PageAllocation(address, size);
-#else
- size_t extra = size - pageSize();
-
- // Check for overflow.
- if ((size + extra) < size)
- return PageAllocation(0, size);
-
-#if OS(DARWIN) && !defined(BUILDING_ON_TIGER)
- int fd = usage;
-#else
- int fd = -1;
-#endif
- void* mmapResult = mmap(0, size + extra, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, fd, 0);
- if (mmapResult == MAP_FAILED)
- return PageAllocation(0, size);
- uintptr_t address = reinterpret_cast<uintptr_t>(mmapResult);
-
- size_t adjust = 0;
- if ((address & (size - 1)))
- adjust = size - (address & (size - 1));
- if (adjust > 0)
- munmap(reinterpret_cast<char*>(address), adjust);
- if (adjust < extra)
- munmap(reinterpret_cast<char*>(address + adjust + size), extra - adjust);
- address += adjust;
-
- return PageAllocation(reinterpret_cast<void*>(address), size);
-#endif
-}
-
-inline void PageAllocation::systemDeallocate(bool)
-{
- int result = munmap(m_base, m_size);
- ASSERT_UNUSED(result, !result);
- m_base = 0;
-}
-
-inline size_t PageAllocation::systemPageSize()
-{
- return getpagesize();
-}
-
-
-#elif HAVE(VIRTUALALLOC)
-
-
-inline PageAllocation PageAllocation::systemAllocate(size_t size, Usage, bool writable, bool executable)
-{
- DWORD protection = executable ?
- (writable ? PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ) :
- (writable ? PAGE_READWRITE : PAGE_READONLY);
- return PageAllocation(VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, protection), size);
-}
-
-#if HAVE(ALIGNED_MALLOC)
-inline PageAllocation PageAllocation::systemAllocateAligned(size_t size, Usage usage)
-{
-#if COMPILER(MINGW) && !COMPILER(MINGW64)
- void* address = __mingw_aligned_malloc(size, size);
-#else
- void* address = _aligned_malloc(size, size);
-#endif
- memset(address, 0, size);
- return PageAllocation(address, size);
-}
-#endif
-
-inline void PageAllocation::systemDeallocate(bool committed)
-{
-#if OS(WINCE)
- if (committed)
- VirtualFree(m_base, m_size, MEM_DECOMMIT);
-#else
- UNUSED_PARAM(committed);
-#endif
- VirtualFree(m_base, 0, MEM_RELEASE);
- m_base = 0;
-}
-
-inline size_t PageAllocation::systemPageSize()
-{
- static size_t size = 0;
- SYSTEM_INFO system_info;
- GetSystemInfo(&system_info);
- size = system_info.dwPageSize;
- return size;
-}
-
-
-#elif OS(SYMBIAN)
-
-
-inline PageAllocation PageAllocation::systemAllocate(size_t size, Usage usage, bool writable, bool executable)
-{
- RChunk* rchunk = new RChunk();
- if (executable)
- rchunk->CreateLocalCode(size, size);
- else
- rchunk->CreateLocal(size, size);
- return PageAllocation(rchunk->Base(), size, rchunk);
-}
-
-inline void PageAllocation::systemDeallocate(bool)
-{
- m_chunk->Close();
- delete m_chunk;
- m_base = 0;
-}
-
-inline size_t PageAllocation::systemPageSize()
-{
- static TInt page_size = 0;
- UserHal::PageSizeInBytes(page_size);
- return page_size;
-}
-
-
-#endif
-
-
-}
+} // namespace WTF
using WTF::PageAllocation;
diff --git a/JavaScriptCore/wtf/PageAllocationAligned.cpp b/JavaScriptCore/wtf/PageAllocationAligned.cpp
new file mode 100644
index 0000000..6f54710
--- /dev/null
+++ b/JavaScriptCore/wtf/PageAllocationAligned.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PageAllocationAligned.h"
+
+namespace WTF {
+
+PageAllocationAligned PageAllocationAligned::allocate(size_t size, size_t alignment, OSAllocator::Usage usage, bool writable, bool executable)
+{
+ ASSERT(isPageAligned(size));
+ ASSERT(isPageAligned(alignment));
+ ASSERT(isPowerOfTwo(alignment));
+ ASSERT(size >= alignment);
+ size_t alignmentMask = alignment - 1;
+
+#if OS(DARWIN)
+ int flags = VM_FLAGS_ANYWHERE;
+ if (usage != OSAllocator::UnknownUsage)
+ flags |= usage;
+ int protection = PROT_READ;
+ if (writable)
+ protection |= PROT_WRITE;
+ if (executable)
+ protection |= PROT_EXEC;
+
+ vm_address_t address = 0;
+ vm_map(current_task(), &address, size, alignmentMask, flags, MEMORY_OBJECT_NULL, 0, FALSE, protection, PROT_READ | PROT_WRITE | PROT_EXEC, VM_INHERIT_DEFAULT);
+ return PageAllocationAligned(reinterpret_cast<void*>(address), size);
+#else
+ size_t alignmentDelta = alignment - pageSize();
+
+ // Resererve with suffcient additional VM to correctly align.
+ size_t reservationSize = size + alignmentDelta;
+ void* reservationBase = OSAllocator::reserveUncommitted(reservationSize, usage, writable, executable);
+
+ // Select an aligned region within the reservation and commit.
+ void* alignedBase = reinterpret_cast<uintptr_t>(reservationBase) & alignmentMask
+ ? reinterpret_cast<void*>((reinterpret_cast<uintptr_t>(reservationBase) & ~alignmentMask) + alignment)
+ : reservationBase;
+ OSAllocator::commit(alignedBase, size, writable, executable);
+
+ return PageAllocationAligned(alignedBase, size, reservationBase, reservationSize);
+#endif
+}
+
+void PageAllocationAligned::deallocate()
+{
+ // Clear base & size before calling release; if this is *inside* allocation
+ // then we won't be able to clear then after deallocating the memory.
+ PageAllocationAligned tmp;
+ std::swap(tmp, *this);
+
+ ASSERT(tmp);
+ ASSERT(!*this);
+
+#if OS(DARWIN)
+ vm_deallocate(current_task(), reinterpret_cast<vm_address_t>(tmp.base()), tmp.size());
+#else
+ ASSERT(tmp.m_reservation.contains(tmp.base(), tmp.size()));
+ OSAllocator::decommitAndRelease(tmp.m_reservation.base(), tmp.m_reservation.size(), tmp.base(), tmp.size());
+#endif
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/PageAllocationAligned.h b/JavaScriptCore/wtf/PageAllocationAligned.h
new file mode 100644
index 0000000..282c9e3
--- /dev/null
+++ b/JavaScriptCore/wtf/PageAllocationAligned.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PageAllocationAligned_h
+#define PageAllocationAligned_h
+
+#include <wtf/OSAllocator.h>
+#include <wtf/PageReservation.h>
+
+namespace WTF {
+
+class PageAllocationAligned : private PageBlock {
+public:
+ PageAllocationAligned()
+ {
+ }
+
+ using PageBlock::operator bool;
+ using PageBlock::size;
+ using PageBlock::base;
+
+ static PageAllocationAligned allocate(size_t size, size_t alignment, OSAllocator::Usage usage = OSAllocator::UnknownUsage, bool writable = true, bool executable = false);
+
+ void deallocate();
+
+private:
+#if OS(DARWIN)
+ PageAllocationAligned(void* base, size_t size)
+ : PageBlock(base, size)
+ {
+ }
+#else
+ PageAllocationAligned(void* base, size_t size, void* reservationBase, size_t reservationSize)
+ : PageBlock(base, size)
+ , m_reservation(reservationBase, reservationSize)
+ {
+ }
+
+ PageBlock m_reservation;
+#endif
+};
+
+
+} // namespace WTF
+
+using WTF::PageAllocationAligned;
+
+#endif // PageAllocationAligned_h
diff --git a/JavaScriptCore/wtf/PageBlock.cpp b/JavaScriptCore/wtf/PageBlock.cpp
new file mode 100644
index 0000000..6fb68e5
--- /dev/null
+++ b/JavaScriptCore/wtf/PageBlock.cpp
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PageBlock.h"
+
+#if OS(UNIX) && !OS(SYMBIAN)
+#include <unistd.h>
+#endif
+
+#if OS(WINDOWS)
+#include <malloc.h>
+#include <windows.h>
+#endif
+
+#if OS(SYMBIAN)
+#include <e32hal.h>
+#include <e32std.h>
+#endif
+
+namespace WTF {
+
+static size_t s_pageSize;
+
+#if OS(UNIX) && !OS(SYMBIAN)
+
+inline size_t systemPageSize()
+{
+ return getpagesize();
+}
+
+#elif OS(WINDOWS)
+
+inline size_t systemPageSize()
+{
+ static size_t size = 0;
+ SYSTEM_INFO system_info;
+ GetSystemInfo(&system_info);
+ size = system_info.dwPageSize;
+ return size;
+}
+
+#elif OS(SYMBIAN)
+
+inline size_t systemPageSize()
+{
+ static TInt page_size = 0;
+ UserHal::PageSizeInBytes(page_size);
+ return page_size;
+}
+
+#endif
+
+size_t pageSize()
+{
+ if (!s_pageSize)
+ s_pageSize = systemPageSize();
+ ASSERT(isPowerOfTwo(s_pageSize));
+ return s_pageSize;
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/PageBlock.h b/JavaScriptCore/wtf/PageBlock.h
new file mode 100644
index 0000000..07452b3
--- /dev/null
+++ b/JavaScriptCore/wtf/PageBlock.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PageBlock_h
+#define PageBlock_h
+
+namespace WTF {
+
+size_t pageSize();
+inline bool isPageAligned(void* address) { return !(reinterpret_cast<intptr_t>(address) & (pageSize() - 1)); }
+inline bool isPageAligned(size_t size) { return !(size & (pageSize() - 1)); }
+inline bool isPowerOfTwo(size_t size) { return !(size & (size - 1)); }
+
+class PageBlock {
+public:
+ PageBlock();
+ PageBlock(const PageBlock&);
+ PageBlock(void*, size_t);
+
+ void* base() const { return m_base; }
+ size_t size() const { return m_size; }
+
+ operator bool() const { return !!m_base; }
+
+ bool contains(void* containedBase, size_t containedSize)
+ {
+ return containedBase >= m_base
+ && (static_cast<char*>(containedBase) + containedSize) <= (static_cast<char*>(m_base) + m_size);
+ }
+
+private:
+ void* m_base;
+ size_t m_size;
+};
+
+inline PageBlock::PageBlock()
+ : m_base(0)
+ , m_size(0)
+{
+}
+
+inline PageBlock::PageBlock(const PageBlock& other)
+ : m_base(other.m_base)
+ , m_size(other.m_size)
+{
+}
+
+inline PageBlock::PageBlock(void* base, size_t size)
+ : m_base(base)
+ , m_size(size)
+{
+}
+
+} // namespace WTF
+
+using WTF::pageSize;
+using WTF::isPageAligned;
+using WTF::isPageAligned;
+using WTF::isPowerOfTwo;
+
+#endif // PageBlock_h
diff --git a/JavaScriptCore/wtf/PageReservation.h b/JavaScriptCore/wtf/PageReservation.h
index cfc7cd9..8c097a4 100644
--- a/JavaScriptCore/wtf/PageReservation.h
+++ b/JavaScriptCore/wtf/PageReservation.h
@@ -49,208 +49,91 @@ namespace WTF {
is deallocated. Values in memory may not be retained accross a pair of calls if
the region of memory is decommitted and then committed again.
- Where HAVE(PAGE_ALLOCATE_AT) is available a PageReservation::reserveAt method
- also exists, with behaviour mirroring PageAllocation::allocateAt.
-
Memory protection should not be changed on decommitted memory, and if protection
is changed on memory while it is committed it should be returned to the orignal
protection before decommit is called.
-
- Note: Inherits from PageAllocation privately to prevent clients accidentally
- calling PageAllocation::deallocate on a PageReservation.
*/
-class PageReservation : private PageAllocation {
+
+class PageReservation : private PageBlock {
public:
PageReservation()
+ : m_writable(false)
+ , m_executable(false)
+#ifndef NDEBUG
+ , m_committed(0)
+#endif
{
}
+
+ using PageBlock::operator bool;
+ using PageBlock::base;
+ using PageBlock::size;
- using PageAllocation::operator!;
- using PageAllocation::base;
- using PageAllocation::size;
-
- bool commit(void* start, size_t size)
+ void commit(void* start, size_t size)
{
- ASSERT(m_base);
+ ASSERT(*this);
ASSERT(isPageAligned(start));
ASSERT(isPageAligned(size));
+ ASSERT(contains(start, size));
- bool commited = systemCommit(start, size);
#ifndef NDEBUG
- if (commited)
- m_committed += size;
+ m_committed += size;
#endif
- return commited;
+ OSAllocator::commit(start, size, m_writable, m_executable);
}
+
void decommit(void* start, size_t size)
{
- ASSERT(m_base);
+ ASSERT(*this);
ASSERT(isPageAligned(start));
ASSERT(isPageAligned(size));
+ ASSERT(contains(start, size));
#ifndef NDEBUG
m_committed -= size;
#endif
- systemDecommit(start, size);
+ OSAllocator::decommit(start, size);
}
- static PageReservation reserve(size_t size, Usage usage = UnknownUsage, bool writable = true, bool executable = false)
+ static PageReservation reserve(size_t size, OSAllocator::Usage usage = OSAllocator::UnknownUsage, bool writable = true, bool executable = false)
{
ASSERT(isPageAligned(size));
- return systemReserve(size, usage, writable, executable);
+ return PageReservation(OSAllocator::reserveUncommitted(size, usage, writable, executable), size, writable, executable);
}
-#if HAVE(PAGE_ALLOCATE_AT)
- static PageReservation reserveAt(void* address, bool fixed, size_t size, Usage usage = UnknownUsage, bool writable = true, bool executable = false)
- {
- ASSERT(isPageAligned(address));
- ASSERT(isPageAligned(size));
- return systemReserveAt(address, fixed, size, usage, writable, executable);
- }
-#endif
-
void deallocate()
{
- ASSERT(m_base);
ASSERT(!m_committed);
- systemDeallocate(false);
- }
-#ifndef NDEBUG
- using PageAllocation::lastError;
-#endif
+ // Clear base & size before calling release; if this is *inside* allocation
+ // then we won't be able to clear then after deallocating the memory.
+ PageReservation tmp;
+ std::swap(tmp, *this);
+
+ ASSERT(tmp);
+ ASSERT(!*this);
+
+ OSAllocator::releaseDecommitted(tmp.base(), tmp.size());
+ }
private:
-#if OS(SYMBIAN)
- PageReservation(void* base, size_t size, RChunk* chunk)
- : PageAllocation(base, size, chunk)
-#else
- PageReservation(void* base, size_t size)
- : PageAllocation(base, size)
-#endif
+ PageReservation(void* base, size_t size, bool writable, bool executable)
+ : PageBlock(base, size)
+ , m_writable(writable)
+ , m_executable(executable)
#ifndef NDEBUG
, m_committed(0)
#endif
{
}
- bool systemCommit(void*, size_t);
- void systemDecommit(void*, size_t);
- static PageReservation systemReserve(size_t, Usage, bool, bool);
-#if HAVE(PAGE_ALLOCATE_AT)
- static PageReservation systemReserveAt(void*, bool, size_t, Usage, bool, bool);
-#endif
-
-#if HAVE(VIRTUALALLOC)
- DWORD m_protection;
-#endif
+ bool m_writable;
+ bool m_executable;
#ifndef NDEBUG
size_t m_committed;
#endif
};
-
-#if HAVE(MMAP)
-
-
-inline bool PageReservation::systemCommit(void* start, size_t size)
-{
-#if HAVE(MADV_FREE_REUSE)
- while (madvise(start, size, MADV_FREE_REUSE) == -1 && errno == EAGAIN) { }
-#else
- UNUSED_PARAM(start);
- UNUSED_PARAM(size);
-#endif
- return true;
-}
-
-inline void PageReservation::systemDecommit(void* start, size_t size)
-{
-#if HAVE(MADV_FREE_REUSE)
- while (madvise(start, size, MADV_FREE_REUSABLE) == -1 && errno == EAGAIN) { }
-#elif HAVE(MADV_FREE)
- while (madvise(start, size, MADV_FREE) == -1 && errno == EAGAIN) { }
-#elif HAVE(MADV_DONTNEED)
- while (madvise(start, size, MADV_DONTNEED) == -1 && errno == EAGAIN) { }
-#else
- UNUSED_PARAM(start);
- UNUSED_PARAM(size);
-#endif
-}
-
-inline PageReservation PageReservation::systemReserve(size_t size, Usage usage, bool writable, bool executable)
-{
- return systemReserveAt(0, false, size, usage, writable, executable);
-}
-
-inline PageReservation PageReservation::systemReserveAt(void* address, bool fixed, size_t size, Usage usage, bool writable, bool executable)
-{
- void* base = systemAllocateAt(address, fixed, size, usage, writable, executable).base();
-#if HAVE(MADV_FREE_REUSE)
- // When using MADV_FREE_REUSE we keep all decommitted memory marked as REUSABLE.
- // We call REUSE on commit, and REUSABLE on decommit.
- if (base)
- while (madvise(base, size, MADV_FREE_REUSABLE) == -1 && errno == EAGAIN) { }
-#endif
- return PageReservation(base, size);
-}
-
-
-#elif HAVE(VIRTUALALLOC)
-
-
-inline bool PageReservation::systemCommit(void* start, size_t size)
-{
- return VirtualAlloc(start, size, MEM_COMMIT, m_protection) == start;
-}
-
-inline void PageReservation::systemDecommit(void* start, size_t size)
-{
- VirtualFree(start, size, MEM_DECOMMIT);
-}
-
-inline PageReservation PageReservation::systemReserve(size_t size, Usage usage, bool writable, bool executable)
-{
- // Record the protection for use during commit.
- DWORD protection = executable ?
- (writable ? PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ) :
- (writable ? PAGE_READWRITE : PAGE_READONLY);
- PageReservation reservation(VirtualAlloc(0, size, MEM_RESERVE, protection), size);
- reservation.m_protection = protection;
- return reservation;
-}
-
-
-#elif OS(SYMBIAN)
-
-
-inline bool PageReservation::systemCommit(void* start, size_t size)
-{
- intptr_t offset = reinterpret_cast<intptr_t>(start) - reinterpret_cast<intptr_t>(m_base);
- m_chunk->Commit(offset, size);
- return true;
-}
-
-inline void PageReservation::systemDecommit(void* start, size_t size)
-{
- intptr_t offset = reinterpret_cast<intptr_t>(start) - reinterpret_cast<intptr_t>(m_base);
- m_chunk->Decommit(offset, size);
-}
-
-inline PageReservation PageReservation::systemReserve(size_t size, Usage usage, bool writable, bool executable)
-{
- RChunk* rchunk = new RChunk();
- if (executable)
- rchunk->CreateLocalCode(0, size);
- else
- rchunk->CreateDisconnectedLocal(0, 0, size);
- return PageReservation(rchunk->Base(), size, rchunk);
-}
-
-
-#endif
-
-
}
using WTF::PageReservation;
diff --git a/JavaScriptCore/wtf/Platform.h b/JavaScriptCore/wtf/Platform.h
index 7924a28..4143996 100644
--- a/JavaScriptCore/wtf/Platform.h
+++ b/JavaScriptCore/wtf/Platform.h
@@ -530,6 +530,9 @@
#if PLATFORM(MAC) && !PLATFORM(IOS)
#define WTF_PLATFORM_CI 1
#endif
+#if PLATFORM(MAC) || PLATFORM(IOS) || (PLATFORM(WIN) && PLATFORM(CG))
+#define WTF_PLATFORM_CA 1
+#endif
/* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
#if PLATFORM(CHROMIUM)
@@ -823,13 +826,6 @@
#endif
-#if HAVE(MMAP) || (HAVE(VIRTUALALLOC) && HAVE(ALIGNED_MALLOC))
-#define HAVE_PAGE_ALLOCATE_ALIGNED 1
-#endif
-#if HAVE(MMAP)
-#define HAVE_PAGE_ALLOCATE_AT 1
-#endif
-
/* ENABLE macro defaults */
#if PLATFORM(QT)
@@ -1124,6 +1120,10 @@
#define WTF_USE_PLATFORM_STRATEGIES 1
#endif
+#if PLATFORM(WIN)
+#define WTF_USE_CROSS_PLATFORM_CONTEXT_MENUS 1
+#endif
+
/* Geolocation request policy. pre-emptive policy is to acquire user permission before acquiring location.
Client based implementations will have option to choose between pre-emptive and nonpre-emptive permission policy.
pre-emptive permission policy is enabled by default for all client-based implementations. */
diff --git a/JavaScriptCore/wtf/PlatformRefPtr.h b/JavaScriptCore/wtf/PlatformRefPtr.h
index 8ac16cb..e4f1314 100644
--- a/JavaScriptCore/wtf/PlatformRefPtr.h
+++ b/JavaScriptCore/wtf/PlatformRefPtr.h
@@ -74,6 +74,13 @@ public:
derefPlatformPtr(ptr);
}
+ T* leakRef() WARN_UNUSED_RETURN
+ {
+ T* ptr = m_ptr;
+ m_ptr = 0;
+ return ptr;
+ }
+
// Hash table deleted values, which are only constructed and never copied or destroyed.
PlatformRefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); }
diff --git a/JavaScriptCore/wtf/RandomNumberSeed.h b/JavaScriptCore/wtf/RandomNumberSeed.h
index b53b506..9ea7c71 100644
--- a/JavaScriptCore/wtf/RandomNumberSeed.h
+++ b/JavaScriptCore/wtf/RandomNumberSeed.h
@@ -53,7 +53,7 @@ inline void initializeRandomNumberGenerator()
// On Darwin we use arc4random which initialises itself.
#elif OS(WINCE)
// initialize rand()
- srand(static_cast<unsigned>(time(0)));
+ srand(GetTickCount());
// use rand() to initialize the real RNG
unsigned long initializationBuffer[4];
diff --git a/JavaScriptCore/wtf/StackBounds.cpp b/JavaScriptCore/wtf/StackBounds.cpp
new file mode 100644
index 0000000..2691db1
--- /dev/null
+++ b/JavaScriptCore/wtf/StackBounds.cpp
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#include "config.h"
+#include "StackBounds.h"
+
+#if OS(DARWIN)
+
+#include <mach/task.h>
+#include <mach/thread_act.h>
+#include <pthread.h>
+
+#elif OS(WINDOWS)
+
+#include <windows.h>
+
+#elif OS(HAIKU)
+
+#include <OS.h>
+
+#elif OS(SOLARIS)
+
+#include <thread.h>
+
+#elif OS(QNX)
+
+#include <fcntl.h>
+#include <sys/procfs.h>
+#include <stdio.h>
+#include <errno.h>
+
+#elif OS(UNIX)
+
+#include <pthread.h>
+#if HAVE(PTHREAD_NP_H)
+#include <pthread_np.h>
+#endif
+
+#endif
+
+namespace WTF {
+
+// Bug 26276 - Need a mechanism to determine stack extent
+//
+// These platforms should now be working correctly:
+// DARWIN, QNX, UNIX
+// These platforms are not:
+// WINDOWS, SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE
+//
+// FIXME: remove this! - this code unsafely guesses at stack sizes!
+#if OS(WINDOWS) || OS(SOLARIS) || OS(OPENBSD) || OS(SYMBIAN) || OS(HAIKU) || OS(WINCE)
+// Based on the current limit used by the JSC parser, guess the stack size.
+static const ptrdiff_t estimatedStackSize = 128 * sizeof(void*) * 1024;
+// This method assumes the stack is growing downwards.
+static void* estimateStackBound(void* origin)
+{
+ return static_cast<char*>(origin) - estimatedStackSize;
+}
+#endif
+
+#if OS(DARWIN)
+
+void StackBounds::initialize()
+{
+ pthread_t thread = pthread_self();
+ m_origin = pthread_get_stackaddr_np(thread);
+ m_bound = static_cast<char*>(m_origin) - pthread_get_stacksize_np(thread);
+}
+
+#elif OS(WINDOWS)
+
+void StackBounds::initialize()
+{
+#if CPU(X86) && COMPILER(MSVC)
+ // offset 0x18 from the FS segment register gives a pointer to
+ // the thread information block for the current thread
+ NT_TIB* pTib;
+ __asm {
+ MOV EAX, FS:[18h]
+ MOV pTib, EAX
+ }
+ m_origin = static_cast<void*>(pTib->StackBase);
+#elif OS(WINDOWS) && CPU(X86) && COMPILER(GCC)
+ // offset 0x18 from the FS segment register gives a pointer to
+ // the thread information block for the current thread
+ NT_TIB* pTib;
+ asm ( "movl %%fs:0x18, %0\n"
+ : "=r" (pTib)
+ );
+ m_origin = static_cast<void*>(pTib->StackBase);
+#elif OS(WINDOWS) && CPU(X86_64)
+ PNT_TIB64 pTib = reinterpret_cast<PNT_TIB64>(NtCurrentTeb());
+ m_origin = reinterpret_cast<void*>(pTib->StackBase);
+#else
+#error Need a way to get the stack bounds on this platform (Windows)
+#endif
+ // Looks like we should be able to get pTib->StackLimit
+ m_bound = estimateStackBound(m_origin);
+}
+
+#elif OS(QNX)
+
+void StackBounds::initialize()
+{
+ void* stackBase = 0;
+ size_t stackSize = 0;
+ pthread_t thread = pthread_self();
+
+ struct _debug_thread_info threadInfo;
+ memset(&threadInfo, 0, sizeof(threadInfo));
+ threadInfo.tid = pthread_self();
+ int fd = open("/proc/self", O_RDONLY);
+ if (fd == -1) {
+ LOG_ERROR("Unable to open /proc/self (errno: %d)", errno);
+ CRASH();
+ }
+ devctl(fd, DCMD_PROC_TIDSTATUS, &threadInfo, sizeof(threadInfo), 0);
+ close(fd);
+ stackBase = reinterpret_cast<void*>(threadInfo.stkbase);
+ stackSize = threadInfo.stksize;
+ ASSERT(stackBase);
+
+ m_bound = stackBase;
+ m_origin = static_cast<char*>(stackBase) + stackSize;
+}
+
+#elif OS(SOLARIS)
+
+void StackBounds::initialize()
+{
+ stack_t s;
+ thr_stksegment(&s);
+ m_origin = s.ss_sp;
+ m_bound = estimateStackBound(m_origin);
+}
+
+#elif OS(OPENBSD)
+
+void StackBounds::initialize()
+{
+ pthread_t thread = pthread_self();
+ stack_t stack;
+ pthread_stackseg_np(thread, &stack);
+ m_origin = stack.ss_sp;
+ m_bound = estimateStackBound(m_origin);
+}
+
+#elif OS(SYMBIAN)
+
+void StackBounds::initialize()
+{
+ TThreadStackInfo info;
+ RThread thread;
+ thread.StackInfo(info);
+ m_origin = (void*)info.iBase;
+ m_bound = estimateStackBound(m_origin);
+}
+
+#elif OS(HAIKU)
+
+void StackBounds::initialize()
+{
+ thread_info threadInfo;
+ get_thread_info(find_thread(NULL), &threadInfo);
+ m_origin = threadInfo.stack_end;
+ m_bound = estimateStackBound(m_origin);
+}
+
+#elif OS(UNIX)
+
+void StackBounds::initialize()
+{
+ void* stackBase = 0;
+ size_t stackSize = 0;
+
+ pthread_t thread = pthread_self();
+ pthread_attr_t sattr;
+ pthread_attr_init(&sattr);
+#if HAVE(PTHREAD_NP_H) || OS(NETBSD)
+ // e.g. on FreeBSD 5.4, neundorf@kde.org
+ pthread_attr_get_np(thread, &sattr);
+#else
+ // FIXME: this function is non-portable; other POSIX systems may have different np alternatives
+ pthread_getattr_np(thread, &sattr);
+#endif
+ int rc = pthread_attr_getstack(&sattr, &stackBase, &stackSize);
+ (void)rc; // FIXME: Deal with error code somehow? Seems fatal.
+ ASSERT(stackBase);
+ pthread_attr_destroy(&sattr);
+ m_bound = stackBase;
+ m_origin = static_cast<char*>(stackBase) + stackSize;
+}
+
+#elif OS(WINCE)
+
+} // namespace WTF
+// FIXME: this is not threadsafe, and should probably be removed.
+namespace JSC { JS_EXPORTDATA void* g_stackBase = 0; }
+namespace WTF {
+
+inline bool isPageWritable(void* page)
+{
+ MEMORY_BASIC_INFORMATION memoryInformation;
+ DWORD result = VirtualQuery(page, &memoryInformation, sizeof(memoryInformation));
+
+ // return false on error, including ptr outside memory
+ if (result != sizeof(memoryInformation))
+ return false;
+
+ DWORD protect = memoryInformation.Protect & ~(PAGE_GUARD | PAGE_NOCACHE);
+ return protect == PAGE_READWRITE
+ || protect == PAGE_WRITECOPY
+ || protect == PAGE_EXECUTE_READWRITE
+ || protect == PAGE_EXECUTE_WRITECOPY;
+}
+
+static void* getStackMax(void* previousFrame, bool& isGrowingDownward)
+{
+ // find the address of this stack frame by taking the address of a local variable
+ void* thisFrame = &thisFrame;
+ isGrowingDownward = previousFrame < &thisFrame;
+
+ if (JSC::g_stackBase)
+ return JSC::g_stackBase;
+
+ SYSTEM_INFO systemInfo;
+ GetSystemInfo(&systemInfo);
+ DWORD pageSize = systemInfo.dwPageSize;
+
+ // scan all of memory starting from this frame, and return the last writeable page found
+ register char* currentPage = (char*)((DWORD)thisFrame & ~(pageSize - 1));
+ if (isGrowingDownward) {
+ while (currentPage > 0) {
+ // check for underflow
+ if (currentPage >= (char*)pageSize)
+ currentPage -= pageSize;
+ else
+ currentPage = 0;
+ if (!isPageWritable(currentPage))
+ return currentPage + pageSize;
+ }
+ return 0;
+ } else {
+ while (true) {
+ // guaranteed to complete because isPageWritable returns false at end of memory
+ currentPage += pageSize;
+ if (!isPageWritable(currentPage))
+ return currentPage;
+ }
+ }
+}
+
+void StackBounds::initialize()
+{
+ bool isGrowingDownward
+ m_origin = getStackMax(isGrowingDownward);
+ m_bound = isGrowingDownward
+ ? static_cast<char*>(m_origin) - estimatedStackSize
+ : static_cast<char*>(m_origin) + estimatedStackSize;
+}
+
+#else
+#error Need a way to get the stack bounds on this platform
+#endif
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/StackBounds.h b/JavaScriptCore/wtf/StackBounds.h
new file mode 100644
index 0000000..afce860
--- /dev/null
+++ b/JavaScriptCore/wtf/StackBounds.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef StackBounds_h
+#define StackBounds_h
+
+namespace WTF {
+
+class StackBounds {
+ // recursionCheck() / recursionLimit() tests (by default)
+ // that we are at least this far from the end of the stack.
+ const static size_t s_defaultAvailabilityDelta = 4096;
+
+public:
+ StackBounds()
+ : m_origin(0)
+ , m_bound(0)
+ {
+ }
+
+ static StackBounds currentThreadStackBounds()
+ {
+ StackBounds bounds;
+ bounds.initialize();
+ bounds.checkConsistency();
+ return bounds;
+ }
+
+ void* origin() const
+ {
+ ASSERT(m_origin);
+ return m_origin;
+ }
+
+ void* current() const
+ {
+ checkConsistency();
+ void* currentPosition = &currentPosition;
+ return currentPosition;
+ }
+
+ void* recursionLimit(size_t minAvailableDelta = s_defaultAvailabilityDelta) const
+ {
+ checkConsistency();
+ return isGrowingDownward()
+ ? static_cast<char*>(m_bound) + minAvailableDelta
+ : static_cast<char*>(m_bound) - minAvailableDelta;
+ }
+
+ bool recursionCheck(size_t minAvailableDelta = s_defaultAvailabilityDelta) const
+ {
+ checkConsistency();
+ return isGrowingDownward()
+ ? current() >= recursionLimit(minAvailableDelta)
+ : current() <= recursionLimit(minAvailableDelta);
+ }
+
+private:
+ void initialize();
+
+
+ bool isGrowingDownward() const
+ {
+ ASSERT(m_origin && m_bound);
+#if OS(WINCE)
+ return m_origin > m_bound;
+#else
+ return true;
+#endif
+ }
+
+ void checkConsistency() const
+ {
+#if !ASSERT_DISABLED
+ void* currentPosition = &currentPosition;
+ ASSERT(m_origin != m_bound);
+ ASSERT(isGrowingDownward()
+ ? (currentPosition < m_origin && currentPosition > m_bound)
+ : (currentPosition > m_origin && currentPosition < m_bound));
+#endif
+ }
+
+ void* m_origin;
+ void* m_bound;
+};
+
+} // namespace WTF
+
+using WTF::StackBounds;
+
+#endif
diff --git a/JavaScriptCore/wtf/Vector3.h b/JavaScriptCore/wtf/Vector3.h
deleted file mode 100644
index 1850929..0000000
--- a/JavaScriptCore/wtf/Vector3.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef WTF_Vector3_h
-#define WTF_Vector3_h
-
-#include <math.h>
-
-namespace WTF {
-
-class Vector3 {
-public:
- Vector3()
- : m_x(0.0)
- , m_y(0.0)
- , m_z(0.0)
- {
- }
-
- Vector3(double x, double y, double z)
- : m_x(x)
- , m_y(y)
- , m_z(z)
- {
- }
-
- Vector3(const float p[3])
- : m_x(p[0])
- , m_y(p[1])
- , m_z(p[2])
- {
- }
-
- Vector3(const double p[3])
- : m_x(p[0])
- , m_y(p[1])
- , m_z(p[2])
- {
- }
-
- double abs() const
- {
- return sqrt(m_x * m_x + m_y * m_y + m_z * m_z);
- }
-
- bool isZero() const
- {
- return !m_x && !m_y && !m_z;
- }
-
- void normalize()
- {
- double absValue = abs();
- if (!absValue)
- return;
-
- double k = 1.0 / absValue;
- m_x *= k;
- m_y *= k;
- m_z *= k;
- }
-
- double x() const { return m_x; }
- double y() const { return m_y; }
- double z() const { return m_z; }
-
-private:
- double m_x;
- double m_y;
- double m_z;
-};
-
-inline Vector3 operator+(const Vector3& v1, const Vector3& v2)
-{
- return Vector3(v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z());
-}
-
-inline Vector3 operator-(const Vector3& v1, const Vector3& v2)
-{
- return Vector3(v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z());
-}
-
-inline Vector3 operator*(double k, const Vector3& v)
-{
- return Vector3(k * v.x(), k * v.y(), k * v.z());
-}
-
-inline Vector3 operator*(const Vector3& v, double k)
-{
- return Vector3(k * v.x(), k * v.y(), k * v.z());
-}
-
-inline double dot(const Vector3& v1, const Vector3& v2)
-{
- return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();
-}
-
-inline Vector3 cross(const Vector3& v1, const Vector3& v2)
-{
- double x3 = v1.y() * v2.z() - v1.z() * v2.y();
- double y3 = v1.z() * v2.x() - v1.x() * v2.z();
- double z3 = v1.x() * v2.y() - v1.y() * v2.x();
- return Vector3(x3, y3, z3);
-}
-
-inline double distance(const Vector3& v1, const Vector3& v2)
-{
- return (v1 - v2).abs();
-}
-
-} // WTF
-
-#endif // WTF_Vector3_h
diff --git a/JavaScriptCore/wtf/WTFThreadData.cpp b/JavaScriptCore/wtf/WTFThreadData.cpp
index 702baed..05be8d1 100644
--- a/JavaScriptCore/wtf/WTFThreadData.cpp
+++ b/JavaScriptCore/wtf/WTFThreadData.cpp
@@ -42,9 +42,8 @@ WTFThreadData::WTFThreadData()
, m_defaultIdentifierTable(new JSC::IdentifierTable())
, m_currentIdentifierTable(m_defaultIdentifierTable)
#endif
+ , m_stackBounds(StackBounds::currentThreadStackBounds())
{
- char sample = 0;
- m_approximatedStackStart = &sample;
}
WTFThreadData::~WTFThreadData()
diff --git a/JavaScriptCore/wtf/WTFThreadData.h b/JavaScriptCore/wtf/WTFThreadData.h
index 5019c33..da1b6eb 100644
--- a/JavaScriptCore/wtf/WTFThreadData.h
+++ b/JavaScriptCore/wtf/WTFThreadData.h
@@ -30,6 +30,7 @@
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/Noncopyable.h>
+#include <wtf/StackBounds.h>
#include <wtf/text/StringHash.h>
// This was ENABLE(WORKERS) in WebCore, but this is not defined when compiling JSC.
@@ -113,9 +114,9 @@ public:
}
#endif
- char* approximatedStackStart() const
+ const StackBounds& stack() const
{
- return m_approximatedStackStart;
+ return m_stackBounds;
}
private:
@@ -135,7 +136,7 @@ private:
friend WTFThreadData& wtfThreadData();
friend class AtomicStringTable;
- char* m_approximatedStackStart;
+ StackBounds m_stackBounds;
};
inline WTFThreadData& wtfThreadData()
diff --git a/JavaScriptCore/wtf/PageAllocation.cpp b/JavaScriptCore/wtf/brew/StringBrew.cpp
index f3fe997..d8f2e59 100644
--- a/JavaScriptCore/wtf/PageAllocation.cpp
+++ b/JavaScriptCore/wtf/brew/StringBrew.cpp
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2010 Company 100, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -11,38 +10,34 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
-#include "PageAllocation.h"
-#include "PageReservation.h"
+#include "PlatformString.h"
-namespace WTF {
-
-size_t PageAllocation::s_pageSize = 0;
+#include <AEEstd.h>
-#ifndef NDEBUG
+namespace WTF {
-int PageAllocation::lastError()
+// String conversions
+String::String(const AECHAR* string)
{
-#if OS(WINCE)
- return GetLastError();
-#else
- return errno;
-#endif
-}
-
-#endif
+ // It is safe to cast AECHAR to UChar as both of them use 16 bits representation.
+ const UChar* str = reinterpret_cast<const UChar*>(string);
+ const size_t len = std_wstrlen(string);
+ m_impl = StringImpl::create(str, len);
}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/gobject/GTypedefs.h b/JavaScriptCore/wtf/gobject/GTypedefs.h
index 76d1b1a..0b9a9ea 100644
--- a/JavaScriptCore/wtf/gobject/GTypedefs.h
+++ b/JavaScriptCore/wtf/gobject/GTypedefs.h
@@ -44,7 +44,6 @@ typedef struct _GDir GDir;
typedef struct _GdkAtom* GdkAtom;
typedef struct _GdkCursor GdkCursor;
typedef struct _GdkDragContext GdkDragContext;
-typedef struct _GdkDrawable GdkDrawable;
typedef struct _GdkEventConfigure GdkEventConfigure;
typedef struct _GdkEventExpose GdkEventExpose;
typedef struct _GdkPixbuf GdkPixbuf;
@@ -85,7 +84,9 @@ typedef struct _GtkWindow GtkWindow;
#ifdef GTK_API_VERSION_2
typedef struct _GdkRectangle GdkRectangle;
+typedef struct _GdkDrawable GdkWindow;
#else
+typedef struct _GdkWindow GdkWindow;
typedef struct _cairo_rectangle_int cairo_rectangle_int_t;
typedef cairo_rectangle_int_t GdkRectangle;
#endif
diff --git a/JavaScriptCore/runtime/MarkStackNone.cpp b/JavaScriptCore/wtf/haiku/StringHaiku.cpp
index b1ff48b..fdf4e72 100644
--- a/JavaScriptCore/runtime/MarkStackNone.cpp
+++ b/JavaScriptCore/wtf/haiku/StringHaiku.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Company 100, Inc. All rights reserved.
+ * Copyright (C) 2007 Ryan Leavengood <leavengood@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -24,26 +24,28 @@
*/
#include "config.h"
+#include "PlatformString.h"
-#include "MarkStack.h"
+#include <String.h>
+#include <wtf/text/CString.h>
-#include "FastMalloc.h"
+namespace WTF {
-namespace JSC {
-
-void MarkStack::initializePagesize()
+// String conversions
+String::String(const BString& string)
{
- MarkStack::s_pageSize = 4096;
+ if (string.Length())
+ m_impl = String::fromUTF8(string.String(), string.Length()).impl();
+ else
+ m_impl = StringImpl::empty();
}
-void* MarkStack::allocateStack(size_t size)
+String::operator BString() const
{
- return fastMalloc(size);
-}
+ BString string;
+ string.SetTo(utf8().data());
-void MarkStack::releaseStack(void* addr, size_t)
-{
- return fastFree(addr);
+ return string;
}
-}
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/text/AtomicString.cpp b/JavaScriptCore/wtf/text/AtomicString.cpp
index c49a837..acbcd34 100644
--- a/JavaScriptCore/wtf/text/AtomicString.cpp
+++ b/JavaScriptCore/wtf/text/AtomicString.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -26,9 +27,12 @@
#include <wtf/HashSet.h>
#include <wtf/Threading.h>
#include <wtf/WTFThreadData.h>
+#include <wtf/unicode/UTF8.h>
namespace WTF {
+using namespace Unicode;
+
COMPILE_ASSERT(sizeof(AtomicString) == sizeof(String), atomic_string_and_string_must_be_same_size);
class AtomicStringTable {
@@ -85,7 +89,7 @@ struct CStringTranslator {
if (d[i] != c)
return false;
}
- return s[length] == 0;
+ return !s[length];
}
static void translate(StringImpl*& location, const char* const& c, unsigned hash)
@@ -206,12 +210,44 @@ struct HashAndCharactersTranslator {
}
};
+struct HashAndUTF8Characters {
+ unsigned hash;
+ const char* characters;
+ unsigned length;
+ unsigned utf16Length;
+};
+
+struct HashAndUTF8CharactersTranslator {
+ static unsigned hash(const HashAndUTF8Characters& buffer)
+ {
+ return buffer.hash;
+ }
+
+ static bool equal(StringImpl* const& string, const HashAndUTF8Characters& buffer)
+ {
+ return equalUTF16WithUTF8(string->characters(), string->characters() + string->length(), buffer.characters, buffer.characters + buffer.length);
+ }
+
+ static void translate(StringImpl*& location, const HashAndUTF8Characters& buffer, unsigned hash)
+ {
+ UChar* target;
+ location = StringImpl::createUninitialized(buffer.utf16Length, target).releaseRef();
+
+ const char* source = buffer.characters;
+ if (convertUTF8ToUTF16(&source, source + buffer.length, &target, target + buffer.utf16Length) != conversionOK)
+ ASSERT_NOT_REACHED();
+
+ location->setHash(hash);
+ location->setIsAtomic(true);
+ }
+};
+
PassRefPtr<StringImpl> AtomicString::add(const UChar* s, unsigned length)
{
if (!s)
return 0;
- if (length == 0)
+ if (!length)
return StringImpl::empty();
UCharBuffer buf = { s, length };
@@ -227,7 +263,7 @@ PassRefPtr<StringImpl> AtomicString::add(const UChar* s, unsigned length, unsign
ASSERT(s);
ASSERT(existingHash);
- if (length == 0)
+ if (!length)
return StringImpl::empty();
HashAndCharacters buffer = { existingHash, s, length };
@@ -246,7 +282,7 @@ PassRefPtr<StringImpl> AtomicString::add(const UChar* s)
while (s[length] != UChar(0))
length++;
- if (length == 0)
+ if (!length)
return StringImpl::empty();
UCharBuffer buf = {s, length};
@@ -262,7 +298,7 @@ PassRefPtr<StringImpl> AtomicString::addSlowCase(StringImpl* r)
if (!r || r->isAtomic())
return r;
- if (r->length() == 0)
+ if (!r->length())
return StringImpl::empty();
StringImpl* result = *stringTable().add(r).first;
@@ -276,7 +312,7 @@ AtomicStringImpl* AtomicString::find(const UChar* s, unsigned length, unsigned e
ASSERT(s);
ASSERT(existingHash);
- if (length == 0)
+ if (!length)
return static_cast<AtomicStringImpl*>(StringImpl::empty());
HashAndCharacters buffer = { existingHash, s, length };
@@ -290,7 +326,7 @@ void AtomicString::remove(StringImpl* r)
{
stringTable().remove(r);
}
-
+
AtomicString AtomicString::lower() const
{
// Note: This is a hot function in the Dromaeo benchmark.
@@ -303,4 +339,36 @@ AtomicString AtomicString::lower() const
return AtomicString(newImpl);
}
+AtomicString AtomicString::fromUTF8(const char* characters, size_t length)
+{
+ if (!characters)
+ return AtomicString();
+
+ if (!length)
+ return emptyAtom;
+
+ HashAndUTF8Characters buffer;
+ buffer.characters = characters;
+ buffer.length = length;
+ buffer.hash = calculateStringHashFromUTF8(characters, characters + length, buffer.utf16Length);
+
+ if (!buffer.hash)
+ return AtomicString();
+
+ pair<HashSet<StringImpl*>::iterator, bool> addResult = stringTable().add<HashAndUTF8Characters, HashAndUTF8CharactersTranslator>(buffer);
+
+ // If the string is newly-translated, then we need to adopt it.
+ // The boolean in the pair tells us if that is so.
+ AtomicString atomicString;
+ atomicString.m_string = addResult.second ? adoptRef(*addResult.first) : *addResult.first;
+ return atomicString;
}
+
+AtomicString AtomicString::fromUTF8(const char* characters)
+{
+ if (!characters)
+ return AtomicString();
+ return fromUTF8(characters, strlen(characters));
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/text/AtomicString.h b/JavaScriptCore/wtf/text/AtomicString.h
index 06e63f4..ab5b366 100644
--- a/JavaScriptCore/wtf/text/AtomicString.h
+++ b/JavaScriptCore/wtf/text/AtomicString.h
@@ -108,6 +108,11 @@ public:
operator QString() const { return m_string; }
#endif
+ // AtomicString::fromUTF8 will return a null string if
+ // the input data contains invalid UTF-8 sequences.
+ static AtomicString fromUTF8(const char*, size_t);
+ static AtomicString fromUTF8(const char*);
+
private:
String m_string;
diff --git a/JavaScriptCore/wtf/text/CString.cpp b/JavaScriptCore/wtf/text/CString.cpp
index db6443f..981d77a 100644
--- a/JavaScriptCore/wtf/text/CString.cpp
+++ b/JavaScriptCore/wtf/text/CString.cpp
@@ -49,8 +49,11 @@ void CString::init(const char* str, size_t length)
if (!str)
return;
- if (length >= numeric_limits<size_t>::max())
- CRASH();
+ // We need to be sure we can add 1 to length without overflowing.
+ // Since the passed-in length is the length of an actual existing
+ // string, and we know the string doesn't occupy the entire address
+ // space, we can assert here and there's no need for a runtime check.
+ ASSERT(length < numeric_limits<size_t>::max());
m_buffer = CStringBuffer::create(length + 1);
memcpy(m_buffer->mutableData(), str, length);
diff --git a/JavaScriptCore/wtf/text/StringConcatenate.h b/JavaScriptCore/wtf/text/StringConcatenate.h
index b54a108..92a2d06 100644
--- a/JavaScriptCore/wtf/text/StringConcatenate.h
+++ b/JavaScriptCore/wtf/text/StringConcatenate.h
@@ -68,7 +68,7 @@ template<>
class StringTypeAdapter<char*> {
public:
StringTypeAdapter<char*>(char* buffer)
- : m_buffer((unsigned char*)buffer)
+ : m_buffer(buffer)
, m_length(strlen(buffer))
{
}
@@ -77,12 +77,14 @@ public:
void writeTo(UChar* destination)
{
- for (unsigned i = 0; i < m_length; ++i)
- destination[i] = m_buffer[i];
+ for (unsigned i = 0; i < m_length; ++i) {
+ unsigned char c = m_buffer[i];
+ destination[i] = c;
+ }
}
private:
- const unsigned char* m_buffer;
+ const char* m_buffer;
unsigned m_length;
};
@@ -90,7 +92,7 @@ template<>
class StringTypeAdapter<const char*> {
public:
StringTypeAdapter<const char*>(const char* buffer)
- : m_buffer((unsigned char*)buffer)
+ : m_buffer(buffer)
, m_length(strlen(buffer))
{
}
@@ -99,35 +101,59 @@ public:
void writeTo(UChar* destination)
{
- for (unsigned i = 0; i < m_length; ++i)
- destination[i] = m_buffer[i];
+ for (unsigned i = 0; i < m_length; ++i) {
+ unsigned char c = m_buffer[i];
+ destination[i] = c;
+ }
}
private:
- const unsigned char* m_buffer;
+ const char* m_buffer;
unsigned m_length;
};
template<>
+class StringTypeAdapter<Vector<char> > {
+public:
+ StringTypeAdapter<Vector<char> >(const Vector<char>& buffer)
+ : m_buffer(buffer)
+ {
+ }
+
+ size_t length() { return m_buffer.size(); }
+
+ void writeTo(UChar* destination)
+ {
+ for (size_t i = 0; i < m_buffer.size(); ++i) {
+ unsigned char c = m_buffer[i];
+ destination[i] = c;
+ }
+ }
+
+private:
+ const Vector<char>& m_buffer;
+};
+
+template<>
class StringTypeAdapter<String> {
public:
- StringTypeAdapter<String>(String& string)
- : m_data(string.characters())
- , m_length(string.length())
+ StringTypeAdapter<String>(const String& string)
+ : m_buffer(string)
{
}
- unsigned length() { return m_length; }
+ unsigned length() { return m_buffer.length(); }
void writeTo(UChar* destination)
{
- for (unsigned i = 0; i < m_length; ++i)
- destination[i] = m_data[i];
+ const UChar* data = m_buffer.characters();
+ unsigned length = m_buffer.length();
+ for (unsigned i = 0; i < length; ++i)
+ destination[i] = data[i];
}
private:
- const UChar* m_data;
- unsigned m_length;
+ const String& m_buffer;
};
inline void sumWithOverflow(unsigned& total, unsigned addend, bool& overflow)
diff --git a/JavaScriptCore/wtf/text/StringImpl.h b/JavaScriptCore/wtf/text/StringImpl.h
index 99d0e9d..dc1dbb2 100644
--- a/JavaScriptCore/wtf/text/StringImpl.h
+++ b/JavaScriptCore/wtf/text/StringImpl.h
@@ -53,6 +53,7 @@ namespace WTF {
struct CStringTranslator;
struct HashAndCharactersTranslator;
+struct HashAndUTF8CharactersTranslator;
struct UCharBufferTranslator;
enum TextCaseSensitivity { TextCaseSensitive, TextCaseInsensitive };
@@ -66,6 +67,7 @@ class StringImpl : public StringImplBase {
friend struct JSC::IdentifierUCharBufferTranslator;
friend struct WTF::CStringTranslator;
friend struct WTF::HashAndCharactersTranslator;
+ friend struct WTF::HashAndUTF8CharactersTranslator;
friend struct WTF::UCharBufferTranslator;
friend class AtomicStringImpl;
private:
diff --git a/JavaScriptCore/wtf/text/WTFString.h b/JavaScriptCore/wtf/text/WTFString.h
index e9d6ae4..4d853d2 100644
--- a/JavaScriptCore/wtf/text/WTFString.h
+++ b/JavaScriptCore/wtf/text/WTFString.h
@@ -276,6 +276,13 @@ public:
// to ever prefer copy() over plain old assignment.
String threadsafeCopy() const;
+ // Prevent Strings from being implicitly convertable to bool as it will be ambiguous on any platform that
+ // allows implicit conversion to another pointer type (e.g., Mac allows implicit conversion to NSString*).
+ typedef struct ImplicitConversionFromWTFStringToBoolDisallowedA* (String::*UnspecifiedBoolTypeA);
+ typedef struct ImplicitConversionFromWTFStringToBoolDisallowedB* (String::*UnspecifiedBoolTypeB);
+ operator UnspecifiedBoolTypeA() const;
+ operator UnspecifiedBoolTypeB() const;
+
#if PLATFORM(CF)
String(CFStringRef);
CFStringRef createCFString() const;
@@ -309,6 +316,8 @@ public:
String(const AECHAR*);
#endif
+ // String::fromUTF8 will return a null string if
+ // the input data contains invalid UTF-8 sequences.
static String fromUTF8(const char*, size_t);
static String fromUTF8(const char*);
diff --git a/JavaScriptCore/wtf/unicode/UTF8.cpp b/JavaScriptCore/wtf/unicode/UTF8.cpp
index 40c5609..dc24ed5 100644
--- a/JavaScriptCore/wtf/unicode/UTF8.cpp
+++ b/JavaScriptCore/wtf/unicode/UTF8.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -25,10 +26,16 @@
#include "config.h"
#include "UTF8.h"
+#include <wtf/StringHasher.h>
+
+#include "ASCIICType.h"
namespace WTF {
namespace Unicode {
+// FIXME: Use definition from CharacterNames.h.
+static const UChar replacementCharacter = 0xFFFD;
+
inline int inlineUTF8SequenceLengthNonASCII(char b0)
{
if ((b0 & 0xC0) != 0xC0)
@@ -44,12 +51,12 @@ inline int inlineUTF8SequenceLengthNonASCII(char b0)
inline int inlineUTF8SequenceLength(char b0)
{
- return (b0 & 0x80) == 0 ? 1 : inlineUTF8SequenceLengthNonASCII(b0);
+ return isASCII(b0) ? 1 : inlineUTF8SequenceLengthNonASCII(b0);
}
int UTF8SequenceLength(char b0)
{
- return (b0 & 0x80) == 0 ? 1 : inlineUTF8SequenceLengthNonASCII(b0);
+ return isASCII(b0) ? 1 : inlineUTF8SequenceLengthNonASCII(b0);
}
int decodeUTF8Sequence(const char* sequence)
@@ -172,7 +179,7 @@ ConversionResult convertUTF16ToUTF8(
bytesToWrite = 4;
} else {
bytesToWrite = 3;
- ch = 0xFFFD;
+ ch = replacementCharacter;
}
target += bytesToWrite;
@@ -231,6 +238,23 @@ static bool isLegalUTF8(const unsigned char* source, int length)
static const UChar32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
0x03C82080UL, 0xFA082080UL, 0x82082080UL };
+static inline UChar32 readUTF8Sequence(const char*& sequence, unsigned length)
+{
+ UChar32 character = 0;
+
+ // The cases all fall through.
+ switch (length) {
+ case 6: character += static_cast<unsigned char>(*sequence++); character <<= 6;
+ case 5: character += static_cast<unsigned char>(*sequence++); character <<= 6;
+ case 4: character += static_cast<unsigned char>(*sequence++); character <<= 6;
+ case 3: character += static_cast<unsigned char>(*sequence++); character <<= 6;
+ case 2: character += static_cast<unsigned char>(*sequence++); character <<= 6;
+ case 1: character += static_cast<unsigned char>(*sequence++);
+ }
+
+ return character - offsetsFromUTF8[length - 1];
+}
+
ConversionResult convertUTF8ToUTF16(
const char** sourceStart, const char* sourceEnd,
UChar** targetStart, UChar* targetEnd, bool strict)
@@ -239,60 +263,52 @@ ConversionResult convertUTF8ToUTF16(
const char* source = *sourceStart;
UChar* target = *targetStart;
while (source < sourceEnd) {
- UChar32 ch = 0;
- int extraBytesToRead = inlineUTF8SequenceLength(*source) - 1;
- if (source + extraBytesToRead >= sourceEnd) {
+ int utf8SequenceLength = inlineUTF8SequenceLength(*source);
+ if (sourceEnd - source < utf8SequenceLength) {
result = sourceExhausted;
break;
}
// Do this check whether lenient or strict
- if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(source), extraBytesToRead + 1)) {
+ if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(source), utf8SequenceLength)) {
result = sourceIllegal;
break;
}
- // The cases all fall through.
- switch (extraBytesToRead) {
- case 5: ch += static_cast<unsigned char>(*source++); ch <<= 6; // remember, illegal UTF-8
- case 4: ch += static_cast<unsigned char>(*source++); ch <<= 6; // remember, illegal UTF-8
- case 3: ch += static_cast<unsigned char>(*source++); ch <<= 6;
- case 2: ch += static_cast<unsigned char>(*source++); ch <<= 6;
- case 1: ch += static_cast<unsigned char>(*source++); ch <<= 6;
- case 0: ch += static_cast<unsigned char>(*source++);
- }
- ch -= offsetsFromUTF8[extraBytesToRead];
+
+ UChar32 character = readUTF8Sequence(source, utf8SequenceLength);
if (target >= targetEnd) {
- source -= (extraBytesToRead + 1); // Back up source pointer!
- result = targetExhausted; break;
+ source -= utf8SequenceLength; // Back up source pointer!
+ result = targetExhausted;
+ break;
}
- if (ch <= 0xFFFF) {
+
+ if (U_IS_BMP(character)) {
// UTF-16 surrogate values are illegal in UTF-32
- if (ch >= 0xD800 && ch <= 0xDFFF) {
+ if (U_IS_SURROGATE(character)) {
if (strict) {
- source -= (extraBytesToRead + 1); // return to the illegal value itself
+ source -= utf8SequenceLength; // return to the illegal value itself
result = sourceIllegal;
break;
} else
- *target++ = 0xFFFD;
- } else
- *target++ = (UChar)ch; // normal case
- } else if (ch > 0x10FFFF) {
- if (strict) {
- result = sourceIllegal;
- source -= (extraBytesToRead + 1); // return to the start
- break; // Bail out; shouldn't continue
+ *target++ = replacementCharacter;
} else
- *target++ = 0xFFFD;
- } else {
+ *target++ = character; // normal case
+ } else if (U_IS_SUPPLEMENTARY(character)) {
// target is a character in range 0xFFFF - 0x10FFFF
if (target + 1 >= targetEnd) {
- source -= (extraBytesToRead + 1); // Back up source pointer!
+ source -= utf8SequenceLength; // Back up source pointer!
result = targetExhausted;
break;
}
- ch -= 0x0010000UL;
- *target++ = (UChar)((ch >> 10) + 0xD800);
- *target++ = (UChar)((ch & 0x03FF) + 0xDC00);
+ *target++ = U16_LEAD(character);
+ *target++ = U16_TRAIL(character);
+ } else {
+ if (strict) {
+ source -= utf8SequenceLength; // return to the start
+ result = sourceIllegal;
+ break; // Bail out; shouldn't continue
+ } else
+ *target++ = replacementCharacter;
}
}
*sourceStart = source;
@@ -300,5 +316,86 @@ ConversionResult convertUTF8ToUTF16(
return result;
}
+unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length)
+{
+ if (!data)
+ return 0;
+
+ WTF::StringHasher stringHasher;
+ utf16Length = 0;
+
+ while (data < dataEnd) {
+ if (isASCII(*data)) {
+ stringHasher.addCharacter(*data++);
+ utf16Length++;
+ continue;
+ }
+
+ int utf8SequenceLength = inlineUTF8SequenceLengthNonASCII(*data);
+
+ if (dataEnd - data < utf8SequenceLength)
+ return false;
+
+ if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(data), utf8SequenceLength))
+ return 0;
+
+ UChar32 character = readUTF8Sequence(data, utf8SequenceLength);
+ ASSERT(!isASCII(character));
+
+ if (U_IS_BMP(character)) {
+ // UTF-16 surrogate values are illegal in UTF-32
+ if (U_IS_SURROGATE(character))
+ return 0;
+ stringHasher.addCharacter(static_cast<UChar>(character)); // normal case
+ utf16Length++;
+ } else if (U_IS_SUPPLEMENTARY(character)) {
+ stringHasher.addCharacters(static_cast<UChar>(U16_LEAD(character)),
+ static_cast<UChar>(U16_TRAIL(character)));
+ utf16Length += 2;
+ } else
+ return 0;
+ }
+
+ return stringHasher.hash();
}
+
+bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const char* bEnd)
+{
+ while (b < bEnd) {
+ if (isASCII(*b)) {
+ if (*a++ != *b++)
+ return false;
+ continue;
+ }
+
+ int utf8SequenceLength = inlineUTF8SequenceLengthNonASCII(*b);
+
+ if (bEnd - b < utf8SequenceLength)
+ return false;
+
+ if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(b), utf8SequenceLength))
+ return 0;
+
+ UChar32 character = readUTF8Sequence(b, utf8SequenceLength);
+ ASSERT(!isASCII(character));
+
+ if (U_IS_BMP(character)) {
+ // UTF-16 surrogate values are illegal in UTF-32
+ if (U_IS_SURROGATE(character))
+ return false;
+ if (*a++ != character)
+ return false;
+ } else if (U_IS_SUPPLEMENTARY(character)) {
+ if (*a++ != U16_LEAD(character))
+ return false;
+ if (*a++ != U16_TRAIL(character))
+ return false;
+ } else
+ return false;
+ }
+
+ return a == aEnd;
}
+
+} // namespace Unicode
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/unicode/UTF8.h b/JavaScriptCore/wtf/unicode/UTF8.h
index a5ed93e..1f4baca 100644
--- a/JavaScriptCore/wtf/unicode/UTF8.h
+++ b/JavaScriptCore/wtf/unicode/UTF8.h
@@ -29,7 +29,7 @@
#include "Unicode.h"
namespace WTF {
- namespace Unicode {
+namespace Unicode {
// Given a first byte, gives the length of the UTF-8 sequence it begins.
// Returns 0 for bytes that are not legal starts of UTF-8 sequences.
@@ -69,7 +69,12 @@ namespace WTF {
ConversionResult convertUTF16ToUTF8(
const UChar** sourceStart, const UChar* sourceEnd,
char** targetStart, char* targetEnd, bool strict = true);
- }
-}
+
+ unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length);
+
+ bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const char* bEnd);
+
+} // namespace Unicode
+} // namespace WTF
#endif // WTF_UTF8_h
diff --git a/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h b/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h
index f865ef1..8959912 100644
--- a/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h
+++ b/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 1999-2004, International Business Machines Corporation and others. All Rights Reserved.
* Copyright (C) 2006 George Staikos <staikos@kde.org>
* Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
* Copyright (C) 2007 Apple Computer, Inc. All rights reserved.
@@ -38,11 +39,28 @@
#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
#define U16_LENGTH(c) ((uint32_t)(c) <= 0xffff ? 1 : 2)
+#define U_IS_SUPPLEMENTARY(c) ((UChar32)((c)-0x10000)<=0xfffff)
#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
#define U16_IS_SINGLE(c) !U_IS_SURROGATE(c)
#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
+#define U16_GET(s, start, i, length, c) { \
+ (c)=(s)[i]; \
+ if(U16_IS_SURROGATE(c)) { \
+ uint16_t __c2; \
+ if(U16_IS_SURROGATE_LEAD(c)) { \
+ if((i)+1<(length) && U16_IS_TRAIL(__c2=(s)[(i)+1])) { \
+ (c)=U16_GET_SUPPLEMENTARY((c), __c2); \
+ } \
+ } else { \
+ if((i)-1>=(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
+ (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
+ } \
+ } \
+ } \
+}
+
#define U16_PREV(s, start, i, c) { \
(c)=(s)[--(i)]; \
if(U16_IS_TRAIL(c)) { \
@@ -54,6 +72,12 @@
} \
}
+#define U16_BACK_1(s, start, i) { \
+ if(U16_IS_TRAIL((s)[--(i)]) && (i)>(start) && U16_IS_LEAD((s)[(i)-1])) { \
+ --(i); \
+ } \
+}
+
#define U16_NEXT(s, i, length, c) { \
(c)=(s)[(i)++]; \
if(U16_IS_LEAD(c)) { \
@@ -65,7 +89,12 @@
} \
}
+#define U16_FWD_1(s, i, length) { \
+ if(U16_IS_LEAD((s)[(i)++]) && (i)<(length) && U16_IS_TRAIL((s)[i])) { \
+ ++(i); \
+ } \
+}
+
#define U_MASK(x) ((uint32_t)1<<(x))
#endif
-
diff --git a/JavaScriptCore/wtf/wtf.pri b/JavaScriptCore/wtf/wtf.pri
index 1780334..c5617ce 100644
--- a/JavaScriptCore/wtf/wtf.pri
+++ b/JavaScriptCore/wtf/wtf.pri
@@ -16,9 +16,11 @@ SOURCES += \
wtf/qt/MainThreadQt.cpp \
wtf/qt/StringQt.cpp \
wtf/qt/ThreadingQt.cpp \
- wtf/PageAllocation.cpp \
+ wtf/PageAllocationAligned.cpp \
+ wtf/PageBlock.cpp \
wtf/RandomNumber.cpp \
wtf/RefCountedLeakCounter.cpp \
+ wtf/StackBounds.cpp \
wtf/ThreadingNone.cpp \
wtf/Threading.cpp \
wtf/TypeTraits.cpp \
@@ -43,3 +45,6 @@ contains(DEFINES, USE_GSTREAMER=1) {
SOURCES += wtf/TCSystemAlloc.cpp
}
+unix:!symbian: SOURCES += wtf/OSAllocatorPosix.cpp
+symbian: SOURCES += wtf/OSAllocatorSymbian.cpp
+win*|wince*: SOURCES += wtf/OSAllocatorWin.cpp
diff --git a/JavaScriptCore/wtf/wx/StringWx.cpp b/JavaScriptCore/wtf/wx/StringWx.cpp
new file mode 100644
index 0000000..59d500b
--- /dev/null
+++ b/JavaScriptCore/wtf/wx/StringWx.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 Vaclav Slavik, Kevin Ollivier <kevino@theolliviers.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PlatformString.h"
+
+#include <unicode/ustring.h>
+#include <wtf/text/CString.h>
+#include <wx/defs.h>
+#include <wx/string.h>
+
+namespace WTF {
+
+String::String(const wxString& wxstr)
+{
+#if !wxUSE_UNICODE
+ #error "This code only works in Unicode build of wxWidgets"
+#endif
+
+#if SIZEOF_WCHAR_T == sizeof(UChar)
+
+ m_impl = StringImpl::create(wxstr.wc_str(), wxstr.length());
+
+#else // SIZEOF_WCHAR_T == 4
+
+ // NB: we can't simply use wxstr.mb_str(wxMBConvUTF16()) here because
+ // the number of characters in UTF-16 encoding of the string may differ
+ // from the number of UTF-32 values and we can't get the length from
+ // returned buffer:
+
+#if defined(wxUSE_UNICODE_UTF8) && wxUSE_UNICODE_UTF8
+ // in wx3's UTF8 mode, wc_str() returns a buffer, not raw pointer
+ wxWCharBuffer wideString(wxstr.wc_str());
+#else
+ const wxChar *wideString = wxstr.wc_str();
+#endif
+ size_t wideLength = wxstr.length();
+
+ UChar* data;
+ wxMBConvUTF16 conv;
+ unsigned utf16Length = conv.FromWChar(0, 0, wideString, wideLength);
+ m_impl = StringImpl::createUninitialized(utf16Length, data)
+ conv.FromWChar(data, utf16Length, wideString, wideLength);
+
+#endif // SIZEOF_WCHAR_T == 4
+}
+
+String::operator wxString() const
+{
+ return wxString(utf8().data(), wxConvUTF8);
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/yarr/RegexCompiler.cpp b/JavaScriptCore/yarr/RegexCompiler.cpp
index 06ecbad..9063359 100644
--- a/JavaScriptCore/yarr/RegexCompiler.cpp
+++ b/JavaScriptCore/yarr/RegexCompiler.cpp
@@ -459,7 +459,7 @@ public:
PatternDisjunction* parenthesesDisjunction = new PatternDisjunction(m_alternative);
m_pattern.m_disjunctions.append(parenthesesDisjunction);
- m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParenthesesSubpattern, subpatternId, parenthesesDisjunction, capture));
+ m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParenthesesSubpattern, subpatternId, parenthesesDisjunction, capture, false));
m_alternative = parenthesesDisjunction->addNewAlternative();
}
@@ -467,7 +467,7 @@ public:
{
PatternDisjunction* parenthesesDisjunction = new PatternDisjunction(m_alternative);
m_pattern.m_disjunctions.append(parenthesesDisjunction);
- m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParentheticalAssertion, m_pattern.m_numSubpatterns + 1, parenthesesDisjunction, invert));
+ m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParentheticalAssertion, m_pattern.m_numSubpatterns + 1, parenthesesDisjunction, false, invert));
m_alternative = parenthesesDisjunction->addNewAlternative();
m_invertParentheticalAssertion = invert;
}
@@ -477,16 +477,16 @@ public:
ASSERT(m_alternative->m_parent);
ASSERT(m_alternative->m_parent->m_parent);
- PatternDisjunction* parenthesisDisjunction = m_alternative->m_parent;
+ PatternDisjunction* parenthesesDisjunction = m_alternative->m_parent;
m_alternative = m_alternative->m_parent->m_parent;
PatternTerm& lastTerm = m_alternative->lastTerm();
- unsigned numParenAlternatives = parenthesisDisjunction->m_alternatives.size();
+ unsigned numParenAlternatives = parenthesesDisjunction->m_alternatives.size();
unsigned numBOLAnchoredAlts = 0;
// Bubble up BOL flags
for (unsigned i = 0; i < numParenAlternatives; i++) {
- if (parenthesisDisjunction->m_alternatives[i]->m_startsWithBOL)
+ if (parenthesesDisjunction->m_alternatives[i]->m_startsWithBOL)
numBOLAnchoredAlts++;
}
@@ -520,7 +520,7 @@ public:
PatternTerm& term = currentAlternative->lastTerm();
ASSERT((term.type == PatternTerm::TypeParenthesesSubpattern) || (term.type == PatternTerm::TypeParentheticalAssertion));
- if ((term.type == PatternTerm::TypeParenthesesSubpattern) && term.invertOrCapture && (subpatternId == term.subpatternId)) {
+ if ((term.type == PatternTerm::TypeParenthesesSubpattern) && term.capture() && (subpatternId == term.parentheses.subpatternId)) {
m_alternative->m_terms.append(PatternTerm::ForwardReference());
return;
}
@@ -595,7 +595,7 @@ public:
term.quantify(min, QuantifierFixedCount);
m_alternative->m_terms.append(copyTerm(term));
// NOTE: this term is interesting from an analysis perspective, in that it can be ignored.....
- m_alternative->lastTerm().quantify((max == UINT_MAX) ? max : max - min, greedy ? QuantifierGreedy : QuantifierNonGreedy);
+ m_alternative->lastTerm().quantify((max == quantifyInfinite) ? max : max - min, greedy ? QuantifierGreedy : QuantifierNonGreedy);
if (m_alternative->lastTerm().type == PatternTerm::TypeParenthesesSubpattern)
m_alternative->lastTerm().parentheses.isCopy = true;
}
@@ -734,7 +734,8 @@ public:
// This optimization identifies sets of parentheses that we will never need to backtrack.
// In these cases we do not need to store state from prior iterations.
// We can presently avoid backtracking for:
- // * a set of parens at the end of the regular expression (last term in any of the alternatives of the main body disjunction).
+ // * where the parens are at the end of the regular expression (last term in any of the
+ // alternatives of the main body disjunction).
// * where the parens are non-capturing, and quantified unbounded greedy (*).
// * where the parens do not contain any capturing subpatterns.
void checkForTerminalParentheses()
@@ -745,13 +746,13 @@ public:
return;
Vector<PatternAlternative*>& alternatives = m_pattern.m_body->m_alternatives;
- for (unsigned i =0; i < alternatives.size(); ++i) {
+ for (size_t i = 0; i < alternatives.size(); ++i) {
Vector<PatternTerm>& terms = alternatives[i]->m_terms;
if (terms.size()) {
PatternTerm& term = terms.last();
if (term.type == PatternTerm::TypeParenthesesSubpattern
&& term.quantityType == QuantifierGreedy
- && term.quantityCount == UINT_MAX
+ && term.quantityCount == quantifyInfinite
&& !term.capture())
term.parentheses.isTerminal = true;
}
@@ -844,7 +845,7 @@ public:
return false;
case PatternTerm::TypeParentheticalAssertion:
- if (term.invertOrCapture)
+ if (term.invert())
return false;
case PatternTerm::TypeParenthesesSubpattern:
diff --git a/JavaScriptCore/yarr/RegexInterpreter.cpp b/JavaScriptCore/yarr/RegexInterpreter.cpp
index 164158e..9900cbe 100644
--- a/JavaScriptCore/yarr/RegexInterpreter.cpp
+++ b/JavaScriptCore/yarr/RegexInterpreter.cpp
@@ -68,8 +68,6 @@ public:
struct BackTrackInfoParentheses {
uintptr_t matchAmount;
ParenthesesDisjunctionContext* lastContext;
- uintptr_t prevBegin;
- uintptr_t prevEnd;
};
static inline void appendParenthesesDisjunctionContext(BackTrackInfoParentheses* backTrack, ParenthesesDisjunctionContext* context)
@@ -515,8 +513,7 @@ public:
if (matchEnd == -1)
return true;
- ASSERT((matchBegin == -1) == (matchEnd == -1));
- ASSERT(matchBegin <= matchEnd);
+ ASSERT((matchBegin == -1) || (matchBegin <= matchEnd));
if (matchBegin == matchEnd)
return true;
@@ -558,8 +555,7 @@ public:
int matchBegin = output[(term.atom.subpatternId << 1)];
int matchEnd = output[(term.atom.subpatternId << 1) + 1];
- ASSERT((matchBegin == -1) == (matchEnd == -1));
- ASSERT(matchBegin <= matchEnd);
+ ASSERT((matchBegin == -1) || (matchBegin <= matchEnd));
if (matchBegin == matchEnd)
return false;
@@ -719,7 +715,7 @@ public:
if (term.capture()) {
// Technically this access to inputPosition should be accessing the begin term's
// inputPosition, but for repeats other than fixed these values should be
- // the same anyway! (we don't pre-check for greedy or non-greedy matches.)
+ // the same anyway! (We don't pre-check for greedy or non-greedy matches.)
ASSERT((&term - term.atom.parenthesesWidth)->type == ByteTerm::TypeParenthesesSubpatternOnceBegin);
ASSERT((&term - term.atom.parenthesesWidth)->inputPosition == term.inputPosition);
unsigned subpatternId = term.atom.subpatternId;
@@ -739,7 +735,7 @@ public:
{
ASSERT(term.type == ByteTerm::TypeParenthesesSubpatternTerminalBegin);
ASSERT(term.atom.quantityType == QuantifierGreedy);
- ASSERT(term.atom.quantityCount == UINT_MAX);
+ ASSERT(term.atom.quantityCount == quantifyInfinite);
ASSERT(!term.capture());
BackTrackInfoParenthesesTerminal* backTrack = reinterpret_cast<BackTrackInfoParenthesesTerminal*>(context->frame + term.frameLocation);
@@ -765,7 +761,7 @@ public:
{
ASSERT(term.type == ByteTerm::TypeParenthesesSubpatternTerminalBegin);
ASSERT(term.atom.quantityType == QuantifierGreedy);
- ASSERT(term.atom.quantityCount == UINT_MAX);
+ ASSERT(term.atom.quantityCount == quantifyInfinite);
ASSERT(!term.capture());
// If we backtrack to this point, we have failed to match this iteration of the parens.
@@ -777,7 +773,7 @@ public:
bool backtrackParenthesesTerminalEnd(ByteTerm&, DisjunctionContext*)
{
// 'Terminal' parentheses are at the end of the regex, and as such a match past end
- // should always be returned as a successful match - we should never becktrack to here.
+ // should always be returned as a successful match - we should never backtrack to here.
ASSERT_NOT_REACHED();
return false;
}
@@ -843,13 +839,8 @@ public:
ASSERT(term.type == ByteTerm::TypeParenthesesSubpattern);
BackTrackInfoParentheses* backTrack = reinterpret_cast<BackTrackInfoParentheses*>(context->frame + term.frameLocation);
-
- unsigned subpatternId = term.atom.subpatternId;
ByteDisjunction* disjunctionBody = term.atom.parenthesesDisjunction;
- backTrack->prevBegin = output[(subpatternId << 1)];
- backTrack->prevEnd = output[(subpatternId << 1) + 1];
-
backTrack->matchAmount = 0;
backTrack->lastContext = 0;
@@ -929,13 +920,6 @@ public:
ASSERT(term.type == ByteTerm::TypeParenthesesSubpattern);
BackTrackInfoParentheses* backTrack = reinterpret_cast<BackTrackInfoParentheses*>(context->frame + term.frameLocation);
-
- if (term.capture()) {
- unsigned subpatternId = term.atom.subpatternId;
- output[(subpatternId << 1)] = backTrack->prevBegin;
- output[(subpatternId << 1) + 1] = backTrack->prevEnd;
- }
-
ByteDisjunction* disjunctionBody = term.atom.parenthesesDisjunction;
switch (term.atom.quantityType) {
@@ -1524,7 +1508,7 @@ public:
{
int beginTerm = m_bodyDisjunction->terms.size();
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternOnceBegin, subpatternId, capture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternOnceBegin, subpatternId, capture, false, inputPosition));
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = frameLocation;
m_bodyDisjunction->terms.append(ByteTerm::AlternativeBegin());
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = alternativeFrameLocation;
@@ -1537,7 +1521,7 @@ public:
{
int beginTerm = m_bodyDisjunction->terms.size();
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternTerminalBegin, subpatternId, capture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternTerminalBegin, subpatternId, capture, false, inputPosition));
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = frameLocation;
m_bodyDisjunction->terms.append(ByteTerm::AlternativeBegin());
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = alternativeFrameLocation;
@@ -1554,7 +1538,7 @@ public:
int beginTerm = m_bodyDisjunction->terms.size();
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternOnceBegin, subpatternId, capture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternOnceBegin, subpatternId, capture, false, inputPosition));
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = frameLocation;
m_bodyDisjunction->terms.append(ByteTerm::AlternativeBegin());
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = alternativeFrameLocation;
@@ -1567,7 +1551,7 @@ public:
{
int beginTerm = m_bodyDisjunction->terms.size();
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParentheticalAssertionBegin, subpatternId, invert, 0));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParentheticalAssertionBegin, subpatternId, false, invert, 0));
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = frameLocation;
m_bodyDisjunction->terms.append(ByteTerm::AlternativeBegin());
m_bodyDisjunction->terms[m_bodyDisjunction->terms.size() - 1].frameLocation = alternativeFrameLocation;
@@ -1584,10 +1568,10 @@ public:
ASSERT(m_bodyDisjunction->terms[beginTerm].type == ByteTerm::TypeParentheticalAssertionBegin);
- bool invertOrCapture = m_bodyDisjunction->terms[beginTerm].invertOrCapture;
+ bool invert = m_bodyDisjunction->terms[beginTerm].invert();
unsigned subpatternId = m_bodyDisjunction->terms[beginTerm].atom.subpatternId;
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParentheticalAssertionEnd, subpatternId, invertOrCapture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParentheticalAssertionEnd, subpatternId, false, invert, inputPosition));
m_bodyDisjunction->terms[beginTerm].atom.parenthesesWidth = endTerm - beginTerm;
m_bodyDisjunction->terms[endTerm].atom.parenthesesWidth = endTerm - beginTerm;
m_bodyDisjunction->terms[endTerm].frameLocation = frameLocation;
@@ -1679,7 +1663,7 @@ public:
ByteTerm& parenthesesBegin = m_bodyDisjunction->terms[beginTerm];
- bool invertOrCapture = parenthesesBegin.invertOrCapture;
+ bool capture = parenthesesBegin.capture();
unsigned subpatternId = parenthesesBegin.atom.subpatternId;
unsigned numSubpatterns = lastSubpatternId - subpatternId + 1;
@@ -1693,7 +1677,7 @@ public:
m_bodyDisjunction->terms.shrink(beginTerm);
m_allParenthesesInfo.append(parenthesesDisjunction);
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpattern, subpatternId, parenthesesDisjunction, invertOrCapture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpattern, subpatternId, parenthesesDisjunction, capture, inputPosition));
m_bodyDisjunction->terms[beginTerm].atom.quantityCount = quantityCount;
m_bodyDisjunction->terms[beginTerm].atom.quantityType = quantityType;
@@ -1708,10 +1692,10 @@ public:
ASSERT(m_bodyDisjunction->terms[beginTerm].type == ByteTerm::TypeParenthesesSubpatternOnceBegin);
- bool invertOrCapture = m_bodyDisjunction->terms[beginTerm].invertOrCapture;
+ bool capture = m_bodyDisjunction->terms[beginTerm].capture();
unsigned subpatternId = m_bodyDisjunction->terms[beginTerm].atom.subpatternId;
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternOnceEnd, subpatternId, invertOrCapture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternOnceEnd, subpatternId, capture, false, inputPosition));
m_bodyDisjunction->terms[beginTerm].atom.parenthesesWidth = endTerm - beginTerm;
m_bodyDisjunction->terms[endTerm].atom.parenthesesWidth = endTerm - beginTerm;
m_bodyDisjunction->terms[endTerm].frameLocation = frameLocation;
@@ -1730,10 +1714,10 @@ public:
ASSERT(m_bodyDisjunction->terms[beginTerm].type == ByteTerm::TypeParenthesesSubpatternTerminalBegin);
- bool invertOrCapture = m_bodyDisjunction->terms[beginTerm].invertOrCapture;
+ bool capture = m_bodyDisjunction->terms[beginTerm].capture();
unsigned subpatternId = m_bodyDisjunction->terms[beginTerm].atom.subpatternId;
- m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternTerminalEnd, subpatternId, invertOrCapture, inputPosition));
+ m_bodyDisjunction->terms.append(ByteTerm(ByteTerm::TypeParenthesesSubpatternTerminalEnd, subpatternId, capture, false, inputPosition));
m_bodyDisjunction->terms[beginTerm].atom.parenthesesWidth = endTerm - beginTerm;
m_bodyDisjunction->terms[endTerm].atom.parenthesesWidth = endTerm - beginTerm;
m_bodyDisjunction->terms[endTerm].frameLocation = frameLocation;
@@ -1816,7 +1800,7 @@ public:
break;
case PatternTerm::TypeAssertionWordBoundary:
- assertionWordBoundary(term.invertOrCapture, term.inputPosition - currentCountAlreadyChecked);
+ assertionWordBoundary(term.invert(), term.inputPosition - currentCountAlreadyChecked);
break;
case PatternTerm::TypePatternCharacter:
@@ -1824,11 +1808,11 @@ public:
break;
case PatternTerm::TypeCharacterClass:
- atomCharacterClass(term.characterClass, term.invertOrCapture, term.inputPosition - currentCountAlreadyChecked, term.frameLocation, term.quantityCount, term.quantityType);
+ atomCharacterClass(term.characterClass, term.invert(), term.inputPosition - currentCountAlreadyChecked, term.frameLocation, term.quantityCount, term.quantityType);
break;
case PatternTerm::TypeBackReference:
- atomBackReference(term.subpatternId, term.inputPosition - currentCountAlreadyChecked, term.frameLocation, term.quantityCount, term.quantityType);
+ atomBackReference(term.backReferenceSubpatternId, term.inputPosition - currentCountAlreadyChecked, term.frameLocation, term.quantityCount, term.quantityType);
break;
case PatternTerm::TypeForwardReference:
@@ -1844,17 +1828,17 @@ public:
else
alternativeFrameLocation += RegexStackSpaceForBackTrackInfoParenthesesOnce;
unsigned delegateEndInputOffset = term.inputPosition - currentCountAlreadyChecked;
- atomParenthesesOnceBegin(term.parentheses.subpatternId, term.invertOrCapture, delegateEndInputOffset - disjunctionAlreadyCheckedCount, term.frameLocation, alternativeFrameLocation);
+ atomParenthesesOnceBegin(term.parentheses.subpatternId, term.capture(), delegateEndInputOffset - disjunctionAlreadyCheckedCount, term.frameLocation, alternativeFrameLocation);
emitDisjunction(term.parentheses.disjunction, currentCountAlreadyChecked, disjunctionAlreadyCheckedCount);
atomParenthesesOnceEnd(delegateEndInputOffset, term.frameLocation, term.quantityCount, term.quantityType);
} else if (term.parentheses.isTerminal) {
unsigned delegateEndInputOffset = term.inputPosition - currentCountAlreadyChecked;
- atomParenthesesTerminalBegin(term.parentheses.subpatternId, term.invertOrCapture, delegateEndInputOffset - disjunctionAlreadyCheckedCount, term.frameLocation, term.frameLocation + RegexStackSpaceForBackTrackInfoParenthesesOnce);
+ atomParenthesesTerminalBegin(term.parentheses.subpatternId, term.capture(), delegateEndInputOffset - disjunctionAlreadyCheckedCount, term.frameLocation, term.frameLocation + RegexStackSpaceForBackTrackInfoParenthesesOnce);
emitDisjunction(term.parentheses.disjunction, currentCountAlreadyChecked, disjunctionAlreadyCheckedCount);
atomParenthesesTerminalEnd(delegateEndInputOffset, term.frameLocation, term.quantityCount, term.quantityType);
} else {
unsigned delegateEndInputOffset = term.inputPosition - currentCountAlreadyChecked;
- atomParenthesesSubpatternBegin(term.parentheses.subpatternId, term.invertOrCapture, delegateEndInputOffset - disjunctionAlreadyCheckedCount, term.frameLocation, 0);
+ atomParenthesesSubpatternBegin(term.parentheses.subpatternId, term.capture(), delegateEndInputOffset - disjunctionAlreadyCheckedCount, term.frameLocation, 0);
emitDisjunction(term.parentheses.disjunction, currentCountAlreadyChecked, 0);
atomParenthesesSubpatternEnd(term.parentheses.lastSubpatternId, delegateEndInputOffset, term.frameLocation, term.quantityCount, term.quantityType, term.parentheses.disjunction->m_callFrameSize);
}
@@ -1867,7 +1851,7 @@ public:
ASSERT(currentCountAlreadyChecked >= (unsigned)term.inputPosition);
int positiveInputOffset = currentCountAlreadyChecked - term.inputPosition;
- atomParentheticalAssertionBegin(term.parentheses.subpatternId, term.invertOrCapture, term.frameLocation, alternativeFrameLocation);
+ atomParentheticalAssertionBegin(term.parentheses.subpatternId, term.invert(), term.frameLocation, alternativeFrameLocation);
emitDisjunction(term.parentheses.disjunction, currentCountAlreadyChecked, positiveInputOffset, true);
atomParentheticalAssertionEnd(0, term.frameLocation, term.quantityCount, term.quantityType);
break;
@@ -1885,19 +1869,6 @@ private:
Vector<ByteDisjunction*> m_allParenthesesInfo;
};
-
-PassOwnPtr<BytecodePattern> byteCompileRegex(const UString& patternString, unsigned& numSubpatterns, const char*& error, BumpPointerAllocator* allocator, bool ignoreCase, bool multiline)
-{
- RegexPattern pattern(ignoreCase, multiline);
-
- if ((error = compileRegex(patternString, pattern)))
- return PassOwnPtr<BytecodePattern>();
-
- numSubpatterns = pattern.m_numSubpatterns;
-
- return ByteCompiler(pattern).compile(allocator);
-}
-
PassOwnPtr<BytecodePattern> byteCompileRegex(RegexPattern& pattern, BumpPointerAllocator* allocator)
{
return ByteCompiler(pattern).compile(allocator);
diff --git a/JavaScriptCore/yarr/RegexInterpreter.h b/JavaScriptCore/yarr/RegexInterpreter.h
index 2e23472..0fd8a57 100644
--- a/JavaScriptCore/yarr/RegexInterpreter.h
+++ b/JavaScriptCore/yarr/RegexInterpreter.h
@@ -87,7 +87,6 @@ struct ByteTerm {
TypeParentheticalAssertionEnd,
TypeCheckInput,
} type;
- bool invertOrCapture;
union {
struct {
union {
@@ -114,10 +113,14 @@ struct ByteTerm {
unsigned checkInputCount;
};
unsigned frameLocation;
+ bool m_capture : 1;
+ bool m_invert : 1;
int inputPosition;
ByteTerm(UChar ch, int inputPos, unsigned frameLocation, unsigned quantityCount, QuantifierType quantityType)
: frameLocation(frameLocation)
+ , m_capture(false)
+ , m_invert(false)
{
switch (quantityType) {
case QuantifierFixedCount:
@@ -139,6 +142,8 @@ struct ByteTerm {
ByteTerm(UChar lo, UChar hi, int inputPos, unsigned frameLocation, unsigned quantityCount, QuantifierType quantityType)
: frameLocation(frameLocation)
+ , m_capture(false)
+ , m_invert(false)
{
switch (quantityType) {
case QuantifierFixedCount:
@@ -161,7 +166,8 @@ struct ByteTerm {
ByteTerm(CharacterClass* characterClass, bool invert, int inputPos)
: type(ByteTerm::TypeCharacterClass)
- , invertOrCapture(invert)
+ , m_capture(false)
+ , m_invert(invert)
{
atom.characterClass = characterClass;
atom.quantityType = QuantifierFixedCount;
@@ -169,9 +175,10 @@ struct ByteTerm {
inputPosition = inputPos;
}
- ByteTerm(Type type, unsigned subpatternId, ByteDisjunction* parenthesesInfo, bool invertOrCapture, int inputPos)
+ ByteTerm(Type type, unsigned subpatternId, ByteDisjunction* parenthesesInfo, bool capture, int inputPos)
: type(type)
- , invertOrCapture(invertOrCapture)
+ , m_capture(capture)
+ , m_invert(false)
{
atom.subpatternId = subpatternId;
atom.parenthesesDisjunction = parenthesesInfo;
@@ -182,15 +189,17 @@ struct ByteTerm {
ByteTerm(Type type, bool invert = false)
: type(type)
- , invertOrCapture(invert)
+ , m_capture(false)
+ , m_invert(invert)
{
atom.quantityType = QuantifierFixedCount;
atom.quantityCount = 1;
}
- ByteTerm(Type type, unsigned subpatternId, bool invertOrCapture, int inputPos)
+ ByteTerm(Type type, unsigned subpatternId, bool capture, bool invert, int inputPos)
: type(type)
- , invertOrCapture(invertOrCapture)
+ , m_capture(capture)
+ , m_invert(invert)
{
atom.subpatternId = subpatternId;
atom.quantityType = QuantifierFixedCount;
@@ -228,7 +237,7 @@ struct ByteTerm {
static ByteTerm BackReference(unsigned subpatternId, int inputPos)
{
- return ByteTerm(TypeBackReference, subpatternId, false, inputPos);
+ return ByteTerm(TypeBackReference, subpatternId, false, false, inputPos);
}
static ByteTerm BodyAlternativeBegin(bool onceThrough)
@@ -297,12 +306,12 @@ struct ByteTerm {
bool invert()
{
- return invertOrCapture;
+ return m_invert;
}
bool capture()
{
- return invertOrCapture;
+ return m_capture;
}
};
@@ -364,7 +373,6 @@ private:
Vector<CharacterClass*> m_userCharacterClasses;
};
-PassOwnPtr<BytecodePattern> byteCompileRegex(const UString& pattern, unsigned& numSubpatterns, const char*& error, BumpPointerAllocator*, bool ignoreCase = false, bool multiline = false);
PassOwnPtr<BytecodePattern> byteCompileRegex(RegexPattern& pattern, BumpPointerAllocator*);
int interpretRegex(BytecodePattern* v_regex, const UChar* input, unsigned start, unsigned length, int* output);
diff --git a/JavaScriptCore/yarr/RegexJIT.cpp b/JavaScriptCore/yarr/RegexJIT.cpp
index acbd458..9e6756d 100644
--- a/JavaScriptCore/yarr/RegexJIT.cpp
+++ b/JavaScriptCore/yarr/RegexJIT.cpp
@@ -31,7 +31,6 @@
#include "LinkBuffer.h"
#include "MacroAssembler.h"
#include "RegexCompiler.h"
-#include "RegexInterpreter.h" // temporary, remove when fallback is removed.
#if ENABLE(YARR_JIT)
@@ -111,16 +110,16 @@ class RegexGenerator : private MacroAssembler {
int which = count >> 1;
char lo = ranges[which].begin;
char hi = ranges[which].end;
-
+
// check if there are any ranges or matches below lo. If not, just jl to failure -
// if there is anything else to check, check that first, if it falls through jmp to failure.
if ((*matchIndex < matchCount) && (matches[*matchIndex] < lo)) {
Jump loOrAbove = branch32(GreaterThanOrEqual, character, Imm32((unsigned short)lo));
-
+
// generate code for all ranges before this one
if (which)
matchCharacterClassRange(character, failures, matchDest, ranges, which, matchIndex, matches, matchCount);
-
+
while ((*matchIndex < matchCount) && (matches[*matchIndex] < lo)) {
matchDest.append(branch32(Equal, character, Imm32((unsigned short)matches[*matchIndex])));
++*matchIndex;
@@ -155,25 +154,25 @@ class RegexGenerator : private MacroAssembler {
{
if (charClass->m_table) {
ExtendedAddress tableEntry(character, reinterpret_cast<intptr_t>(charClass->m_table->m_table));
- matchDest.append(branchTest8(charClass->m_table->m_inverted ? Zero : NonZero, tableEntry));
+ matchDest.append(branchTest8(charClass->m_table->m_inverted ? Zero : NonZero, tableEntry));
return;
}
Jump unicodeFail;
if (charClass->m_matchesUnicode.size() || charClass->m_rangesUnicode.size()) {
Jump isAscii = branch32(LessThanOrEqual, character, Imm32(0x7f));
-
+
if (charClass->m_matchesUnicode.size()) {
for (unsigned i = 0; i < charClass->m_matchesUnicode.size(); ++i) {
UChar ch = charClass->m_matchesUnicode[i];
matchDest.append(branch32(Equal, character, Imm32(ch)));
}
}
-
+
if (charClass->m_rangesUnicode.size()) {
for (unsigned i = 0; i < charClass->m_rangesUnicode.size(); ++i) {
UChar lo = charClass->m_rangesUnicode[i].begin;
UChar hi = charClass->m_rangesUnicode[i].end;
-
+
Jump below = branch32(LessThan, character, Imm32(lo));
matchDest.append(branch32(LessThanOrEqual, character, Imm32(hi)));
below.link(this);
@@ -186,7 +185,7 @@ class RegexGenerator : private MacroAssembler {
if (charClass->m_ranges.size()) {
unsigned matchIndex = 0;
- JumpList failures;
+ JumpList failures;
matchCharacterClassRange(character, failures, matchDest, charClass->m_ranges.begin(), charClass->m_ranges.size(), &matchIndex, charClass->m_matches.begin(), charClass->m_matches.size());
while (matchIndex < charClass->m_matches.size())
matchDest.append(branch32(Equal, character, Imm32((unsigned short)charClass->m_matches[matchIndex++])));
@@ -288,6 +287,27 @@ class RegexGenerator : private MacroAssembler {
jump(Address(stackPointerRegister, frameLocation * sizeof(void*)));
}
+ struct IndirectJumpEntry {
+ IndirectJumpEntry(int32_t stackOffset)
+ : m_stackOffset(stackOffset)
+ {
+ }
+
+ IndirectJumpEntry(int32_t stackOffset, Jump jump)
+ : m_stackOffset(stackOffset)
+ {
+ addJump(jump);
+ }
+
+ void addJump(Jump jump)
+ {
+ m_relJumps.append(jump);
+ }
+
+ int32_t m_stackOffset;
+ JumpList m_relJumps;
+ };
+
struct AlternativeBacktrackRecord {
DataLabelPtr dataLabel;
Label backtrackLocation;
@@ -299,16 +319,469 @@ class RegexGenerator : private MacroAssembler {
}
};
+ struct ParenthesesTail;
+ struct TermGenerationState;
+
+ struct GenerationState {
+ typedef HashMap<int, IndirectJumpEntry*, WTF::IntHash<uint32_t>, UnsignedWithZeroKeyHashTraits<uint32_t> > IndirectJumpHashMap;
+
+ GenerationState()
+ : m_parenNestingLevel(0)
+ {
+ }
+
+ void addIndirectJumpEntry(int32_t stackOffset, Jump jump)
+ {
+ IndirectJumpHashMap::iterator result = m_indirectJumpMap.find(stackOffset);
+
+ ASSERT(stackOffset >= 0);
+
+ uint32_t offset = static_cast<uint32_t>(stackOffset);
+
+ if (result == m_indirectJumpMap.end())
+ m_indirectJumpMap.add(offset, new IndirectJumpEntry(stackOffset, jump));
+ else
+ result->second->addJump(jump);
+ }
+
+ void addIndirectJumpEntry(int32_t stackOffset, JumpList jumps)
+ {
+ JumpList::JumpVector jumpVector = jumps.jumps();
+ size_t size = jumpVector.size();
+ for (size_t i = 0; i < size; ++i)
+ addIndirectJumpEntry(stackOffset, jumpVector[i]);
+
+ jumps.empty();
+ }
+
+ void emitIndirectJumpTable(MacroAssembler* masm)
+ {
+ for (IndirectJumpHashMap::iterator iter = m_indirectJumpMap.begin(); iter != m_indirectJumpMap.end(); ++iter) {
+ IndirectJumpEntry* indJumpEntry = iter->second;
+ indJumpEntry->m_relJumps.link(masm);
+ masm->jump(Address(stackPointerRegister, indJumpEntry->m_stackOffset));
+ delete indJumpEntry;
+ }
+ }
+
+ void incrementParenNestingLevel()
+ {
+ ++m_parenNestingLevel;
+ }
+
+ void decrementParenNestingLevel()
+ {
+ --m_parenNestingLevel;
+ }
+
+ ParenthesesTail* addParenthesesTail(PatternTerm& term, ParenthesesTail* nextOuterParenTail)
+ {
+ ParenthesesTail* parenthesesTail = new ParenthesesTail(term, m_parenNestingLevel, nextOuterParenTail);
+ m_parenTails.append(parenthesesTail);
+ m_parenTailsForIteration.append(parenthesesTail);
+
+ return parenthesesTail;
+ }
+
+ void emitParenthesesTail(RegexGenerator* generator)
+ {
+ unsigned vectorSize = m_parenTails.size();
+ bool priorBacktrackFallThrough = false;
+
+ // Emit in reverse order so parentTail N can fall through to N-1
+ for (unsigned index = vectorSize; index > 0; --index) {
+ JumpList jumpsToNext;
+ priorBacktrackFallThrough = m_parenTails[index-1].get()->generateCode(generator, jumpsToNext, priorBacktrackFallThrough, index > 1);
+ if (index > 1)
+ jumpsToNext.linkTo(generator->label(), generator);
+ else
+ addJumpsToNextInteration(jumpsToNext);
+ }
+ m_parenTails.clear();
+ }
+
+ void addJumpToNextInteration(Jump jump)
+ {
+ m_jumpsToNextInteration.append(jump);
+ }
+
+ void addJumpsToNextInteration(JumpList jumps)
+ {
+ m_jumpsToNextInteration.append(jumps);
+ }
+
+ void addDataLabelToNextIteration(DataLabelPtr dataLabel)
+ {
+ m_dataPtrsToNextIteration.append(dataLabel);
+ }
+
+ void linkToNextIteration(Label label)
+ {
+ m_nextIteration = label;
+
+ for (unsigned i = 0; i < m_dataPtrsToNextIteration.size(); ++i)
+ m_backtrackRecords.append(AlternativeBacktrackRecord(m_dataPtrsToNextIteration[i], m_nextIteration));
+
+ m_dataPtrsToNextIteration.clear();
+
+ for (unsigned i = 0; i < m_parenTailsForIteration.size(); ++i)
+ m_parenTailsForIteration[i]->setNextIteration(m_nextIteration);
+
+ m_parenTailsForIteration.clear();
+ }
+
+ void linkToNextIteration(RegexGenerator* generator)
+ {
+ m_jumpsToNextInteration.linkTo(m_nextIteration, generator);
+ }
+
+ int m_parenNestingLevel;
+ Vector<AlternativeBacktrackRecord> m_backtrackRecords;
+ IndirectJumpHashMap m_indirectJumpMap;
+ Label m_nextIteration;
+ Vector<OwnPtr<ParenthesesTail> > m_parenTails;
+ JumpList m_jumpsToNextInteration;
+ Vector<DataLabelPtr> m_dataPtrsToNextIteration;
+ Vector<ParenthesesTail*> m_parenTailsForIteration;
+ };
+
+ struct BacktrackDestination {
+ typedef enum {
+ NoBacktrack,
+ BacktrackLabel,
+ BacktrackStackOffset,
+ BacktrackJumpList,
+ BacktrackLinked
+ } BacktrackType;
+
+ BacktrackDestination()
+ : m_backtrackType(NoBacktrack)
+ , m_backtrackToLabel(0)
+ , m_subDataLabelPtr(0)
+ , m_nextBacktrack(0)
+ , m_backtrackSourceLabel(0)
+ , m_backtrackSourceJumps(0)
+ {
+ }
+
+ BacktrackDestination(int32_t stackOffset)
+ : m_backtrackType(BacktrackStackOffset)
+ , m_backtrackStackOffset(stackOffset)
+ , m_backtrackToLabel(0)
+ , m_subDataLabelPtr(0)
+ , m_nextBacktrack(0)
+ , m_backtrackSourceLabel(0)
+ , m_backtrackSourceJumps(0)
+ {
+ }
+
+ BacktrackDestination(Label label)
+ : m_backtrackType(BacktrackLabel)
+ , m_backtrackLabel(label)
+ , m_backtrackToLabel(0)
+ , m_subDataLabelPtr(0)
+ , m_nextBacktrack(0)
+ , m_backtrackSourceLabel(0)
+ , m_backtrackSourceJumps(0)
+ {
+ }
+
+ void clear(bool doDataLabelClear = true)
+ {
+ m_backtrackType = NoBacktrack;
+ if (doDataLabelClear)
+ clearDataLabel();
+ m_nextBacktrack = 0;
+ }
+
+ void clearDataLabel()
+ {
+ m_dataLabelPtr = DataLabelPtr();
+ }
+
+ bool hasDestination()
+ {
+ return (m_backtrackType != NoBacktrack);
+ }
+
+ bool isStackOffset()
+ {
+ return (m_backtrackType == BacktrackStackOffset);
+ }
+
+ bool isLabel()
+ {
+ return (m_backtrackType == BacktrackLabel);
+ }
+
+ bool isJumpList()
+ {
+ return (m_backtrackType == BacktrackJumpList);
+ }
+
+ bool hasDataLabel()
+ {
+ return m_dataLabelPtr.isSet();
+ }
+
+ void copyTarget(BacktrackDestination& rhs, bool copyDataLabel = true)
+ {
+ m_backtrackType = rhs.m_backtrackType;
+ if (m_backtrackType == BacktrackStackOffset)
+ m_backtrackStackOffset = rhs.m_backtrackStackOffset;
+ else if (m_backtrackType == BacktrackLabel)
+ m_backtrackLabel = rhs.m_backtrackLabel;
+ if (copyDataLabel)
+ m_dataLabelPtr = rhs.m_dataLabelPtr;
+ m_backtrackSourceJumps = rhs.m_backtrackSourceJumps;
+ m_backtrackSourceLabel = rhs.m_backtrackSourceLabel;
+ }
+
+ void copyTo(BacktrackDestination& lhs)
+ {
+ lhs.m_backtrackType = m_backtrackType;
+ if (m_backtrackType == BacktrackStackOffset)
+ lhs.m_backtrackStackOffset = m_backtrackStackOffset;
+ else if (m_backtrackType == BacktrackLabel)
+ lhs.m_backtrackLabel = m_backtrackLabel;
+ lhs.m_backtrackSourceJumps = m_backtrackSourceJumps;
+ lhs.m_backtrackSourceLabel = m_backtrackSourceLabel;
+ lhs.m_dataLabelPtr = m_dataLabelPtr;
+ lhs.m_backTrackJumps = m_backTrackJumps;
+ }
+
+ void addBacktrackJump(Jump jump)
+ {
+ m_backTrackJumps.append(jump);
+ }
+
+ void setStackOffset(int32_t stackOffset)
+ {
+ m_backtrackType = BacktrackStackOffset;
+ m_backtrackStackOffset = stackOffset;
+ }
+
+ void setLabel(Label label)
+ {
+ m_backtrackType = BacktrackLabel;
+ m_backtrackLabel = label;
+ }
+
+ void setNextBacktrackLabel(Label label)
+ {
+ if (m_nextBacktrack)
+ m_nextBacktrack->setLabel(label);
+ }
+
+ void copyBacktrackToLabel(BacktrackDestination& rhs)
+ {
+ if (rhs.m_backtrackToLabel)
+ m_backtrackToLabel = rhs.m_backtrackToLabel;
+ }
+
+ void setBacktrackToLabel(Label* backtrackToLabel)
+ {
+ if (!m_backtrackToLabel)
+ m_backtrackToLabel = backtrackToLabel;
+ }
+
+ void setBacktrackJumpList(JumpList* jumpList)
+ {
+ m_backtrackType = BacktrackJumpList;
+ m_backtrackSourceJumps = jumpList;
+ }
+
+ void setBacktrackSourceLabel(Label* backtrackSourceLabel)
+ {
+ m_backtrackSourceLabel = backtrackSourceLabel;
+ }
+
+ void setDataLabel(DataLabelPtr dp)
+ {
+ if (m_subDataLabelPtr) {
+ *m_subDataLabelPtr = dp;
+ m_subDataLabelPtr = 0;
+ } else
+ m_dataLabelPtr = dp;
+ }
+
+ void setSubDataLabelPtr(DataLabelPtr* subDataLabelPtr)
+ {
+ m_subDataLabelPtr = subDataLabelPtr;
+ }
+
+ void linkToNextBacktrack(BacktrackDestination* nextBacktrack)
+ {
+ m_nextBacktrack = nextBacktrack;
+ }
+
+ int32_t getStackOffset()
+ {
+ ASSERT(m_backtrackType == BacktrackStackOffset);
+ return m_backtrackStackOffset;
+ }
+
+ Label getLabel()
+ {
+ ASSERT(m_backtrackType == BacktrackLabel);
+ return m_backtrackLabel;
+ }
+
+ JumpList& getBacktrackJumps()
+ {
+ return m_backTrackJumps;
+ }
+
+ DataLabelPtr& getDataLabel()
+ {
+ return m_dataLabelPtr;
+ }
+
+ void jumpToBacktrack(MacroAssembler* masm)
+ {
+ if (isJumpList()) {
+ if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet()))
+ masm->jump().linkTo(*m_backtrackSourceLabel, masm);
+ else
+ m_backtrackSourceJumps->append(masm->jump());
+ } else if (isStackOffset())
+ masm->jump(Address(stackPointerRegister, m_backtrackStackOffset));
+ else if (isLabel())
+ masm->jump().linkTo(m_backtrackLabel, masm);
+ else
+ m_backTrackJumps.append(masm->jump());
+ }
+
+ void jumpToBacktrack(RegexGenerator* generator, Jump jump)
+ {
+ if (isJumpList()) {
+ if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet()))
+ jump.linkTo(*m_backtrackSourceLabel, generator);
+ else
+ m_backtrackSourceJumps->append(jump);
+ } else if (isStackOffset())
+ generator->m_expressionState.addIndirectJumpEntry(getStackOffset(), jump);
+ else if (isLabel())
+ jump.linkTo(getLabel(), generator);
+ else
+ m_backTrackJumps.append(jump);
+ }
+
+ void jumpToBacktrack(RegexGenerator* generator, JumpList& jumps)
+ {
+ if (isJumpList()) {
+ if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet()))
+ jumps.linkTo(*m_backtrackSourceLabel, generator);
+ else
+ m_backtrackSourceJumps->append(jumps);
+ } else if (isStackOffset())
+ generator->m_expressionState.addIndirectJumpEntry(getStackOffset(), jumps);
+ else if (isLabel())
+ jumps.linkTo(getLabel(), generator);
+ else
+ m_backTrackJumps.append(jumps);
+ }
+
+ bool linkDataLabelToHereIfExists(RegexGenerator* generator)
+ {
+ if (hasDataLabel()) {
+ generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), generator->label()));
+ clearDataLabel();
+ return true;
+ }
+
+ return false;
+ }
+
+ bool plantJumpToBacktrackIfExists(RegexGenerator* generator)
+ {
+ if (isJumpList()) {
+ if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet()))
+ generator->jump(*m_backtrackSourceLabel);
+ else
+ m_backtrackSourceJumps->append(generator->jump());
+
+ return true;
+ }
+
+ if (isStackOffset()) {
+ generator->jump(Address(stackPointerRegister, getStackOffset()));
+ return true;
+ }
+
+ if (isLabel()) {
+ generator->jump(getLabel());
+ if (hasDataLabel()) {
+ generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), getLabel()));
+ clearDataLabel();
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ void linkAlternativeBacktracks(RegexGenerator* generator, bool nextIteration = false)
+ {
+ Label hereLabel = generator->label();
+
+ if (m_backtrackToLabel) {
+ *m_backtrackToLabel = hereLabel;
+ m_backtrackToLabel = 0;
+ }
+
+ m_backTrackJumps.link(generator);
+
+ if (nextIteration)
+ generator->m_expressionState.linkToNextIteration(hereLabel);
+
+ if (hasDataLabel()) {
+ generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), hereLabel));
+ // data label cleared as a result of the clear() below
+ }
+
+ clear();
+ }
+
+ void linkAlternativeBacktracksTo(RegexGenerator* generator, Label label, bool nextIteration = false)
+ {
+ m_backTrackJumps.linkTo(label, generator);
+
+ if (nextIteration)
+ generator->m_expressionState.linkToNextIteration(label);
+
+ if (hasDataLabel()) {
+ generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), label));
+ clearDataLabel();
+ }
+ }
+
+ private:
+ BacktrackType m_backtrackType;
+ int32_t m_backtrackStackOffset;
+ Label m_backtrackLabel;
+ DataLabelPtr m_dataLabelPtr;
+ Label* m_backtrackToLabel;
+ DataLabelPtr* m_subDataLabelPtr;
+ BacktrackDestination* m_nextBacktrack;
+ Label* m_backtrackSourceLabel;
+ JumpList* m_backtrackSourceJumps;
+ JumpList m_backTrackJumps;
+ };
+
struct TermGenerationState {
TermGenerationState(PatternDisjunction* disjunction, unsigned checkedTotal)
: disjunction(disjunction)
, checkedTotal(checkedTotal)
+ , m_subParenNum(0)
+ , m_linkedBacktrack(0)
+ , m_parenthesesTail(0)
{
}
void resetAlternative()
{
- isBackTrackGenerated = false;
+ m_backtrack.clear();
alt = 0;
}
bool alternativeValid()
@@ -323,11 +796,16 @@ class RegexGenerator : private MacroAssembler {
{
return disjunction->m_alternatives[alt];
}
+ bool isLastAlternative()
+ {
+ return (alt + 1) == disjunction->m_alternatives.size();
+ }
void resetTerm()
{
ASSERT(alternativeValid());
t = 0;
+ m_subParenNum = 0;
}
bool termValid()
{
@@ -349,11 +827,25 @@ class RegexGenerator : private MacroAssembler {
ASSERT(alternativeValid());
return (t + 1) == alternative()->m_terms.size();
}
+ unsigned getSubParenNum()
+ {
+ return m_subParenNum++;
+ }
bool isMainDisjunction()
{
return !disjunction->m_parent;
}
+ void setParenthesesTail(ParenthesesTail* parenthesesTail)
+ {
+ m_parenthesesTail = parenthesesTail;
+ }
+
+ ParenthesesTail* getParenthesesTail()
+ {
+ return m_parenthesesTail;
+ }
+
PatternTerm& lookaheadTerm()
{
ASSERT(alternativeValid());
@@ -374,52 +866,106 @@ class RegexGenerator : private MacroAssembler {
return term().inputPosition - checkedTotal;
}
- void jumpToBacktrack(Jump jump, MacroAssembler* masm)
+ void clearBacktrack()
{
- if (isBackTrackGenerated)
- jump.linkTo(backtrackLabel, masm);
- else
- backTrackJumps.append(jump);
+ m_backtrack.clear(false);
+ m_linkedBacktrack = 0;
}
- void jumpToBacktrack(JumpList& jumps, MacroAssembler* masm)
+
+ void jumpToBacktrack(MacroAssembler* masm)
{
- if (isBackTrackGenerated)
- jumps.linkTo(backtrackLabel, masm);
- else
- backTrackJumps.append(jumps);
+ m_backtrack.jumpToBacktrack(masm);
+ }
+
+ void jumpToBacktrack(RegexGenerator* generator, Jump jump)
+ {
+ m_backtrack.jumpToBacktrack(generator, jump);
+ }
+
+ void jumpToBacktrack(RegexGenerator* generator, JumpList& jumps)
+ {
+ m_backtrack.jumpToBacktrack(generator, jumps);
+ }
+
+ bool plantJumpToBacktrackIfExists(RegexGenerator* generator)
+ {
+ return m_backtrack.plantJumpToBacktrackIfExists(generator);
}
- bool plantJumpToBacktrackIfExists(MacroAssembler* masm)
+
+ bool linkDataLabelToBacktrackIfExists(RegexGenerator* generator)
{
- if (isBackTrackGenerated) {
- masm->jump(backtrackLabel);
+ if ((m_backtrack.isLabel()) && (m_backtrack.hasDataLabel())) {
+ generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(m_backtrack.getDataLabel(), m_backtrack.getLabel()));
+ m_backtrack.clearDataLabel();
return true;
}
+
return false;
}
+
void addBacktrackJump(Jump jump)
{
- backTrackJumps.append(jump);
+ m_backtrack.addBacktrackJump(jump);
}
- void setBacktrackGenerated(Label label)
+
+ void setBacktrackDataLabel(DataLabelPtr dp)
{
- isBackTrackGenerated = true;
- backtrackLabel = label;
+ m_backtrack.setDataLabel(dp);
}
- void linkAlternativeBacktracks(MacroAssembler* masm)
+
+ void setBackTrackStackOffset(int32_t stackOffset)
+ {
+ m_backtrack.setStackOffset(stackOffset);
+ }
+
+ void setBacktrackLabel(Label label)
+ {
+ m_backtrack.setLabel(label);
+ }
+
+ void linkAlternativeBacktracks(RegexGenerator* generator, bool nextIteration = false)
+ {
+ m_backtrack.linkAlternativeBacktracks(generator, nextIteration);
+ m_linkedBacktrack = 0;
+ }
+
+ void linkAlternativeBacktracksTo(RegexGenerator* generator, Label label, bool nextIteration = false)
+ {
+ m_backtrack.linkAlternativeBacktracksTo(generator, label, nextIteration);
+ }
+
+ void setBacktrackLink(BacktrackDestination* linkedBacktrack)
+ {
+ m_linkedBacktrack = linkedBacktrack;
+ }
+
+ void chainBacktracks(BacktrackDestination* followonBacktrack)
+ {
+ if (m_linkedBacktrack)
+ m_linkedBacktrack->linkToNextBacktrack(followonBacktrack);
+ }
+
+ void chainBacktrackJumps(JumpList* jumpList)
{
- isBackTrackGenerated = false;
- backTrackJumps.link(masm);
+ if (m_linkedBacktrack && !(m_linkedBacktrack->hasDestination()))
+ m_linkedBacktrack->setBacktrackJumpList(jumpList);
}
- void linkAlternativeBacktracksTo(Label label, MacroAssembler* masm)
+
+ BacktrackDestination& getBacktrackDestination()
{
- isBackTrackGenerated = false;
- backTrackJumps.linkTo(label, masm);
+ return m_backtrack;
}
- void propagateBacktrackingFrom(TermGenerationState& nestedParenthesesState, MacroAssembler* masm)
+
+ void propagateBacktrackingFrom(RegexGenerator* generator, BacktrackDestination& backtrack, bool doJump = true)
{
- jumpToBacktrack(nestedParenthesesState.backTrackJumps, masm);
- if (nestedParenthesesState.isBackTrackGenerated)
- setBacktrackGenerated(nestedParenthesesState.backtrackLabel);
+ if (doJump)
+ m_backtrack.jumpToBacktrack(generator, backtrack.getBacktrackJumps());
+ if (backtrack.hasDestination()) {
+ if (m_backtrack.hasDataLabel())
+ generator->m_expressionState.addDataLabelToNextIteration(m_backtrack.getDataLabel());
+
+ m_backtrack.copyTarget(backtrack, doJump);
+ }
}
PatternDisjunction* disjunction;
@@ -427,9 +973,154 @@ class RegexGenerator : private MacroAssembler {
private:
unsigned alt;
unsigned t;
- JumpList backTrackJumps;
- Label backtrackLabel;
- bool isBackTrackGenerated;
+ unsigned m_subParenNum;
+ BacktrackDestination m_backtrack;
+ BacktrackDestination* m_linkedBacktrack;
+ ParenthesesTail* m_parenthesesTail;
+
+ };
+
+ struct ParenthesesTail {
+ ParenthesesTail(PatternTerm& term, int nestingLevel, ParenthesesTail* nextOuterParenTail)
+ : m_term(term)
+ , m_nestingLevel(nestingLevel)
+ , m_subParenIndex(0)
+ , m_nextOuterParenTail(nextOuterParenTail)
+ {
+ }
+
+ void processBacktracks(RegexGenerator* generator, TermGenerationState& state, TermGenerationState& parenthesesState, Label nonGreedyTryParentheses, Label fallThrough)
+ {
+ m_nonGreedyTryParentheses = nonGreedyTryParentheses;
+ m_fallThrough = fallThrough;
+
+ m_subParenIndex = state.getSubParenNum();
+ parenthesesState.getBacktrackDestination().copyTo(m_parenBacktrack);
+ state.chainBacktracks(&m_backtrack);
+ BacktrackDestination& stateBacktrack = state.getBacktrackDestination();
+ stateBacktrack.copyTo(m_backtrack);
+ stateBacktrack.setBacktrackToLabel(&m_backtrackToLabel);
+ state.setBacktrackLink(&m_backtrack);
+ stateBacktrack.setSubDataLabelPtr(&m_dataAfterLabelPtr);
+
+ m_doDirectBacktrack = m_parenBacktrack.hasDestination();
+
+ if ((m_term.quantityType == QuantifierGreedy) || (m_term.quantityType == QuantifierNonGreedy))
+ m_doDirectBacktrack = false;
+
+ if (m_doDirectBacktrack)
+ state.propagateBacktrackingFrom(generator, m_parenBacktrack, false);
+ else {
+ stateBacktrack.setBacktrackJumpList(&m_pattBacktrackJumps);
+ stateBacktrack.setBacktrackSourceLabel(&m_backtrackFromAfterParens);
+ }
+
+ parenthesesState.chainBacktrackJumps(&m_pattBacktrackJumps);
+ }
+
+ void setNextIteration(Label nextIteration)
+ {
+ if (!m_nestingLevel && !m_backtrackToLabel.isSet())
+ m_backtrackToLabel = nextIteration;
+ }
+
+ void addAfterParenJump(Jump jump)
+ {
+ m_pattBacktrackJumps.append(jump);
+ }
+
+ bool generateCode(RegexGenerator* generator, JumpList& jumpsToNext, bool priorBackTrackFallThrough, bool nextBacktrackFallThrough)
+ {
+ const RegisterID indexTemporary = regT0;
+ unsigned parenthesesFrameLocation = m_term.frameLocation;
+ Jump fromPriorBacktrack;
+ bool needJumpForPriorParenTail = false;
+
+ if (priorBackTrackFallThrough
+ && ((m_term.quantityType == QuantifierGreedy)
+ || (m_term.quantityType == QuantifierNonGreedy)
+ || (!m_doDirectBacktrack && m_parenBacktrack.hasDestination()))) {
+ // If the prior paren tail code assumed that it could fall through,
+ // but we need to generate after paren backtrack code, then provide
+ // a jump around that code for the prior paren tail code.
+ // A regular expressing like ((xxx)...)? needs this.
+ fromPriorBacktrack = generator->jump();
+ needJumpForPriorParenTail = true;
+ }
+
+ if (!m_backtrack.hasDestination()) {
+ if (m_backtrackToLabel.isSet()) {
+ m_backtrack.setLabel(m_backtrackToLabel);
+ nextBacktrackFallThrough = false;
+ } else if (!m_subParenIndex && m_nextOuterParenTail) {
+ // If we don't have a destination and we are the first term of a nested paren, go
+ // back to the outer paren.
+ // There is an optimization if the next outer paren is the next paren to be emitted.
+ // In that case we really want the else clause.
+ m_backtrack.setBacktrackJumpList(&m_nextOuterParenTail->m_withinBacktrackJumps);
+ nextBacktrackFallThrough = false;
+ } else
+ m_backtrack.setBacktrackJumpList(&jumpsToNext);
+ } else
+ nextBacktrackFallThrough = false;
+
+ // A failure AFTER the parens jumps here - Backtrack to this paren
+ m_backtrackFromAfterParens = generator->label();
+
+ if (m_dataAfterLabelPtr.isSet())
+ generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(m_dataAfterLabelPtr, m_backtrackFromAfterParens));
+
+ m_pattBacktrackJumps.link(generator);
+
+ if (m_term.quantityType == QuantifierGreedy) {
+ // If this is -1 we have now tested with both with and without the parens.
+ generator->loadFromFrame(parenthesesFrameLocation, indexTemporary);
+ m_backtrack.jumpToBacktrack(generator, generator->branch32(Equal, indexTemporary, Imm32(-1)));
+ } else if (m_term.quantityType == QuantifierNonGreedy) {
+ // If this is -1 we have now tested with both with and without the parens.
+ generator->loadFromFrame(parenthesesFrameLocation, indexTemporary);
+ generator->branch32(Equal, indexTemporary, Imm32(-1)).linkTo(m_nonGreedyTryParentheses, generator);
+ }
+
+ if (!m_doDirectBacktrack)
+ m_parenBacktrack.plantJumpToBacktrackIfExists(generator);
+
+ // A failure WITHIN the parens jumps here
+ if (needJumpForPriorParenTail)
+ fromPriorBacktrack.link(generator);
+ m_parenBacktrack.linkAlternativeBacktracks(generator);
+ m_withinBacktrackJumps.link(generator);
+
+ if (m_term.capture())
+ generator->store32(Imm32(-1), Address(output, (m_term.parentheses.subpatternId << 1) * sizeof(int)));
+
+ if (m_term.quantityType == QuantifierGreedy) {
+ generator->storeToFrame(Imm32(-1), parenthesesFrameLocation);
+ generator->jump().linkTo(m_fallThrough, generator);
+ nextBacktrackFallThrough = false;
+ } else if (!nextBacktrackFallThrough)
+ m_backtrack.jumpToBacktrack(generator);
+
+ if (!m_doDirectBacktrack)
+ m_backtrack.setNextBacktrackLabel(m_backtrackFromAfterParens);
+
+ return nextBacktrackFallThrough;
+ }
+
+ PatternTerm& m_term;
+ int m_nestingLevel;
+ unsigned m_subParenIndex;
+ ParenthesesTail* m_nextOuterParenTail;
+ Label m_nonGreedyTryParentheses;
+ Label m_fallThrough;
+ Label m_backtrackToLabel;
+ Label m_backtrackFromAfterParens;
+ DataLabelPtr m_dataAfterLabelPtr;
+ JumpList m_pattBacktrackJumps;
+ JumpList m_withinBacktrackJumps;
+ BacktrackDestination m_parenBacktrack;
+ BacktrackDestination m_backtrack;
+ bool m_doDirectBacktrack;
};
void generateAssertionBOL(TermGenerationState& state)
@@ -445,15 +1136,15 @@ class RegexGenerator : private MacroAssembler {
readCharacter(state.inputOffset() - 1, character);
matchCharacterClass(character, matchDest, m_pattern.newlineCharacterClass());
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
matchDest.link(this);
} else {
// Erk, really should poison out these alternatives early. :-/
if (term.inputPosition)
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
else
- state.jumpToBacktrack(branch32(NotEqual, index, Imm32(state.checkedTotal)), this);
+ state.jumpToBacktrack(this, branch32(NotEqual, index, Imm32(state.checkedTotal)));
}
}
@@ -470,15 +1161,15 @@ class RegexGenerator : private MacroAssembler {
readCharacter(state.inputOffset(), character);
matchCharacterClass(character, matchDest, m_pattern.newlineCharacterClass());
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
matchDest.link(this);
} else {
if (term.inputPosition == state.checkedTotal)
- state.jumpToBacktrack(notAtEndOfInput(), this);
+ state.jumpToBacktrack(this, notAtEndOfInput());
// Erk, really should poison out these alternatives early. :-/
else
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
}
}
@@ -512,20 +1203,20 @@ class RegexGenerator : private MacroAssembler {
// We fall through to here if the last character was not a wordchar.
JumpList nonWordCharThenWordChar;
JumpList nonWordCharThenNonWordChar;
- if (term.invertOrCapture) {
+ if (term.invert()) {
matchAssertionWordchar(state, nonWordCharThenNonWordChar, nonWordCharThenWordChar);
nonWordCharThenWordChar.append(jump());
} else {
matchAssertionWordchar(state, nonWordCharThenWordChar, nonWordCharThenNonWordChar);
nonWordCharThenNonWordChar.append(jump());
}
- state.jumpToBacktrack(nonWordCharThenNonWordChar, this);
+ state.jumpToBacktrack(this, nonWordCharThenNonWordChar);
// We jump here if the last character was a wordchar.
matchDest.link(this);
JumpList wordCharThenWordChar;
JumpList wordCharThenNonWordChar;
- if (term.invertOrCapture) {
+ if (term.invert()) {
matchAssertionWordchar(state, wordCharThenNonWordChar, wordCharThenWordChar);
wordCharThenWordChar.append(jump());
} else {
@@ -533,8 +1224,8 @@ class RegexGenerator : private MacroAssembler {
// This can fall-though!
}
- state.jumpToBacktrack(wordCharThenWordChar, this);
-
+ state.jumpToBacktrack(this, wordCharThenWordChar);
+
nonWordCharThenWordChar.link(this);
wordCharThenNonWordChar.link(this);
}
@@ -547,10 +1238,10 @@ class RegexGenerator : private MacroAssembler {
if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) {
readCharacter(state.inputOffset(), character);
or32(Imm32(32), character);
- state.jumpToBacktrack(branch32(NotEqual, character, Imm32(Unicode::toLower(ch))), this);
+ state.jumpToBacktrack(this, branch32(NotEqual, character, Imm32(Unicode::toLower(ch))));
} else {
ASSERT(!m_pattern.m_ignoreCase || (Unicode::toLower(ch) == Unicode::toUpper(ch)));
- state.jumpToBacktrack(jumpIfCharNotEquals(ch, state.inputOffset()), this);
+ state.jumpToBacktrack(this, jumpIfCharNotEquals(ch, state.inputOffset()));
}
}
@@ -562,7 +1253,7 @@ class RegexGenerator : private MacroAssembler {
int mask = 0;
int chPair = ch1 | (ch2 << 16);
-
+
if (m_pattern.m_ignoreCase) {
if (isASCIIAlpha(ch1))
mask |= 32;
@@ -573,9 +1264,9 @@ class RegexGenerator : private MacroAssembler {
if (mask) {
load32WithUnalignedHalfWords(BaseIndex(input, index, TimesTwo, state.inputOffset() * sizeof(UChar)), character);
or32(Imm32(mask), character);
- state.jumpToBacktrack(branch32(NotEqual, character, Imm32(chPair | mask)), this);
+ state.jumpToBacktrack(this, branch32(NotEqual, character, Imm32(chPair | mask)));
} else
- state.jumpToBacktrack(branch32WithUnalignedHalfWords(NotEqual, BaseIndex(input, index, TimesTwo, state.inputOffset() * sizeof(UChar)), Imm32(chPair)), this);
+ state.jumpToBacktrack(this, branch32WithUnalignedHalfWords(NotEqual, BaseIndex(input, index, TimesTwo, state.inputOffset() * sizeof(UChar)), Imm32(chPair)));
}
void generatePatternCharacterFixed(TermGenerationState& state)
@@ -592,10 +1283,10 @@ class RegexGenerator : private MacroAssembler {
if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) {
load16(BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), character);
or32(Imm32(32), character);
- state.jumpToBacktrack(branch32(NotEqual, character, Imm32(Unicode::toLower(ch))), this);
+ state.jumpToBacktrack(this, branch32(NotEqual, character, Imm32(Unicode::toLower(ch))));
} else {
ASSERT(!m_pattern.m_ignoreCase || (Unicode::toLower(ch) == Unicode::toUpper(ch)));
- state.jumpToBacktrack(branch16(NotEqual, BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), Imm32(ch)), this);
+ state.jumpToBacktrack(this, branch16(NotEqual, BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), Imm32(ch)));
}
add32(Imm32(1), countRegister);
branch32(NotEqual, countRegister, index).linkTo(loop, this);
@@ -607,7 +1298,7 @@ class RegexGenerator : private MacroAssembler {
const RegisterID countRegister = regT1;
PatternTerm& term = state.term();
UChar ch = term.patternCharacter;
-
+
move(Imm32(0), countRegister);
JumpList failures;
@@ -624,7 +1315,7 @@ class RegexGenerator : private MacroAssembler {
add32(Imm32(1), countRegister);
add32(Imm32(1), index);
- if (term.quantityCount != 0xffffffff) {
+ if (term.quantityCount != quantifyInfinite) {
branch32(NotEqual, countRegister, Imm32(term.quantityCount)).linkTo(loop, this);
failures.append(jump());
} else
@@ -632,7 +1323,7 @@ class RegexGenerator : private MacroAssembler {
Label backtrackBegin(this);
loadFromFrame(term.frameLocation, countRegister);
- state.jumpToBacktrack(branchTest32(Zero, countRegister), this);
+ state.jumpToBacktrack(this, branchTest32(Zero, countRegister));
sub32(Imm32(1), countRegister);
sub32(Imm32(1), index);
@@ -640,7 +1331,7 @@ class RegexGenerator : private MacroAssembler {
storeToFrame(countRegister, term.frameLocation);
- state.setBacktrackGenerated(backtrackBegin);
+ state.setBacktrackLabel(backtrackBegin);
}
void generatePatternCharacterNonGreedy(TermGenerationState& state)
@@ -649,20 +1340,20 @@ class RegexGenerator : private MacroAssembler {
const RegisterID countRegister = regT1;
PatternTerm& term = state.term();
UChar ch = term.patternCharacter;
-
+
move(Imm32(0), countRegister);
Jump firstTimeDoNothing = jump();
Label hardFail(this);
sub32(countRegister, index);
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
Label backtrackBegin(this);
loadFromFrame(term.frameLocation, countRegister);
atEndOfInput().linkTo(hardFail, this);
- if (term.quantityCount != 0xffffffff)
+ if (term.quantityCount != quantifyInfinite)
branch32(Equal, countRegister, Imm32(term.quantityCount), hardFail);
if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) {
readCharacter(state.inputOffset(), character);
@@ -679,7 +1370,7 @@ class RegexGenerator : private MacroAssembler {
firstTimeDoNothing.link(this);
storeToFrame(countRegister, term.frameLocation);
- state.setBacktrackGenerated(backtrackBegin);
+ state.setBacktrackLabel(backtrackBegin);
}
void generateCharacterClassSingle(TermGenerationState& state)
@@ -691,10 +1382,10 @@ class RegexGenerator : private MacroAssembler {
readCharacter(state.inputOffset(), character);
matchCharacterClass(character, matchDest, term.characterClass);
- if (term.invertOrCapture)
- state.jumpToBacktrack(matchDest, this);
+ if (term.invert())
+ state.jumpToBacktrack(this, matchDest);
else {
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
matchDest.link(this);
}
}
@@ -713,10 +1404,10 @@ class RegexGenerator : private MacroAssembler {
load16(BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), character);
matchCharacterClass(character, matchDest, term.characterClass);
- if (term.invertOrCapture)
- state.jumpToBacktrack(matchDest, this);
+ if (term.invert())
+ state.jumpToBacktrack(this, matchDest);
else {
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
matchDest.link(this);
}
@@ -729,14 +1420,14 @@ class RegexGenerator : private MacroAssembler {
const RegisterID character = regT0;
const RegisterID countRegister = regT1;
PatternTerm& term = state.term();
-
+
move(Imm32(0), countRegister);
JumpList failures;
Label loop(this);
failures.append(atEndOfInput());
- if (term.invertOrCapture) {
+ if (term.invert()) {
readCharacter(state.inputOffset(), character);
matchCharacterClass(character, failures, term.characterClass);
} else {
@@ -749,7 +1440,7 @@ class RegexGenerator : private MacroAssembler {
add32(Imm32(1), countRegister);
add32(Imm32(1), index);
- if (term.quantityCount != 0xffffffff) {
+ if (term.quantityCount != quantifyInfinite) {
branch32(NotEqual, countRegister, Imm32(term.quantityCount)).linkTo(loop, this);
failures.append(jump());
} else
@@ -757,7 +1448,7 @@ class RegexGenerator : private MacroAssembler {
Label backtrackBegin(this);
loadFromFrame(term.frameLocation, countRegister);
- state.jumpToBacktrack(branchTest32(Zero, countRegister), this);
+ state.jumpToBacktrack(this, branchTest32(Zero, countRegister));
sub32(Imm32(1), countRegister);
sub32(Imm32(1), index);
@@ -765,7 +1456,7 @@ class RegexGenerator : private MacroAssembler {
storeToFrame(countRegister, term.frameLocation);
- state.setBacktrackGenerated(backtrackBegin);
+ state.setBacktrackLabel(backtrackBegin);
}
void generateCharacterClassNonGreedy(TermGenerationState& state)
@@ -773,14 +1464,14 @@ class RegexGenerator : private MacroAssembler {
const RegisterID character = regT0;
const RegisterID countRegister = regT1;
PatternTerm& term = state.term();
-
+
move(Imm32(0), countRegister);
Jump firstTimeDoNothing = jump();
Label hardFail(this);
sub32(countRegister, index);
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
Label backtrackBegin(this);
loadFromFrame(term.frameLocation, countRegister);
@@ -792,7 +1483,7 @@ class RegexGenerator : private MacroAssembler {
readCharacter(state.inputOffset(), character);
matchCharacterClass(character, matchDest, term.characterClass);
- if (term.invertOrCapture)
+ if (term.invert())
matchDest.linkTo(hardFail, this);
else {
jump(hardFail);
@@ -805,14 +1496,14 @@ class RegexGenerator : private MacroAssembler {
firstTimeDoNothing.link(this);
storeToFrame(countRegister, term.frameLocation);
- state.setBacktrackGenerated(backtrackBegin);
+ state.setBacktrackLabel(backtrackBegin);
}
void generateParenthesesDisjunction(PatternTerm& parenthesesTerm, TermGenerationState& state, unsigned alternativeFrameLocation)
{
ASSERT((parenthesesTerm.type == PatternTerm::TypeParenthesesSubpattern) || (parenthesesTerm.type == PatternTerm::TypeParentheticalAssertion));
ASSERT(parenthesesTerm.quantityCount == 1);
-
+
PatternDisjunction* disjunction = parenthesesTerm.parentheses.disjunction;
unsigned preCheckedCount = ((parenthesesTerm.quantityType == QuantifierFixedCount) && (parenthesesTerm.type != PatternTerm::TypeParentheticalAssertion)) ? disjunction->m_minimumSize : 0;
@@ -834,12 +1525,12 @@ class RegexGenerator : private MacroAssembler {
Label backtrackBegin(this);
sub32(Imm32(countToCheck), index);
state.addBacktrackJump(jump());
-
+
skip.link(this);
- state.setBacktrackGenerated(backtrackBegin);
+ state.setBacktrackLabel(backtrackBegin);
- state.jumpToBacktrack(jumpIfNoAvailableInput(countToCheck), this);
+ state.jumpToBacktrack(this, jumpIfNoAvailableInput(countToCheck));
state.checkedTotal += countToCheck;
}
@@ -849,6 +1540,7 @@ class RegexGenerator : private MacroAssembler {
state.checkedTotal -= countToCheck;
} else {
JumpList successes;
+ bool propogateBacktrack = false;
for (state.resetAlternative(); state.alternativeValid(); state.nextAlternative()) {
@@ -867,37 +1559,35 @@ class RegexGenerator : private MacroAssembler {
// Matched an alternative.
DataLabelPtr dataLabel = storeToFrameWithPatch(alternativeFrameLocation);
- successes.append(jump());
+
+ if (!state.isLastAlternative() || countToCheck)
+ successes.append(jump());
// Alternative did not match.
- Label backtrackLocation(this);
-
- // Can we backtrack the alternative? - if so, do so. If not, just fall through to the next one.
- state.plantJumpToBacktrackIfExists(this);
-
- state.linkAlternativeBacktracks(this);
+
+ state.setBacktrackDataLabel(dataLabel);
+
+ // Do we have a backtrack destination?
+ // if so, link the data label to it.
+ state.linkDataLabelToBacktrackIfExists(this);
+
+ if (!state.isLastAlternative() || countToCheck)
+ state.linkAlternativeBacktracks(this);
if (countToCheck) {
sub32(Imm32(countToCheck), index);
state.checkedTotal -= countToCheck;
- }
-
- m_backtrackRecords.append(AlternativeBacktrackRecord(dataLabel, backtrackLocation));
+ } else if (state.isLastAlternative())
+ propogateBacktrack = true;
}
// We fall through to here when the last alternative fails.
// Add a backtrack out of here for the parenthese handling code to link up.
- state.addBacktrackJump(jump());
+ if (!propogateBacktrack)
+ state.addBacktrackJump(jump());
- // Generate a trampoline for the parens code to backtrack to, to retry the
+ // Save address on stack for the parens code to backtrack to, to retry the
// next alternative.
- state.setBacktrackGenerated(label());
- loadFromFrameAndJump(alternativeFrameLocation);
-
- // FIXME: both of the above hooks are a little inefficient, in that you
- // may end up trampolining here, just to trampoline back out to the
- // parentheses code, or vice versa. We can probably eliminate a jump
- // by restructuring, but coding this way for now for simplicity during
- // development.
+ state.setBackTrackStackOffset(alternativeFrameLocation * sizeof(void*));
successes.link(this);
}
@@ -918,13 +1608,19 @@ class RegexGenerator : private MacroAssembler {
alternativeFrameLocation += RegexStackSpaceForBackTrackInfoParenthesesOnce;
// optimized case - no capture & no quantifier can be handled in a light-weight manner.
- if (!term.invertOrCapture && (term.quantityType == QuantifierFixedCount)) {
+ if (!term.capture() && (term.quantityType == QuantifierFixedCount)) {
+ m_expressionState.incrementParenNestingLevel();
+
TermGenerationState parenthesesState(disjunction, state.checkedTotal);
generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation);
// this expects that any backtracks back out of the parentheses will be in the
- // parenthesesState's backTrackJumps vector, and that if they need backtracking
- // they will have set an entry point on the parenthesesState's backtrackLabel.
- state.propagateBacktrackingFrom(parenthesesState, this);
+ // parenthesesState's m_backTrackJumps vector, and that if they need backtracking
+ // they will have set an entry point on the parenthesesState's m_backtrackLabel.
+ BacktrackDestination& parenthesesBacktrack = parenthesesState.getBacktrackDestination();
+ state.propagateBacktrackingFrom(this, parenthesesBacktrack);
+ state.getBacktrackDestination().copyBacktrackToLabel(parenthesesBacktrack);
+
+ m_expressionState.decrementParenNestingLevel();
} else {
Jump nonGreedySkipParentheses;
Label nonGreedyTryParentheses;
@@ -938,7 +1634,7 @@ class RegexGenerator : private MacroAssembler {
}
// store the match start index
- if (term.invertOrCapture) {
+ if (term.capture()) {
int inputOffset = state.inputOffset() - preCheckedCount;
if (inputOffset) {
move(index, indexTemporary);
@@ -948,45 +1644,24 @@ class RegexGenerator : private MacroAssembler {
store32(index, Address(output, (term.parentheses.subpatternId << 1) * sizeof(int)));
}
- // generate the body of the parentheses
- TermGenerationState parenthesesState(disjunction, state.checkedTotal);
- generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation);
+ ParenthesesTail* parenthesesTail = m_expressionState.addParenthesesTail(term, state.getParenthesesTail());
- Jump success = (term.quantityType == QuantifierFixedCount) ?
- jump() :
- branch32(NotEqual, index, Address(stackPointerRegister, (parenthesesFrameLocation * sizeof(void*))));
+ m_expressionState.incrementParenNestingLevel();
- // A failure AFTER the parens jumps here
- Label backtrackFromAfterParens(this);
+ TermGenerationState parenthesesState(disjunction, state.checkedTotal);
- if (term.quantityType == QuantifierGreedy) {
- // If this is -1 we have now tested with both with and without the parens.
- loadFromFrame(parenthesesFrameLocation, indexTemporary);
- state.jumpToBacktrack(branch32(Equal, indexTemporary, Imm32(-1)), this);
- } else if (term.quantityType == QuantifierNonGreedy) {
- // If this is -1 we have now tested without the parens, now test with.
- loadFromFrame(parenthesesFrameLocation, indexTemporary);
- branch32(Equal, indexTemporary, Imm32(-1)).linkTo(nonGreedyTryParentheses, this);
- }
+ // Save the parenthesesTail for backtracking from nested parens to this one.
+ parenthesesState.setParenthesesTail(parenthesesTail);
- parenthesesState.plantJumpToBacktrackIfExists(this);
- // A failure WITHIN the parens jumps here
- parenthesesState.linkAlternativeBacktracks(this);
- if (term.invertOrCapture)
- store32(Imm32(-1), Address(output, (term.parentheses.subpatternId << 1) * sizeof(int)));
+ // generate the body of the parentheses
+ generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation);
- if (term.quantityType == QuantifierGreedy)
- storeToFrame(Imm32(-1), parenthesesFrameLocation);
- else
- state.jumpToBacktrack(jump(), this);
-
- state.setBacktrackGenerated(backtrackFromAfterParens);
- if (term.quantityType == QuantifierNonGreedy)
- nonGreedySkipParentheses.link(this);
- success.link(this);
+ // For non-fixed counts, backtrack if we didn't match anything.
+ if (term.quantityType != QuantifierFixedCount)
+ parenthesesTail->addAfterParenJump(branch32(Equal, index, Address(stackPointerRegister, (parenthesesFrameLocation * sizeof(void*)))));
// store the match end index
- if (term.invertOrCapture) {
+ if (term.capture()) {
int inputOffset = state.inputOffset();
if (inputOffset) {
move(index, indexTemporary);
@@ -995,6 +1670,15 @@ class RegexGenerator : private MacroAssembler {
} else
store32(index, Address(output, ((term.parentheses.subpatternId << 1) + 1) * sizeof(int)));
}
+
+ m_expressionState.decrementParenNestingLevel();
+
+ parenthesesTail->processBacktracks(this, state, parenthesesState, nonGreedyTryParentheses, label());
+
+ parenthesesState.getBacktrackDestination().clear();
+
+ if (term.quantityType == QuantifierNonGreedy)
+ nonGreedySkipParentheses.link(this);
}
}
@@ -1033,6 +1717,7 @@ class RegexGenerator : private MacroAssembler {
parenthesesState.plantJumpToBacktrackIfExists(this);
parenthesesState.linkAlternativeBacktracks(this);
+
// We get here if the alternative fails to match - fall through to the next iteration, or out of the loop.
if (countToCheck) {
@@ -1057,7 +1742,7 @@ class RegexGenerator : private MacroAssembler {
int countCheckedAfterAssertion = state.checkedTotal - term.inputPosition;
- if (term.invertOrCapture) {
+ if (term.invert()) {
// Inverted case
storeToFrame(index, parenthesesFrameLocation);
@@ -1069,10 +1754,11 @@ class RegexGenerator : private MacroAssembler {
generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation);
// Success! - which means - Fail!
loadFromFrame(parenthesesFrameLocation, index);
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
// And fail means success.
parenthesesState.linkAlternativeBacktracks(this);
+
loadFromFrame(parenthesesFrameLocation, index);
state.checkedTotal += countCheckedAfterAssertion;
@@ -1091,8 +1777,9 @@ class RegexGenerator : private MacroAssembler {
Jump success = jump();
parenthesesState.linkAlternativeBacktracks(this);
+
loadFromFrame(parenthesesFrameLocation, index);
- state.jumpToBacktrack(jump(), this);
+ state.jumpToBacktrack(this);
success.link(this);
@@ -1108,15 +1795,15 @@ class RegexGenerator : private MacroAssembler {
case PatternTerm::TypeAssertionBOL:
generateAssertionBOL(state);
break;
-
+
case PatternTerm::TypeAssertionEOL:
generateAssertionEOL(state);
break;
-
+
case PatternTerm::TypeAssertionWordBoundary:
generateAssertionWordBoundary(state);
break;
-
+
case PatternTerm::TypePatternCharacter:
switch (term.quantityType) {
case QuantifierFixedCount:
@@ -1195,7 +1882,7 @@ class RegexGenerator : private MacroAssembler {
// sufficient input available to run the first repeating alternative.
// The label 'firstAlternativeInputChecked' will jump directly to matching
// the first repeating alternative having skipped this check.
-
+
if (state.alternativeValid()) {
PatternAlternative* alternative = state.alternative();
if (!alternative->onceThrough()) {
@@ -1219,7 +1906,7 @@ class RegexGenerator : private MacroAssembler {
// Track whether any alternatives are shorter than the first one.
if (!alternative->onceThrough())
hasShorterAlternatives = hasShorterAlternatives || (countCheckedForCurrentAlternative < countToCheckForFirstAlternative);
-
+
for (state.resetTerm(); state.termValid(); state.nextTerm())
generateTerm(state);
@@ -1242,6 +1929,8 @@ class RegexGenerator : private MacroAssembler {
generateReturn();
state.nextAlternative();
+ if (alternative->onceThrough() && state.alternativeValid())
+ state.clearBacktrack();
// if there are any more alternatives, plant the check for input before looping.
if (state.alternativeValid()) {
@@ -1249,45 +1938,46 @@ class RegexGenerator : private MacroAssembler {
if (!setRepeatAlternativeLabels && !nextAlternative->onceThrough()) {
// We have handled non-repeating alternatives, jump to next iteration
// and loop over repeating alternatives.
- state.jumpToBacktrack(jump(), this);
-
+ state.jumpToBacktrack(this);
+
countToCheckForFirstAlternative = nextAlternative->m_minimumSize;
-
+
// If we get here, there the last input checked failed.
notEnoughInputForPreviousAlternative.link(this);
-
+
state.linkAlternativeBacktracks(this);
// Back up to start the looping alternatives.
if (countCheckedForCurrentAlternative)
sub32(Imm32(countCheckedForCurrentAlternative), index);
-
+
firstAlternative = Label(this);
-
+
state.checkedTotal = countToCheckForFirstAlternative;
if (countToCheckForFirstAlternative)
notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForFirstAlternative));
-
+
countCheckedForCurrentAlternative = countToCheckForFirstAlternative;
-
+
firstAlternativeInputChecked = Label(this);
setRepeatAlternativeLabels = true;
} else {
int countToCheckForNextAlternative = nextAlternative->m_minimumSize;
-
+
if (countCheckedForCurrentAlternative > countToCheckForNextAlternative) { // CASE 1: current alternative was longer than the next one.
// If we get here, then the last input checked failed.
notEnoughInputForPreviousAlternative.link(this);
-
+
// Check if sufficent input available to run the next alternative
notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForNextAlternative - countCheckedForCurrentAlternative));
// We are now in the correct state to enter the next alternative; this add is only required
// to mirror and revert operation of the sub32, just below.
add32(Imm32(countCheckedForCurrentAlternative - countToCheckForNextAlternative), index);
-
+
// If we get here, then the last input checked passed.
state.linkAlternativeBacktracks(this);
+
// No need to check if we can run the next alternative, since it is shorter -
// just update index.
sub32(Imm32(countCheckedForCurrentAlternative - countToCheckForNextAlternative), index);
@@ -1299,13 +1989,14 @@ class RegexGenerator : private MacroAssembler {
notEnoughInputForPreviousAlternative.link(this);
add32(Imm32(countToCheckForNextAlternative - countCheckedForCurrentAlternative), index);
notEnoughInputForPreviousAlternative.append(jump());
-
+
// The next alternative is longer than the current one; check the difference.
state.linkAlternativeBacktracks(this);
+
notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForNextAlternative - countCheckedForCurrentAlternative));
} else { // CASE 3: Both alternatives are the same length.
ASSERT(countCheckedForCurrentAlternative == countToCheckForNextAlternative);
-
+
// If the next alterative is the same length as this one, then no need to check the input -
// if there was sufficent input to run the current alternative then there is sufficient
// input to run the next one; if not, there isn't.
@@ -1317,7 +2008,7 @@ class RegexGenerator : private MacroAssembler {
}
}
}
-
+
// If we get here, all Alternatives failed...
state.checkedTotal -= countCheckedForCurrentAlternative;
@@ -1325,7 +2016,8 @@ class RegexGenerator : private MacroAssembler {
if (!setRepeatAlternativeLabels) {
// If there are no alternatives that need repeating (all are marked 'onceThrough') then just link
// the match failures to this point, and fall through to the return below.
- state.linkAlternativeBacktracks(this);
+ state.linkAlternativeBacktracks(this, true);
+
notEnoughInputForPreviousAlternative.link(this);
} else {
// How much more input need there be to be able to retry from the first alternative?
@@ -1345,11 +2037,11 @@ class RegexGenerator : private MacroAssembler {
// First, deal with the cases where there was sufficient input to try the last alternative.
if (incrementForNextIter > 0) // We need to check for more input anyway, fall through to the checking below.
- state.linkAlternativeBacktracks(this);
+ state.linkAlternativeBacktracks(this, true);
else if (m_pattern.m_body->m_hasFixedSize && !incrementForNextIter) // No need to update anything, link these backtracks straight to the to pof the loop!
- state.linkAlternativeBacktracksTo(firstAlternativeInputChecked, this);
+ state.linkAlternativeBacktracksTo(this, firstAlternativeInputChecked, true);
else { // no need to check the input, but we do have some bookkeeping to do first.
- state.linkAlternativeBacktracks(this);
+ state.linkAlternativeBacktracks(this, true);
// Where necessary update our preserved start position.
if (!m_pattern.m_body->m_hasFixedSize) {
@@ -1374,7 +2066,7 @@ class RegexGenerator : private MacroAssembler {
} else
store32(index, Address(output));
}
-
+
// Check if there is sufficent input to run the first alternative again.
jumpIfAvailableInput(incrementForNextIter).linkTo(firstAlternativeInputChecked, this);
// No - insufficent input to run the first alteranative, are there any other alternatives we
@@ -1406,6 +2098,10 @@ class RegexGenerator : private MacroAssembler {
move(Imm32(-1), returnRegister);
generateReturn();
+
+ m_expressionState.emitParenthesesTail(this);
+ m_expressionState.emitIndirectJumpTable(this);
+ m_expressionState.linkToNextIteration(this);
}
void generateEnter()
@@ -1490,47 +2186,28 @@ public:
{
generate();
- LinkBuffer patchBuffer(this, globalData->executableAllocator.poolForSize(size()), 0);
+ LinkBuffer patchBuffer(this, globalData->regexAllocator.poolForSize(size()), 0);
- for (unsigned i = 0; i < m_backtrackRecords.size(); ++i)
- patchBuffer.patch(m_backtrackRecords[i].dataLabel, patchBuffer.locationOf(m_backtrackRecords[i].backtrackLocation));
+ for (unsigned i = 0; i < m_expressionState.m_backtrackRecords.size(); ++i)
+ patchBuffer.patch(m_expressionState.m_backtrackRecords[i].dataLabel, patchBuffer.locationOf(m_expressionState.m_backtrackRecords[i].backtrackLocation));
jitObject.set(patchBuffer.finalizeCode());
- }
-
- bool shouldFallBack()
- {
- return m_shouldFallBack;
+ jitObject.setFallBack(m_shouldFallBack);
}
private:
RegexPattern& m_pattern;
bool m_shouldFallBack;
- Vector<AlternativeBacktrackRecord> m_backtrackRecords;
+ GenerationState m_expressionState;
};
-void jitCompileRegex(JSGlobalData* globalData, RegexCodeBlock& jitObject, const UString& patternString, unsigned& numSubpatterns, const char*& error, BumpPointerAllocator* allocator, bool ignoreCase, bool multiline)
+void jitCompileRegex(RegexPattern& pattern, JSGlobalData* globalData, RegexCodeBlock& jitObject)
{
- RegexPattern pattern(ignoreCase, multiline);
- if ((error = compileRegex(patternString, pattern)))
- return;
- numSubpatterns = pattern.m_numSubpatterns;
-
- if (!pattern.m_containsBackreferences && globalData->canUseJIT()) {
- RegexGenerator generator(pattern);
- generator.compile(globalData, jitObject);
- if (!generator.shouldFallBack())
- return;
- }
-
- jitObject.setFallback(byteCompileRegex(pattern, allocator));
+ RegexGenerator generator(pattern);
+ generator.compile(globalData, jitObject);
}
+
}}
#endif
-
-
-
-
-
diff --git a/JavaScriptCore/yarr/RegexJIT.h b/JavaScriptCore/yarr/RegexJIT.h
index c4c382c..5e3dca1 100644
--- a/JavaScriptCore/yarr/RegexJIT.h
+++ b/JavaScriptCore/yarr/RegexJIT.h
@@ -29,7 +29,6 @@
#if ENABLE(YARR_JIT)
#include "MacroAssembler.h"
-#include "RegexInterpreter.h" // temporary, remove when fallback is removed.
#include "RegexPattern.h"
#include "UString.h"
@@ -51,7 +50,7 @@ class RegexCodeBlock {
public:
RegexCodeBlock()
- : m_needFallback(false)
+ : m_needFallBack(false)
{
}
@@ -59,15 +58,8 @@ public:
{
}
- BytecodePattern* getFallback() { return m_fallback.get(); }
- bool isFallback() { return m_needFallback; }
- void setFallback(PassOwnPtr<BytecodePattern> fallback)
- {
- m_fallback = fallback;
- m_needFallback = true;
- }
-
- bool operator!() { return (!m_ref.m_code.executableAddress() && !m_fallback); }
+ void setFallBack(bool fallback) { m_needFallBack = fallback; }
+ bool isFallBack() { return m_needFallBack; }
void set(MacroAssembler::CodeRef ref) { m_ref = ref; }
int execute(const UChar* input, unsigned start, unsigned length, int* output)
@@ -81,17 +73,13 @@ public:
private:
MacroAssembler::CodeRef m_ref;
- OwnPtr<Yarr::BytecodePattern> m_fallback;
- bool m_needFallback;
+ bool m_needFallBack;
};
-void jitCompileRegex(JSGlobalData* globalData, RegexCodeBlock& jitObject, const UString& pattern, unsigned& numSubpatterns, const char*& error, BumpPointerAllocator* allocator, bool ignoreCase = false, bool multiline = false);
+void jitCompileRegex(RegexPattern& pattern, JSGlobalData* globalData, RegexCodeBlock& jitObject);
inline int executeRegex(RegexCodeBlock& jitObject, const UChar* input, unsigned start, unsigned length, int* output)
{
- if (jitObject.isFallback())
- return (interpretRegex(jitObject.getFallback(), input, start, length, output));
-
return jitObject.execute(input, start, length, output);
}
diff --git a/JavaScriptCore/yarr/RegexParser.h b/JavaScriptCore/yarr/RegexParser.h
index a5c0ba2..ec5f589 100644
--- a/JavaScriptCore/yarr/RegexParser.h
+++ b/JavaScriptCore/yarr/RegexParser.h
@@ -33,6 +33,8 @@
namespace JSC { namespace Yarr {
+static const unsigned quantifyInfinite = UINT_MAX;
+
enum BuiltInCharacterClassID {
DigitClassID,
SpaceClassID,
@@ -75,7 +77,7 @@ private:
CharacterClassParserDelegate(Delegate& delegate, ErrorCode& err)
: m_delegate(delegate)
, m_err(err)
- , m_state(empty)
+ , m_state(Empty)
{
}
@@ -90,54 +92,67 @@ private:
}
/*
- * atomPatternCharacterUnescaped():
+ * atomPatternCharacter():
*
- * This method is called directly from parseCharacterClass(), to report a new
- * pattern character token. This method differs from atomPatternCharacter(),
- * which will be called from parseEscape(), since a hypen provided via this
- * method may be indicating a character range, but a hyphen parsed by
- * parseEscape() cannot be interpreted as doing so.
+ * This method is called either from parseCharacterClass() (for an unescaped
+ * character in a character class), or from parseEscape(). In the former case
+ * the value true will be passed for the argument 'hyphenIsRange', and in this
+ * mode we will allow a hypen to be treated as indicating a range (i.e. /[a-z]/
+ * is different to /[a\-z]/).
*/
- void atomPatternCharacterUnescaped(UChar ch)
+ void atomPatternCharacter(UChar ch, bool hyphenIsRange = false)
{
switch (m_state) {
- case empty:
+ case AfterCharacterClass:
+ // Following a builtin character class we need look out for a hyphen.
+ // We're looking for invalid ranges, such as /[\d-x]/ or /[\d-\d]/.
+ // If we see a hyphen following a charater class then unlike usual
+ // we'll report it to the delegate immediately, and put ourself into
+ // a poisoned state. Any following calls to add another character or
+ // character class will result in an error. (A hypen following a
+ // character-class is itself valid, but only at the end of a regex).
+ if (hyphenIsRange && ch == '-') {
+ m_delegate.atomCharacterClassAtom('-');
+ m_state = AfterCharacterClassHyphen;
+ return;
+ }
+ // Otherwise just fall through - cached character so treat this as Empty.
+
+ case Empty:
m_character = ch;
- m_state = cachedCharacter;
- break;
+ m_state = CachedCharacter;
+ return;
- case cachedCharacter:
- if (ch == '-')
- m_state = cachedCharacterHyphen;
+ case CachedCharacter:
+ if (hyphenIsRange && ch == '-')
+ m_state = CachedCharacterHyphen;
else {
m_delegate.atomCharacterClassAtom(m_character);
m_character = ch;
}
- break;
+ return;
- case cachedCharacterHyphen:
- if (ch >= m_character)
- m_delegate.atomCharacterClassRange(m_character, ch);
- else
+ case CachedCharacterHyphen:
+ if (ch < m_character) {
m_err = CharacterClassOutOfOrder;
- m_state = empty;
- }
- }
-
- /*
- * atomPatternCharacter():
- *
- * Adds a pattern character, called by parseEscape(), as such will not
- * interpret a hyphen as indicating a character range.
- */
- void atomPatternCharacter(UChar ch)
- {
- // Flush if a character is already pending to prevent the
- // hyphen from begin interpreted as indicating a range.
- if((ch == '-') && (m_state == cachedCharacter))
- flush();
+ return;
+ }
+ m_delegate.atomCharacterClassRange(m_character, ch);
+ m_state = Empty;
+ return;
- atomPatternCharacterUnescaped(ch);
+ // See coment in atomBuiltInCharacterClass below.
+ // This too is technically an error, per ECMA-262, and again we
+ // we chose to allow this. Note a subtlely here that while we
+ // diverge from the spec's definition of CharacterRange we do
+ // remain in compliance with the grammar. For example, consider
+ // the expression /[\d-a-z]/. We comply with the grammar in
+ // this case by not allowing a-z to be matched as a range.
+ case AfterCharacterClassHyphen:
+ m_delegate.atomCharacterClassAtom(ch);
+ m_state = Empty;
+ return;
+ }
}
/*
@@ -147,8 +162,34 @@ private:
*/
void atomBuiltInCharacterClass(BuiltInCharacterClassID classID, bool invert)
{
- flush();
- m_delegate.atomCharacterClassBuiltIn(classID, invert);
+ switch (m_state) {
+ case CachedCharacter:
+ // Flush the currently cached character, then fall through.
+ m_delegate.atomCharacterClassAtom(m_character);
+
+ case Empty:
+ case AfterCharacterClass:
+ m_state = AfterCharacterClass;
+ m_delegate.atomCharacterClassBuiltIn(classID, invert);
+ return;
+
+ // If we hit either of these cases, we have an invalid range that
+ // looks something like /[x-\d]/ or /[\d-\d]/.
+ // According to ECMA-262 this should be a syntax error, but
+ // empirical testing shows this to break teh webz. Instead we
+ // comply with to the ECMA-262 grammar, and assume the grammar to
+ // have matched the range correctly, but tweak our interpretation
+ // of CharacterRange. Effectively we implicitly handle the hyphen
+ // as if it were escaped, e.g. /[\w-_]/ is treated as /[\w\-_]/.
+ case CachedCharacterHyphen:
+ m_delegate.atomCharacterClassAtom(m_character);
+ m_delegate.atomCharacterClassAtom('-');
+ // fall through
+ case AfterCharacterClassHyphen:
+ m_delegate.atomCharacterClassBuiltIn(classID, invert);
+ m_state = Empty;
+ return;
+ }
}
/*
@@ -158,7 +199,12 @@ private:
*/
void end()
{
- flush();
+ if (m_state == CachedCharacter)
+ m_delegate.atomCharacterClassAtom(m_character);
+ else if (m_state == CachedCharacterHyphen) {
+ m_delegate.atomCharacterClassAtom(m_character);
+ m_delegate.atomCharacterClassAtom('-');
+ }
m_delegate.atomCharacterClassEnd();
}
@@ -168,21 +214,14 @@ private:
void atomBackReference(unsigned) { ASSERT_NOT_REACHED(); }
private:
- void flush()
- {
- if (m_state != empty) // either cachedCharacter or cachedCharacterHyphen
- m_delegate.atomCharacterClassAtom(m_character);
- if (m_state == cachedCharacterHyphen)
- m_delegate.atomCharacterClassAtom('-');
- m_state = empty;
- }
-
Delegate& m_delegate;
ErrorCode& m_err;
enum CharacterClassConstructionState {
- empty,
- cachedCharacter,
- cachedCharacterHyphen,
+ Empty,
+ CachedCharacter,
+ CachedCharacterHyphen,
+ AfterCharacterClass,
+ AfterCharacterClassHyphen,
} m_state;
UChar m_character;
};
@@ -428,7 +467,7 @@ private:
break;
default:
- characterClassConstructor.atomPatternCharacterUnescaped(consume());
+ characterClassConstructor.atomPatternCharacter(consume(), true);
}
if (m_err)
@@ -572,13 +611,13 @@ private:
case '*':
consume();
- parseQuantifier(lastTokenWasAnAtom, 0, UINT_MAX);
+ parseQuantifier(lastTokenWasAnAtom, 0, quantifyInfinite);
lastTokenWasAnAtom = false;
break;
case '+':
consume();
- parseQuantifier(lastTokenWasAnAtom, 1, UINT_MAX);
+ parseQuantifier(lastTokenWasAnAtom, 1, quantifyInfinite);
lastTokenWasAnAtom = false;
break;
@@ -597,7 +636,7 @@ private:
unsigned max = min;
if (tryConsume(','))
- max = peekIsDigit() ? consumeNumber() : UINT_MAX;
+ max = peekIsDigit() ? consumeNumber() : quantifyInfinite;
if (tryConsume('}')) {
if (min <= max)
@@ -838,7 +877,7 @@ private:
*/
template<class Delegate>
-const char* parse(Delegate& delegate, const UString& pattern, unsigned backReferenceLimit = UINT_MAX)
+const char* parse(Delegate& delegate, const UString& pattern, unsigned backReferenceLimit = quantifyInfinite)
{
return Parser<Delegate>(delegate, pattern, backReferenceLimit).parse();
}
diff --git a/JavaScriptCore/yarr/RegexPattern.h b/JavaScriptCore/yarr/RegexPattern.h
index c76c641..74ee897 100644
--- a/JavaScriptCore/yarr/RegexPattern.h
+++ b/JavaScriptCore/yarr/RegexPattern.h
@@ -39,7 +39,7 @@ namespace JSC { namespace Yarr {
#define RegexStackSpaceForBackTrackInfoParentheticalAssertion 1
#define RegexStackSpaceForBackTrackInfoParenthesesOnce 1 // Only for !fixed quantifiers.
#define RegexStackSpaceForBackTrackInfoParenthesesTerminal 1
-#define RegexStackSpaceForBackTrackInfoParentheses 4
+#define RegexStackSpaceForBackTrackInfoParentheses 2
struct PatternDisjunction;
@@ -103,11 +103,12 @@ struct PatternTerm {
TypeParenthesesSubpattern,
TypeParentheticalAssertion,
} type;
- bool invertOrCapture;
+ bool m_capture :1;
+ bool m_invert :1;
union {
UChar patternCharacter;
CharacterClass* characterClass;
- unsigned subpatternId;
+ unsigned backReferenceSubpatternId;
struct {
PatternDisjunction* disjunction;
unsigned subpatternId;
@@ -123,6 +124,8 @@ struct PatternTerm {
PatternTerm(UChar ch)
: type(PatternTerm::TypePatternCharacter)
+ , m_capture(false)
+ , m_invert(false)
{
patternCharacter = ch;
quantityType = QuantifierFixedCount;
@@ -131,16 +134,18 @@ struct PatternTerm {
PatternTerm(CharacterClass* charClass, bool invert)
: type(PatternTerm::TypeCharacterClass)
- , invertOrCapture(invert)
+ , m_capture(false)
+ , m_invert(invert)
{
characterClass = charClass;
quantityType = QuantifierFixedCount;
quantityCount = 1;
}
- PatternTerm(Type type, unsigned subpatternId, PatternDisjunction* disjunction, bool invertOrCapture)
+ PatternTerm(Type type, unsigned subpatternId, PatternDisjunction* disjunction, bool capture = false, bool invert = false)
: type(type)
- , invertOrCapture(invertOrCapture)
+ , m_capture(capture)
+ , m_invert(invert)
{
parentheses.disjunction = disjunction;
parentheses.subpatternId = subpatternId;
@@ -152,7 +157,8 @@ struct PatternTerm {
PatternTerm(Type type, bool invert = false)
: type(type)
- , invertOrCapture(invert)
+ , m_capture(false)
+ , m_invert(invert)
{
quantityType = QuantifierFixedCount;
quantityCount = 1;
@@ -160,9 +166,10 @@ struct PatternTerm {
PatternTerm(unsigned spatternId)
: type(TypeBackReference)
- , invertOrCapture(false)
+ , m_capture(false)
+ , m_invert(false)
{
- subpatternId = spatternId;
+ backReferenceSubpatternId = spatternId;
quantityType = QuantifierFixedCount;
quantityCount = 1;
}
@@ -189,12 +196,12 @@ struct PatternTerm {
bool invert()
{
- return invertOrCapture;
+ return m_invert;
}
bool capture()
{
- return invertOrCapture;
+ return m_capture;
}
void quantify(unsigned count, QuantifierType type)